The most noticeable fixes since pre7 are the Athlon lockup fix,2.4.0-test11
authorLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:13 +0000 (23 15:40 -0500)
committerLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:13 +0000 (23 15:40 -0500)
the PCI routing handling, and getting the Joliet stuff right for iso9660.

- final:
    - Patrick Mochel: export the ACPI facs table in /proc too
    - Brian Gerst: Video4Linux cleanup (named initializers)
    - Linus: only use irq13 for FP errors for external FPU's. This
      fixes the Atlon FP exception lockups.
    - Linus: add a new intel signature to the PIRQ table matching logic.
      Make the matching match both reported and actual device ID (with a
      preference for the reported). Fixes PCMCIA on NEC Versa laptops.
    - iso9660: fix Joliet filename argument order bug introduced in pre7
    - Highmem: p_page -> b_page typo.
    - Linus: don't allow pending FPU exceptions without an FPU context..

36 files changed:
arch/i386/kernel/acpi.c
arch/i386/kernel/i8259.c
arch/i386/kernel/pci-irq.c
arch/i386/kernel/setup.c
drivers/media/radio/radio-aimslab.c
drivers/media/radio/radio-aztech.c
drivers/media/radio/radio-cadet.c
drivers/media/radio/radio-gemtek.c
drivers/media/radio/radio-maestro.c
drivers/media/radio/radio-miropcm20.c
drivers/media/radio/radio-rtrack2.c
drivers/media/radio/radio-sf16fmi.c
drivers/media/radio/radio-terratec.c
drivers/media/radio/radio-trust.c
drivers/media/radio/radio-typhoon.c
drivers/media/radio/radio-zoltrix.c
drivers/media/video/bttv-driver.c
drivers/media/video/buz.c
drivers/media/video/bw-qcam.c
drivers/media/video/c-qcam.c
drivers/media/video/cpia.c
drivers/media/video/planb.c
drivers/media/video/pms.c
drivers/media/video/saa5249.c
drivers/media/video/stradis.c
drivers/media/video/vino.c
drivers/media/video/zr36120.c
drivers/usb/dsbr100.c
drivers/usb/ibmcam.c
fs/isofs/namei.c
include/asm-i386/i387.h
include/asm-i386/processor.h
include/linux/acpi.h
include/linux/byteorder/swabb.h
include/linux/highmem.h
include/linux/time.h

index f9424d1..98079f0 100644 (file)
@@ -258,6+258,8 @@ static struct ctl_table acpi_table[] =
        {ACPI_FACP, "facp", &acpi_facp, 0, 0644, NULL, &acpi_do_table},
 
        {ACPI_DSDT, "dsdt", &acpi_dsdt, 0, 0644, NULL, &acpi_do_table},
+       
+       {ACPI_FACS, "facs", &acpi_facs, 0, 0644, NULL, &acpi_do_table},
 
        {ACPI_PM1_ENABLE, "pm1_enable",
         NULL, 0,
@@ -722,12+724,21 @@ static int __init acpi_find_tables(void)
                if (!acpi_init_table(&acpi_facp, dt, 1)) {
                        struct acpi_facp *facp
                                = (struct acpi_facp*) acpi_facp.table;
+                       struct acpi_table *facs;
 
                        // map DSDT if it exists
-                       dt = acpi_map_table(facp->dsdt);
-                       if (acpi_init_table(&acpi_dsdt, dt, 1))
-                               acpi_unmap_table(dt);
-
+                       if ((dt = acpi_map_table(facp->dsdt))) {
+                               if (acpi_init_table(&acpi_dsdt, dt, 1))
+                                       acpi_unmap_table(dt);
+                       }
+                       
+                       /*
+                        * map FACS if it exists
+                        */
+                       if ((facs = acpi_map_table(facp->facs))) {
+                               if (acpi_init_table(&acpi_facs,facs,1))
+                                       acpi_unmap_table(facs);
+                       }
                        break;
                }
                else {
index df377c5..5706142 100644 (file)
@@ -374,7+374,6 @@ void __init init_8259A(int auto_eoi)
        spin_unlock_irqrestore(&i8259A_lock, flags);
 }
 
-#ifndef CONFIG_VISWS
 /*
  * Note that on a 486, we don't want to do a SIGFPE on an irq13
  * as the irq is unreliable, and exception 16 works correctly
@@ -400,12+399,13 @@ static void math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
  * New motherboards sometimes make IRQ 13 be a PCI interrupt,
  * so allow interrupt sharing.
  */
-static struct irqaction irq13 = { math_error_irq, SA_SHIRQ, 0, "fpu", NULL, NULL };
+static struct irqaction irq13 = { math_error_irq, 0, 0, "fpu", NULL, NULL };
 
 /*
  * IRQ2 is cascade interrupt to second interrupt controller
  */
 
+#ifndef CONFIG_VISWS
 static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
 #endif
 
@@ -494,6+494,12 @@ void __init init_IRQ(void)
 
 #ifndef CONFIG_VISWS
        setup_irq(2, &irq2);
-       setup_irq(13, &irq13);
 #endif
+
+       /*
+        * External FPU? Set up irq13 if so, for
+        * original braindamaged IBM FERR coupling.
+        */
+       if (boot_cpu_data.hard_math && !cpu_has_fpu)
+               setup_irq(13, &irq13);
 }
