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
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 --
*/
--- /dev/null
+
+#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(); */
+ ;
+}
+
#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);
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;
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 --
*/