Commit 759fa8b9 authored by Linus Torvalds's avatar Linus Torvalds

The most noticeable fixes since pre7 are the Athlon lockup fix,

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..
parent 156fe7fa
...@@ -258,6 +258,8 @@ static struct ctl_table acpi_table[] = ...@@ -258,6 +258,8 @@ static struct ctl_table acpi_table[] =
{ACPI_FACP, "facp", &acpi_facp, 0, 0644, NULL, &acpi_do_table}, {ACPI_FACP, "facp", &acpi_facp, 0, 0644, NULL, &acpi_do_table},
{ACPI_DSDT, "dsdt", &acpi_dsdt, 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", {ACPI_PM1_ENABLE, "pm1_enable",
NULL, 0, NULL, 0,
...@@ -722,12 +724,21 @@ static int __init acpi_find_tables(void) ...@@ -722,12 +724,21 @@ static int __init acpi_find_tables(void)
if (!acpi_init_table(&acpi_facp, dt, 1)) { if (!acpi_init_table(&acpi_facp, dt, 1)) {
struct acpi_facp *facp struct acpi_facp *facp
= (struct acpi_facp*) acpi_facp.table; = (struct acpi_facp*) acpi_facp.table;
struct acpi_table *facs;
// map DSDT if it exists // map DSDT if it exists
dt = acpi_map_table(facp->dsdt); if ((dt = acpi_map_table(facp->dsdt))) {
if (acpi_init_table(&acpi_dsdt, dt, 1)) if (acpi_init_table(&acpi_dsdt, dt, 1))
acpi_unmap_table(dt); 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; break;
} }
else { else {
......
...@@ -374,7 +374,6 @@ void __init init_8259A(int auto_eoi) ...@@ -374,7 +374,6 @@ void __init init_8259A(int auto_eoi)
spin_unlock_irqrestore(&i8259A_lock, flags); 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 * 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 * 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) ...@@ -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, * New motherboards sometimes make IRQ 13 be a PCI interrupt,
* so allow interrupt sharing. * 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 * IRQ2 is cascade interrupt to second interrupt controller
*/ */
#ifndef CONFIG_VISWS
static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
#endif #endif
...@@ -494,6 +494,12 @@ void __init init_IRQ(void) ...@@ -494,6 +494,12 @@ void __init init_IRQ(void)
#ifndef CONFIG_VISWS #ifndef CONFIG_VISWS
setup_irq(2, &irq2); setup_irq(2, &irq2);
setup_irq(13, &irq13);
#endif #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);
} }
...@@ -297,13 +297,19 @@ static struct irq_router pirq_routers[] = { ...@@ -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_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_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_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 }, { "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 }, { "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_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_82C596, pirq_via_get, pirq_via_set },
{ "VIA", PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686, 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 }, { "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 }, { "NatSemi", PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, pirq_cyrix_get, pirq_cyrix_set },
{ "default", 0, 0, NULL, NULL } { "default", 0, 0, NULL, NULL }
}; };
...@@ -313,7 +319,6 @@ static struct pci_dev *pirq_router_dev; ...@@ -313,7 +319,6 @@ static struct pci_dev *pirq_router_dev;
static void __init pirq_find_router(void) static void __init pirq_find_router(void)
{ {
struct irq_routing_table *rt = pirq_table; struct irq_routing_table *rt = pirq_table;
u16 rvendor, rdevice;
struct irq_router *r; struct irq_router *r;
#ifdef CONFIG_PCI_BIOS #ifdef CONFIG_PCI_BIOS
...@@ -323,32 +328,31 @@ static void __init pirq_find_router(void) ...@@ -323,32 +328,31 @@ static void __init pirq_find_router(void)
return; return;
} }
#endif #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); 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; return;
} }
if (rt->rtr_vendor) {
rvendor = rt->rtr_vendor; for(r=pirq_routers; r->vendor; r++) {
rdevice = rt->rtr_device; /* Exact match against router table entry? Use it! */
} else { if (r->vendor == rt->rtr_vendor && r->device == rt->rtr_device) {
/* pirq_router = r;
* 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)
break; break;
pirq_router = r; }
printk("PCI: Using IRQ router %s [%04x/%04x] at %s\n", r->name, /* Match against router device entry? Use it as a fallback */
rvendor, rdevice, pirq_router_dev->slot_name); 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) static struct irq_info *pirq_get_info(struct pci_dev *dev, int pin)
......
...@@ -2122,7 +2122,7 @@ int get_cpuinfo(char * buffer) ...@@ -2122,7 +2122,7 @@ int get_cpuinfo(char * buffer)
p += sprintf(p, "cache size\t: %d KB\n", c->x86_cache_size); 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 */ /* 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" p += sprintf(p, "fdiv_bug\t: %s\n"
"hlt_bug\t\t: %s\n" "hlt_bug\t\t: %s\n"
"f00f_bug\t: %s\n" "f00f_bug\t: %s\n"
...@@ -2178,7 +2178,7 @@ void __init cpu_init (void) ...@@ -2178,7 +2178,7 @@ void __init cpu_init (void)
if (tsc_disable && cpu_has_tsc) { if (tsc_disable && cpu_has_tsc) {
printk("Disabling TSC...\n"); printk("Disabling TSC...\n");
/**** FIX-HPA: DOES THIS REALLY BELONG HERE? ****/ /**** 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); set_in_cr4(X86_CR4_TSD);
} }
#endif #endif
......
...@@ -322,17 +322,12 @@ static struct rt_device rtrack_unit; ...@@ -322,17 +322,12 @@ static struct rt_device rtrack_unit;
static struct video_device rtrack_radio= static struct video_device rtrack_radio=
{ {
"RadioTrack radio", name: "RadioTrack radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_RTRACK, hardware: VID_HARDWARE_RTRACK,
rt_open, open: rt_open,
rt_close, close: rt_close,
NULL, /* Can't read (no capture ability) */ ioctl: rt_ioctl,
NULL, /* Can't write */
NULL, /* No poll */
rt_ioctl,
NULL,
NULL
}; };
static int __init rtrack_init(void) static int __init rtrack_init(void)
......
...@@ -273,17 +273,12 @@ static struct az_device aztech_unit; ...@@ -273,17 +273,12 @@ static struct az_device aztech_unit;
static struct video_device aztech_radio= static struct video_device aztech_radio=
{ {
"Aztech radio", name: "Aztech radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_AZTECH, hardware: VID_HARDWARE_AZTECH,
az_open, open: az_open,
az_close, close: az_close,
NULL, /* Can't read (no capture ability) */ ioctl: az_ioctl,
NULL, /* Can't write */
NULL, /* No poll */
az_ioctl,
NULL,
NULL
}; };
static int __init aztech_init(void) static int __init aztech_init(void)
......
...@@ -542,17 +542,13 @@ static void cadet_close(struct video_device *dev) ...@@ -542,17 +542,13 @@ static void cadet_close(struct video_device *dev)
static struct video_device cadet_radio= static struct video_device cadet_radio=
{ {
"Cadet radio", name: "Cadet radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_CADET, hardware: VID_HARDWARE_CADET,
cadet_open, open: cadet_open,
cadet_close, close: cadet_close,
cadet_read, read: cadet_read,
NULL, /* Can't write */ ioctl: cadet_ioctl,
NULL, /* No poll */
cadet_ioctl,
NULL,
NULL
}; };
#ifdef CONFIG_ISAPNP #ifdef CONFIG_ISAPNP
......
...@@ -249,17 +249,12 @@ static struct gemtek_device gemtek_unit; ...@@ -249,17 +249,12 @@ static struct gemtek_device gemtek_unit;
static struct video_device gemtek_radio= static struct video_device gemtek_radio=
{ {
"GemTek radio", name: "GemTek radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_GEMTEK, hardware: VID_HARDWARE_GEMTEK,
gemtek_open, open: gemtek_open,
gemtek_close, close: gemtek_close,
NULL, /* Can't read (no capture ability) */ ioctl: gemtek_ioctl,
NULL, /* Can't write */
NULL, /* Can't poll */
gemtek_ioctl,
NULL,
NULL
}; };
static int __init gemtek_init(void) static int __init gemtek_init(void)
......
...@@ -69,17 +69,12 @@ static void radio_close(struct video_device *); ...@@ -69,17 +69,12 @@ static void radio_close(struct video_device *);
static struct video_device maestro_radio= static struct video_device maestro_radio=
{ {
"Maestro radio", name: "Maestro radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_SF16MI, hardware: VID_HARDWARE_SF16MI,
radio_open, open: radio_open,
radio_close, close: radio_close,
NULL, ioctl: radio_ioctl,
NULL,
NULL,
radio_ioctl,
NULL,
NULL
}; };
static struct radio_device static struct radio_device
...@@ -300,21 +295,17 @@ static void radio_close(struct video_device *dev) ...@@ -300,21 +295,17 @@ static void radio_close(struct video_device *dev)
inline static __u16 radio_install(struct pci_dev *pcidev); inline static __u16 radio_install(struct pci_dev *pcidev);
#ifdef MODULE
MODULE_AUTHOR("Adam Tlalka, atlka@pg.gda.pl"); MODULE_AUTHOR("Adam Tlalka, atlka@pg.gda.pl");
MODULE_DESCRIPTION("Radio driver for the Maestro PCI sound card radio."); MODULE_DESCRIPTION("Radio driver for the Maestro PCI sound card radio.");
EXPORT_NO_SYMBOLS; EXPORT_NO_SYMBOLS;
void cleanup_module(void) void __exit maestro_radio_exit(void)
{ {
video_unregister_device(&maestro_radio); video_unregister_device(&maestro_radio);
} }
int init_module(void) int __init maestro_radio_init(void)
#else
int __init maestro_radio_init(struct video_init *v)
#endif
{ {
register __u16 found=0; register __u16 found=0;
struct pci_dev *pcidev = NULL; struct pci_dev *pcidev = NULL;
...@@ -335,6 +326,9 @@ int __init maestro_radio_init(struct video_init *v) ...@@ -335,6 +326,9 @@ int __init maestro_radio_init(struct video_init *v)
return 0; return 0;
} }
module_init(maestro_radio_init);
module_exit(maestro_radio_exit);
inline static __u16 radio_power_on(struct radio_device *dev) inline static __u16 radio_power_on(struct radio_device *dev)
{ {
register __u16 io=dev->io; register __u16 io=dev->io;
......
...@@ -192,17 +192,12 @@ static struct pcm20_device pcm20_unit; ...@@ -192,17 +192,12 @@ static struct pcm20_device pcm20_unit;
static struct video_device pcm20_radio= static struct video_device pcm20_radio=
{ {
"Miro PCM 20 radio", name: "Miro PCM 20 radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_RTRACK, hardware: VID_HARDWARE_RTRACK,
pcm20_open, open: pcm20_open,
pcm20_close, close: pcm20_close,
NULL, /* Can't read (no capture ability) */ ioctl: pcm20_ioctl,
NULL, /* Can't write */
NULL, /* Can't poll */
pcm20_ioctl,
NULL,
NULL
}; };
static int __init pcm20_init(void) static int __init pcm20_init(void)
......
...@@ -215,17 +215,12 @@ static struct rt_device rtrack2_unit; ...@@ -215,17 +215,12 @@ static struct rt_device rtrack2_unit;
static struct video_device rtrack2_radio= static struct video_device rtrack2_radio=
{ {
"RadioTrack II radio", name: "RadioTrack II radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_RTRACK2, hardware: VID_HARDWARE_RTRACK2,
rt_open, open: rt_open,
rt_close, close: rt_close,
NULL, /* Can't read (no capture ability) */ ioctl: rt_ioctl,
NULL, /* Can't write */
NULL, /* Can't poll */
rt_ioctl,
NULL,
NULL
}; };
static int __init rtrack2_init(void) static int __init rtrack2_init(void)
......
...@@ -276,17 +276,12 @@ static struct fmi_device fmi_unit; ...@@ -276,17 +276,12 @@ static struct fmi_device fmi_unit;
static struct video_device fmi_radio= static struct video_device fmi_radio=
{ {
"SF16FMx radio", name: "SF16FMx radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_SF16MI, hardware: VID_HARDWARE_SF16MI,
fmi_open, open: fmi_open,
fmi_close, close: fmi_close,
NULL, /* Can't read (no capture ability) */ ioctl: fmi_ioctl,
NULL, /* Can't write */
NULL, /* Can't poll */
fmi_ioctl,
NULL,
NULL
}; };
static int __init fmi_init(void) static int __init fmi_init(void)
......
...@@ -294,17 +294,12 @@ static struct tt_device terratec_unit; ...@@ -294,17 +294,12 @@ static struct tt_device terratec_unit;
static struct video_device terratec_radio= static struct video_device terratec_radio=
{ {
"TerraTec ActiveRadio", name: "TerraTec ActiveRadio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_TERRATEC, hardware: VID_HARDWARE_TERRATEC,
tt_open, open: tt_open,
tt_close, close: tt_close,
NULL, /* Can't read (no capture ability) */ ioctl: tt_ioctl,
NULL, /* Can't write */
NULL, /* No poll */
tt_ioctl,
NULL,
NULL
}; };
static int __init terratec_init(void) static int __init terratec_init(void)
......
...@@ -286,17 +286,12 @@ static void tr_close(struct video_device *dev) ...@@ -286,17 +286,12 @@ static void tr_close(struct video_device *dev)
static struct video_device trust_radio= static struct video_device trust_radio=
{ {
"Trust FM Radio", name: "Trust FM Radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_TRUST, hardware: VID_HARDWARE_TRUST,
tr_open, open: tr_open,
tr_close, close: tr_close,
NULL, /* Can't read (no capture ability) */ ioctl: tr_ioctl,
NULL, /* Can't write */
NULL, /* No poll */
tr_ioctl,
NULL,
NULL
}; };
static int __init trust_init(void) static int __init trust_init(void)
......
...@@ -273,27 +273,19 @@ static void typhoon_close(struct video_device *dev) ...@@ -273,27 +273,19 @@ static void typhoon_close(struct video_device *dev)
static struct typhoon_device typhoon_unit = static struct typhoon_device typhoon_unit =
{ {
0, /* users */ iobase: CONFIG_RADIO_TYPHOON_PORT,
CONFIG_RADIO_TYPHOON_PORT, /* iobase */ curfreq: CONFIG_RADIO_TYPHOON_MUTEFREQ,
0, /* curvol */ mutefreq: CONFIG_RADIO_TYPHOON_MUTEFREQ,
0, /* muted */
CONFIG_RADIO_TYPHOON_MUTEFREQ, /* curfreq */
CONFIG_RADIO_TYPHOON_MUTEFREQ /* mutefreq */
}; };
static struct video_device typhoon_radio = static struct video_device typhoon_radio =
{ {
"Typhoon Radio", name: "Typhoon Radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_TYPHOON, hardware: VID_HARDWARE_TYPHOON,
typhoon_open, open: typhoon_open,
typhoon_close, close: typhoon_close,
NULL, /* Can't read (no capture ability) */ ioctl: typhoon_ioctl,
NULL, /* Can't write */
NULL, /* Can't poll */
typhoon_ioctl,
NULL,
NULL
}; };
#ifdef CONFIG_RADIO_TYPHOON_PROC_FS #ifdef CONFIG_RADIO_TYPHOON_PROC_FS
......
...@@ -341,17 +341,12 @@ static struct zol_device zoltrix_unit; ...@@ -341,17 +341,12 @@ static struct zol_device zoltrix_unit;
static struct video_device zoltrix_radio = static struct video_device zoltrix_radio =
{ {
"Zoltrix Radio Plus", name: "Zoltrix Radio Plus",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_ZOLTRIX, hardware: VID_HARDWARE_ZOLTRIX,
zol_open, open: zol_open,
zol_close, close: zol_close,
NULL, /* Can't read (no capture ability) */ ioctl: zol_ioctl,
NULL, /* Can't write */
NULL,
zol_ioctl,
NULL,
NULL
}; };
static int __init zoltrix_init(void) static int __init zoltrix_init(void)
......
...@@ -2016,11 +2016,6 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg) ...@@ -2016,11 +2016,6 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return 0; return 0;
} }
static int bttv_init_done(struct video_device *dev)
{
return 0;
}
/* /*
* This maps the vmalloced and reserved fbuffer to user space. * 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 ...@@ -2067,20 +2062,16 @@ static int bttv_mmap(struct video_device *dev, const char *adr, unsigned long si
static struct video_device bttv_template= static struct video_device bttv_template=
{ {
"UNSET", name: "UNSET",
VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY|VID_TYPE_TELETEXT, type: VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY|VID_TYPE_TELETEXT,
VID_HARDWARE_BT848, hardware: VID_HARDWARE_BT848,
bttv_open, open: bttv_open,
bttv_close, close: bttv_close,
bttv_read, read: bttv_read,
bttv_write, write: bttv_write,
NULL, ioctl: bttv_ioctl,
bttv_ioctl, mmap: bttv_mmap,
bttv_mmap, minor: -1,
bttv_init_done,
NULL,
0,
-1
}; };
...@@ -2220,20 +2211,16 @@ static int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg) ...@@ -2220,20 +2211,16 @@ static int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
static struct video_device vbi_template= static struct video_device vbi_template=
{ {
"bttv vbi", name: "bttv vbi",
VID_TYPE_CAPTURE|VID_TYPE_TELETEXT, type: VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
VID_HARDWARE_BT848, hardware: VID_HARDWARE_BT848,
vbi_open, open: vbi_open,
vbi_close, close: vbi_close,
vbi_read, read: vbi_read,
bttv_write, write: bttv_write,
vbi_poll, poll: vbi_poll,
vbi_ioctl, ioctl: vbi_ioctl,
NULL, /* no mmap yet */ minor: -1,
bttv_init_done,
NULL,
0,
-1
}; };
...@@ -2342,20 +2329,15 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg) ...@@ -2342,20 +2329,15 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
static struct video_device radio_template= static struct video_device radio_template=
{ {
"bttv radio", name: "bttv radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_BT848, hardware: VID_HARDWARE_BT848,
radio_open, open: radio_open,
radio_close, close: radio_close,
radio_read, /* just returns -EINVAL */ read: radio_read, /* just returns -EINVAL */
bttv_write, /* just returns -EINVAL */ write: bttv_write, /* just returns -EINVAL */
NULL, /* no poll */ ioctl: radio_ioctl,
radio_ioctl, minor: -1,
NULL, /* no mmap */
bttv_init_done, /* just returns 0 */
NULL,
0,
-1
}; };
......
...@@ -3027,28 +3027,18 @@ static int zoran_mmap(struct video_device *dev, const char *adr, unsigned long s ...@@ -3027,28 +3027,18 @@ static int zoran_mmap(struct video_device *dev, const char *adr, unsigned long s
return 0; return 0;
} }
static int zoran_init_done(struct video_device *dev)
{
return 0;
}
static struct video_device zoran_template = static struct video_device zoran_template =
{ {
BUZ_NAME, name: BUZ_NAME,
VID_TYPE_CAPTURE | VID_TYPE_OVERLAY | VID_TYPE_CLIPPING | VID_TYPE_FRAMERAM | type: VID_TYPE_CAPTURE | VID_TYPE_OVERLAY | VID_TYPE_CLIPPING | VID_TYPE_FRAMERAM |
VID_TYPE_SCALES | VID_TYPE_SUBCAPTURE, VID_TYPE_SCALES | VID_TYPE_SUBCAPTURE,
VID_HARDWARE_ZR36067, hardware: VID_HARDWARE_ZR36067,
zoran_open, open: zoran_open,
zoran_close, close: zoran_close,
zoran_read, read: zoran_read,
zoran_write, write: zoran_write,
NULL, ioctl: zoran_ioctl,
zoran_ioctl, mmap: zoran_mmap,
zoran_mmap,
zoran_init_done,
NULL,
0,
0
}; };
static int zr36057_init(int i) static int zr36057_init(int i)
......
...@@ -705,11 +705,6 @@ static void qcam_close(struct video_device *dev) ...@@ -705,11 +705,6 @@ static void qcam_close(struct video_device *dev)
MOD_DEC_USE_COUNT; 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) static long qcam_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
{ {
return -EINVAL; return -EINVAL;
...@@ -926,20 +921,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count, i ...@@ -926,20 +921,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count, i
static struct video_device qcam_template= static struct video_device qcam_template=
{ {
"Connectix Quickcam", name: "Connectix Quickcam",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_QCAM_BW, hardware: VID_HARDWARE_QCAM_BW,
qcam_open, open: qcam_open,
qcam_close, close: qcam_close,
qcam_read, read: qcam_read,
qcam_write, write: qcam_write,
NULL, ioctl: qcam_ioctl,
qcam_ioctl,
NULL,
qcam_init_done,
NULL,
0,
0
}; };
#define MAX_CAMS 4 #define MAX_CAMS 4
......
...@@ -509,11 +509,6 @@ static void qcam_close(struct video_device *dev) ...@@ -509,11 +509,6 @@ static void qcam_close(struct video_device *dev)
MOD_DEC_USE_COUNT; 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) static long qcam_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
{ {
return -EINVAL; return -EINVAL;
...@@ -733,20 +728,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count, i ...@@ -733,20 +728,14 @@ static long qcam_read(struct video_device *v, char *buf, unsigned long count, i
/* video device template */ /* video device template */
static struct video_device qcam_template= static struct video_device qcam_template=
{ {
"Colour QuickCam", name: "Colour QuickCam",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_QCAM_C, hardware: VID_HARDWARE_QCAM_C,
qcam_open, open: qcam_open,
qcam_close, close: qcam_close,
qcam_read, read: qcam_read,
qcam_write, write: qcam_write,
NULL, ioctl: qcam_ioctl,
qcam_ioctl,
NULL,
qcam_init_done,
NULL,
0,
0
}; };
/* Initialize the QuickCam driver control structure. */ /* Initialize the QuickCam driver control structure. */
......
...@@ -3031,20 +3031,16 @@ int cpia_video_init(struct video_device *vdev) ...@@ -3031,20 +3031,16 @@ int cpia_video_init(struct video_device *vdev)
} }
static struct video_device cpia_template = { static struct video_device cpia_template = {
"CPiA Camera", name: "CPiA Camera",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_CPIA, /* FIXME */ hardware: VID_HARDWARE_CPIA, /* FIXME */
cpia_open, /* open */ open: cpia_open,
cpia_close, /* close */ close: cpia_close,
cpia_read, /* read */ read: cpia_read,
NULL, /* no write */ ioctl: cpia_ioctl,
NULL, /* no poll */ mmap: cpia_mmap,
cpia_ioctl, /* ioctl */ initialize: cpia_video_init,
cpia_mmap, /* mmap */ minor: -1,
cpia_video_init, /* initialize */
NULL, /* priv */
0, /* busy */
-1 /* minor - unset */
}; };
/* initialise cam_data structure */ /* initialise cam_data structure */
......
...@@ -2035,31 +2035,17 @@ static int planb_mmap(struct video_device *dev, const char *adr, unsigned long s ...@@ -2035,31 +2035,17 @@ static int planb_mmap(struct video_device *dev, const char *adr, unsigned long s
return 0; 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= static struct video_device planb_template=
{ {
PLANB_DEVICE_NAME, name: PLANB_DEVICE_NAME,
VID_TYPE_OVERLAY, type: VID_TYPE_OVERLAY,
VID_HARDWARE_PLANB, hardware: VID_HARDWARE_PLANB,
planb_open, open: planb_open,
planb_close, close: planb_close,
planb_read, read: planb_read,
planb_write, write: planb_write,
#if LINUX_VERSION_CODE >= 0x020100 ioctl: planb_ioctl,
NULL, /* poll */ mmap: planb_mmap, /* mmap? */
#endif
planb_ioctl,
planb_mmap, /* mmap? */
planb_init_done,
NULL, /* pointer to private data */
0,
0
}; };
static int init_planb(struct planb *pb) static int init_planb(struct planb *pb)
......
...@@ -681,11 +681,6 @@ static void pms_close(struct video_device *dev) ...@@ -681,11 +681,6 @@ static void pms_close(struct video_device *dev)
MOD_DEC_USE_COUNT; 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) static long pms_write(struct video_device *v, const char *buf, unsigned long count, int noblock)
{ {
return -EINVAL; return -EINVAL;
...@@ -907,20 +902,14 @@ static long pms_read(struct video_device *v, char *buf, unsigned long count, in ...@@ -907,20 +902,14 @@ static long pms_read(struct video_device *v, char *buf, unsigned long count, in
struct video_device pms_template= struct video_device pms_template=
{ {
"Mediavision PMS", name: "Mediavision PMS",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_PMS, hardware: VID_HARDWARE_PMS,
pms_open, open: pms_open,
pms_close, close: pms_close,
pms_read, read: pms_read,
pms_write, write: pms_write,
NULL, /* FIXME - we can use POLL on this board with the irq */ ioctl: pms_ioctl,
pms_ioctl,
NULL,
pms_init_done,
NULL,
0,
0
}; };
struct pms_device pms_device; struct pms_device pms_device;
......
...@@ -669,15 +669,12 @@ module_exit(cleanup_saa_5249); ...@@ -669,15 +669,12 @@ module_exit(cleanup_saa_5249);
static struct video_device saa_template = static struct video_device saa_template =
{ {
IF_NAME, name: IF_NAME,
VID_TYPE_TELETEXT, /*| VID_TYPE_TUNER ?? */ type: VID_TYPE_TELETEXT, /*| VID_TYPE_TUNER ?? */
VID_HARDWARE_SAA5249, hardware: VID_HARDWARE_SAA5249,
saa5249_open, open: saa5249_open,
saa5249_release, close: saa5249_release,
NULL, /* read */ write: saa5249_write,
saa5249_write, ioctl: saa5249_ioctl,
NULL, /* poll */
saa5249_ioctl,
/* the rest are null */
}; };
...@@ -1827,11 +1827,6 @@ static int saa_ioctl(struct video_device *dev, unsigned int cmd, void *arg) ...@@ -1827,11 +1827,6 @@ static int saa_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
return 0; return 0;
} }
static int saa_init_done(struct video_device *dev)
{
return 0;
}
static int saa_mmap(struct video_device *dev, const char *adr, static int saa_mmap(struct video_device *dev, const char *adr,
unsigned long size) unsigned long size)
{ {
...@@ -1993,20 +1988,15 @@ static void saa_close(struct video_device *dev) ...@@ -1993,20 +1988,15 @@ static void saa_close(struct video_device *dev)
/* template for video_device-structure */ /* template for video_device-structure */
static struct video_device saa_template = static struct video_device saa_template =
{ {
"SAA7146A", name: "SAA7146A",
VID_TYPE_CAPTURE | VID_TYPE_OVERLAY, type: VID_TYPE_CAPTURE | VID_TYPE_OVERLAY,
VID_HARDWARE_SAA7146, hardware: VID_HARDWARE_SAA7146,
saa_open, open: saa_open,
saa_close, close: saa_close,
saa_read, read: saa_read,
saa_write, write: saa_write,
NULL, /* poll */ ioctl: saa_ioctl,
saa_ioctl, mmap: saa_mmap,
saa_mmap,
saa_init_done,
NULL,
0,
0
}; };
static int configure_saa7146(struct pci_dev *dev, int num) static int configure_saa7146(struct pci_dev *dev, int num)
......
...@@ -224,20 +224,13 @@ static int vino_mmap(struct video_device *dev, const char *adr, ...@@ -224,20 +224,13 @@ static int vino_mmap(struct video_device *dev, const char *adr,
} }
static struct video_device vino_dev = { static struct video_device vino_dev = {
"Vino IndyCam/TV", name: "Vino IndyCam/TV",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_VINO, hardware: VID_HARDWARE_VINO,
vino_open, open: vino_open,
vino_close, close: vino_close,
NULL, /* vino_read */ ioctl: vino_ioctl,
NULL, /* vino_write */ mmap: vino_mmap,
NULL, /* vino_poll */
vino_ioctl,
vino_mmap,
NULL, /* vino_init */
NULL,
0,
0
}; };
int __init init_vino(struct video_device *dev) int __init init_vino(struct video_device *dev)
......
...@@ -1482,23 +1482,17 @@ int zoran_mmap(struct video_device* dev, const char* adr, unsigned long size) ...@@ -1482,23 +1482,17 @@ int zoran_mmap(struct video_device* dev, const char* adr, unsigned long size)
static struct video_device zr36120_template= static struct video_device zr36120_template=
{ {
"UNSET", name: "UNSET",
VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY, type: VID_TYPE_TUNER|VID_TYPE_CAPTURE|VID_TYPE_OVERLAY,
VID_HARDWARE_ZR36120, hardware: VID_HARDWARE_ZR36120,
open: zoran_open,
zoran_open, close: zoran_close,
zoran_close, read: zoran_read,
zoran_read, write: zoran_write,
zoran_write, poll: zoran_poll,
#if LINUX_VERSION_CODE >= 0x020100 ioctl: zoran_ioctl,
zoran_poll, /* poll */ mmap: zoran_mmap,
#endif minor: -1,
zoran_ioctl,
zoran_mmap,
NULL, /* initialize */
NULL,
0,
-1
}; };
static static
...@@ -1825,23 +1819,16 @@ int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg) ...@@ -1825,23 +1819,16 @@ int vbi_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
static struct video_device vbi_template= static struct video_device vbi_template=
{ {
"UNSET", name: "UNSET",
VID_TYPE_CAPTURE|VID_TYPE_TELETEXT, type: VID_TYPE_CAPTURE|VID_TYPE_TELETEXT,
VID_HARDWARE_ZR36120, hardware: VID_HARDWARE_ZR36120,
open: vbi_open,
vbi_open, close: vbi_close,
vbi_close, read: vbi_read,
vbi_read, write: zoran_write,
zoran_write, poll: vbi_poll,
#if LINUX_VERSION_CODE >= 0x020100 ioctl: vbi_ioctl,
vbi_poll, /* poll */ minor: -1,
#endif
vbi_ioctl,
NULL, /* no mmap */
NULL, /* no initialize */
NULL, /* priv */
0, /* busy */
-1 /* minor */
}; };
/* /*
......
...@@ -91,17 +91,12 @@ typedef struct ...@@ -91,17 +91,12 @@ typedef struct
static struct video_device usb_dsbr100_radio= static struct video_device usb_dsbr100_radio=
{ {
"D-Link DSB R-100 USB radio", name: "D-Link DSB R-100 USB radio",
VID_TYPE_TUNER, type: VID_TYPE_TUNER,
VID_HARDWARE_AZTECH, hardware: VID_HARDWARE_AZTECH,
usb_dsbr100_open, open: usb_dsbr100_open,
usb_dsbr100_close, close: usb_dsbr100_close,
NULL, /* Can't read (no capture ability) */ ioctl: usb_dsbr100_ioctl,
NULL, /* Can't write */
NULL, /* No poll */
usb_dsbr100_ioctl,
NULL,
NULL
}; };
static int users = 0; static int users = 0;
......
...@@ -2492,11 +2492,6 @@ static void ibmcam_close(struct video_device *dev) ...@@ -2492,11 +2492,6 @@ static void ibmcam_close(struct video_device *dev)
MOD_DEC_USE_COUNT; 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) static long ibmcam_write(struct video_device *dev, const char *buf, unsigned long count, int noblock)
{ {
return -EINVAL; return -EINVAL;
...@@ -2855,20 +2850,15 @@ static int ibmcam_mmap(struct video_device *dev, const char *adr, unsigned long ...@@ -2855,20 +2850,15 @@ static int ibmcam_mmap(struct video_device *dev, const char *adr, unsigned long
} }
static struct video_device ibmcam_template = { static struct video_device ibmcam_template = {
"CPiA USB Camera", name: "CPiA USB Camera",
VID_TYPE_CAPTURE, type: VID_TYPE_CAPTURE,
VID_HARDWARE_CPIA, hardware: VID_HARDWARE_CPIA,
ibmcam_open, open: ibmcam_open,
ibmcam_close, close: ibmcam_close,
ibmcam_read, read: ibmcam_read,
ibmcam_write, write: ibmcam_write,
NULL, ioctl: ibmcam_ioctl,
ibmcam_ioctl, mmap: ibmcam_mmap,
ibmcam_mmap,
ibmcam_init_done,
NULL,
0,
0
}; };
static void usb_ibmcam_configure_video(struct usb_ibmcam *ibmcam) static void usb_ibmcam_configure_video(struct usb_ibmcam *ibmcam)
......
...@@ -127,7 +127,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry, ...@@ -127,7 +127,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
dpnt = tmpname; dpnt = tmpname;
#ifdef CONFIG_JOLIET #ifdef CONFIG_JOLIET
} else if (dir->i_sb->u.isofs_sb.s_joliet_level) { } 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; dpnt = tmpname;
#endif #endif
} else if (dir->i_sb->u.isofs_sb.s_mapping == 'a') { } else if (dir->i_sb->u.isofs_sb.s_mapping == 'a') {
......
...@@ -30,6 +30,7 @@ extern void restore_fpu( struct task_struct *tsk ); ...@@ -30,6 +30,7 @@ extern void restore_fpu( struct task_struct *tsk );
#define clear_fpu( tsk ) do { \ #define clear_fpu( tsk ) do { \
if ( tsk->flags & PF_USEDFPU ) { \ if ( tsk->flags & PF_USEDFPU ) { \
asm volatile("fwait"); \
tsk->flags &= ~PF_USEDFPU; \ tsk->flags &= ~PF_USEDFPU; \
stts(); \ stts(); \
} \ } \
......
...@@ -87,6 +87,7 @@ extern struct cpuinfo_x86 cpu_data[]; ...@@ -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_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_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_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; extern char ignore_irq13;
......
...@@ -215,6 +215,7 @@ enum ...@@ -215,6 +215,7 @@ enum
{ {
ACPI_FACP = 1, ACPI_FACP = 1,
ACPI_DSDT, ACPI_DSDT,
ACPI_FACS,
ACPI_PM1_ENABLE, ACPI_PM1_ENABLE,
ACPI_GPE_ENABLE, ACPI_GPE_ENABLE,
ACPI_GPE_LEVEL, ACPI_GPE_LEVEL,
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
__u32 __x = (x); \ __u32 __x = (x); \
((__u32)( \ ((__u32)( \
(((__u32)(__x) & (__u32)0x00ff00ffUL) << 8) | \ (((__u32)(__x) & (__u32)0x00ff00ffUL) << 8) | \
(((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )) \ (((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )); \
}) })
#define ___constant_swahw32(x) \ #define ___constant_swahw32(x) \
......
...@@ -20,7 +20,7 @@ extern struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig); ...@@ -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) 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) static inline void bh_kunmap(struct buffer_head *bh)
......
...@@ -12,6 +12,8 @@ struct timespec { ...@@ -12,6 +12,8 @@ struct timespec {
}; };
#endif /* _STRUCT_TIMESPEC */ #endif /* _STRUCT_TIMESPEC */
#ifdef __KERNEL__
/* /*
* Change timeval to jiffies, trying to avoid the * Change timeval to jiffies, trying to avoid the
* most obvious overflows.. * most obvious overflows..
...@@ -80,6 +82,8 @@ mktime (unsigned int year, unsigned int mon, ...@@ -80,6 +82,8 @@ mktime (unsigned int year, unsigned int mon,
)*60 + sec; /* finally seconds */ )*60 + sec; /* finally seconds */
} }
#endif /* __KERNEL__ */
struct timeval { struct timeval {
time_t tv_sec; /* seconds */ time_t tv_sec; /* seconds */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment