OAL_STATIC ssize_t wifi_sysfs_get_init(struct device *dev, struct device_attribute *attr, char*buf) { int ret = 0; OAL_BUG_ON(NULL == dev); OAL_BUG_ON(NULL == attr); OAL_BUG_ON(NULL == buf); if(1 == g_wifi_init_flag) { if(OAL_SUCC == g_wifi_init_ret) { ret += snprintf(buf + ret , PAGE_SIZE-ret, "running\n"); } else { ret += snprintf(buf + ret , PAGE_SIZE-ret, "boot failed ret=%d\n", g_wifi_init_ret); } } else { ret += snprintf(buf + ret , PAGE_SIZE-ret, "uninit\n"); } 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_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; }
/***************************************************************************** 函 数 名 : 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_int32 oam_rx_post_action_function(oal_uint8 stype, hcc_netbuf_stru* pst_hcc_netbuf, oal_uint8 *pst_context) { oal_uint8 *puc_data; OAL_REFERENCE(pst_context); OAL_BUG_ON(NULL == pst_hcc_netbuf); puc_data = oal_netbuf_data(pst_hcc_netbuf->pst_netbuf); if((DUMP_REG == stype) || (DUMP_MEM == stype)) { //AL_IO_PRINT("receive dump msg = %d\n", stype); exception_bcpu_dump_recv(puc_data,pst_hcc_netbuf->pst_netbuf); oal_netbuf_free(pst_hcc_netbuf->pst_netbuf); return OAL_SUCC; } /* 调用OAM接口*/ oam_send_device_data2sdt(puc_data, (oal_uint16)pst_hcc_netbuf->len); oal_netbuf_free(pst_hcc_netbuf->pst_netbuf); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : oam_main_init 功能描述 : OAM模块初始化总入口,包含OAM模块内部所有特性的初始化。 输入参数 : 无 输出参数 : 无 返 回 值 : 初始化返回值,成功或失败原因 调用函数 : 无 被调函数 : 无 修改历史 : 1.日 期 : 2012年9月18日 作 者 : 康国昌 修改内容 : 新生成函数 *****************************************************************************/ oal_int32 oam_main_init(oal_void) { oal_uint32 ul_rslt; /* 初始化可维可测试FILE路径 */ ul_rslt = oam_set_file_path(WLAN_OAM_FILE_PATH, (OAL_STRLEN(WLAN_OAM_FILE_PATH) + 1)); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_set_file_path fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } /* 初始化可维可测输出方式 */ ul_rslt = oam_set_output_type(OAM_OUTPUT_TYPE_SDT); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_set_output_type fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } /* 完成LOG模块的初始化操作 */ ul_rslt = oam_log_init(); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_log_init fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } /* 完成EVENT模块的初始化操作 */ ul_rslt = oam_event_init(); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_event_init fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } /* 初始化5115timer,用于代码中获取高精度时间戳 */ oal_5115timer_init(); #ifdef _PRE_PROFILING_MODE /* 完成PROFILING模块的初始化操作 */ ul_rslt = oam_profiling_init(); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_profiling_init fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } #endif /* 初始化oam模块的钩子函数 */ oam_drv_func_hook_init(); /* 统计模块初始化 */ oam_statistics_init(); /*TBD,待命令触发定制化初始操作*/ #if 0 /* 从配置文件中获取配置信息,保存到OAM内部结构中 */ for (ul_counter= 0; ul_counter < OM_MODULEID_BUTT; ul_counter++) { if (OAL_PTR_NULL != g_oam_customize.customize_init[ul_counter]) { g_oam_customize.customize_init[ul_counter](); } } #endif #ifdef _PRE_WLAN_DFT_REG oam_reg_init(); #endif #if ((_PRE_OS_VERSION_RAW != _PRE_OS_VERSION) && (_PRE_OS_VERSION_WIN32_RAW != _PRE_OS_VERSION)) /* ??netlink */ #if (_PRE_PRODUCT_ID == _PRE_PRODUCT_ID_HI1151) /* 所用的端口号在系统中已被占用,02无法使用这个接口,需要修改 TBD */ ul_rslt = oam_netlink_kernel_create(); if (OAL_SUCC != ul_rslt) { OAL_IO_PRINT("oam_main_init call oam_netlink_kernel_create fail %d\n",ul_rslt); OAL_BUG_ON(1); return -OAL_EFAIL; } #endif #endif #if (_PRE_PRODUCT_ID == _PRE_PRODUCT_ID_HI1102_HOST) hcc_rx_register(hcc_get_default_handler(),HCC_ACTION_TYPE_OAM,oam_rx_post_action_function,NULL); #endif return OAL_SUCC; }