hif/usb_api: remove dup code - usb_reg_out_patch
[open-ath9k-htc-firmware.git] / target_firmware / magpie_fw_dev / target / hif / k2_fw_usb_api.c
index 82756fabce7c716567b80719dd123dc50a418db5..4aceaef06573d83820816cec221f0672cea5c709 100755 (executable)
@@ -144,7 +144,7 @@ void _fw_usb_suspend_reboot()
                 
                //set all GPIO to input
         gpio_in = HAL_WORD_REG_READ(0x1000404c);
-        HAL_WORD_REG_WRITE(0x100404c, 0x0);
+        HAL_WORD_REG_WRITE(0x1000404c, 0x0);
                 
                //set PU/PD for all GPIO except two UART pins
         pupd = HAL_WORD_REG_READ(0x10004088);
@@ -197,6 +197,7 @@ void _fw_usb_suspend_reboot()
         HAL_WORD_REG_WRITE( MAGPIE_REG_RST_PWDN_CTRL_ADDR, (BIT1) );
         HAL_WORD_REG_WRITE( MAGPIE_REG_RST_PWDN_CTRL_ADDR, (HAL_WORD_REG_READ(MAGPIE_REG_RST_PWDN_CTRL_ADDR)|BIT0));
         HAL_WORD_REG_WRITE( MAGPIE_REG_RST_PWDN_CTRL_ADDR, 0x0 );
+       A_DELAY_USECS(1000);
     }
 
     //A_PRINTF("reg(0x10020)=(%x)\n", HAL_WORD_REG_READ(0x10020));
@@ -353,7 +354,7 @@ void _fw_usb_reset_fifo(void)
     volatile uint32_t   *reg_data;
 
     HAL_BYTE_REG_WRITE(0x100ae, (HAL_BYTE_REG_READ(0x100ae)|0x10));
-    HAL_BYTE_REG_WRITE(0x100ae, (HAL_BYTE_REG_READ(0x100af)|0x10));
+    HAL_BYTE_REG_WRITE(0x100af, (HAL_BYTE_REG_READ(0x100af)|0x10));
 
     // disable ep3 int enable, so that resume back won't send wdt magic pattern out!!!
     mUSB_STATUS_IN_INT_DISABLE();
@@ -401,100 +402,6 @@ void _fw_usb_reset_fifo(void)
     A_UART_HWINIT((22*1000*1000), 19200);
 }
 
-/*
- * -- 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);
-
-    // 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;
-    
-    // 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 --
  */
@@ -622,7 +529,7 @@ void vUsb_Status_In_patch(void)
         evntbuf = usbFifoConf.get_event_buf();
         if ( evntbuf != NULL )
         {
-            regaddr = VBUF_GET_DATA_ADDR(evntbuf);
+           regaddr = (u32_t *)VBUF_GET_DATA_ADDR(evntbuf);
             mBufLen = evntbuf->buf_length;
         }
         else
@@ -694,13 +601,18 @@ ERR_DONE:
     ;
 }
 
+extern uint16_t *u8UsbDeviceDescriptor;
 extern uint16_t *u8ConfigDescriptorEX;
 extern uint16_t *pu8DescriptorEX;
 extern uint16_t u16TxRxCounter;
 extern BOOLEAN bGet_descriptor(void);
 
+uint16_t DeviceDescriptorPatch[9];
 uint16_t ConfigDescriptorPatch[30];
 
+
+#define BCD_DEVICE                 6
+#define BCD_DEVICE_FW_SIGNATURE            0xffff
 #define EP3_TRANSFER_TYPE_OFFSET    17
 #define EP3_INT_INTERVAL            19
 #define EP4_TRANSFER_TYPE_OFFSET    21
@@ -708,19 +620,23 @@ uint16_t ConfigDescriptorPatch[30];
 
 BOOLEAN bGet_descriptor_patch(void)
 {
-    if (mDEV_REQ_VALUE_HIGH() == 2) {
-        uint8_t *p = (uint8_t *)u8ConfigDescriptorEX;
+    int i;
+    switch (mDEV_REQ_VALUE_HIGH()) {
+    case 1:
+        ath_hal_memcpy(DeviceDescriptorPatch,
+            u8UsbDeviceDescriptor, sizeof(DeviceDescriptorPatch));
 
-        /* Copy ConfigDescriptor */
-        memcpy(ConfigDescriptorPatch, p, sizeof(ConfigDescriptorPatch));
+        DeviceDescriptorPatch[BCD_DEVICE] = BCD_DEVICE_FW_SIGNATURE;
 
-        p = (uint8_t *)ConfigDescriptorPatch;
+        pu8DescriptorEX = DeviceDescriptorPatch;
+        u16TxRxCounter = mTABLE_LEN(DeviceDescriptorPatch[0]);
+        break;
+    case 2:
+        /* Copy ConfigDescriptor */
+       ath_hal_memcpy(ConfigDescriptorPatch,
+            u8ConfigDescriptorEX, sizeof(ConfigDescriptorPatch));
 
-        /* Patch the transfer type of EP3 and EP4 */
-        ConfigDescriptorPatch[EP3_TRANSFER_TYPE_OFFSET] = 0x0283;
-        ConfigDescriptorPatch[EP3_INT_INTERVAL] = 0x0700;
-        ConfigDescriptorPatch[EP4_TRANSFER_TYPE_OFFSET] = 0x4002;
-        ConfigDescriptorPatch[EP4_INT_INTERVAL] = 0x00;
+       /* place holder for EPx patches */
 
         switch (mDEV_REQ_VALUE_LOW())
         {
@@ -732,16 +648,16 @@ BOOLEAN bGet_descriptor_patch(void)
         default:
             return FALSE;
         }
-
-        if (u16TxRxCounter > mDEV_REQ_LENGTH())
-            u16TxRxCounter = mDEV_REQ_LENGTH();
-
-        A_USB_EP0_TX_DATA();
-        return TRUE;
-    }
-    else {
+        break;
+    default:
         return bGet_descriptor();
     }
+
+    if (u16TxRxCounter > mDEV_REQ_LENGTH())
+        u16TxRxCounter = mDEV_REQ_LENGTH();
+
+    A_USB_EP0_TX_DATA();
+    return TRUE;
 }
 
 extern BOOLEAN bStandardCommand(void);