hif/usb_api: remove dup code - usb_reg_out_patch
authorOleksij Rempel <linux@rempel-privat.de>
Fri, 27 Sep 2013 21:50:17 +0000 (23:50 +0200)
committerOleksij Rempel <linux@rempel-privat.de>
Fri, 27 Sep 2013 22:17:13 +0000 (00:17 +0200)
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
target_firmware/CMakeLists.txt
target_firmware/magpie_fw_dev/target/hif/k2_fw_usb_api.c
target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c [new file with mode: 0644]
target_firmware/magpie_fw_dev/target/init/app_start.c
target_firmware/magpie_fw_dev/target/rompatch/usb_api_patch.c

index 193399eae3aa4d21526aa04a1c27309cbe2fb04e..7d2664057dc51b5445451abb0ed86ef0503ce6ba 100644 (file)
@@ -27,6 +27,7 @@ SET(SOURCES
        magpie_fw_dev/target/buf_pool/buf_pool_static.c
        magpie_fw_dev/target/cmnos/dbg_api.c
        magpie_fw_dev/target/cmnos/cmnos_sflash.c
+       magpie_fw_dev/target/hif/usb_api_main_patch.c
        wlan/ah.c
        wlan/ah_osdep.c
        wlan/ar5416Phy.c
index 7d4c4fff0576f0083b557ad2c085e3af1ed773eb..4aceaef06573d83820816cec221f0672cea5c709 100755 (executable)
@@ -402,120 +402,6 @@ void _fw_usb_reset_fifo(void)
     A_UART_HWINIT((22*1000*1000), 19200);
 }
 
-void cold_reboot(void)
-{
-       A_PRINTF("Cold reboot initiated.");
-#if defined(PROJECT_MAGPIE)
-       HAL_WORD_REG_WRITE(WATCH_DOG_MAGIC_PATTERN_ADDR, 0);
-#elif defined(PROJECT_K2)
-       HAL_WORD_REG_WRITE(MAGPIE_REG_RST_STATUS_ADDR, 0);
-#endif /* #if defined(PROJECT_MAGPIE) */
-       A_USB_JUMP_BOOT();
-}
-
-/*
- * -- support more than 64 bytes command on ep4 -- 
- */
-void vUsb_Reg_Out_patch(void)
-{   
-    uint16_t usbfifolen;
-    uint16_t ii;
-    uint32_t ep4_data;
-    static volatile uint32_t *regaddr;    // = (volatile uint32_t *) ZM_CMD_BUFFER;
-    static uint16_t cmdLen;
-    static VBUF *buf;
-    BOOLEAN cmd_is_last = FALSE;
-    static BOOLEAN cmd_is_new = TRUE;
-
-    // get the size of this transcation
-    usbfifolen = USB_BYTE_REG_READ(ZM_EP4_BYTE_COUNT_LOW_OFFSET);
-    if (usbfifolen > 0x40) {
-        A_PRINTF("EP4 FIFO Bug? Buffer is too big: %x\n", usbfifolen);
-        cold_reboot();
-    }
-
-    // check is command is new
-    if( cmd_is_new ){
-
-        buf = usbFifoConf.get_command_buf();
-        cmdLen = 0;
-    
-        if( !buf )
-            goto ERR;
-    
-        // copy free, assignment buffer of the address
-        regaddr = (uint32_t *)buf->desc_list->buf_addr;
-
-        cmd_is_new = FALSE;
-    }
-    
-    // just in case, suppose should not happen
-    if( !buf )
-        goto ERR;
-    
-    // if size is smaller, this is the last command!
-    //
-    // zero-length supposed should be set through 0x27/bit7->0x19/bit4, not here
-    //
-    if( usbfifolen<bUSB_EP_MAX_PKT_SIZE_64 ) {
-        cmd_is_last = TRUE;
-    }
-    
-    // accumulate the size
-    cmdLen += usbfifolen;
-    if (cmdLen > buf->desc_list->buf_size) {
-        A_PRINTF("Data length on EP4 FIFO is bigger as allocated buffer data!"
-                 " Drop it!\n");
-        goto ERR;
-    }
-    
-    // round it to alignment
-    if(usbfifolen % 4)
-        usbfifolen = (usbfifolen >> 2) + 1;
-    else
-        usbfifolen = usbfifolen >> 2;
-    
-//    A_PRINTF("copy data out from fifo to - %p\n\r", regaddr);
-    // retrieve the data from fifo
-    for(ii = 0; ii < usbfifolen; ii++)
-    {
-        ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);   // read fifo data out
-        *regaddr = ep4_data;
-        regaddr++;
-    }
-    
-    // if this is the last command, callback to HTC
-    if (  cmd_is_last  )
-    {
-        buf->desc_list->next_desc = NULL;
-        buf->desc_list->data_offset = 0;
-        buf->desc_list->data_size = cmdLen;
-        buf->desc_list->control = 0;
-        buf->next_buf = NULL;
-        buf->buf_length = cmdLen;
-    
-        usbFifoConf.recv_command(buf);
-
-        cmd_is_new = TRUE;
-    }
-
-    goto DONE;
-ERR:
-//    we might get no command buffer here?
-//    but if we return here, the ep4 fifo will be lock out,
-//    so that we still read them out but just drop it ?
-    for(ii = 0; ii < usbfifolen; ii++)
-    {
-        ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);   // read fifo data out
-    }
-
-DONE:
-    //mUSB_STATUS_IN_INT_ENABLE();
-    ;
-}
-
-
-
 /* 
  *  -- usb1.1 ep6 fix --
  */