index bd3f3c9..17a929b 100644 (file)
@@ -297,13+297,19 @@ static struct irq_router pirq_routers[] = {
        { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371FB_0, pirq_piix_get, pirq_piix_set },
        { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_0, pirq_piix_get, pirq_piix_set },
        { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0, pirq_piix_get, pirq_piix_set },
+       { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371MX,   pirq_piix_get, pirq_piix_set },
        { "PIIX", PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_0, pirq_piix_get, pirq_piix_set },
+
        { "ALI", PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M1533, pirq_ali_get, pirq_ali_set },
+
        { "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0, pirq_via_get, pirq_via_set },
        { "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, pirq_via_get, pirq_via_set },
        { "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, pirq_via_get, pirq_via_set },
+
        { "OPTI", PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C700, pirq_opti_get, pirq_opti_set },
+
        { "NatSemi", PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, pirq_cyrix_get, pirq_cyrix_set },
+
        { "default", 0, 0, NULL, NULL }
 };
 
@@ -313,7+319,6 @@ static struct pci_dev *pirq_router_dev;
 static void __init pirq_find_router(void)
 {
        struct irq_routing_table *rt = pirq_table;
-       u16 rvendor, rdevice;
        struct irq_router *r;
 
 #ifdef CONFIG_PCI_BIOS
@@ -323,32+328,31 @@ static void __init pirq_find_router(void)
                return;
        }
 #endif
-       if (!(pirq_router_dev = pci_find_slot(rt->rtr_bus, rt->rtr_devfn))) {
+       /* fall back to default router if nothing else found */
+       pirq_router = pirq_routers + sizeof(pirq_routers) / sizeof(pirq_routers[0]) - 1;
+
+       pirq_router_dev = pci_find_slot(rt->rtr_bus, rt->rtr_devfn);
+       if (!pirq_router_dev) {
                DBG("PCI: Interrupt router not found at %02x:%02x\n", rt->rtr_bus, rt->rtr_devfn);
-               /* fall back to default router */
-               pirq_router = pirq_routers + sizeof(pirq_routers) / sizeof(pirq_routers[0]) - 1;
                return;
        }
-       if (rt->rtr_vendor) {
-               rvendor = rt->rtr_vendor;
-               rdevice = rt->rtr_device;
-       } else {
-               /*
-                * Several BIOSes forget to set the router type. In such cases, we
-                * use chip vendor/device. This doesn't guarantee us semantics of
-                * PIRQ values, but was found to work in practice and it's still
-                * better than not trying.
-                */
-               DBG("PCI: Guessed interrupt router ID from %s\n", pirq_router_dev->slot_name);
-               rvendor = pirq_router_dev->vendor;
-               rdevice = pirq_router_dev->device;
-       }
-       for(r=pirq_routers; r->vendor; r++)
-               if (r->vendor == rvendor && r->device == rdevice)
+
+       for(r=pirq_routers; r->vendor; r++) {
+               /* Exact match against router table entry? Use it! */
+               if (r->vendor == rt->rtr_vendor && r->device == rt->rtr_device) {
+                       pirq_router = r;
                        break;
-       pirq_router = r;
-       printk("PCI: Using IRQ router %s [%04x/%04x] at %s\n", r->name,
-              rvendor, rdevice, pirq_router_dev->slot_name);
+               }
+               /* Match against router device entry? Use it as a fallback */
+               if (r->vendor == pirq_router_dev->vendor && r->device == pirq_router_dev->device) {
+                       pirq_router = r;
+               }
+       }
+       printk("PCI: Using IRQ router %s [%04x/%04x] at %s\n",
+               pirq_router->name,
+               pirq_router_dev->vendor,
+               pirq_router_dev->device,
+               pirq_router_dev->slot_name);
 }
 
 static struct irq_info *pirq_get_info(struct pci_dev *dev, int pin)
index 2ed13ff..692965a 100644 (file)
@@ -2122,7+2122,7 @@ int get_cpuinfo(char * buffer)
                        p += sprintf(p, "cache size\t: %d KB\n", c->x86_cache_size);
                
                /* We use exception 16 if we have hardware math and we've either seen it or the CPU claims it is internal */
-               fpu_exception = c->hard_math && (ignore_irq13 | test_bit(X86_FEATURE_FPU, &c->x86_capability));
+               fpu_exception = c->hard_math && (ignore_irq13 || cpu_has_fpu);
                p += sprintf(p, "fdiv_bug\t: %s\n"
                                "hlt_bug\t\t: %s\n"
                                "f00f_bug\t: %s\n"
@@ -2178,7+2178,7 @@ void __init cpu_init (void)
        if (tsc_disable && cpu_has_tsc) {
                printk("Disabling TSC...\n");
                /**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/
-               clear_bit(&boot_cpu_data.x86_capability, X86_FEATURE_TSC);
+               clear_bit(X86_FEATURE_TSC, boot_cpu_data.x86_capability);
                set_in_cr4(X86_CR4_TSD);
        }
 #endif
index d716c54..b01c156 100644 (file)
@@ -322,17+322,12 @@ static struct rt_device rtrack_unit;
 
 static struct video_device rtrack_radio=
 {
-       "RadioTrack radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_RTRACK,
-       rt_open,
-       rt_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       rt_ioctl,
-       NULL,
-       NULL
+       name:           "RadioTrack radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_RTRACK,
+       open:           rt_open,
+       close:          rt_close,
+       ioctl:          rt_ioctl,
 };
 
 static int __init rtrack_init(void)
index 2fb8714..06999d8 100644 (file)
@@ -273,17+273,12 @@ static struct az_device aztech_unit;
 
 static struct video_device aztech_radio=
 {
-       "Aztech radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_AZTECH,
-       az_open,
-       az_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       az_ioctl,
-       NULL,
-       NULL
+       name:           "Aztech radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_AZTECH,
+       open:           az_open,
+       close:          az_close,
+       ioctl:          az_ioctl,
 };
 
 static int __init aztech_init(void)
index f2b1367..15ec851 100644 (file)
@@ -542,17+542,13 @@ static void cadet_close(struct video_device *dev)
 
 static struct video_device cadet_radio=
 {
-       "Cadet radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_CADET,
-       cadet_open,
-       cadet_close,
-       cadet_read,
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       cadet_ioctl,
-       NULL,
-       NULL
+       name:           "Cadet radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_CADET,
+       open:           cadet_open,
+       close:          cadet_close,
+       read:           cadet_read,
+       ioctl:          cadet_ioctl,
 };
 
 #ifdef CONFIG_ISAPNP
index 8b53dbd..4bac8dc 100644 (file)
@@ -249,17+249,12 @@ static struct gemtek_device gemtek_unit;
 
 static struct video_device gemtek_radio=
 {
-       "GemTek radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_GEMTEK,
-       gemtek_open,
-       gemtek_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* Can't poll */
-       gemtek_ioctl,
-       NULL,
-       NULL
+       name:           "GemTek radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_GEMTEK,
+       open:           gemtek_open,
+       close:          gemtek_close,
+       ioctl:          gemtek_ioctl,
 };
 
 static int __init gemtek_init(void)
index d4278fe..8040afd 100644 (file)
@@ -69,17+69,12 @@ static void radio_close(struct video_device *);
 
 static struct video_device maestro_radio=
 {
-       "Maestro radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_SF16MI,
-       radio_open,
-       radio_close,
-       NULL,
-       NULL,
-       NULL,
-       radio_ioctl,
-       NULL,
-       NULL
+       name:           "Maestro radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_SF16MI,
+       open:           radio_open,
+       close:          radio_close,
+       ioctl:          radio_ioctl,
 };
 
 static struct radio_device
@@ -300,21+295,17 @@ static void radio_close(struct video_device *dev)
 
 inline static __u16 radio_install(struct pci_dev *pcidev);
 
-#ifdef MODULE
 MODULE_AUTHOR("Adam Tlalka, atlka@pg.gda.pl");
 MODULE_DESCRIPTION("Radio driver for the Maestro PCI sound card radio.");
 
 EXPORT_NO_SYMBOLS;
 
-void cleanup_module(void)
+void __exit maestro_radio_exit(void)
 {
        video_unregister_device(&maestro_radio);
 }
 
-int init_module(void)
-#else
-int __init maestro_radio_init(struct video_init *v)
-#endif
+int __init maestro_radio_init(void)
 {
        register __u16 found=0;
        struct pci_dev *pcidev = NULL;
@@ -335,6+326,9 @@ int __init maestro_radio_init(struct video_init *v)
        return 0;
 }
 
+module_init(maestro_radio_init);
+module_exit(maestro_radio_exit);
+
 inline static __u16 radio_power_on(struct radio_device *dev)
 {
        register __u16 io=dev->io;
index 1068467..036ca6f 100644 (file)
@@ -192,17+192,12 @@ static struct pcm20_device pcm20_unit;
 
 static struct video_device pcm20_radio=
 {
-       "Miro PCM 20 radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_RTRACK,
-       pcm20_open,
-       pcm20_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* Can't poll */
-       pcm20_ioctl,
-       NULL,
-       NULL
+       name:           "Miro PCM 20 radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_RTRACK,
+       open:           pcm20_open,
+       close:          pcm20_close,
+       ioctl:          pcm20_ioctl,
 };
 
 static int __init pcm20_init(void)
index c060ded..ad479af 100644 (file)
@@ -215,17+215,12 @@ static struct rt_device rtrack2_unit;
 
 static struct video_device rtrack2_radio=
 {
-       "RadioTrack II radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_RTRACK2,
-       rt_open,
-       rt_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* Can't poll */
-       rt_ioctl,
-       NULL,
-       NULL
+       name:           "RadioTrack II radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_RTRACK2,
+       open:           rt_open,
+       close:          rt_close,
+       ioctl:          rt_ioctl,
 };
 
 static int __init rtrack2_init(void)
index 55328a9..13a1553 100644 (file)
@@ -276,17+276,12 @@ static struct fmi_device fmi_unit;
 
 static struct video_device fmi_radio=
 {
-       "SF16FMx radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_SF16MI,
-       fmi_open,
-       fmi_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* Can't poll */
-       fmi_ioctl,
-       NULL,
-       NULL
+       name:           "SF16FMx radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_SF16MI,
+       open:           fmi_open,
+       close:          fmi_close,
+       ioctl:          fmi_ioctl,
 };
 
 static int __init fmi_init(void)
index 1dda161..28094e3 100644 (file)
@@ -294,17+294,12 @@ static struct tt_device terratec_unit;
 
 static struct video_device terratec_radio=
 {
-       "TerraTec ActiveRadio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_TERRATEC,
-       tt_open,
-       tt_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       tt_ioctl,
-       NULL,
-       NULL
+       name:           "TerraTec ActiveRadio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_TERRATEC,
+       open:           tt_open,
+       close:          tt_close,
+       ioctl:          tt_ioctl,
 };
 
 static int __init terratec_init(void)
index 4e86bda..2fb6ed2 100644 (file)
@@ -286,17+286,12 @@ static void tr_close(struct video_device *dev)
 
 static struct video_device trust_radio=
 {
-       "Trust FM Radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_TRUST,
-       tr_open,
-       tr_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       tr_ioctl,
-       NULL,
-       NULL
+       name:           "Trust FM Radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_TRUST,
+       open:           tr_open,
+       close:          tr_close,
+       ioctl:          tr_ioctl,
 };
 
 static int __init trust_init(void)
index a0bbf34..c550fd4 100644 (file)
@@ -273,27+273,19 @@ static void typhoon_close(struct video_device *dev)
 
 static struct typhoon_device typhoon_unit =
 {
-       0,                              /* users */
-       CONFIG_RADIO_TYPHOON_PORT,      /* iobase */
-       0,                              /* curvol */
-       0,                              /* muted */
-       CONFIG_RADIO_TYPHOON_MUTEFREQ,  /* curfreq */
-       CONFIG_RADIO_TYPHOON_MUTEFREQ   /* mutefreq */
+       iobase:         CONFIG_RADIO_TYPHOON_PORT,
+       curfreq:        CONFIG_RADIO_TYPHOON_MUTEFREQ,
+       mutefreq:       CONFIG_RADIO_TYPHOON_MUTEFREQ,
 };
 
 static struct video_device typhoon_radio =
 {
-       "Typhoon Radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_TYPHOON,
-       typhoon_open,
-       typhoon_close,
-       NULL,                   /* Can't read  (no capture ability) */
-       NULL,                   /* Can't write */
-       NULL,                   /* Can't poll */
-       typhoon_ioctl,
-       NULL,
-       NULL
+       name:           "Typhoon Radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_TYPHOON,
+       open:           typhoon_open,
+       close:          typhoon_close,
+       ioctl:          typhoon_ioctl,
 };
 
 #ifdef CONFIG_RADIO_TYPHOON_PROC_FS
index dd68893..940447b 100644 (file)
@@ -341,17+341,12 @@ static struct zol_device zoltrix_unit;
 
 static struct video_device zoltrix_radio =
 {
-       "Zoltrix Radio Plus",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_ZOLTRIX,
-       zol_open,
-       zol_close,
-       NULL,                   /* Can't read  (no capture ability) */
-       NULL,                   /* Can't write */
-       NULL,
-       zol_ioctl,
-       NULL,
-       NULL
+       name:           "Zoltrix Radio Plus",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_ZOLTRIX,
+       open:           zol_open,
+       close:          zol_close,
+       ioctl:          zol_ioctl,
 };
 
 static int __init zoltrix_init(void)
index 9f2a1bc..6bc9c55 100644 (file)
@@ -2016,11+2016,6 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
        return 0;
 }
 
-static int bttv_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 /*
  *     This maps the vmalloced and reserved fbuffer to user space.
  *
@@ -2067,20+2062,16 @@ static int bttv_mmap(struct video_device *dev, const char *adr, unsigned long si
 
 static struct video_device bttv_template=
 {
-       "UNSET",
-       VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY|VID_TYPE_TELETEXT,
-       VID_HARDWARE_BT848,
-       bttv_open,
-       bttv_close,
-       bttv_read,
-       bttv_write,
-       NULL,
-       bttv_ioctl,
-       bttv_mmap,
-       bttv_init_done,
-       NULL,
-       0,
-       -1
+       name:           "UNSET",
+       type:           VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY|VID_TYPE_TELETEXT,
+       hardware:       VID_HARDWARE_BT848,
+       open:           bttv_open,
+       close:          bttv_close,
+       read:           bttv_read,
+       write:          bttv_write,
+       ioctl:          bttv_ioctl,
+       mmap:           bttv_mmap,
+       minor:          -1,
 };
 
 
@@ -2220,20+2211,16 @@ static int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
 
 static struct video_device vbi_template=
 {
-       "bttv vbi",
-       VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
-       VID_HARDWARE_BT848,
-       vbi_open,
-       vbi_close,
-       vbi_read,
-       bttv_write,
-       vbi_poll,
-       vbi_ioctl,
-       NULL,   /* no mmap yet */
-       bttv_init_done,
-       NULL,
-       0,
-       -1
+       name:           "bttv vbi",
+       type:           VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
+       hardware:       VID_HARDWARE_BT848,
+       open:           vbi_open,
+       close:          vbi_close,
+       read:           vbi_read,
+       write:          bttv_write,
+       poll:           vbi_poll,
+       ioctl:          vbi_ioctl,
+       minor:          -1,
 };
 
 
@@ -2342,20+2329,15 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
 
 static struct video_device radio_template=
 {
-       "bttv radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_BT848,
-       radio_open,
-       radio_close,
-       radio_read,          /* just returns -EINVAL */
-       bttv_write,          /* just returns -EINVAL */
-       NULL,                /* no poll */
-       radio_ioctl,
-       NULL,                /* no mmap */
-       bttv_init_done,      /* just returns 0 */
-       NULL,
-       0,
-       -1
+       name:           "bttv radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_BT848,
+       open:           radio_open,
+       close:          radio_close,
+       read:           radio_read,          /* just returns -EINVAL */
+       write:          bttv_write,          /* just returns -EINVAL */
+       ioctl:          radio_ioctl,
+       minor:          -1,
 };
 
 
index e233467..baaa8f4 100644 (file)
@@ -3027,28+3027,18 @@ static int zoran_mmap(struct video_device *dev, const char *adr, unsigned long s
        return 0;
 }
 
-static int zoran_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static struct video_device zoran_template =
 {
-       BUZ_NAME,
-       VID_TYPE_CAPTURE | VID_TYPE_OVERLAY | VID_TYPE_CLIPPING | VID_TYPE_FRAMERAM |
-       VID_TYPE_SCALES | VID_TYPE_SUBCAPTURE,
-       VID_HARDWARE_ZR36067,
-       zoran_open,
-       zoran_close,
-       zoran_read,
-       zoran_write,
-       NULL,
-       zoran_ioctl,
-       zoran_mmap,
-       zoran_init_done,
-       NULL,
-       0,
-       0
+       name:           BUZ_NAME,
+       type:           VID_TYPE_CAPTURE | VID_TYPE_OVERLAY | VID_TYPE_CLIPPING | VID_TYPE_FRAMERAM |
+                       VID_TYPE_SCALES | VID_TYPE_SUBCAPTURE,
+       hardware:       VID_HARDWARE_ZR36067,
+       open:           zoran_open,
+       close:          zoran_close,
+       read:           zoran_read,
+       write:          zoran_write,
+       ioctl:          zoran_ioctl,
+       mmap:           zoran_mmap,
 };
 
 static int zr36057_init(int i)
index 17f7d25..92d71ba 100644 (file)
@@ -705,11+705,6 @@ static void qcam_close(struct video_device *dev)
        MOD_DEC_USE_COUNT;
 }
 
-static int qcam_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static long qcam_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
 {
        return -EINVAL;
@@ -926,20+921,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count,  i
  
 static struct video_device qcam_template=
 {
-       "Connectix Quickcam",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_QCAM_BW,
-       qcam_open,
-       qcam_close,
-       qcam_read,
-       qcam_write,
-       NULL,
-       qcam_ioctl,
-       NULL,
-       qcam_init_done,
-       NULL,
-       0,
-       0
+       name:           "Connectix Quickcam",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_QCAM_BW,
+       open:           qcam_open,
+       close:          qcam_close,
+       read:           qcam_read,
+       write:          qcam_write,
+       ioctl:          qcam_ioctl,
 };
 
 #define MAX_CAMS 4
index fa96cc9..2b04445 100644 (file)
@@ -509,11+509,6 @@ static void qcam_close(struct video_device *dev)
        MOD_DEC_USE_COUNT;
 }
 
-static int qcam_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static long qcam_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
 {
        return -EINVAL;
@@ -733,20+728,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count,  i
 /* video device template */
 static struct video_device qcam_template=
 {
-       "Colour QuickCam",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_QCAM_C,
-       qcam_open,
-       qcam_close,
-       qcam_read,
-       qcam_write,
-       NULL,
-       qcam_ioctl,
-       NULL,
-       qcam_init_done,
-       NULL,
-       0,
-       0
+       name:           "Colour QuickCam",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_QCAM_C,
+       open:           qcam_open,
+       close:          qcam_close,
+       read:           qcam_read,
+       write:          qcam_write,
+       ioctl:          qcam_ioctl,
 };
 
 /* Initialize the QuickCam driver control structure. */
index d7d007f..0241b55 100644 (file)
@@ -3031,20+3031,16 @@ int cpia_video_init(struct video_device *vdev)
 }
 
 static struct video_device cpia_template = {
-       "CPiA Camera",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_CPIA,      /* FIXME */
-       cpia_open,              /* open */
-       cpia_close,             /* close */
-       cpia_read,              /* read */
-       NULL,                   /* no write */
-       NULL,                   /* no poll */
-       cpia_ioctl,             /* ioctl */
-       cpia_mmap,              /* mmap */
-       cpia_video_init,        /* initialize */
-       NULL,                   /* priv */
-       0,                      /* busy */
-       -1                      /* minor - unset */
+       name:           "CPiA Camera",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_CPIA,      /* FIXME */
+       open:           cpia_open,
+       close:          cpia_close,
+       read:           cpia_read,
+       ioctl:          cpia_ioctl,
+       mmap:           cpia_mmap,
+       initialize:     cpia_video_init,
+       minor:          -1,
 };
 
 /* initialise cam_data structure  */
index 9470761..7fcfcc9 100644 (file)
@@ -2035,31+2035,17 @@ static int planb_mmap(struct video_device *dev, const char *adr, unsigned long s
        return 0;
 }
 
-/* This gets called upon device registration */
-/* we could do some init here */
-static int planb_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static struct video_device planb_template=
 {
-       PLANB_DEVICE_NAME,
-       VID_TYPE_OVERLAY,
-       VID_HARDWARE_PLANB,
-       planb_open,
-       planb_close,
-       planb_read,
-       planb_write,
-#if LINUX_VERSION_CODE >= 0x020100
-       NULL,   /* poll */
-#endif
-       planb_ioctl,
-       planb_mmap,     /* mmap? */
-       planb_init_done,
-       NULL,   /* pointer to private data */
-       0,
-       0
+       name:           PLANB_DEVICE_NAME,
+       type:           VID_TYPE_OVERLAY,
+       hardware:       VID_HARDWARE_PLANB,
+       open:           planb_open,
+       close:          planb_close,
+       read:           planb_read,
+       write:          planb_write,
+       ioctl:          planb_ioctl,
+       mmap:           planb_mmap,     /* mmap? */
 };
 
 static int init_planb(struct planb *pb)
index 1e50880..77893ad 100644 (file)
@@ -681,11+681,6 @@ static void pms_close(struct video_device *dev)
        MOD_DEC_USE_COUNT;
 }
 
-static int pms_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static long pms_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
 {
        return -EINVAL;
@@ -907,20+902,14 @@ static long pms_read(struct video_device *v, char *buf, unsigned long count,  in
  
 struct video_device pms_template=
 {
-       "Mediavision PMS",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_PMS,
-       pms_open,
-       pms_close,
-       pms_read,
-       pms_write,
-       NULL,           /* FIXME - we can use POLL on this board with the irq */
-       pms_ioctl,
-       NULL,
-       pms_init_done,
-       NULL,
-       0,
-       0
+       name:           "Mediavision PMS",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_PMS,
+       open:           pms_open,
+       close:          pms_close,
+       read:           pms_read,
+       write:          pms_write,
+       ioctl:          pms_ioctl,
 };
 
 struct pms_device pms_device;
index 1213e2e..85d1831 100644 (file)
@@ -669,15+669,12 @@ module_exit(cleanup_saa_5249);
 
 static struct video_device saa_template =
 {
-       IF_NAME,
-       VID_TYPE_TELETEXT,      /*| VID_TYPE_TUNER ?? */
-       VID_HARDWARE_SAA5249,
-       saa5249_open,
-       saa5249_release,
-       NULL,                   /* read */
-       saa5249_write,
-       NULL,                   /* poll */
-       saa5249_ioctl,
-       /* the rest are null */
+       name:           IF_NAME,
+       type:           VID_TYPE_TELETEXT,      /*| VID_TYPE_TUNER ?? */
+       hardware:       VID_HARDWARE_SAA5249,
+       open:           saa5249_open,
+       close:          saa5249_release,
+       write:          saa5249_write,
+       ioctl:          saa5249_ioctl,
 };
 
index 03ca27a..37e671b 100644 (file)
@@ -1827,11+1827,6 @@ static int saa_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
        return 0;
 }
 
-static int saa_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static int saa_mmap(struct video_device *dev, const char *adr,
                    unsigned long size)
 {
@@ -1993,20+1988,15 @@ static void saa_close(struct video_device *dev)
 /* template for video_device-structure */
 static struct video_device saa_template =
 {
-       "SAA7146A",
-       VID_TYPE_CAPTURE | VID_TYPE_OVERLAY,
-       VID_HARDWARE_SAA7146,
-       saa_open,
-       saa_close,
-       saa_read,
-       saa_write,
-       NULL,                   /* poll */
-       saa_ioctl,
-       saa_mmap,
-       saa_init_done,
-       NULL,
-       0,
-       0
+       name:           "SAA7146A",
+       type:           VID_TYPE_CAPTURE | VID_TYPE_OVERLAY,
+       hardware:       VID_HARDWARE_SAA7146,
+       open:           saa_open,
+       close:          saa_close,
+       read:           saa_read,
+       write:          saa_write,
+       ioctl:          saa_ioctl,
+       mmap:           saa_mmap,
 };
 
 static int configure_saa7146(struct pci_dev *dev, int num)
index 1ef64ae..b24591d 100644 (file)
@@ -224,20+224,13 @@ static int vino_mmap(struct video_device *dev, const char *adr,
 }
 
 static struct video_device vino_dev = {
-       "Vino IndyCam/TV",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_VINO,
-       vino_open,
-       vino_close,
-       NULL,           /* vino_read */
-       NULL,           /* vino_write */
-       NULL,           /* vino_poll */
-       vino_ioctl,
-       vino_mmap,
-       NULL,           /* vino_init */
-       NULL,
-       0,
-       0
+       name:           "Vino IndyCam/TV",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_VINO,
+       open:           vino_open,
+       close:          vino_close,
+       ioctl:          vino_ioctl,
+       mmap:           vino_mmap,
 };
 
 int __init init_vino(struct video_device *dev)
index b4ef205..6027f84 100644 (file)
@@ -1482,23+1482,17 @@ int zoran_mmap(struct video_device* dev, const char* adr, unsigned long size)
 
 static struct video_device zr36120_template=
 {
-       "UNSET",
-       VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY,
-       VID_HARDWARE_ZR36120,
-
-       zoran_open,
-       zoran_close,
-       zoran_read,
-       zoran_write,
-#if LINUX_VERSION_CODE >= 0x020100
-       zoran_poll,             /* poll */
-#endif
-       zoran_ioctl,
-       zoran_mmap,
-       NULL,                   /* initialize */
-       NULL,
-       0,
-       -1
+       name:           "UNSET",
+       type:           VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY,
+       hardware:       VID_HARDWARE_ZR36120,
+       open:           zoran_open,
+       close:          zoran_close,
+       read:           zoran_read,
+       write:          zoran_write,
+       poll:           zoran_poll,
+       ioctl:          zoran_ioctl,
+       mmap:           zoran_mmap,
+       minor:          -1,
 };
 
 static
@@ -1825,23+1819,16 @@ int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
 
 static struct video_device vbi_template=
 {
-       "UNSET",
-       VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
-       VID_HARDWARE_ZR36120,
-
-       vbi_open,
-       vbi_close,
-       vbi_read,
-       zoran_write,
-#if LINUX_VERSION_CODE >= 0x020100
-       vbi_poll,               /* poll */
-#endif
-       vbi_ioctl,
-       NULL,                   /* no mmap */
-       NULL,                   /* no initialize */
-       NULL,                   /* priv */
-       0,                      /* busy */
-       -1                      /* minor */
+       name:           "UNSET",
+       type:           VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
+       hardware:       VID_HARDWARE_ZR36120,
+       open:           vbi_open,
+       close:          vbi_close,
+       read:           vbi_read,
+       write:          zoran_write,
+       poll:           vbi_poll,
+       ioctl:          vbi_ioctl,
+       minor:          -1,
 };
 
 /*
index 373d8ef..a59759b 100644 (file)
@@ -91,17+91,12 @@ typedef struct
 
 static struct video_device usb_dsbr100_radio=
 {
-       "D-Link DSB R-100 USB radio",
-       VID_TYPE_TUNER,
-       VID_HARDWARE_AZTECH,
-       usb_dsbr100_open,
-       usb_dsbr100_close,
-       NULL,   /* Can't read  (no capture ability) */
-       NULL,   /* Can't write */
-       NULL,   /* No poll */
-       usb_dsbr100_ioctl,
-       NULL,
-       NULL
+       name:           "D-Link DSB R-100 USB radio",
+       type:           VID_TYPE_TUNER,
+       hardware:       VID_HARDWARE_AZTECH,
+       open:           usb_dsbr100_open,
+       close:          usb_dsbr100_close,
+       ioctl:          usb_dsbr100_ioctl,
 };
 
 static int users = 0;
index 0364b33..a502cba 100644 (file)
@@ -2492,11+2492,6 @@ static void ibmcam_close(struct video_device *dev)
        MOD_DEC_USE_COUNT;
 }
 
-static int ibmcam_init_done(struct video_device *dev)
-{
-       return 0;
-}
-
 static long ibmcam_write(struct video_device *dev, const char *buf, unsigned long count, int noblock)
 {
        return -EINVAL;
@@ -2855,20+2850,15 @@ static int ibmcam_mmap(struct video_device *dev, const char *adr, unsigned long
 }
 
 static struct video_device ibmcam_template = {
-       "CPiA USB Camera",
-       VID_TYPE_CAPTURE,
-       VID_HARDWARE_CPIA,
-       ibmcam_open,
-       ibmcam_close,
-       ibmcam_read,
-       ibmcam_write,
-       NULL,
-       ibmcam_ioctl,
-       ibmcam_mmap,
-       ibmcam_init_done,
-       NULL,
-       0,
-       0
+       name:           "CPiA USB Camera",
+       type:           VID_TYPE_CAPTURE,
+       hardware:       VID_HARDWARE_CPIA,
+       open:           ibmcam_open,
+       close:          ibmcam_close,
+       read:           ibmcam_read,
+       write:          ibmcam_write,
+       ioctl:          ibmcam_ioctl,
+       mmap:           ibmcam_mmap,
 };
 
 static void usb_ibmcam_configure_video(struct usb_ibmcam *ibmcam)
index c5d6424..4473f7c 100644 (file)
@@ -127,7+127,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
                        dpnt = tmpname;
 #ifdef CONFIG_JOLIET
                } else if (dir->i_sb->u.isofs_sb.s_joliet_level) {
-                       dlen = get_joliet_filename(de, dir, tmpname);
+                       dlen = get_joliet_filename(de, tmpname, dir);
                        dpnt = tmpname;
 #endif
                } else if (dir->i_sb->u.isofs_sb.s_mapping == 'a') {
index f8ebabe..04ba635 100644 (file)
@@ -30,6+30,7 @@ extern void restore_fpu( struct task_struct *tsk );
 
 #define clear_fpu( tsk ) do { \
        if ( tsk->flags & PF_USEDFPU ) { \
+               asm volatile("fwait"); \
                tsk->flags &= ~PF_USEDFPU; \
                stts(); \
        } \
index 769a7cf..9e8e8c5 100644 (file)
@@ -87,6+87,7 @@ extern struct cpuinfo_x86 cpu_data[];
 #define cpu_has_vme    (test_bit(X86_FEATURE_VME,  boot_cpu_data.x86_capability))
 #define cpu_has_fxsr   (test_bit(X86_FEATURE_FXSR, boot_cpu_data.x86_capability))
 #define cpu_has_xmm    (test_bit(X86_FEATURE_XMM,  boot_cpu_data.x86_capability))
+#define cpu_has_fpu    (test_bit(X86_FEATURE_FPU,  boot_cpu_data.x86_capability))
 
 extern char ignore_irq13;
 
index 993fd93..7a045f0 100644 (file)
@@ -215,6+215,7 @@ enum
 {
        ACPI_FACP = 1,
        ACPI_DSDT,
+       ACPI_FACS,
        ACPI_PM1_ENABLE,
        ACPI_GPE_ENABLE,
        ACPI_GPE_LEVEL,
index a10ef30..3ce8382 100644 (file)
        __u32 __x = (x); \
        ((__u32)( \
                (((__u32)(__x) & (__u32)0x00ff00ffUL) << 8) | \
-               (((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )) \
+               (((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )); \
 })
 
 #define ___constant_swahw32(x) \
index 9fcd98f..9cac775 100644 (file)
@@ -20,7+20,7 @@ extern struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig);
 
 static inline char *bh_kmap(struct buffer_head *bh)
 {
-       return kmap(bh->p_page) + bh_offset(bh);
+       return kmap(bh->b_page) + bh_offset(bh);
 }
 
 static inline void bh_kunmap(struct buffer_head *bh)
index 87f3345..8d641ef 100644 (file)
@@ -12,6+12,8 @@ struct timespec {
 };
 #endif /* _STRUCT_TIMESPEC */
 
+#ifdef __KERNEL__
+
 /*
  * Change timeval to jiffies, trying to avoid the
  * most obvious overflows..
@@ -80,6+82,8 @@ mktime (unsigned int year, unsigned int mon,
        )*60 + sec; /* finally seconds */
 }
 
+#endif /* __KERNEL__ */
+
 
 struct timeval {
        time_t          tv_sec;         /* seconds */
close