X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fvideo%2Figafb.c;h=655ae0fa99cae55ecac13efe6469908ae8afd619;hb=refs%2Fheads%2Fvserver;hp=7e0353afb5c68ab669e07e54033d19b8f28a8adf;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/video/igafb.c b/drivers/video/igafb.c index 7e0353afb..655ae0fa9 100644 --- a/drivers/video/igafb.c +++ b/drivers/video/igafb.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -219,7 +218,7 @@ static void iga_blank_border(struct iga_par *par) } #ifdef __sparc__ -static int igafb_mmap(struct fb_info *info, struct file *file, +static int igafb_mmap(struct fb_info *info, struct vm_area_struct *vma) { struct iga_par *par = (struct iga_par *)info->par; @@ -232,9 +231,6 @@ static int igafb_mmap(struct fb_info *info, struct file *file, size = vma->vm_end - vma->vm_start; - /* To stop the swapper from even considering these pages. */ - vma->vm_flags |= (VM_SHM | VM_LOCKED); - /* Each page, see which map applies */ for (page = 0; page < size; ) { map_size = 0; @@ -262,8 +258,8 @@ static int igafb_mmap(struct fb_info *info, struct file *file, pgprot_val(vma->vm_page_prot) &= ~(par->mmap_map[i].prot_mask); pgprot_val(vma->vm_page_prot) |= par->mmap_map[i].prot_flag; - if (remap_page_range(vma, vma->vm_start + page, map_offset, - map_size, vma->vm_page_prot)) + if (remap_pfn_range(vma, vma->vm_start + page, + map_offset >> PAGE_SHIFT, map_size, vma->vm_page_prot)) return -EAGAIN; page += map_size; @@ -357,7 +353,7 @@ static int __init iga_init(struct fb_info *info, struct iga_par *par) video_cmap_len = 256; info->fbops = &igafb_ops; - info->flags = FBINFO_FLAG_DEFAULT; + info->flags = FBINFO_DEFAULT; fb_alloc_cmap(&info->cmap, video_cmap_len, 0); @@ -381,23 +377,28 @@ int __init igafb_init(void) unsigned long addr; int size, iga2000 = 0; + if (fb_get_options("igafb", NULL)) + return -ENODEV; + /* Do not attach when we have a serial console. */ if (!con_is_present()) return -ENXIO; - pdev = pci_find_device(PCI_VENDOR_ID_INTERG, + pdev = pci_get_device(PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682, 0); if (pdev == NULL) { /* * XXX We tried to use cyber2000fb.c for IGS 2000. * But it does not initialize the chip in JavaStation-E, alas. */ - pdev = pci_find_device(PCI_VENDOR_ID_INTERG, 0x2000, 0); + pdev = pci_get_device(PCI_VENDOR_ID_INTERG, 0x2000, 0); if(pdev == NULL) { return -ENXIO; } iga2000 = 1; } + /* We leak a reference here but as it cannot be unloaded this is + fine. If you write unload code remember to free it in unload */ size = sizeof(struct fb_info) + sizeof(struct iga_par) + sizeof(u32)*16; @@ -528,12 +529,12 @@ int __init igafb_init(void) info->var = default_var; info->fix = igafb_fix; info->pseudo_palette = (void *)(par + 1); + info->device = &pdev->dev; if (!iga_init(info, par)) { iounmap((void *)par->io_base); iounmap(info->screen_base); - if (par->mmap_map) - kfree(par->mmap_map); + kfree(par->mmap_map); kfree(info); } @@ -572,4 +573,12 @@ int __init igafb_setup(char *options) return 0; } +module_init(igafb_init); MODULE_LICENSE("GPL"); +static struct pci_device_id igafb_pci_tbl[] __devinitdata = { + { PCI_VENDOR_ID_INTERG, PCI_DEVICE_ID_INTERG_1682, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + { } +}; + +MODULE_DEVICE_TABLE(pci, igafb_pci_tbl);