X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=target_firmware%2Fmagpie_fw_dev%2Ftarget%2Fhif%2Fk2_fw_usb_api.c;h=e954539c6be2ef1bde05d82a43329f91936067d7;hb=024df3f6d90e4518e0143d07ddc523bc9b2c6542;hp=7d4c4fff0576f0083b557ad2c085e3af1ed773eb;hpb=be52f254f3ed7af6f09ff6cdcd32da9edbfaba33;p=open-ath9k-htc-firmware.git diff --git a/target_firmware/magpie_fw_dev/target/hif/k2_fw_usb_api.c b/target_firmware/magpie_fw_dev/target/hif/k2_fw_usb_api.c index 7d4c4ff..e954539 100755 --- a/target_firmware/magpie_fw_dev/target/hif/k2_fw_usb_api.c +++ b/target_firmware/magpie_fw_dev/target/hif/k2_fw_usb_api.c @@ -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 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 -- */ @@ -622,99 +508,6 @@ BOOLEAN bSet_configuration_patch(void) 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;