diff --git a/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c b/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c
new file mode 100644 (file)
index 0000000..5daf176
--- /dev/null
@@ -0,0 +1,127 @@
+
+#include "usb_defs.h"
+#include "usb_type.h"
+#include "usb_pre.h"
+#include "usb_extr.h"
+#include "usb_std.h"
+#include "reg_defs.h"
+#include "athos_api.h"
+#include "usbfifo_api.h"
+
+#include "sys_cfg.h"
+
+#define USB_EP4_MAX_PKT_SIZE bUSB_EP_MAX_PKT_SIZE_64
+#define USB_EP3_MAX_PKT_SIZE bUSB_EP_MAX_PKT_SIZE_64
+
+extern USB_FIFO_CONFIG usbFifoConf;
+
+void cold_reboot(void)
+{
+       A_PRINTF("Cold reboot initiated.");
+#if defined(PROJECT_MAGPIE)
+       HAL_WORD_REG_WRITE(WATCH_DOG_MAGIC_PATTERN_ADDR, 0);
+#elif defined(PROJECT_K2)
+       HAL_WORD_REG_WRITE(MAGPIE_REG_RST_STATUS_ADDR, 0);
+#endif /* #if defined(PROJECT_MAGPIE) */
+       A_USB_JUMP_BOOT();
+}
+
+/*
+ * support more than 64 bytes command on ep4 
+ */
+void usb_reg_out_patch(void)
+{
+       uint16_t usbfifolen;
+       uint16_t ii;
+       uint32_t ep4_data;
+       static volatile uint32_t *regaddr;
+       static uint16_t cmd_len;
+       static VBUF *buf;
+       BOOLEAN cmd_is_last = FALSE;
+       static BOOLEAN cmd_is_new = TRUE;
+
+       /* get the size of this transcation */
+       usbfifolen = USB_BYTE_REG_READ(ZM_EP4_BYTE_COUNT_LOW_OFFSET);
+
+       if (usbfifolen > USB_EP4_MAX_PKT_SIZE) {
+               A_PRINTF("EP4 FIFO Bug? Buffer is too big: %x\n", usbfifolen);
+               cold_reboot();
+       }
+
+       /* check is command is new */
+       if(cmd_is_new) {
+
+               buf = usbFifoConf.get_command_buf();
+               cmd_len = 0;
+
+               if(!buf) {
+                       A_PRINTF("%s: Filed to get new buffer.\n", __func__);
+                       goto err;
+               }
+
+               /* copy free, assignment buffer of the address */
+               regaddr = (uint32_t *)buf->desc_list->buf_addr;
+
+               cmd_is_new = FALSE;
+       }
+
+       /* just in case, suppose should not happen */
+       if(!buf)
+               goto err;
+
+       /* if size is smaller, this is the last command!
+        * zero-length supposed should be set through 0x27/bit7->0x19/bit4, not here
+        */
+       if(usbfifolen < USB_EP4_MAX_PKT_SIZE)
+               cmd_is_last = TRUE;
+
+       /* accumulate the size */
+       cmd_len += usbfifolen;
+
+       if (cmd_len > buf->desc_list->buf_size) {
+               A_PRINTF("%s: Data length on EP4 FIFO is bigger as "
+                        "allocated buffer data! Drop it!\n", __func__);
+               goto err;
+       }
+
+       /* round it to alignment */
+       if(usbfifolen % 4)
+               usbfifolen = (usbfifolen >> 2) + 1;
+       else
+               usbfifolen = usbfifolen >> 2;
+
+       /* retrieve the data from fifo */
+       for(ii = 0; ii < usbfifolen; ii++) {
+               /* read fifo data out */
+               ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);
+               *regaddr = ep4_data;
+               regaddr++;
+       }
+
+       /* if this is the last command, callback to HTC */
+       if (cmd_is_last) {
+               buf->desc_list->next_desc = NULL;
+               buf->desc_list->data_offset = 0;
+               buf->desc_list->data_size = cmd_len;
+               buf->desc_list->control = 0;
+               buf->next_buf = NULL;
+               buf->buf_length = cmd_len;
+
+               usbFifoConf.recv_command(buf);
+
+               cmd_is_new = TRUE;
+       }
+
+       goto done;
+err:
+       /* we might get no command buffer here?
+        * but if we return here, the ep4 fifo will be lock out,
+        * so that we still read them out but just drop it? */
+       for(ii = 0; ii < usbfifolen; ii++)
+               ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);
+
+done:
+       /* mUSB_STATUS_IN_INT_ENABLE(); */
+       ;
+}
+
index 4b551521478b1ef15fe56bf85b17ec1d1bc7a754..39898c8b6b808cd28a230e887cf967deb9c8198b 100644 (file)
@@ -44,7 +44,7 @@
 #define ALLOCRAM_SIZE        ( SYS_RAM_SZIE - ( ALLOCRAM_START - SYS_D_RAM_REGION_0_BASE) - SYS_D_RAM_STACK_SIZE)
 
 // support for more than 64 bytes on command pipe
