diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2005-10-19 12:52:02 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2005-10-28 19:47:49 -0400 |
commit | 478a3bab8c87a9ba4a4ba338314e32bb0c378e62 (patch) | |
tree | 37e07a18952706e76b36c782ac095c17b0bc8e11 | |
parent | 46f116eab81b21c6ae8c4f169498c632b1f94bf1 (diff) |
[PATCH] USB: Always do usb-handoff
This revised patch (as586b) makes usb-handoff permanently true and no
longer a kernel boot parameter. It also removes the piix3_usb quirk code;
that was nothing more than an early version of the USB handoff code
(written at a time when Intel's PIIX3 was about the only motherboard with
USB support). And it adds identifiers for the three PCI USB controller
classes to pci_ids.h.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | Documentation/kernel-parameters.txt | 2 | ||||
-rw-r--r-- | drivers/usb/host/pci-quirks.c | 46 | ||||
-rw-r--r-- | include/asm-i386/mach-summit/mach_mpparse.h | 3 | ||||
-rw-r--r-- | include/linux/pci_ids.h | 3 |
4 files changed, 6 insertions, 48 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 971589a9752d..90766b75d1b7 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1517,8 +1517,6 @@ running once the system is up. | |||
1517 | uart6850= [HW,OSS] | 1517 | uart6850= [HW,OSS] |
1518 | Format: <io>,<irq> | 1518 | Format: <io>,<irq> |
1519 | 1519 | ||
1520 | usb-handoff [HW] Enable early USB BIOS -> OS handoff | ||
1521 | |||
1522 | usbhid.mousepoll= | 1520 | usbhid.mousepoll= |
1523 | [USBHID] The interval which mice are to be polled at. | 1521 | [USBHID] The interval which mice are to be polled at. |
1524 | 1522 | ||
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index f7411ca48835..b7fd3f644e1e 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
@@ -23,33 +23,6 @@ | |||
23 | #include <linux/acpi.h> | 23 | #include <linux/acpi.h> |
24 | 24 | ||
25 | 25 | ||
26 | /* | ||
27 | * PIIX3 USB: We have to disable USB interrupts that are | ||
28 | * hardwired to PIRQD# and may be shared with an | ||
29 | * external device. | ||
30 | * | ||
31 | * Legacy Support Register (LEGSUP): | ||
32 | * bit13: USB PIRQ Enable (USBPIRQDEN), | ||
33 | * bit4: Trap/SMI On IRQ Enable (USBSMIEN). | ||
34 | * | ||
35 | * We mask out all r/wc bits, too. | ||
36 | */ | ||
37 | static void __devinit quirk_piix3_usb(struct pci_dev *dev) | ||
38 | { | ||
39 | u16 legsup; | ||
40 | |||
41 | pci_read_config_word(dev, 0xc0, &legsup); | ||
42 | legsup &= 0x50ef; | ||
43 | pci_write_config_word(dev, 0xc0, legsup); | ||
44 | } | ||
45 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371SB_2, quirk_piix3_usb ); | ||
46 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, quirk_piix3_usb ); | ||
47 | |||
48 | |||
49 | /* FIXME these should be the guts of hcd->reset() methods; resolve all | ||
50 | * the differences between this version and the HCD's version. | ||
51 | */ | ||
52 | |||
53 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ | 26 | #define UHCI_USBLEGSUP 0xc0 /* legacy support */ |
54 | #define UHCI_USBCMD 0 /* command register */ | 27 | #define UHCI_USBCMD 0 /* command register */ |
55 | #define UHCI_USBINTR 4 /* interrupt register */ | 28 | #define UHCI_USBINTR 4 /* interrupt register */ |
@@ -83,13 +56,6 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_2, qui | |||
83 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ | 56 | #define EHCI_USBLEGCTLSTS 4 /* legacy control/status */ |
84 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ | 57 | #define EHCI_USBLEGCTLSTS_SOOE (1 << 13) /* SMI on ownership change */ |
85 | 58 | ||
86 | int usb_early_handoff __devinitdata = 0; | ||
87 | static int __init usb_handoff_early(char *str) | ||
88 | { | ||
89 | usb_early_handoff = 1; | ||
90 | return 0; | ||
91 | } | ||
92 | __setup("usb-handoff", usb_handoff_early); | ||
93 | 59 | ||
94 | /* | 60 | /* |
95 | * Make sure the controller is completely inactive, unable to | 61 | * Make sure the controller is completely inactive, unable to |
@@ -320,17 +286,11 @@ static void __devinit quirk_usb_disable_ehci(struct pci_dev *pdev) | |||
320 | 286 | ||
321 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) | 287 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) |
322 | { | 288 | { |
323 | if (!usb_early_handoff) | 289 | if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI) |
324 | return; | ||
325 | |||
326 | if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x00)) { /* UHCI */ | ||
327 | quirk_usb_handoff_uhci(pdev); | 290 | quirk_usb_handoff_uhci(pdev); |
328 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x10)) { /* OHCI */ | 291 | else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI) |
329 | quirk_usb_handoff_ohci(pdev); | 292 | quirk_usb_handoff_ohci(pdev); |
330 | } else if (pdev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x20)) { /* EHCI */ | 293 | else if (pdev->class == PCI_CLASS_SERIAL_USB_EHCI) |
331 | quirk_usb_disable_ehci(pdev); | 294 | quirk_usb_disable_ehci(pdev); |
332 | } | ||
333 | |||
334 | return; | ||
335 | } | 295 | } |
336 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); | 296 | DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_usb_early_handoff); |
diff --git a/include/asm-i386/mach-summit/mach_mpparse.h b/include/asm-i386/mach-summit/mach_mpparse.h index 2b9e6d55bef1..1cce2b924a80 100644 --- a/include/asm-i386/mach-summit/mach_mpparse.h +++ b/include/asm-i386/mach-summit/mach_mpparse.h | |||
@@ -22,7 +22,6 @@ static inline void mpc_oem_pci_bus(struct mpc_config_bus *m, | |||
22 | { | 22 | { |
23 | } | 23 | } |
24 | 24 | ||
25 | extern int usb_early_handoff; | ||
26 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | 25 | static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, |
27 | char *productid) | 26 | char *productid) |
28 | { | 27 | { |
@@ -32,7 +31,6 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |||
32 | || !strncmp(productid, "RUTHLESS SMP", 12))){ | 31 | || !strncmp(productid, "RUTHLESS SMP", 12))){ |
33 | use_cyclone = 1; /*enable cyclone-timer*/ | 32 | use_cyclone = 1; /*enable cyclone-timer*/ |
34 | setup_summit(); | 33 | setup_summit(); |
35 | usb_early_handoff = 1; | ||
36 | return 1; | 34 | return 1; |
37 | } | 35 | } |
38 | return 0; | 36 | return 0; |
@@ -46,7 +44,6 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |||
46 | || !strncmp(oem_table_id, "EXA", 3))){ | 44 | || !strncmp(oem_table_id, "EXA", 3))){ |
47 | use_cyclone = 1; /*enable cyclone-timer*/ | 45 | use_cyclone = 1; /*enable cyclone-timer*/ |
48 | setup_summit(); | 46 | setup_summit(); |
49 | usb_early_handoff = 1; | ||
50 | return 1; | 47 | return 1; |
51 | } | 48 | } |
52 | return 0; | 49 | return 0; |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 7d300f7469e3..467a096c3b81 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
@@ -96,6 +96,9 @@ | |||
96 | #define PCI_CLASS_SERIAL_ACCESS 0x0c01 | 96 | #define PCI_CLASS_SERIAL_ACCESS 0x0c01 |
97 | #define PCI_CLASS_SERIAL_SSA 0x0c02 | 97 | #define PCI_CLASS_SERIAL_SSA 0x0c02 |
98 | #define PCI_CLASS_SERIAL_USB 0x0c03 | 98 | #define PCI_CLASS_SERIAL_USB 0x0c03 |
99 | #define PCI_CLASS_SERIAL_USB_UHCI 0x0c0300 | ||
100 | #define PCI_CLASS_SERIAL_USB_OHCI 0x0c0310 | ||
101 | #define PCI_CLASS_SERIAL_USB_EHCI 0x0c0320 | ||
99 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 | 102 | #define PCI_CLASS_SERIAL_FIBER 0x0c04 |
100 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 | 103 | #define PCI_CLASS_SERIAL_SMBUS 0x0c05 |
101 | 104 | ||