}
rc = IPC_DeviceIoControl(adapter_name, TIWLN_SET_INIT_INFO, init_info, req_size, NULL, 0, NULL);
+ if (rc != 0)
+ {
+ fprintf(stderr, "SET_INIT ioctl failed %s, %s\n", adapter_name, strerror(errno));
+ goto init_driver_end;
+ }
/*Send configMge start command as the cli is started*/
IPC_DeviceIoControl(adapter_name, TIWLN_DRIVER_STATUS_SET, &tmpData, sizeof(tiUINT32), NULL, 0, NULL);
/* DbgCB_Insert(0, DBG_MODULE_OS, DBG_TYPE_TASKLET, 1)*/
}
+static void tiwlan_fail_requests( tiwlan_net_dev_t *drv )
+{
+ while(!list_empty(&drv->request_q))
+ {
+ struct list_head *entry = drv->request_q.next;
+ tiwlan_req_t *req = list_entry(entry, tiwlan_req_t, list);
+ unsigned long flags;
+
+ spin_lock_irqsave(&drv->lock, flags);
+ list_del_init(entry);
+ spin_unlock_irqrestore(&drv->lock, flags);
+
+ req->u.reply = -ENODEV;
+ if (req->u.req.reply_expected)
+ complete(&req->u.req.comp);
+ }
+}
+
#ifdef DM_USE_WORKQUEUE
static void tiwlan_irq_handler( struct work_struct *work )
{
}
/* don't call for "Handle interrupts, timers, ioctls" while recovery process */
- if (configMgr_areInputsFromOsDisabled(drv->adapter.CoreHalCtx) == TRUE) {
+ if (drv->adapter.CoreHalCtx == NULL ||
+ configMgr_areInputsFromOsDisabled(drv->adapter.CoreHalCtx) == TRUE) {
#ifdef CONFIG_ANDROID_POWER
android_unlock_suspend( &drv->timer_wake_lock );
#endif
+ tiwlan_fail_requests(drv);
return;
}