Sfoglia il codice sorgente

more complex but faster

Keir Fraser 2 anni fa
parent
commit
bf7823e99a
6 ha cambiato i file con 28 aggiunte e 22 eliminazioni
  1. 3 0
      src/usb/Makefile
  2. 1 0
      src/usb/defs.h
  3. 1 1
      src/usb/hw_at32f4.c
  4. 22 12
      src/usb/hw_f1.c
  5. 0 8
      src/usb/hw_usbd.c
  6. 1 1
      src/usb/hw_usbd_at32f4.c

+ 3 - 0
src/usb/Makefile

@@ -2,6 +2,9 @@ OBJS += config.o
 OBJS += core.o
 OBJS += cdc_acm.o
 
+ifneq ($(bootloader),y)
+OBJS-$(stm32f1) += hw_usbd_at32f4.o
+endif
 OBJS-$(stm32f1) += hw_usbd.o
 OBJS-$(stm32f1) += hw_f1.o
 

+ 1 - 0
src/usb/defs.h

@@ -104,6 +104,7 @@ struct usb_driver {
 
 extern const struct usb_driver dwc_otg;
 extern const struct usb_driver usbd;
+extern const struct usb_driver usbd_at32f4;
 
 #define WARN printk
 

+ 1 - 1
src/usb/hw_at32f4.c

@@ -18,7 +18,7 @@ void hw_usb_init(void)
     switch (at32f4_series) {
 
     case AT32F403:
-        drv = &usbd;
+        drv = &usbd_at32f4;
         break;
 
     case AT32F415:

+ 22 - 12
src/usb/hw_f1.c

@@ -9,9 +9,19 @@
  * See the file COPYING for more details, or visit <http://unlicense.org>.
  */
 
+static const struct usb_driver *drv = &usbd;
+
 void hw_usb_init(void)
 {
-    usbd.init();
+#if !defined(BOOTLOADER)
+    /* We detect an Artery MCU by presence of Cortex-M4 CPUID. Cortex-M4:
+     * 41xfc24x ; Cortex-M3: 41xfc23x */
+    bool_t is_artery_mcu = ((scb->cpuid >> 4) & 0xf) == 4;
+    if (is_artery_mcu)
+        drv = &usbd_at32f4;
+#endif
+
+    drv->init();
 
     /* Indicate we are connected by pulling up D+. */
     gpio_configure_pin(gpioa, 0, GPO_pushpull(_2MHz, HIGH));
@@ -21,57 +31,57 @@ void hw_usb_deinit(void)
 {
     gpio_configure_pin(gpioa, 0, GPI_floating);
 
-    usbd.deinit();
+    drv->deinit();
 }
 
 bool_t hw_has_highspeed(void)
 {
-    return usbd.has_highspeed();
+    return drv->has_highspeed();
 }
 
 bool_t usb_is_highspeed(void)
 {
-    return usbd.is_highspeed();
+    return drv->is_highspeed();
 }
 
 int ep_rx_ready(uint8_t epnr)
 {
-    return usbd.ep_rx_ready(epnr);
+    return drv->ep_rx_ready(epnr);
 }
 
 bool_t ep_tx_ready(uint8_t epnr)
 {
-    return usbd.ep_tx_ready(epnr);
+    return drv->ep_tx_ready(epnr);
 }
  
 void usb_read(uint8_t epnr, void *buf, uint32_t len)
 {
-    usbd.read(epnr, buf, len);
+    drv->read(epnr, buf, len);
 }
 
 void usb_write(uint8_t epnr, const void *buf, uint32_t len)
 {
-    usbd.write(epnr, buf, len);
+    drv->write(epnr, buf, len);
 }
  
 void usb_stall(uint8_t epnr)
 {
-    usbd.stall(epnr);
+    drv->stall(epnr);
 }
 
 void usb_configure_ep(uint8_t epnr, uint8_t type, uint32_t size)
 {
-    usbd.configure_ep(epnr, type, size);
+    drv->configure_ep(epnr, type, size);
 }
 
 void usb_setaddr(uint8_t addr)
 {
-    usbd.setaddr(addr);
+    drv->setaddr(addr);
 }
 
 void usb_process(void)
 {
-    usbd.process();
+    drv->process();
 }
 
 /*

+ 0 - 8
src/usb/hw_usbd.c

@@ -221,14 +221,6 @@ static void usbd_configure_ep(uint8_t ep, uint8_t type, uint32_t size)
 
 #else /* !defined(BOOTLOADER) */
 
-    if (type == EPT_DBLBUF) {
-        /* We detect an Artery MCU by presence of Cortex-M4 CPUID. Cortex-M4:
-         * 41xfc24x ; Cortex-M3: 41xfc23x */
-        bool_t is_artery_mcu = ((scb->cpuid >> 4) & 0xf) == 4;
-        if (is_artery_mcu)
-            type = EPT_BULK;
-    }
-
     dbl_buf = (type == EPT_DBLBUF);
     if (dbl_buf) {
         ASSERT(ep != 0);

+ 1 - 1
src/usb/hw_usbd_at32f4.c

@@ -515,7 +515,7 @@ static void IRQ_USB_HP(void)
     }
 }
 
-const struct usb_driver usbd = {
+const struct usb_driver usbd_at32f4 = {
     .init = usbd_init,
     .deinit = usbd_deinit,
     .process = usbd_process,