uint32 ps_uart_state_cur(uint32 index) { struct ps_core_s *ps_core_d = NULL; struct uart_state *state = NULL; ps_get_core_reference(&ps_core_d); if (unlikely((NULL == ps_core_d) || (NULL == ps_core_d->tty) || (NULL == ps_core_d->tty->driver_data))) { PS_PRINT_ERR("ps_core_d ot tty is NULL\n"); return 0; } state = ps_core_d->tty->driver_data; if (unlikely(NULL == state->uart_port)) { PS_PRINT_ERR("uart_port is NULL\n"); return 0; } switch (index) { case STATE_TTY_TX: return g_uart_state.tty_tx_cnt; case STATE_TTY_RX: return g_uart_state.tty_rx_cnt; case STATE_UART_TX: return state->uart_port->icount.tx; case STATE_UART_RX: return state->uart_port->icount.rx; default : PS_PRINT_ERR("not support index\n"); break; } return 0; }
STATIC ssize_t store_exception_dbg(struct device *dev, struct kobj_attribute *attr, const char *buf, size_t count) { int32 cmd = 0; int32 ret = 0; struct ps_core_s *ps_core_d = NULL; struct st_exception_info *pst_exception_data = NULL; if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } get_exception_info_reference(&pst_exception_data); if (NULL == pst_exception_data) { PS_PRINT_ERR("get exception info reference is error\n"); return 0; } ps_get_core_reference(&ps_core_d); if (NULL == ps_core_d) { PS_PRINT_ERR("ps_core_d is NULL\n"); return 0; } cmd = simple_strtol(buf, NULL, 10); PS_PRINT_INFO("cmd:%d\n", cmd); ret = prepare_to_visit_node(ps_core_d); if (ret < 0) { PS_PRINT_ERR("prepare work FAIL\n"); return ret; } switch (cmd) { case 1: PS_PRINT_INFO("exception debug test: close BT\n"); ps_tx_sys_cmd(ps_core_d, SYS_MSG, SYS_CFG_CLOSE_BT); break; case 2: PS_PRINT_INFO("exception: set debug beat flag to 0\n"); pst_exception_data->debug_beat_flag = 0; break; default: PS_PRINT_ERR("unknown cmd %d\n", cmd); break; } post_to_visit_node(ps_core_d); return count; }
/** * Prototype : ps_tty_open * Description : called by tty uart itself when open tty uart from octty * input : tty -> have opened tty * output : not * Calls : * Called By : * * History : * 1.Date : 2012/11/05 * Author : wx144390 * Modification : Created function * */ STATIC int32 ps_tty_open(struct tty_struct *tty) { uint8 install; struct ps_core_s *ps_core_d = NULL; struct ps_plat_s *ps_plat_d = NULL; PS_PRINT_INFO("%s enter\n", __func__); ps_get_core_reference(&ps_core_d); if (unlikely(NULL == ps_core_d)) { PS_PRINT_ERR("ps_core_d is NULL\n"); return -EINVAL; } ps_core_d->tty = tty; tty->disc_data = ps_core_d; /* don't do an wakeup for now */ clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); /* set mem already allocated */ tty->receive_room = PUBLIC_BUF_MAX; /* Flush any pending characters in the driver and discipline. */ tty_ldisc_flush(tty); tty_driver_flush_buffer(tty); ps_plat_d = (struct ps_plat_s *)ps_core_d->pm_data; install = ps_plat_d->ldisc_install; if (TTY_LDISC_INSTALL == install) { ps_tty_complete(ps_core_d->pm_data, TTY_LDISC_INSTALL); PS_PRINT_INFO("install complete done!\n"); } else if (TTY_LDISC_RECONFIG == install) { ps_tty_complete(ps_core_d->pm_data, TTY_LDISC_RECONFIG); PS_PRINT_INFO("reconfig complete done!\n"); } else { PS_PRINT_ERR("ldisc_install [%d] is error!\n", install); } return 0; }
void ps_uart_state_dump(struct tty_struct *tty) { struct ps_core_s *ps_core_d = NULL; ps_get_core_reference(&ps_core_d); if (unlikely((NULL == ps_core_d) || (NULL == tty))) { PS_PRINT_ERR("ps_core_d ot tty is NULL\n"); return; } PS_PRINT_INFO("===pre uart&tty state===\n"); ps_uart_state_print(&g_uart_state_pre); PS_PRINT_INFO("===cur uart&tty state===\n"); ps_uart_state_get(tty); ps_uart_state_print(&g_uart_state); PS_PRINT_INFO("chars in tty tx buf len=%x\n", tty_chars_in_buffer(ps_core_d->tty)); return; }
void ps_uart_state_dump(struct tty_struct *tty) { struct ps_core_s *ps_core_d = NULL; struct uart_state *state = NULL; ps_get_core_reference(&ps_core_d); if (unlikely((NULL == ps_core_d) || (NULL == tty))) { PS_PRINT_ERR("ps_core_d ot tty is NULL\n"); return; } state = tty->driver_data; if (unlikely(NULL == state->uart_port)) { PS_PRINT_ERR("uart_port is NULL\n"); return; } PS_PRINT_INFO("===pre uart&tty state===\n"); ps_uart_state_print(&g_uart_state_pre); PS_PRINT_INFO("===cur uart&tty state===\n"); ps_uart_state_get(tty); ps_uart_state_print(&g_uart_state); PS_PRINT_INFO("chars in tty tx buf len=%x\n", tty_chars_in_buffer(ps_core_d->tty)); PS_PRINT_INFO("uart port mctrl:0x%x\n", state->uart_port->mctrl); PS_PRINT_INFO("DR :0x%x\n", readw(state->uart_port->membase + 0x00)); PS_PRINT_INFO("FR :0x%x\n", readw(state->uart_port->membase + 0x18)); PS_PRINT_INFO("IBRD :0x%x\n", readw(state->uart_port->membase + 0x24)); PS_PRINT_INFO("FBRD :0x%x\n", readw(state->uart_port->membase + 0x28)); PS_PRINT_INFO("LCR_H:0x%x\n", readw(state->uart_port->membase + 0x2C)); PS_PRINT_INFO("CR :0x%x\n", readw(state->uart_port->membase + 0x30)); PS_PRINT_INFO("IFLS :0x%x\n", readw(state->uart_port->membase + 0x34)); PS_PRINT_INFO("IMSC :0x%x\n", readw(state->uart_port->membase + 0x38)); PS_PRINT_INFO("RIS :0x%x\n", readw(state->uart_port->membase + 0x3C)); PS_PRINT_INFO("MIS :0x%x\n", readw(state->uart_port->membase + 0x40)); return; }
/***************************************************************************** 函 数 名 : store_bfgx_reg_and_reg_dump 功能描述 : SDIO上报BFGX的reg 输入参数 : 输出参数 : 返 回 值 : void 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2015年12月2日 作 者 : c00351912 修改内容 : 新生成函数 *****************************************************************************/ STATIC ssize_t store_bfgx_reg_and_reg_dump(struct device *dev, struct kobj_attribute *attr, const char *buf, size_t count) { int32 cmd; int32 ret; struct ps_core_s *ps_core_d = NULL; struct st_exception_info *pst_exception_data = NULL; PS_PRINT_INFO("%s\n", __func__); if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } get_exception_info_reference(&pst_exception_data); if (NULL == pst_exception_data) { PS_PRINT_ERR("get exception info reference is error\n"); return 0; } ps_get_core_reference(&ps_core_d); if (unlikely(NULL == ps_core_d)) { PS_PRINT_ERR("ps_core_d is NULL\n"); return -EINVAL; } ret = prepare_to_visit_node(ps_core_d); if (ret < 0) { PS_PRINT_ERR("prepare work FAIL\n"); return ret; } cmd = simple_strtol(buf, NULL, 10); switch (cmd) { case 1: PS_PRINT_INFO("bfgx mem dump cmd %d,sdio read bcpu pub reg\n", cmd); debug_sdio_read_bfgx_reg_and_mem(BFGX_PUB_REG); break; case 2: PS_PRINT_INFO("bfgx mem dump cmd %d, sdio read bcpu priv reg\n", cmd); debug_sdio_read_bfgx_reg_and_mem(BFGX_PRIV_REG); break; case 3: PS_PRINT_INFO("bfgx mem dump cmd %d, sdio read bcpu mem\n", cmd); debug_sdio_read_bfgx_reg_and_mem(BFGX_MEM); break; case 4: PS_PRINT_INFO("bfgx mem dump cmd %d, sdio read bcpu reg and mem\n", cmd); debug_sdio_read_bfgx_reg_and_mem(SDIO_BFGX_MEM_DUMP_BOTTOM); break; default: PS_PRINT_ERR("error cmd:[%d]\n", cmd); break; } post_to_visit_node(ps_core_d); return count; }
STATIC ssize_t store_wifi_mem_dump(struct device *dev, struct kobj_attribute *attr, const char *buf, size_t count) { int32 cmd; int32 ret; struct ps_core_s *ps_core_d = NULL; struct st_exception_info *pst_exception_data = NULL; PS_PRINT_INFO("%s\n", __func__); if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } get_exception_info_reference(&pst_exception_data); if (NULL == pst_exception_data) { PS_PRINT_ERR("get exception info reference is error\n"); return 0; } ps_get_core_reference(&ps_core_d); if (unlikely(NULL == ps_core_d)) { PS_PRINT_ERR("ps_core_d is NULL\n"); return -EINVAL; } ret = prepare_to_visit_node(ps_core_d); if (ret < 0) { PS_PRINT_ERR("prepare work FAIL\n"); return ret; } cmd = simple_strtol(buf, NULL, 10); switch (cmd) { case 1: PS_PRINT_INFO("wifi mem dump cmd %d, halt wcpu\n", cmd); uart_halt_wcpu(); break; case 2: PS_PRINT_INFO("wifi mem dump cmd %d, read wifi public register\n", cmd); plat_wait_last_rotate_finish(); if (EXCEPTION_SUCCESS == uart_read_wifi_mem(WIFI_PUB_REG)) { /*send cmd to oam_hisi to rotate file*/ plat_send_rotate_cmd_2_app(CMD_READM_WIFI_UART); } else { plat_rotate_finish_set(); }; break; case 3: PS_PRINT_INFO("wifi mem dump cmd %d, read wifi priv register\n", cmd); plat_wait_last_rotate_finish(); if (EXCEPTION_SUCCESS == uart_read_wifi_mem(WIFI_PRIV_REG)) { /*send cmd to oam_hisi to rotate file*/ plat_send_rotate_cmd_2_app(CMD_READM_WIFI_UART); } else { plat_rotate_finish_set(); }; break; case 4: PS_PRINT_INFO("wifi mem dump cmd %d, read wifi mem\n", cmd); plat_wait_last_rotate_finish(); if (EXCEPTION_SUCCESS == uart_read_wifi_mem(WIFI_MEM)) { /*send cmd to oam_hisi to rotate file*/ plat_send_rotate_cmd_2_app(CMD_READM_WIFI_UART); } else { plat_rotate_finish_set(); }; break; case 5: PS_PRINT_INFO("wifi mem dump cmd %d\n", cmd); debug_uart_read_wifi_mem(1); break; default: PS_PRINT_ERR("error cmd:[%d]\n", cmd); break; } post_to_visit_node(ps_core_d); return count; }
STATIC ssize_t store_dev_test(struct device *dev, struct kobj_attribute *attr, const char *buf, size_t count) { int32 cmd; int32 ret; struct ps_core_s *ps_core_d = NULL; struct st_exception_info *pst_exception_data = NULL; PS_PRINT_INFO("%s\n", __func__); if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } get_exception_info_reference(&pst_exception_data); if (NULL == pst_exception_data) { PS_PRINT_ERR("get exception info reference is error\n"); return 0; } ps_get_core_reference(&ps_core_d); if (unlikely(NULL == ps_core_d)) { PS_PRINT_ERR("ps_core_d is NULL\n"); return -EINVAL; } cmd = simple_strtol(buf, NULL, 10); switch (cmd) { case 1: ret = prepare_to_visit_node(ps_core_d); if (ret < 0) { PS_PRINT_ERR("prepare work FAIL\n"); return ret; } PS_PRINT_INFO("bfgx test cmd %d, cause device panic\n", cmd); ps_tx_sys_cmd(ps_core_d, SYS_MSG, SYS_CFG_DEV_PANIC); post_to_visit_node(ps_core_d); break; case 2: PS_PRINT_INFO("cmd %d,enable platform dfr\n", cmd); pst_exception_data->exception_reset_enable = PLAT_EXCEPTION_ENABLE; break; case 3: PS_PRINT_INFO("cmd %d,enable wifi open bcpu\n", cmd); wifi_open_bcpu_set(1); break; case 4: PS_PRINT_INFO("cmd %d,test pull up power gpio\n", cmd); switch(g_device_subchip_type) { case BOARD_VERSION_HI1102: board_power_on(WLAN_POWER); break; case BOARD_VERSION_HI1103: board_power_on(WLAN_POWER); board_power_on(BFGX_POWER); break; default: PS_PRINT_ERR("g_device_subchip_type =%d error\n", g_device_subchip_type); break; } break; case 5: PS_PRINT_INFO("cmd %d,test pull down power gpio\n", cmd); switch(g_device_subchip_type) { case BOARD_VERSION_HI1102: board_power_off(WLAN_POWER); break; case BOARD_VERSION_HI1103: board_power_off(WLAN_POWER); board_power_off(BFGX_POWER); break; default: PS_PRINT_ERR("g_device_subchip_type =%d error\n", g_device_subchip_type); break; } break; case 6: PS_PRINT_INFO("cmd %d,start uart loop test\n", cmd); uart_loop_test(); break; default: PS_PRINT_ERR("unknown cmd %d\n", cmd); break; } return count; }