]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Rename usbserial to usbserial_ftdi
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 18 Jul 2010 14:31:42 +0000 (16:31 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 18 Jul 2010 14:31:42 +0000 (16:31 +0200)
bus/usb/serial/ftdi.c [moved from term/usbserial.c with 90% similarity]
bus/usb/usb.c
conf/i386-pc.rmk

similarity index 90%
rename from term/usbserial.c
rename to bus/usb/serial/ftdi.c
index b27df8ae2e0dd9b9287f0d6a656cbeb972f6214f..c7a7554eed974bda39bb8f113cdfa1fad21cf263 100644 (file)
@@ -172,13 +172,22 @@ static struct grub_serial_driver grub_usbserial_driver =
     .put = usbserial_hw_put
   };
 
+static const struct 
+{
+  grub_uint16_t vendor, product;
+} products[] =
+  {
+    {0x0403, 0x6001} /* QEMU virtual USBserial.  */
+  };
+
 static int
-grub_usbserial_attach (grub_usb_device_t usbdev, int configno, int interfno)
+grub_ftdi_attach (grub_usb_device_t usbdev, int configno, int interfno)
 {
   static struct grub_serial_port *port;
   int j;
-  struct grub_usb_desc_if *interf
-    = usbdev->config[configno].interf[interfno].descif;
+  struct grub_usb_desc_if *interf;
+
+  interf = usbdev->config[configno].interf[interfno].descif;
 
   port = grub_malloc (sizeof (*port));
   if (!port)
@@ -226,13 +235,28 @@ grub_usbserial_attach (grub_usb_device_t usbdev, int configno, int interfno)
   return 1;
 }
 
+static int
+grub_usbserial_attach (grub_usb_device_t usbdev, int configno, int interfno)
+{
+  unsigned j;
+
+  for (j = 0; j < ARRAY_SIZE (products); j++)
+    if (usbdev->descdev.vendorid == products[j].vendor
+       && usbdev->descdev.prodid == products[j].product)
+      break;
+  if (j == ARRAY_SIZE (products))
+    return 0;
+
+  return grub_ftdi_attach (usbdev, configno, interfno);
+}
+
 struct grub_usb_attach_desc attach_hook =
 {
   .class = 0xff,
   .hook = grub_usbserial_attach
 };
 
-GRUB_MOD_INIT(usbserial)
+GRUB_MOD_INIT(usbserial_ftdi)
 {
   grub_usb_register_attach_hook_class (&attach_hook);
 }
index ba052e5eeff80756d1d0a8ff80694f4d7a67f32f..b49caacdb3d8fe4d4d78ac99db38263a5cb0bde6 100644 (file)
@@ -270,7 +270,8 @@ void grub_usb_device_attach (grub_usb_device_t dev)
          grub_dl_load ("usb_keyboard");
          break;
        case 0xff:
-         grub_dl_load ("usbserial");
+         /* FIXME: don't load useless modules.  */
+         grub_dl_load ("usbserial_ftdi");
          break;
        }
     }
index e1cfe1468df6102fdbf09ddb46a1ebe2200a164f..2e95133f3fc4c47024972c6c15f7090549929a38 100644 (file)
@@ -196,10 +196,10 @@ usb_mod_CFLAGS = $(COMMON_CFLAGS)
 usb_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # For serial.mod.
-pkglib_MODULES += usbserial.mod
-usbserial_mod_SOURCES = term/usbserial.c
-usbserial_mod_CFLAGS = $(COMMON_CFLAGS)
-usbserial_mod_LDFLAGS = $(COMMON_LDFLAGS)
+pkglib_MODULES += usbserial_ftdi.mod
+usbserial_ftdi_mod_SOURCES = bus/usb/serial/ftdi.c
+usbserial_ftdi_mod_CFLAGS = $(COMMON_CFLAGS)
+usbserial_ftdi_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
 # For usbtest.mod
 usbtest_mod_SOURCES = commands/usbtest.c