oal_int32 hi1102_host_main_init(oal_void) { //oal_uint32 ul_return = OAL_FAIL; oal_int32 l_return = OAL_FAIL; #ifdef _PRE_WLAN_FEATURE_OFFLOAD_FLOWCTL hcc_flowctl_get_device_mode_register(hmac_flowctl_check_device_is_sta_mode); hcc_flowctl_operate_subq_register(hmac_vap_net_start_subqueue, hmac_vap_net_stop_subqueue); #else hcc_tx_flow_ctrl_cb_register(hmac_vap_net_stopall, hmac_vap_net_startall); #endif l_return = host_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("Hi1102_host_main_init: host_module_init return error code: %d", l_return); return l_return; } #ifdef _PRE_WLAN_FEATURE_ARP_OFFLOAD wal_hipriv_register_inetaddr_notifier(); wal_hipriv_register_inet6addr_notifier(); #endif /*启动完成后,输出打印*/ OAL_IO_PRINT("Hi1102_host_main_init:: Hi1102_host_main_init finish!\n"); return OAL_SUCC; }
OAL_STATIC oal_uint32 device_test_create_cfg_vap(oal_void) { oal_uint32 ul_return; frw_event_mem_stru *pst_event_mem; frw_event_stru *pst_event; pst_event_mem = FRW_EVENT_ALLOC(0); if (OAL_UNLIKELY(OAL_PTR_NULL == pst_event_mem)) { OAL_IO_PRINT("device_test_create_cfg_vap: hmac_init_event_process FRW_EVENT_ALLOC result = OAL_PTR_NULL.\n"); return OAL_FAIL; } ul_return = dmac_init_event_process(pst_event_mem); if (OAL_SUCC != ul_return) { OAL_IO_PRINT("device_test_create_cfg_vap: dmac_init_event_process result = fale.\n"); FRW_EVENT_FREE(pst_event_mem); return OAL_FAIL; } pst_event = (frw_event_stru *)pst_event_mem->puc_data; pst_event->st_event_hdr.uc_device_id = 0; ul_return = dmac_cfg_vap_init_event(pst_event_mem); if (OAL_SUCC != ul_return) { FRW_EVENT_FREE(pst_event_mem); return ul_return; } FRW_EVENT_FREE(pst_event_mem); return OAL_SUCC; }
oal_int32 hi1151_main_init(oal_void) { oal_int32 l_return = OAL_FAIL; oal_uint16 us_bitmap = 0; l_return = platform_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("Hi1151_main_init: platform_module_init return error code: %d/r/n", l_return); return l_return; } l_return = device_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("Hi1151_main_init: device_module_init return error code: %d/r/n", l_return); us_bitmap = BIT0 | BIT1 | BIT2 | BIT3; builder_module_exit(us_bitmap); return l_return; } l_return = host_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("Hi1151_main_init: host_module_init return error code: %d/r/n", l_return); us_bitmap = BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT5 | BIT6; builder_module_exit(us_bitmap); return l_return; } /*启动完成后,输出打印*/ OAL_IO_PRINT("Hi1151_main_init:: Hi1151_main_init finish!/r/n"); return OAL_SUCC; }
oal_uint32 oam_upload_device_log_to_sdt(oal_uint8 *pc_string, oal_uint16 len) { oal_netbuf_stru *pst_skb; oal_uint32 ul_ret = OAL_SUCC; if (OAL_PTR_NULL == pc_string) { OAL_IO_PRINT("oam_upload_log_to_sdt::pc_string is null!\n"); return OAL_ERR_CODE_PTR_NULL; } pst_skb = oam_alloc_data2sdt(len); if (OAL_PTR_NULL == pst_skb) { OAL_IO_PRINT("alloc netbuf stru failed!\n"); return OAL_ERR_CODE_PTR_NULL; } /* COPY打印的内容 */ oal_memcopy(oal_netbuf_data(pst_skb), pc_string, len); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_skb, OAM_DATA_TYPE_DEVICE_LOG, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
oal_int32 plat_sysfs_init(oal_void) { oal_int32 ret = 0; oal_uint32 ul_rslt; oal_kobject* pst_root_boot_object = NULL; /*110X 驱动build in,内存池初始化上移到内核完成,保证大片内存申请成功*/ ul_rslt = oal_mem_init_pool(); if (ul_rslt != OAL_SUCC) { OAL_IO_PRINT("oal_main_init: oal_mem_init_pool return error code: %d", ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } OAL_IO_PRINT("mem pool init succ\n"); pst_root_boot_object = oal_get_sysfs_root_boot_object(); if(NULL == pst_root_boot_object) { OAL_IO_PRINT("[E]get root boot sysfs object failed!\n"); return -OAL_EBUSY; } ret = sysfs_create_group(pst_root_boot_object,&plat_init_attribute_group); if (ret) { OAL_IO_PRINT("sysfs create plat boot group fail.ret=%d\n",ret); ret = -OAL_ENOMEM; return ret; } return ret; }
/*built-in*/ OAL_STATIC ssize_t wifi_sysfs_set_init(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { char mode[128] = {0}; OAL_BUG_ON(NULL == dev); OAL_BUG_ON(NULL == attr); OAL_BUG_ON(NULL == buf); if ((sscanf(buf, "%20s", mode) != 1)) { OAL_IO_PRINT("set value one param!\n"); return -OAL_EINVAL; } if(sysfs_streq("init", mode)) { /*init*/ if(0 == g_wifi_init_flag) { g_wifi_init_ret = hi1102_host_main_init(); g_wifi_init_flag = 1; } else { OAL_IO_PRINT("double init!\n"); } } else { OAL_IO_PRINT("invalid input:%s\n",mode); } return count; }
oal_void device_main_init(oal_void) { /* init */ extern volatile oal_uint32 g_ulGpioIntCount; oal_int32 l_return = OAL_FAIL; l_return = hi1102_device_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("device_main_function: Hi1102_device_main_init return error code: %d", l_return); /* 初始化失败不退出主程序,等待重启 */ for (;;) ; } OAL_IO_PRINT("device_main_function: hi1102_device_main_init succ!!\r\n"); #if 1 #if (SUB_SYSTEM == SUB_SYS_WIFI) PM_WLAN_IsrRegister(); PM_WLAN_FuncRegister(device_psm_main_function,dmac_psm_check_hw_txq_state,dmac_psm_check_txrx_state,dmac_psm_clean_state,dmac_psm_save_start_dma,dmac_psm_save_ps_state, dmac_psm_recover_no_powerdown, dmac_psm_recover_start_dma,dmac_psm_recover_powerdown, dmac_psm_cbb_stopwork, dmac_psm_rf_awake, dmac_psm_rf_sleep, dmac_psm_sync_tsf_to_sta,dmac_psm_sync_tsf_to_ap,dmac_psm_is_fake_queues_empty); #endif #endif g_ulGpioIntCount = 0; }
oal_int32 hi1102_device_main_init(oal_void) { oal_int32 l_return = OAL_FAIL; oal_uint16 us_bitmap; //frw_event_mem_stru *pst_event_mem; //WLAN_EDA_TRACE_TAG(0x4100UL); l_return = platform_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("host_bottom_main_init: platform_module_init return error code: %d\r\n", l_return); return l_return; } //WLAN_EDA_TRACE_TAG(0x4200UL); l_return = device_module_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("host_bottom_main_init: device_module_init return error code: %d\r\n", l_return); us_bitmap = BIT0 | BIT1 | BIT2 | BIT3; builder_module_exit(us_bitmap); return l_return; } #if 0 /* 1102 需要在device初始化成功后同步速率级 */ pst_event_mem = FRW_EVENT_ALLOC(0); if (OAL_UNLIKELY(OAL_PTR_NULL == pst_event_mem)) { OAL_IO_PRINT("hi1102_device_main_init: dmac_init_event_process FRW_EVENT_ALLOC result = OAL_PTR_NULL.\n"); return OAL_FAIL; } l_return = dmac_init_event_process(pst_event_mem); if (OAL_SUCC != l_return) { OAL_IO_PRINT("hi1102_device_main_init: dmac_init_event_process result = fale.\n"); FRW_EVENT_FREE(pst_event_mem); return OAL_FAIL; } FRW_EVENT_FREE(pst_event_mem); #endif #if (!defined(HI1102_EDA)) /*device_ready:调用HCC接口通知Hmac,Dmac已经完成初始化 TBD*/ //hcc_send_msg2host(D2H_MSG_WLAN_READY); SDIO_SendMsgSync(D2H_MSG_WLAN_READY); #endif /*启动完成后,输出打印*/ OAL_IO_PRINT("Hi1102_device_main_init:: Hi1102_device_main_init finish!\r\n"); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : sdt_drv_netlink_recv 功能描述 : 从SDT APP侧接收到数据 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年1月28日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_void sdt_drv_netlink_recv(oal_netbuf_stru *pst_netbuf) { oal_netbuf_stru *pst_net_buf = OAL_PTR_NULL; oal_nlmsghdr_stru *pst_nlhdr = OAL_PTR_NULL; sdt_drv_netlink_msg_hdr_stru st_msg_hdr; oal_int32 l_len; if (OAL_PTR_NULL == pst_netbuf) { OAL_IO_PRINT("sdt_drv_netlink_recv::pst_netbuf is null!\n"); return; } OAL_MEMZERO(g_st_sdt_drv_mng_entry.puc_data, DATA_BUF_LEN); pst_net_buf = oal_netbuf_get(pst_netbuf); if (OAL_NETBUF_LEN(pst_net_buf) >= OAL_NLMSG_SPACE(0)) { pst_nlhdr = oal_nlmsg_hdr((OAL_CONST oal_netbuf_stru *)pst_net_buf); l_len = (oal_int32)OAL_NLMSG_PAYLOAD(pst_nlhdr, 0); if(l_len <= DATA_BUF_LEN) { oal_memcopy((oal_void *)g_st_sdt_drv_mng_entry.puc_data, (const oal_void *)OAL_NLMSG_DATA(pst_nlhdr), (oal_uint32)l_len); } else { /*overflow*/ OAL_IO_PRINT("[ERROR]invaild netlink buff len:%u,max len:%u\n",(oal_uint32)l_len,DATA_BUF_LEN); oal_mem_sdt_netbuf_free(pst_net_buf, OAL_TRUE); return; } oal_memcopy((oal_void *)&st_msg_hdr, (const oal_void *)g_st_sdt_drv_mng_entry.puc_data, (oal_uint32)OAL_SIZEOF(st_msg_hdr)); if (NETLINK_MSG_HELLO == st_msg_hdr.ul_cmd) { g_st_sdt_drv_mng_entry.ul_usepid = pst_nlhdr->nlmsg_pid; /*pid of sending process */ OAL_IO_PRINT("%s pid is-->%d \n", OAL_FUNC_NAME, g_st_sdt_drv_mng_entry.ul_usepid); } else { sdt_drv_send_data_to_wifi(&g_st_sdt_drv_mng_entry.puc_data[OAL_SIZEOF(st_msg_hdr)], l_len - (oal_int32)OAL_SIZEOF(st_msg_hdr)); } } oal_mem_sdt_netbuf_free(pst_net_buf, OAL_TRUE); //oal_netbuf_free(pst_net_buf); }
oal_int32 host_module_init(oal_void) { oal_int32 l_return = OAL_FAIL; oal_uint16 us_bitmap = 0; #ifdef _PRE_PLAT_FEATURE_CUSTOMIZE hwifi_config_init(CUS_TAG_DTS); hwifi_config_host_global_dts_param(); hwifi_config_init(CUS_TAG_NV); #endif /* #ifdef _PRE_PLAT_FEATURE_CUSTOMIZE */ l_return = hmac_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("host_module_init: hmac_main_init return error code: %d", l_return); return l_return; } #if 0 #if ((_PRE_OS_VERSION_WIN32 == _PRE_OS_VERSION)&&(_PRE_PRODUCT_ID_HI1102_HOST ==_PRE_PRODUCT_ID)) /* ut工程打桩用:从device获取板级信息 */ l_return = (oal_int32) host_test_get_chip_msg(); if (OAL_SUCC != l_return) { us_bitmap = BIT7; builder_module_exit(us_bitmap); return l_return; } #endif #endif l_return = wal_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("host_module_init: wal_main_init return error code: %d", l_return); us_bitmap = BIT7; builder_module_exit(us_bitmap); return l_return; } #if (_PRE_MULTI_CORE_MODE_OFFLOAD_DMAC == _PRE_MULTI_CORE_MODE)&&(_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION) g_uc_custom_cali_done = OAL_FALSE; wlan_pm_open(); #endif //mdelay(7); //wlan_pm_close(); /*启动完成后,输出打印*/ OAL_IO_PRINT("host_module_init:: host_main_init finish!"); return OAL_SUCC; }
OAL_STATIC oal_int32 device_module_init(oal_void) { oal_int32 l_return = OAL_FAIL; oal_uint16 us_bitmap = 0; //WLAN_EDA_TRACE_TAG(0x4210UL); l_return = hal_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("device_module_init: hal_main_init return error code: %d", l_return); return l_return; } //WLAN_EDA_TRACE_TAG(0x4220UL); l_return = dmac_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("device_module_init: dmac_main_init return error code: %d", l_return); us_bitmap = BIT4; builder_module_exit(us_bitmap); return l_return; } #if (!defined(HI1102_EDA)) #if defined(_PRE_WLAN_ALG_ENABLE) || defined(_PRE_WLAN_CHIP_TEST_ALG) l_return = alg_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("device_module_init: alg_main_init return error code : %d", l_return); us_bitmap = BIT4 | BIT5; builder_module_exit(us_bitmap); return l_return; } #endif #endif #if 0 #if (((_PRE_OS_VERSION_WIN32_RAW == _PRE_OS_VERSION)&&(_PRE_PRODUCT_ID_HI1102_DEV ==_PRE_PRODUCT_ID)) || (defined(HI1102_EDA))) /* ut工程打桩用:从host下发创建cfg_vap命令 */ l_return = (oal_int32) device_test_create_cfg_vap(); if (OAL_SUCC != l_return) { return l_return; } #endif #endif //WLAN_EDA_TRACE_TAG(0x4240UL); /*启动完成后,输出打印*/ OAL_IO_PRINT("device_module_init:: device_module_init finish!\r\n"); return OAL_SUCC; }
oal_int32 platform_module_init(oal_void) { oal_int32 l_return = OAL_FAIL; oal_uint16 us_bitmap = 0; //WLAN_EDA_TRACE_TAG(0x4110UL); l_return = oal_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("platform_module_init: oal_main_init return error code: %d\r\n", l_return); return l_return; } #if (!defined(HI1102_EDA)) l_return = oam_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("platform_module_init: oam_main_init return error code: %d\r\n", l_return); us_bitmap = BIT0; builder_module_exit(us_bitmap); return l_return; } #if (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION) #if (_PRE_PRODUCT_ID == _PRE_PRODUCT_ID_HI1151) /* 02目前不需要SDT初始化 TBD */ l_return = sdt_drv_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("platform_module_init: sdt_drv_main_init return error code: %d\r\n", l_return); us_bitmap = BIT0|BIT1; builder_module_exit(us_bitmap); return l_return; } #endif #endif #endif //WLAN_EDA_TRACE_TAG(0x4120UL); l_return = frw_main_init(); if (OAL_SUCC != l_return) { OAL_IO_PRINT("platform_module_init: frw_main_init return error code: %d\r\n", l_return); us_bitmap = BIT0 | BIT1 | BIT2; builder_module_exit(us_bitmap); return l_return; } /*启动完成后,输出打印*/ OAL_IO_PRINT("platform_module_init:: platform_main_init finish!\r\n"); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : oam_kernel_netlink_create 功能描述 : 内核netlink创建函数 输入参数 : 无 输出参数 : 无 返 回 值 : 成功: OAL_SUCC 失败: 其它错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年10月15日 作 者 : mayuan 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_netlink_kernel_create(oal_void) { g_st_netlink.pst_nlsk = oal_netlink_kernel_create(&OAL_INIT_NET, OAM_NETLINK_ID, 0, oam_netlink_kernel_recv, OAL_PTR_NULL, OAL_THIS_MODULE); if (OAL_PTR_NULL == g_st_netlink.pst_nlsk) { OAL_IO_PRINT("oam_netlink_kernel_create, can not create netlink."); return OAL_ERR_CODE_PTR_NULL; } OAL_IO_PRINT("netlink create succ."); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : sdt_drv_check_isdevlog 功能描述 : 检测上报日志是否为device log 输入参数 : oal_net 输出参数 : 无 返 回 值 : int32 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年12月26日 作 者 : jwx222439 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC OAL_INLINE oal_int32 sdt_drv_check_isdevlog(oal_netbuf_stru *pst_netbuf) { oal_uint8 *puc_pkt_tail; sdt_drv_pkt_hdr_stru *pst_pkt_hdr; pst_pkt_hdr = (sdt_drv_pkt_hdr_stru *)oal_netbuf_data(pst_netbuf); puc_pkt_tail = (oal_uint8 *)pst_pkt_hdr + OAL_NETBUF_LEN(pst_netbuf); OAL_IO_PRINT("devlog {%s}\n", oal_netbuf_data(pst_netbuf)); if (SDT_DRV_PKT_END_FLG == *puc_pkt_tail || SDT_DRV_PKT_START_FLG == pst_pkt_hdr->uc_data_start_flg) { OAL_IO_PRINT("check out is device log\n"); return OAL_SUCC; } return -OAL_EFAIL; }
/***************************************************************************** 函 数 名 : oam_upload_log_to_sdt 功能描述 : 打印信息到PC侧可维可测工具平台中 输入参数 : pc_string : 需要打印到可维可测工具平台中的字符串,以\0结束。 输出参数 : 无 返 回 值 : OAL_SUCC或其他错误码。 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年10月15日 作 者 : c59720 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_upload_log_to_sdt(oal_int8 *pc_string) { oal_netbuf_stru *pst_skb; oal_uint32 ul_ret = OAL_SUCC; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } if (OAL_PTR_NULL == pc_string) { OAL_IO_PRINT("oam_upload_log_to_sdt::pc_string is null!\n"); return OAL_ERR_CODE_PTR_NULL; } pst_skb = oam_alloc_data2sdt(OAL_SIZEOF(oam_log_info_stru)); if (OAL_PTR_NULL == pst_skb) { return OAL_ERR_CODE_PTR_NULL; } /* COPY打印的内容 */ oal_memcopy(oal_netbuf_data(pst_skb), pc_string, OAL_SIZEOF(oam_log_info_stru)); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_skb, OAM_DATA_TYPE_LOG, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : oam_dump_buff_by_hex 功能描述 : buff按十六进格式固定长度打印输出,每输出l_num个换行 输入参数 : oal_uint8 *puc_buff oal_int32 l_len oal_int32 l_num 输出参数 : 无 返 回 值 : oal_void 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年3月10日,星期一 作 者 : y00201072 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_dump_buff_by_hex(oal_uint8 *puc_buff, oal_int32 l_len, oal_int32 l_num) { oal_int32 l_loop; for (l_loop = 0; l_loop < l_len; l_loop++) { OAL_IO_PRINT("%02x ", puc_buff[l_loop]); if (0 == (l_loop + 1) % l_num) { OAL_IO_PRINT("\n"); } } OAL_IO_PRINT("\n"); }
/***************************************************************************** 函 数 名 : oam_netlink_ops_unregister 功能描述 : OAM模块向其它模块提供的卸载netlink消息处理函数(接收方向) 输入参数 : en_type: 模块类型 输出参数 : 无 返 回 值 : 无 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年10月22日 作 者 : mayuan 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_netlink_ops_unregister(oam_nl_cmd_enum_uint8 en_type) { switch (en_type) { case OAM_NL_CMD_SDT: g_st_netlink_ops.p_oam_sdt_func = OAL_PTR_NULL; break; case OAM_NL_CMD_HUT: g_st_netlink_ops.p_oam_hut_func = OAL_PTR_NULL; break; case OAM_NL_CMD_ALG: g_st_netlink_ops.p_oam_alg_func = OAL_PTR_NULL; break; case OAM_NL_CMD_DAQ: g_st_netlink_ops.p_oam_daq_func = OAL_PTR_NULL; break; case OAM_NL_CMD_REG: g_st_netlink_ops.p_oam_reg_func = OAL_PTR_NULL; break; case OAM_NL_CMD_ACS: g_st_netlink_ops.p_oam_acs_func = OAL_PTR_NULL; break; default: OAL_IO_PRINT("oam_netlink_ops_unregister::err type = %d.", en_type); break; } }
/***************************************************************************** 函 数 名 : oam_stats_report_irq_info_to_sdt 功能描述 : 中断统计信息上报SDT 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年2月21日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_stats_report_irq_info_to_sdt( oal_uint8 *puc_irq_info_addr, oal_uint16 us_irq_info_len) { oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return ; } if (OAL_PTR_NULL == puc_irq_info_addr) { OAL_IO_PRINT("oam_stats_report_irq_info_to_sdt::puc_irq_info_addr is null!\n"); return; } /* 为上报描述符申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_irq_info_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; us_irq_info_len = WLAN_SDT_NETBUF_MAX_PAYLOAD - OAL_SIZEOF(oam_ota_hdr_stru); } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_IRQ; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = us_irq_info_len; #if (_PRE_PRODUCT_ID == _PRE_PRODUCT_ID_HI1102_HOST) pst_ota_data->st_ota_hdr.auc_resv[0] = 2; #else pst_ota_data->st_ota_hdr.auc_resv[0] = 3; #endif /* 复制数据,填写ota数据 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)puc_irq_info_addr, (oal_uint32)us_irq_info_len); /* 下发至sdt接收队列,若队列满则串口输出 */ oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); }
/***************************************************************************** 函 数 名 : oam_netlink_kernel_destroy 功能描述 : 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年11月8日 作 者 : mayuan 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_netlink_kernel_release(oal_void) { oal_netlink_kernel_release(g_st_netlink.pst_nlsk); g_st_netlink.ul_pid = 0; OAL_IO_PRINT("netlink release succ."); }
/***************************************************************************** 函 数 名 : frw_set_thread_property 功能描述 : 设置线程参数函数 输入参数 : p: 当前线程; policy: 调度策略; param: 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2015年4月9日 作 者 : lingxuemeng 00324381 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC void frw_set_thread_property(oal_task_stru *p, int policy, struct sched_param *param, long nice) { OAL_BUG_ON(!p); OAL_BUG_ON(!param); if(oal_sched_setscheduler(p, policy, param)) { OAL_IO_PRINT("[Error]set scheduler failed! %d\n", policy); } if(policy != SCHED_FIFO && policy != SCHED_RR) { OAL_IO_PRINT("set thread scheduler nice %ld\n", nice); oal_set_user_nice(p, nice); } }
/***************************************************************************** 函 数 名 : oal_bus_get_dev_instance 功能描述 : 获取bus dev 输入参数 : uc_chip_id : CHIP ID uc_device_id : DEVICE ID 输出参数 : 无 返 回 值 : 错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年4月8日 作 者 : chenyan 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC oal_bus_dev_stru * oal_bus_get_dev_instance(oal_uint8 uc_chip_id, oal_uint8 uc_device_id) { oal_bus_chip_stru *pst_bus_chip; if(uc_chip_id >= WLAN_CHIP_MAX_NUM_PER_BOARD) { OAL_IO_PRINT("oal_bus_register_irq: uc_chip_id = %d\n", uc_chip_id); return OAL_PTR_NULL; } pst_bus_chip = &g_st_bus_chip[uc_chip_id]; if(uc_device_id >= pst_bus_chip->uc_device_num) { OAL_IO_PRINT("oal_bus_register_irq: uc_device_id = %d\n", uc_device_id); return OAL_PTR_NULL; } return &pst_bus_chip->st_bus_dev[uc_device_id]; }
/***************************************************************************** 函 数 名 : oam_print_to_console 功能描述 : 打印信息到标准输出窗口中 输入参数 : pc_string : 需要打印到标准输出窗口中的字符串,以\0结束。 输出参数 : 无 返 回 值 : OAL_SUCC或其他错误码。 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年10月15日 作 者 : c59720 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_print_to_console(oal_int8 *pc_string) { if (OAL_UNLIKELY(OAL_PTR_NULL == pc_string)) { return OAL_ERR_CODE_PTR_NULL; } OAL_IO_PRINT("%s\r\n", pc_string); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : oal_bus_get_instance 功能描述 : 获取总线设备接口 输入参数 : oal_bus_dev_stru **ppst_bus_dev, oal_uint8 uc_index 输出参数 : ppst_bus_dev: 总线设备 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年2月28日 作 者 : zhangheng 修改内容 : 新生成函数 *****************************************************************************/ oal_void oal_bus_get_chip_instance(oal_bus_chip_stru **ppst_bus_chip, oal_uint8 uc_index) { if(uc_index < WLAN_CHIP_MAX_NUM_PER_BOARD) { *ppst_bus_chip = &g_st_bus_chip[uc_index]; } else { *ppst_bus_chip = OAL_PTR_NULL; OAL_IO_PRINT("oal_bus_get_chip_instance: uc_index = %d\n", uc_index); } }
oal_int32 wifi_sysfs_init(oal_void) { oal_int32 ret = 0; oal_kobject* pst_root_boot_object = NULL; pst_root_boot_object = oal_get_sysfs_root_boot_object(); if(NULL == pst_root_boot_object) { OAL_IO_PRINT("[E]get root boot sysfs object failed!\n"); return -OAL_EBUSY; } ret = sysfs_create_group(pst_root_boot_object,&wifi_init_attribute_group); if (ret) { OAL_IO_PRINT("sysfs create plat boot group fail.ret=%d\n",ret); ret = -OAL_ENOMEM; return ret; } return ret; }
STATIC ssize_t store_wifi_pmdbg(struct device *dev, struct kobj_attribute *attr, const char *buf, size_t count) { struct wlan_pm_s *pst_wlan_pm = wlan_pm_get_drv(); int input = 0; if (NULL == buf) { PS_PRINT_ERR("buf is NULL\n"); return -FAILURE; } input = oal_atoi(buf); if (NULL == pst_wlan_pm) { OAL_IO_PRINT("pm_data is NULL!\n"); return -FAILURE; } switch(input) { case 1: wlan_pm_dump_host_info(); break; case 2: wlan_pm_dump_device_info(); break; #ifdef PLATFORM_DEBUG_ENABLE case 3: wlan_pm_open(); break; case 4: wlan_pm_close(); break; case 5: wlan_pm_enable(); break; case 6: wlan_pm_disable(); break; #endif case 7: frw_timer_sys_start(); break; case 8: frw_timer_sys_stop(); break; default: break; } return count; }
/***************************************************************************** 函 数 名 : sdt_drv_netlink_create 功能描述 : 创建netlink 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年1月28日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_int32 sdt_drv_netlink_create(oal_void) { g_st_sdt_drv_mng_entry.pst_nlsk = oal_netlink_kernel_create(&OAL_INIT_NET, NETLINK_TEST, 0, sdt_drv_netlink_recv, OAL_PTR_NULL, OAL_THIS_MODULE); if (OAL_PTR_NULL == g_st_sdt_drv_mng_entry.pst_nlsk) { OAL_IO_PRINT("sdt_drv_netlink_create return fail!\n"); return -OAL_EFAIL; } return OAL_SUCC; }
/***************************************************************************** 函 数 名 : oam_netlink_ops_register 功能描述 : WAL模块向其它模块提供的注册netlink消息处理函数(接收方向) 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2013年10月17日 作 者 : mayuan 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_netlink_ops_register(oam_nl_cmd_enum_uint8 en_type, oal_uint32 (*p_func)(oal_uint8 *puc_data, oal_uint32 ul_len)) { if (OAL_UNLIKELY(OAL_PTR_NULL == p_func)) { OAL_IO_PRINT("oam_netlink_ops_register, p_func is null ptr."); return; } switch (en_type) { case OAM_NL_CMD_SDT: g_st_netlink_ops.p_oam_sdt_func = p_func; break; case OAM_NL_CMD_HUT: g_st_netlink_ops.p_oam_hut_func = p_func; break; case OAM_NL_CMD_ALG: g_st_netlink_ops.p_oam_alg_func = p_func; break; case OAM_NL_CMD_DAQ: g_st_netlink_ops.p_oam_daq_func = p_func; break; case OAM_NL_CMD_REG: g_st_netlink_ops.p_oam_reg_func = p_func; break; case OAM_NL_CMD_ACS: g_st_netlink_ops.p_oam_acs_func = p_func; break; default: OAL_IO_PRINT("oam_netlink_ops_register, err type = %d.", en_type); break; } }
/***************************************************************************** 函 数 名 : oal_bus_inc_chip_num 功能描述 : 获取硬件总线接口个数 输入参数 : 无 输出参数 : 无 返 回 值 : chip 个数 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年10月31日 作 者 : t00231215 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oal_bus_inc_chip_num(oal_void) { if(g_uc_bus_chip_num < WLAN_CHIP_MAX_NUM_PER_BOARD) { g_uc_bus_chip_num++; } else { OAL_IO_PRINT("oal_bus_inc_chip_num FAIL: g_uc_bus_chip_num = %d\n", g_uc_bus_chip_num); return OAL_FAIL; } /* WINDOWS下UT代码 */ #if (_PRE_OS_VERSION_WIN32 == _PRE_OS_VERSION) && (_PRE_TEST_MODE == _PRE_TEST_MODE_UT) g_st_bus_chip[0].uc_device_num = g_uc_bus_chip_num; #endif return OAL_SUCC; }
/***************************************************************************** 函 数 名 : oam_cfg_get_item_by_id 功能描述 : 提供给其他模块获取配置项值的接口 输入参数 : en_cfg_type:其它模块传入的配置项类型 输出参数 : 返 回 值 : 配置项的值或者错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年4月10日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_int32 oam_cfg_get_item_by_id(oam_cfg_type_enum_uint16 en_cfg_type) { oal_uint32 ul_loop; for (ul_loop = 0; ul_loop < OAM_CFG_TYPE_BUTT; ul_loop++) { if (en_cfg_type == g_ast_cfg_data[ul_loop].en_cfg_type) { break; } } if (OAM_CFG_TYPE_BUTT == ul_loop) { OAL_IO_PRINT("oam_cfg_get_item_by_id::get cfg item failed!\n"); return -OAL_FAIL; } return g_ast_cfg_data[ul_loop].l_val; }
/***************************************************************************** 函 数 名 : sdt_drv_main_init 功能描述 : sdt_drv初始化函数 输入参数 : 无 输出参数 : 无 返 回 值 : 成功或者失败原因 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年1月23日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_int32 sdt_drv_main_init(oal_void) { oal_int32 l_nl_return_val; OAL_MEMZERO((void *)&g_st_sdt_drv_mng_entry, OAL_SIZEOF(g_st_sdt_drv_mng_entry)); g_st_sdt_drv_mng_entry.puc_data = oal_memalloc(DATA_BUF_LEN); if (OAL_PTR_NULL == g_st_sdt_drv_mng_entry.puc_data) { OAL_IO_PRINT("alloc g_st_sdt_drv_mng_entry.puc_data fail!\n"); return -OAL_EFAIL; } OAL_MEMZERO(g_st_sdt_drv_mng_entry.puc_data, DATA_BUF_LEN); l_nl_return_val = sdt_drv_netlink_create(); if (0 > l_nl_return_val) { OAL_IO_PRINT("sdt_drv_main_init::create netlink returns fail! l_nl_return_val--> \ %d\n", l_nl_return_val); return -l_nl_return_val; }