-extern void vUsb_Reg_Out_patch(void);
+extern void usb_reg_out_patch(void);
 extern int _HIFusb_get_max_msg_len_patch(hif_handle_t handle, int pipe);
 extern void _HIFusb_isr_handler_patch(hif_handle_t h);
 extern BOOLEAN bSet_configuration_patch(void);
@@ -187,7 +187,7 @@ void app_start()
 
        if( hostif == HIF_USB ) {
                _indir_tbl.hif._get_max_msg_len = _HIFusb_get_max_msg_len_patch;
-               _indir_tbl.cmnos.usb._usb_reg_out = vUsb_Reg_Out_patch;
+               _indir_tbl.cmnos.usb._usb_reg_out = usb_reg_out_patch;
                _indir_tbl.hif._isr_handler = _HIFusb_isr_handler_patch;
                _indir_tbl.cmnos.usb._usb_set_configuration = bSet_configuration_patch;
                _indir_tbl.cmnos.usb._usb_status_in = vUsb_Status_In_patch;
index 542a715dbe021e77c53fdae41f12102a07bce498..d952c7caa34f6a54a4ddef4759aabeaf3f6cd036 100755 (executable)
@@ -118,96 +118,6 @@ void _fw_usbfifo_init(USB_FIFO_CONFIG *pConfig)
        usbFifoConf.send_event_done = pConfig->send_event_done;
 }
 
-/*
- * -- support more than 64 bytes command on ep4 -- 
- */
-void vUsb_Reg_Out_patch(void)
-{   
-       uint16_t usbfifolen;
-       uint16_t ii;
-       uint32_t ep4_data;
-       static volatile uint32_t *regaddr;
-       static uint16_t cmdLen;
-       static VBUF *buf;
-       BOOLEAN cmd_is_last = FALSE;
-       static BOOLEAN cmd_is_new = TRUE;
-
-       // get the size of this transcation
-       usbfifolen = USB_BYTE_REG_READ(ZM_EP4_BYTE_COUNT_LOW_OFFSET);
-
-       // check is command is new
-       if( cmd_is_new ){
-
-               buf = usbFifoConf.get_command_buf();
-               cmdLen = 0;
-
-               if( !buf )
-                       goto ERR;
-
-               // copy free, assignment buffer of the address
-               regaddr = (uint32_t *)buf->desc_list->buf_addr;
-
-               cmd_is_new = FALSE;
-       }
-
-       // just in case, suppose should not happen
-       if( !buf )
-               goto ERR;
-
-       // if size is smaller, this is the last command!
-       // zero-length supposed should be set through 0x27/bit7->0x19/bit4, not here
-       if( usbfifolen<64 ) {
-               cmd_is_last = TRUE;
-       }
-
-       // accumulate the size
-       cmdLen += usbfifolen;
-
-       // round it to alignment
-       if(usbfifolen % 4)
-               usbfifolen = (usbfifolen >> 2) + 1;
-       else
-               usbfifolen = usbfifolen >> 2;
-
-       // retrieve the data from fifo
-       for(ii = 0; ii < usbfifolen; ii++)
-       {
-               ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);   // read fifo data out
-               *regaddr = ep4_data;
-               regaddr++;
-       }
-
-       // if this is the last command, callback to HTC
-       if (  cmd_is_last  )
-       {
-               buf->desc_list->next_desc = NULL;
-               buf->desc_list->data_offset = 0;
-               buf->desc_list->data_size = cmdLen;
-               buf->desc_list->control = 0;
-               buf->next_buf = NULL;
-               buf->buf_length = cmdLen;
-
-               usbFifoConf.recv_command(buf);
-
-               cmd_is_new = TRUE;
-       }
-
-       goto DONE;
-ERR:
-       //    we might get no command buffer here?
-       //    but if we return here, the ep4 fifo will be lock out,
-       //    so that we still read them out but just drop it ?
-       for(ii = 0; ii < usbfifolen; ii++)
-       {
-               ep4_data = USB_WORD_REG_READ(ZM_EP4_DATA_OFFSET);   // read fifo data out
-       }
-
-DONE:
-       //mUSB_STATUS_IN_INT_ENABLE();
-       ;
-}
-
-
 /* 
  *  -- usb1.1 ep6 fix --
  */