X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=target_firmware%2Fmagpie_fw_dev%2Ftarget%2Fcmnos%2Fdbg_api.c;h=2391034452e30f121d529db3b081538afc33de04;hb=24b5105e0730aaeffb8a7b0b6b0d93eec6190b86;hp=c528428c432902c02aa5d3caf4bd65055418adac;hpb=f2181f6eeafb156033107a37284e7054c5f3ecbe;p=open-ath9k-htc-firmware.git diff --git a/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c b/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c index c528428..2391034 100755 --- a/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c +++ b/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c @@ -32,9 +32,14 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + #include "sys_cfg.h" #include "athos_api.h" +#include "adf_os_io.h" + #if defined(PROJECT_K2) #if SYSTEM_MODULE_SFLASH #include "sflash_api.h" @@ -75,10 +80,6 @@ static int db_ascii_to_hex(char *, unsigned long *); static int db_hex_to_ascii(unsigned long, char *); static void zf_debug_task(void); -int db_info_intr(char* cmd, char* param1, char* param2, char* param3); - -extern u32_t this_is_global_variables; - /* Console debug command table */ const struct DB_COMMAND_STRUCT command_table[] = { @@ -122,18 +123,46 @@ int cmd_not_found; uint16_t gvLen; int pressed_time; -////////////////////////////////////////////////// -#define MAX_REG_NUM 16 +static void db_incorect_format(void) +{ + A_PRINTF("Error! Incorrect format.\n\r"); +} + +static void db_unknown_command(void) +{ + A_PRINTF("Error! Unknown command.\n\r"); +} + +static void db_print_dump(const char *mem1, const char *mem2) +{ + unsigned int i = 0; + const char *tmp; + + do { + if (i == 0) { + A_PRINTF("\n\r%06x: ", mem1); + tmp = mem1; + } -typedef struct reg_elem { - unsigned char valid; - unsigned char mode; // byte, half-word word - unsigned long reg_addr; -} t_reg_elem; + A_PRINTF("%04x ", *(uint16_t *)mem1); -t_reg_elem reg_buffer[MAX_REG_NUM]; + mem1 += 2; + i++; -////////////////////////////////////////////////// + if (i == 8) { + A_PRINTF(" "); + do { + if (*tmp > 0x20 && *tmp < 0x7e) + A_PRINTF("%c", *tmp); + else + A_PRINTF("."); + tmp++; + } while (tmp < mem1); + i = 0; + } + } while (mem1 < mem2); + A_PRINTF("\n\r"); +} static void zf_debug_init(void) { @@ -431,12 +460,12 @@ static int db_ldr_cmd(char *cmd, char *param1, char *param2, char *param3) addr &= 0xfffffffc; //val = *(unsigned long *)addr; - val = HAL_WORD_REG_READ(addr); + val = ioread32(addr); } else if (strcmp(cmd, "LDRH") == 0) { addr &= 0xfffffffe; - val = HAL_HALF_WORD_REG_READ(addr); + val = ioread16(addr); } else if (strcmp(cmd, "LDRB") == 0) { @@ -448,12 +477,9 @@ static int db_ldr_cmd(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("%s : %s\n\r", addr_str, val_str); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + db_incorect_format(); + return -1; } static int db_str_cmd(char *cmd, char *param1, char *param2, char *param3) @@ -470,23 +496,21 @@ static int db_str_cmd(char *cmd, char *param1, char *param2, char *param3) if (strcmp(cmd, "STR") == 0) { addr &= 0xfffffffc; - //HAL_WORD_REG_WRITE(addr, val); - HAL_WORD_REG_WRITE(addr, val); - //*(volatile unsigned long *)(addr & 0xfffffffc) = (unsigned long)val; + iowrite32(addr, val); } else if (strcmp(cmd, "STRH") == 0) { addr &= 0xfffffffe; //*(volatile unsigned short *)(addr & 0xfffffffe) = (unsigned short)val; - HAL_HALF_WORD_REG_WRITE(addr, val); + iowrite16(addr, val); } else if (strcmp(cmd, "STRB") == 0) { if( addr & 0x00f00000 ) - HAL_BYTE_REG_WRITE(addr, val); + iowrite8(addr, val); else - HAL_BYTE_REG_WRITE(addr^3, val); + iowrite8(addr^3, val); //*(volatile unsigned char *)addr = (unsigned char)val; } @@ -496,12 +520,9 @@ static int db_str_cmd(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("%s : %s\n\r", addr_str, val_str); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + db_incorect_format(); + return -1; } LOCAL void dbg_timer_func(A_HANDLE alarm, void *data) @@ -567,8 +588,6 @@ static int db_intr_cmd(char *cmd, char *param1, char *param2, char *param3) return 0; } -uint32_t usb_swap_flag = 0; //default -uint32_t usb_swap_flag_changed = 0; static int db_usb_cmd(char *cmd, char *param1, char *param2, char *param3) { A_PRINTF("THIS IS USB COMMAND\n\r"); @@ -611,7 +630,7 @@ static void clk_change(uint32_t clk, uint32_t ratio, uint32_t baud) break; } - HAL_WORD_REG_WRITE(0x50040, (0x300|clk_sel|(ratio>>1)<<12)); + iowrite32(0x50040, (0x300|clk_sel|(ratio>>1)<<12)); A_UART_HWINIT((clk*1000*1000)/ratio, baud); } @@ -715,46 +734,11 @@ static int db_cmd_starthtc(char *cmd, char *param1, char *param2, char *param3) HTC_Ready(htc_handle); } -#define WRITE_USB_DESC(pDesc, Offset) \ - { \ - uint16_t *pSrc = 0; \ - uint16_t mSize = 0; \ - pSrc = (uint16_t *)(pDesc); \ - mSize = (*pSrc&0xff)/2; \ - A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pSrc); \ - A_EEP_WRITE(Offset, mSize, pSrc); \ - A_DELAY_USECS(500); \ - } - -#define READ_USB_DESC(pDesc, Offset, Size) \ - { \ - uint16_t *pDst; \ - uint16_t mSize; \ - pDst = (uint16_t *)pDesc; \ - A_EEP_READ(Offset, 1, &mSize); \ - mSize = mSize &0xff; \ - mSize = mSize/2; \ - if( mSize > Size) \ - mSize = Size; \ - A_PRINTF("0x%04x, 0x%04x, 0x%08x\n", Offset, mSize, pDst); \ - A_EEP_READ(Offset, mSize, pDst); \ - A_DELAY_USECS(500); \ - } - - -//////////////////////////////////////////////////////////////////////////////////////////////// - -extern uint16_t UsbDeviceDescriptor[]; -extern uint16_t String00Descriptor[]; -extern uint16_t String10Descriptor[]; -extern uint16_t String20Descriptor[]; -extern uint16_t String30Descriptor[]; - static int db_wdt_cmd(char *cmd, char *param1, char *param2, char *param3) { if ( strcmp(param1, "rst") == 0 ) { - A_PRINTF(" reseting.....................\n\n\r"); + A_PRINTF(" reseting...\n\n\r"); A_WDT_RESET(); } else if( strcmp(param1, "on") == 0 ) @@ -767,23 +751,24 @@ static int db_wdt_cmd(char *cmd, char *param1, char *param2, char *param3) } else if ( strcmp(param1, "boot") == 0 ) { + A_PRINTF("Last BOOT is "); if (ENUM_WDT_BOOT == A_WDT_LASTBOOT() ) - A_PRINTF("LAST BOOT IS %s", "wdt"); + A_PRINTF("wdt"); else - A_PRINTF("LAST BOOT IS %s", "normal boot"); + A_PRINTF("normal boot"); } else if (strcmp(param1, "loop") == 0 ) { T_WDT_CMD wdt_cmd; uint32_t time_offset; - A_PRINTF(" doing the wdt reseting................\n\n\r"); + A_PRINTF(" doing the wdt reseting..."); if( db_ascii_to_hex(param2, &time_offset)!=0 ) { if( time_offset < 0 || time_offset >0xffffffff ) time_offset = 0xffffff; } - A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset); + A_PRINTF(" (wdt tick: 0x%08x...\n\n\r", time_offset); wdt_cmd.cmd = WDT_TIMEOUT; wdt_cmd.timeout = time_offset; @@ -794,14 +779,14 @@ static int db_wdt_cmd(char *cmd, char *param1, char *param2, char *param3) { T_WDT_CMD wdt_cmd; uint32_t time_offset; - A_PRINTF(" doing the wdt reseting................\n\n\r"); + A_PRINTF(" doing the wdt reseting..."); if( db_ascii_to_hex(param3, &time_offset)!=0 ) { if( time_offset < 0 || time_offset >0xffffffff ) time_offset = 0xffffff; } - A_PRINTF(" doing the wdt reseting (wdt tick: 0x%08x................\n\n\r", time_offset); + A_PRINTF(" (wdt tick: 0x%08x...\n\n\r", time_offset); wdt_cmd.cmd = WDT_TIMEOUT; wdt_cmd.timeout = time_offset; @@ -811,26 +796,21 @@ static int db_wdt_cmd(char *cmd, char *param1, char *param2, char *param3) else if( strcmp(param1, "event") == 0 ) { uint32_t event= 0x00123400; -#define USB_BYTE_REG_WRITE(addr, val) HAL_BYTE_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3), (val)) -#define USB_BYTE_REG_READ(addr) HAL_BYTE_REG_READ(USB_CTRL_BASE_ADDRESS|(uint8_t)(addr^3)) -#define USB_WORD_REG_WRITE(addr, val) HAL_WORD_REG_WRITE(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr), (val)) -#define USB_WORD_REG_READ(addr) HAL_WORD_REG_READ(USB_CTRL_BASE_ADDRESS|(uint32_t)(addr)) + /* disable ep3 intr */ + iowrite8_usb(0x17, ioread8_usb(0x17)|0xc0); - // disable ep3 intr - USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)|0xc0); + /* ZM_CBUS_FIFO_SIZE_REG = 0xf */ + iowrite32_usb(0x100, 0x0f); - //ZM_CBUS_FIFO_SIZE_REG = 0xf; - USB_WORD_REG_WRITE(0x100, 0x0f); + /* ZM_EP3_DATA_REG = event; */ + iowrite32_usb(0xF8, event); - //ZM_EP3_DATA_REG = event; - USB_WORD_REG_WRITE(0xF8, event); + /* tx done */ + iowrite8_usb(0xAE, ioread8_usb(0xAE) | 0x08); - // tx done - USB_BYTE_REG_WRITE(0xAE, USB_BYTE_REG_READ(0xAE)|0x08); - - // enable ep3 intr - USB_BYTE_REG_WRITE(0x17, USB_BYTE_REG_READ(0x17)&0xbf); + /* enable ep3 intr */ + iowrite8_usb(0x17, ioread8_usb(0x17) & 0xbf); } } @@ -851,11 +831,9 @@ static int db_cmd_sferase(char *cmd, char *param1, char *param2, char *param3) return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } else if (strcmp(param2, "b") == 0) { @@ -867,11 +845,10 @@ static int db_cmd_sferase(char *cmd, char *param1, char *param2, char *param3) return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; + } else if (strcmp(param1, "c") == 0) { @@ -880,11 +857,9 @@ static int db_cmd_sferase(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("\n\r"); return 0; } - else - { - A_PRINTF("Error! Unknown command.\n\r"); - return -1; - } + + db_unknown_command(); + return -1; } /* Serial Flash -> Program */ @@ -904,11 +879,9 @@ static int db_cmd_sfpg(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("\n\r"); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } /* Serial Flash -> Read, Fast Read to UART */ @@ -924,7 +897,7 @@ static int db_cmd_sfru(char *cmd, char *param1, char *param2, char *param3) fast = 1; else { - A_PRINTF("Error! Unknown command.\n\r"); + db_unknown_command(); return -1; } @@ -948,11 +921,9 @@ static int db_cmd_sfru(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("\n\r"); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } /* Serial Flash -> Read, Fast Read to Memory */ @@ -969,7 +940,7 @@ static int db_cmd_sfrm(char *cmd, char *param1, char *param2, char *param3) fast = 1; else { - A_PRINTF("Error! Unknown command.\n\r"); + db_unknown_command(); return -1; } @@ -986,11 +957,9 @@ static int db_cmd_sfrm(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("\n\r"); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } /* Serial Flash -> Read Status Register */ @@ -1019,42 +988,24 @@ static int db_cmd_memcmp(char *cmd, char *param1, char *param2, char *param3) A_PRINTF("memcmp(buf1, buf2, len) = %d\n\r", A_MEMCMP(buf1, buf2, len)); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } /* Memory Dump */ static int db_cmd_memdump(char *cmd, char *param1, char *param2, char *param3) { - A_UINT32 i; - unsigned long addr1, addr2, t_addr; - A_UINT32 *val; + unsigned long addr1, addr2; if (db_ascii_to_hex(param1, &addr1) != -1 && db_ascii_to_hex(param2, &addr2) != -1 && addr1 < addr2 && addr1%4 == 0) { - A_PRINTF("addr data data data data data data data data\n\r"); - A_PRINTF("====== ======== ======== ======== ======== ======== ======== ======== ========"); - - for (i = 0, t_addr = addr1; t_addr < addr2; i++, t_addr += 4) - { - if ((i%8) == 0) - A_PRINTF("\n\r%06X ", t_addr); - - val = (A_UINT32 *)t_addr; - A_PRINTF("%08X ", *val); - } - - A_PRINTF("\n\r"); + db_print_dump((const char *)addr1, (const char *)addr2); return 0; } - else - { - A_PRINTF("Error! Incorrect format.\n\r"); - return -1; - } + + db_incorect_format(); + return -1; } void cmnos_dbg_module_install(struct dbg_api *apis) {