int hw_start(struct net_adapter *adapter) { struct wimax_cfg *g_cfg = adapter->pdata->g_cfg; if (load_wimax_image(g_cfg->wimax_mode)) return STATUS_UNSUCCESSFUL; adapter->download_complete = FALSE; if (adapter->downloading) { sdio_claim_host(adapter->func); send_cmd_packet(adapter, MSG_DRIVER_OK_REQ); sdio_release_host(adapter->func); switch (wait_event_interruptible_timeout (adapter->download_event, (adapter->download_complete == TRUE), msecs_to_jiffies(FWDOWNLOAD_TIMEOUT))) { case 0: /* timeout */ dump_debug("Error hw_start :" "F/W Download timeout failed"); adapter->halted = TRUE; return STATUS_UNSUCCESSFUL; case -ERESTARTSYS: /* Interrupted by signal */ dump_debug("Error hw_start : -ERESTARTSYS retry"); return STATUS_UNSUCCESSFUL; default: /* normal condition check */ if (adapter->removed == TRUE || adapter->halted == TRUE) { dump_debug("Error hw_start : " " F/W Download surprise removed"); return STATUS_UNSUCCESSFUL; } /*Setup hostwake interrupt*/ if (cmc732_setup_wake_irq(adapter) < 0) dump_debug("hw_start : " " Error setting up wimax_int"); break; } adapter->downloading = FALSE; } return STATUS_SUCCESS; }
int wimax_hw_start(struct net_adapter *adapter) { struct wimax732_platform_data *pdata = adapter->pdata; pdata->g_cfg->wimax_status = WIMAX_STATE_READY; adapter->download_complete = false; adapter->rx_task = kthread_create( cmc732_receive_thread, adapter, "%s", "cmc732_receive_thread"); adapter->tx_task = kthread_create( cmc732_send_thread, adapter, "%s", "cmc732_send_thread"); init_waitqueue_head(&adapter->receive_event); init_waitqueue_head(&adapter->send_event); if (adapter->rx_task && adapter->tx_task) { wake_up_process(adapter->rx_task); wake_up_process(adapter->tx_task); } else { pr_debug("Unable to create send-receive threads"); return STATUS_UNSUCCESSFUL; } if (load_wimax_image(pdata->g_cfg->wimax_mode, adapter)) return STATUS_UNSUCCESSFUL; if (adapter->downloading) { send_cmd_packet(adapter, MSG_DRIVER_OK_REQ); switch (wait_event_interruptible_timeout( adapter->download_event, (adapter->download_complete), HZ*FWDOWNLOAD_TIMEOUT)) { case 0: /* timeout */ pr_debug("Error wimax_hw_start : \ F/W Download timeout failed"); goto download_fail; case -ERESTARTSYS: /* Interrupted by signal */ pr_debug("Error wimax_hw_start :" "-ERESTARTSYS retry"); goto download_fail; default: /* normal condition check */ if (adapter->removed || adapter->halted) { pr_debug("Error wimax_hw_start : \ F/W Download surprise removed"); goto download_fail; } pr_debug("wimax_hw_start : F/W Download Complete"); unload_wimax_image(adapter); if (cmc732_setup_wake_irq(adapter) < 0) pr_debug("wimax_hw_start :" "Error setting up wimax_int"); break; }