hif/usb_api: remove dup code - _fw_usbfifo_recv_command
[open-ath9k-htc-firmware.git] / target_firmware / magpie_fw_dev / target / hif / k2_fw_usb_api.c
index 7d4c4fff0576f0083b557ad2c085e3af1ed773eb..bc6948d405ff52a9cf252a9d417b27bc5f8146fb 100755 (executable)
@@ -44,7 +44,6 @@
 
 #include "sys_cfg.h"
 
-typedef void (* USBFIFO_recv_command)(VBUF *cmd);
 void _fw_usb_suspend_reboot();
 
 extern Action      eUsbCxFinishAction;
@@ -52,8 +51,6 @@ extern CommandType eUsbCxCommand;
 extern BOOLEAN     UsbChirpFinish;
 extern USB_FIFO_CONFIG usbFifoConf;
 
-USBFIFO_recv_command m_origUsbfifoRecvCmd = NULL;
-
 #if SYSTEM_MODULE_USB
 #define vUsb_ep0end(void)                                   \
 {                                                           \
@@ -76,30 +73,6 @@ USBFIFO_recv_command m_origUsbfifoRecvCmd = NULL;
 #define vUsb_resm() USB_BYTE_REG_WRITE(ZM_INTR_SOURCE_7_OFFSET,     \
                         (USB_BYTE_REG_READ(ZM_INTR_SOURCE_7_OFFSET)&~BIT3))
 
-void _fw_usbfifo_recv_command(VBUF *buf)
-{
-    A_UINT8 *cmd_data;
-    A_UINT32 tmp;
-
-    cmd_data = (A_UINT8 *)(buf->desc_list->buf_addr + buf->desc_list->data_offset);
-    tmp = *((A_UINT32 *)cmd_data);
-    if ( tmp == 0xFFFFFFFF ) {
-        _fw_usb_suspend_reboot();
-    } else {
-        m_origUsbfifoRecvCmd(buf);
-    }
-}
-
-void _fw_usbfifo_init(USB_FIFO_CONFIG *pConfig)
-{
-    m_origUsbfifoRecvCmd = pConfig->recv_command;
-
-    usbFifoConf.get_command_buf = pConfig->get_command_buf;
-    usbFifoConf.recv_command    = _fw_usbfifo_recv_command;
-    usbFifoConf.get_event_buf   = pConfig->get_event_buf;
-    usbFifoConf.send_event_done = pConfig->send_event_done;
-}
-
 #define CHECK_SOF_LOOP_CNT    50
 
 void _fw_usb_suspend_reboot()
@@ -401,408 +374,4 @@ void _fw_usb_reset_fifo(void)
     HAL_WORD_REG_WRITE(0x50040, (0x200|0|(1>>1)<<12));
     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 --
