-#endif
-}
-
-#ifdef SUPPORT_FB_OF /* linux-2.2.x only */
-__initfunc(void pm3fb_of_init(struct device_node *dp))
-{
- struct pm3fb_info *l_fb_info = NULL;
- unsigned long i;
- long bn = -1;
- struct device_node *dn;
-
- DTRACE;
-
- DPRINTK(2, "OpenFirmware board : %s\n", dp->full_name);
-
- for (i = 0; i < dp->n_addrs; i++) {
- DPRINTK(2, "MemRange : 0x%08x - 0x%x\n",
- dp->addrs[i].address, dp->addrs[i].size);
- }
-
- for (i = 0; i < PM3_MAX_BOARD; i++) { /* find which PCI board is the OF device */
- if (fb_info[i].dev) {
- dn = find_pci_device_OFnode(fb_info[i].dev->bus->
- number,
- fb_info[i].dev->devfn);
- if (dn == dp) {
- if (bn == -1)
- bn = i;
- else {
- DPRINTK(1,
- "Error: Multiple PCI device for a single OpenFirmware node\n");
- }
- }
- }
- }
-
- if (bn == -1) {
- DPRINTK(1, "Warning: non-PCI Permedia3 found\n");
- i = 0;
- while (fb_info[i].dev && (i < PM3_MAX_BOARD))
- i++;
- if (i < PM3_MAX_BOARD)
- bn = i;
- else {
- printk
- (KERN_ERR "pm3fb: Error: Couldn't find room for OpenFirmware device");
- return;
- }
- }
-
- l_fb_info = &(fb_info[bn]);
-
- l_fb_info->dn = dp;
-
- l_fb_info->pIOBase = (unsigned char *) dp->addrs[3].address;
-#ifdef __BIG_ENDIAN
- l_fb_info->pIOBase += PM3_REGS_SIZE;
-#endif
- l_fb_info->vIOBase = (unsigned char *) -1;
- l_fb_info->p_fb = (unsigned char *) dp->addrs[1].address;
- l_fb_info->v_fb = (unsigned char *) -1;
-
- l_fb_info->fb_size = pm3fb_size_memory(l_fb_info); /* (unsigned long)dp->addrs[1].size; *//* OF is a liar ! it claims 256 Mb */
-
- DPRINTK(2,
- "OpenFirmware board (#%ld) : IOBase 0x%08lx, p_fb 0x%08lx, fb_size %d KB\n",
- bn, (unsigned long) l_fb_info->pIOBase,
- (unsigned long) l_fb_info->p_fb, l_fb_info->fb_size >> 10);
-
- l_fb_info->use_current = 1; /* will use current mode by default */
-
- pm3fb_common_init(l_fb_info);