int wlan_logging_sock_activate_svc(int log_fe_to_console, int num_buf) { int i = 0; unsigned long irq_flag; pr_info("%s: Initalizing FEConsoleLog = %d NumBuff = %d\n", __func__, log_fe_to_console, num_buf); gapp_pid = INVALID_PID; gplog_msg = (struct log_msg *) vmalloc( num_buf * sizeof(struct log_msg)); if (!gplog_msg) { pr_err("%s: Could not allocate memory\n", __func__); return -ENOMEM; } vos_mem_zero(gplog_msg, (num_buf * sizeof(struct log_msg))); gwlan_logging.log_fe_to_console = !!log_fe_to_console; gwlan_logging.num_buf = num_buf; spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); INIT_LIST_HEAD(&gwlan_logging.free_list); INIT_LIST_HEAD(&gwlan_logging.filled_list); for (i = 0; i < num_buf; i++) { list_add(&gplog_msg[i].node, &gwlan_logging.free_list); gplog_msg[i].index = i; } gwlan_logging.pcur_node = (struct log_msg *) (gwlan_logging.free_list.next); list_del_init(gwlan_logging.free_list.next); spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); init_waitqueue_head(&gwlan_logging.wait_queue); gwlan_logging.exit = false; gwlan_logging.wakeEvent = FALSE; init_completion(&gwlan_logging.shutdown_comp); gwlan_logging.thread = kthread_create(wlan_logging_thread, NULL, "wlan_logging_thread"); if (IS_ERR(gwlan_logging.thread)) { pr_err("%s: Could not Create LogMsg Thread Controller", __func__); spin_lock_irqsave(&gwlan_logging.spin_lock, irq_flag); vfree(gplog_msg); gplog_msg = NULL; gwlan_logging.pcur_node = NULL; spin_unlock_irqrestore(&gwlan_logging.spin_lock, irq_flag); return -ENOMEM; } wake_up_process(gwlan_logging.thread); nl_srv_register(ANI_NL_MSG_LOG, wlan_logging_proc_sock_rx_msg); //Broadcast SVC ready message to logging app/s running wlan_logging_srv_nl_ready_indication(); pr_info("%s: Activated wlan_logging svc\n", __func__); return 0; }
/* * Activate BTC handler. This will register a handler to receive * netlink messages addressed to WLAN_NL_MSG_BTC from user space */ int btc_activate_service(void *pAdapter) { pHddCtx = (struct hdd_context_s*)pAdapter; //Register the msg handler for msgs addressed to ANI_NL_MSG_BTC nl_srv_register(WLAN_NL_MSG_BTC, btc_msg_callback); return 0; }