- */
-extern uint16_t       u8UsbConfigValue;
-extern uint16_t       u8UsbInterfaceValue;
-extern uint16_t       u8UsbInterfaceAlternateSetting;
-extern SetupPacket    ControlCmd;
-extern void vUsbClrEPx(void);
-
-void vUSBFIFO_EP6Cfg_FS_patch(void)
-{
-#if (FS_C1_I0_A0_EP_NUMBER >= 6)
-    int i;
-
-    //EP0X06
-    mUsbEPMap(EP6, FS_C1_I0_A0_EP6_MAP);
-    mUsbFIFOMap(FS_C1_I0_A0_EP6_FIFO_START, FS_C1_I0_A0_EP6_FIFO_MAP);
-    mUsbFIFOConfig(FS_C1_I0_A0_EP6_FIFO_START, FS_C1_I0_A0_EP6_FIFO_CONFIG);
-
-    for(i = FS_C1_I0_A0_EP6_FIFO_START + 1 ;
-        i < FS_C1_I0_A0_EP6_FIFO_START + FS_C1_I0_A0_EP6_FIFO_NO ; i ++)
-    {
-        mUsbFIFOConfig(i, (FS_C1_I0_A0_EP6_FIFO_CONFIG & (~BIT7)) );
-    }
-                            
-    mUsbEPMxPtSzHigh(EP6, FS_C1_I0_A0_EP6_DIRECTION, (FS_C1_I0_A0_EP6_MAX_PACKET & 0x7ff));
-    mUsbEPMxPtSzLow(EP6, FS_C1_I0_A0_EP6_DIRECTION, (FS_C1_I0_A0_EP6_MAX_PACKET & 0x7ff));
-    mUsbEPinHighBandSet(EP6 , FS_C1_I0_A0_EP6_DIRECTION, FS_C1_I0_A0_EP6_MAX_PACKET);
 #endif
-}
-
-void vUsbFIFO_EPxCfg_FS_patch(void)
-{
-    switch (u8UsbConfigValue)
-    {
-        #if (FS_CONFIGURATION_NUMBER >= 1)
-        // Configuration 0X01
-        case 0X01:
-            switch (u8UsbInterfaceValue)
-            {
-                #if (FS_C1_INTERFACE_NUMBER >= 1)
-                // Interface 0
-                case 0:
-                    switch (u8UsbInterfaceAlternateSetting)
-                    {
-
-                        #if (FS_C1_I0_ALT_NUMBER >= 1)
-                        // AlternateSetting 0
-                        case 0:
-
-                                                       // snapped....
-
-                                                       // patch up this ep6_fs config
-                            vUSBFIFO_EP6Cfg_FS_patch();
-
-                            break;
-
-                        #endif
-                        default:
-                            break;
-                    }
-                    break;
-                #endif
-                default:
-                    break;
-            }
-            break;
-        #endif
-        default:
-            break;
-    }
-    //mCHECK_STACK();
-}
-
-
-BOOLEAN bSet_configuration_patch(void)
-{
-    //A_PRINTF("bSet_configuration...\n\r");
-
-       bSet_configuration();
-
-    if (mLOW_BYTE(mDEV_REQ_VALUE()) == 0)
-    {
-               // snapped....
-               ;
-    }
-    else
-    {
-        if (mUsbHighSpeedST())                  // First judge HS or FS??
-        {
-                       // snapped....
-                       ;
-        }
-        else
-        {
-                       // snapped....
-                       vUsbFIFO_EPxCfg_FS_patch();
-        }
-           
-               // snapped....
-    }
-
-    eUsbCxFinishAction = ACT_DONE;
-    return TRUE;
-}
-
-
-/*
- * -- support more than 64 bytes command on ep3 -- 
- */
-void vUsb_Status_In_patch(void)
-{
-    uint16_t count;
-    uint16_t remainder;
-    u16_t RegBufLen;
-    BOOLEAN cmdEnd = FALSE;
-
-    static u16_t mBufLen;
-    static VBUF *evntbuf = NULL;
-    static volatile u32_t *regaddr;
-    static BOOLEAN cmd_is_new = TRUE;
-
-    if( cmd_is_new )
-    {
-        evntbuf = usbFifoConf.get_event_buf();
-        if ( evntbuf != NULL )
-        {
-           regaddr = (u32_t *)VBUF_GET_DATA_ADDR(evntbuf);
-            mBufLen = evntbuf->buf_length;
-        }
-        else
-        {
-            mUSB_STATUS_IN_INT_DISABLE();
-            goto ERR_DONE;
-        }
-    
-    }
-
-//    if( mBufLen>bUSB_EP_MAX_PKT_SIZE_64 )
-//        A_PRINTF("EP3 send %d bytes to host \n", mBufLen);
-
-//    while(1)
-    {
-        if( mBufLen > bUSB_EP_MAX_PKT_SIZE_64 ) {
-            RegBufLen = bUSB_EP_MAX_PKT_SIZE_64;
-            mBufLen -= bUSB_EP_MAX_PKT_SIZE_64;
-        }
-        // TODO: 64 byes... controller supposed will take care of zero-length?
-        else {
-            RegBufLen = mBufLen;
-            cmdEnd = TRUE;
-        }
-
-        /* INT use EP3 */
-        for(count = 0; count < (RegBufLen / 4); count++)
-        {
-            USB_WORD_REG_WRITE(ZM_EP3_DATA_OFFSET, *regaddr);
-            regaddr++;
-        }
-        
-        remainder = RegBufLen % 4;
-        
-        if (remainder)
-        {
-            switch(remainder)
-            {
-            case 3:
-                USB_WORD_REG_WRITE(ZM_CBUS_FIFO_SIZE_OFFSET, 0x7);
-                break;
-            case 2:
-                USB_WORD_REG_WRITE(ZM_CBUS_FIFO_SIZE_OFFSET, 0x3);
-                break;
-            case 1:
-                USB_WORD_REG_WRITE(ZM_CBUS_FIFO_SIZE_OFFSET, 0x1);
-                break;
-            }
-        
-            USB_WORD_REG_WRITE(ZM_EP3_DATA_OFFSET, *regaddr);
-
-            // Restore CBus FIFO size to word size            
-            USB_WORD_REG_WRITE(ZM_CBUS_FIFO_SIZE_OFFSET, 0xF);
-        }
-
-        mUSB_EP3_XFER_DONE();
-        
-//        if( mBufLen<=bUSB_EP_MAX_PKT_SIZE_64 )
-//            break;   
-    }
-
-    if ( evntbuf != NULL && cmdEnd )
-    {
-        usbFifoConf.send_event_done(evntbuf);
-        cmd_is_new = TRUE;
-    }
-    
-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
-#define EP4_INT_INTERVAL            22
-
-BOOLEAN bGet_descriptor_patch(void)
-{
-    int i;
-    switch (mDEV_REQ_VALUE_HIGH()) {
-    case 1:
-        ath_hal_memcpy(DeviceDescriptorPatch,
-            u8UsbDeviceDescriptor, sizeof(DeviceDescriptorPatch));
-
-        DeviceDescriptorPatch[BCD_DEVICE] = BCD_DEVICE_FW_SIGNATURE;
-
-        pu8DescriptorEX = DeviceDescriptorPatch;
-        u16TxRxCounter = mTABLE_LEN(DeviceDescriptorPatch[0]);
-        break;
-    case 2:
-        /* Copy ConfigDescriptor */
-       ath_hal_memcpy(ConfigDescriptorPatch,
-            u8ConfigDescriptorEX, sizeof(ConfigDescriptorPatch));
-
-       /* place holder for EPx patches */
-
-        switch (mDEV_REQ_VALUE_LOW())
-        {
-        case 0x00:      // configuration no: 0
-            pu8DescriptorEX = ConfigDescriptorPatch;
-            u16TxRxCounter = ConfigDescriptorPatch[1];
-            //u16TxRxCounter = 46;
-            break;
-        default:
-            return FALSE;
-        }
-        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);
-
-BOOLEAN bStandardCommand_patch(void)
-{
-    if (mDEV_REQ_REQ() == USB_SET_CONFIGURATION) {
-        A_USB_SET_CONFIG();
-
-#if ENABLE_SWAP_DATA_MODE
-        // SWAP FUNCTION should be enabled while DMA engine is not working,
-        // the best place to enable it is before we trigger the DMA
-        MAGPIE_REG_USB_RX0_SWAP_DATA = 0x1;
-        MAGPIE_REG_USB_TX0_SWAP_DATA = 0x1;
-
-        #if SYSTEM_MODULE_HP_EP5
-            MAGPIE_REG_USB_RX1_SWAP_DATA = 0x1;
-        #endif
-
-        #if SYSTEM_MODULE_HP_EP6
-            MAGPIE_REG_USB_RX2_SWAP_DATA = 0x1;
-        #endif
-
-#endif //ENABLE_SWAP_DATA_MODE
-        return TRUE;
-    }
-    else {
-        return bStandardCommand();
-    }
-}
-
-#endif
-
-