From fa5db0b1207973040342f0fa9f4f69172388f05a Mon Sep 17 00:00:00 2001 From: proski Date: Mon, 8 Jun 2009 20:20:13 +0000 Subject: [PATCH] 2009-06-08 Oliver Henshaw * bus/usb/ohci.c (grub_ohci_pci_iter): Check that programming interface is OHCI. Add grub_dprintf for symmetry with bus/usb/uhci.c. * bus/usb/uhci.c (grub_uhci_pci_iter): Check that programming interface is UHCI. Add interf variable for programming interface. Print interface with class/subclass. --- ChangeLog | 7 +++++++ bus/usb/ohci.c | 5 ++++- bus/usb/uhci.c | 8 +++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index c6a355f1f..8ddd746bd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2009-06-08 Oliver Henshaw + * bus/usb/ohci.c (grub_ohci_pci_iter): Check that programming + interface is OHCI. Add grub_dprintf for symmetry with + bus/usb/uhci.c. + * bus/usb/uhci.c (grub_uhci_pci_iter): Check that programming + interface is UHCI. Add interf variable for programming + interface. Print interface with class/subclass. + * bus/usb/ohci.c: Set interf with correct field. * bus/usb/uhci.c: Remove unneeded doubled lines. diff --git a/bus/usb/ohci.c b/bus/usb/ohci.c index 180f4dd41..146862bde 100644 --- a/bus/usb/ohci.c +++ b/bus/usb/ohci.c @@ -133,7 +133,7 @@ grub_ohci_pci_iter (int bus, int device, int func, class >>= 24; /* If this is not an OHCI controller, just return. */ - if (class != 0x0c || subclass != 0x03) + if (class != 0x0c || subclass != 0x03 || interf != 0x10) return 0; /* Determine IO base address. */ @@ -159,6 +159,9 @@ grub_ohci_pci_iter (int bus, int device, int func, /* Reserve memory for the HCCA. */ o->hcca = (struct grub_ohci_hcca *) grub_memalign (256, 256); + grub_dprintf ("ohci", "class=0x%02x 0x%02x interface 0x%02x base=%p\n", + class, subclass, interf, o->iobase); + /* Check if the OHCI revision is actually 1.0 as supported. */ revision = grub_ohci_readreg32 (o, GRUB_OHCI_REG_REVISION); grub_dprintf ("ohci", "OHCI revision=0x%02x\n", revision & 0xFF); diff --git a/bus/usb/uhci.c b/bus/usb/uhci.c index b9d63eba7..f59d26b43 100644 --- a/bus/usb/uhci.c +++ b/bus/usb/uhci.c @@ -143,6 +143,7 @@ grub_uhci_pci_iter (int bus, int device, int func, { grub_uint32_t class; grub_uint32_t subclass; + grub_uint32_t interf; grub_uint32_t base; grub_uint32_t fp; grub_pci_address_t addr; @@ -152,11 +153,12 @@ grub_uhci_pci_iter (int bus, int device, int func, addr = grub_pci_make_address (bus, device, func, 2); class = grub_pci_read (addr); + interf = (class >> 8) & 0xFF; subclass = (class >> 16) & 0xFF; class >>= 24; /* If this is not an UHCI controller, just return. */ - if (class != 0x0c || subclass != 0x03) + if (class != 0x0c || subclass != 0x03 || interf != 0x00) return 0; /* Determine IO base address. */ @@ -177,8 +179,8 @@ grub_uhci_pci_iter (int bus, int device, int func, u->framelist = 0; u->qh = 0; u->td = 0; - grub_dprintf ("uhci", "class=0x%02x 0x%02x base=0x%x\n", - class, subclass, u->iobase); + grub_dprintf ("uhci", "class=0x%02x 0x%02x interface 0x%02x base=0x%x\n", + class, subclass, interf, u->iobase); /* Reserve a page for the frame list. */ u->framelist = grub_memalign (4096, 4096);