H A D | hfa384x_usb.c | 201 static int hfa384x_usbctlx_submit(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx); 203 static void unlocked_usbctlx_complete(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx); 211 hfa384x_usbctlx_t *ctlx, 215 unlocked_usbctlx_cancel_async(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx); 217 static void hfa384x_cb_status(hfa384x_t *hw, const hfa384x_usbctlx_t *ctlx); 219 static void hfa384x_cb_rrid(hfa384x_t *hw, const hfa384x_usbctlx_t *ctlx); 620 hfa384x_usbctlx_t *ctlx; usbctlx_alloc() local 622 ctlx = kzalloc(sizeof(*ctlx), usbctlx_alloc() 624 if (ctlx != NULL) usbctlx_alloc() 625 init_completion(&ctlx->done); usbctlx_alloc() 627 return ctlx; usbctlx_alloc() 795 * ctlx completed CTLX 805 static void hfa384x_cb_status(hfa384x_t *hw, const hfa384x_usbctlx_t *ctlx) hfa384x_cb_status() argument 807 if (ctlx->usercb != NULL) { hfa384x_cb_status() 810 if (ctlx->state != CTLX_COMPLETE) { hfa384x_cb_status() 815 usbctlx_get_status(&ctlx->inbuf.cmdresp, &cmdresult); hfa384x_cb_status() 818 ctlx->usercb(hw, &cmdresult, ctlx->usercb_data); hfa384x_cb_status() 832 * ctlx completed CTLX 842 static void hfa384x_cb_rrid(hfa384x_t *hw, const hfa384x_usbctlx_t *ctlx) hfa384x_cb_rrid() argument 844 if (ctlx->usercb != NULL) { hfa384x_cb_rrid() 847 if (ctlx->state != CTLX_COMPLETE) { hfa384x_cb_rrid() 849 rridresult.rid = le16_to_cpu(ctlx->outbuf.rridreq.rid); hfa384x_cb_rrid() 851 usbctlx_get_rridresult(&ctlx->inbuf.rridresp, hfa384x_cb_rrid() 855 ctlx->usercb(hw, &rridresult, ctlx->usercb_data); hfa384x_cb_rrid() 1216 * ctlx CTLX ptr 1233 hfa384x_usbctlx_t *ctlx, hfa384x_usbctlx_complete_sync() 1239 result = wait_for_completion_interruptible(&ctlx->done); hfa384x_usbctlx_complete_sync() 1263 if (ctlx == get_active_ctlx(hw)) { hfa384x_usbctlx_complete_sync() 1289 ctlx->reapable = 1; hfa384x_usbctlx_complete_sync() 1290 ctlx->state = CTLX_REQ_FAILED; hfa384x_usbctlx_complete_sync() 1291 list_move_tail(&ctlx->list, &hw->ctlxq.completing); hfa384x_usbctlx_complete_sync() 1298 if (ctlx->state == CTLX_COMPLETE) { hfa384x_usbctlx_complete_sync() 1302 le16_to_cpu(ctlx->outbuf.type), hfa384x_usbctlx_complete_sync() 1303 ctlxstr(ctlx->state)); hfa384x_usbctlx_complete_sync() 1307 list_del(&ctlx->list); hfa384x_usbctlx_complete_sync() 1309 kfree(ctlx); hfa384x_usbctlx_complete_sync() 1354 hfa384x_usbctlx_t *ctlx; hfa384x_docmd() local 1356 ctlx = usbctlx_alloc(); hfa384x_docmd() 1357 if (ctlx == NULL) { hfa384x_docmd() 1363 ctlx->outbuf.cmdreq.type = cpu_to_le16(HFA384x_USB_CMDREQ); hfa384x_docmd() 1364 ctlx->outbuf.cmdreq.cmd = cpu_to_le16(cmd->cmd); hfa384x_docmd() 1365 ctlx->outbuf.cmdreq.parm0 = cpu_to_le16(cmd->parm0); hfa384x_docmd() 1366 ctlx->outbuf.cmdreq.parm1 = cpu_to_le16(cmd->parm1); hfa384x_docmd() 1367 ctlx->outbuf.cmdreq.parm2 = cpu_to_le16(cmd->parm2); hfa384x_docmd() 1369 ctlx->outbufsize = sizeof(ctlx->outbuf.cmdreq); hfa384x_docmd() 1374 ctlx->reapable = mode; hfa384x_docmd() 1375 ctlx->cmdcb = cmdcb; hfa384x_docmd() 1376 ctlx->usercb = usercb; hfa384x_docmd() 1377 ctlx->usercb_data = usercb_data; hfa384x_docmd() 1379 result = hfa384x_usbctlx_submit(hw, ctlx); hfa384x_docmd() 1381 kfree(ctlx); hfa384x_docmd() 1386 hfa384x_usbctlx_complete_sync(hw, ctlx, hfa384x_docmd() 1388 &ctlx-> hfa384x_docmd() 1444 hfa384x_usbctlx_t *ctlx; hfa384x_dorrid() local 1446 ctlx = usbctlx_alloc(); hfa384x_dorrid() 1447 if (ctlx == NULL) { hfa384x_dorrid() 1453 ctlx->outbuf.rridreq.type = cpu_to_le16(HFA384x_USB_RRIDREQ); hfa384x_dorrid() 1454 ctlx->outbuf.rridreq.frmlen = hfa384x_dorrid() 1455 cpu_to_le16(sizeof(ctlx->outbuf.rridreq.rid)); hfa384x_dorrid() 1456 ctlx->outbuf.rridreq.rid = cpu_to_le16(rid); hfa384x_dorrid() 1458 ctlx->outbufsize = sizeof(ctlx->outbuf.rridreq); hfa384x_dorrid() 1460 ctlx->reapable = mode; hfa384x_dorrid() 1461 ctlx->cmdcb = cmdcb; hfa384x_dorrid() 1462 ctlx->usercb = usercb; hfa384x_dorrid() 1463 ctlx->usercb_data = usercb_data; hfa384x_dorrid() 1466 result = hfa384x_usbctlx_submit(hw, ctlx); hfa384x_dorrid() 1468 kfree(ctlx); hfa384x_dorrid() 1473 hfa384x_usbctlx_complete_sync(hw, ctlx, hfa384x_dorrid() 1476 &ctlx->inbuf.rridresp, hfa384x_dorrid() 1525 hfa384x_usbctlx_t *ctlx; hfa384x_dowrid() local 1527 ctlx = usbctlx_alloc(); hfa384x_dowrid() 1528 if (ctlx == NULL) { hfa384x_dowrid() 1534 ctlx->outbuf.wridreq.type = cpu_to_le16(HFA384x_USB_WRIDREQ); hfa384x_dowrid() 1535 ctlx->outbuf.wridreq.frmlen = cpu_to_le16((sizeof hfa384x_dowrid() 1536 (ctlx->outbuf.wridreq.rid) + hfa384x_dowrid() 1538 ctlx->outbuf.wridreq.rid = cpu_to_le16(rid); hfa384x_dowrid() 1539 memcpy(ctlx->outbuf.wridreq.data, riddata, riddatalen); hfa384x_dowrid() 1541 ctlx->outbufsize = sizeof(ctlx->outbuf.wridreq.type) + hfa384x_dowrid() 1542 sizeof(ctlx->outbuf.wridreq.frmlen) + hfa384x_dowrid() 1543 sizeof(ctlx->outbuf.wridreq.rid) + riddatalen; hfa384x_dowrid() 1545 ctlx->reapable = mode; hfa384x_dowrid() 1546 ctlx->cmdcb = cmdcb; hfa384x_dowrid() 1547 ctlx->usercb = usercb; hfa384x_dowrid() 1548 ctlx->usercb_data = usercb_data; hfa384x_dowrid() 1551 result = hfa384x_usbctlx_submit(hw, ctlx); hfa384x_dowrid() 1553 kfree(ctlx); hfa384x_dowrid() 1559 ctlx, hfa384x_dowrid() 1562 &ctlx->inbuf.wridresp, hfa384x_dowrid() 1613 hfa384x_usbctlx_t *ctlx; hfa384x_dormem() local 1615 ctlx = usbctlx_alloc(); hfa384x_dormem() 1616 if (ctlx == NULL) { hfa384x_dormem() 1622 ctlx->outbuf.rmemreq.type = cpu_to_le16(HFA384x_USB_RMEMREQ); hfa384x_dormem() 1623 ctlx->outbuf.rmemreq.frmlen = hfa384x_dormem() 1624 cpu_to_le16(sizeof(ctlx->outbuf.rmemreq.offset) + hfa384x_dormem() 1625 sizeof(ctlx->outbuf.rmemreq.page) + len); hfa384x_dormem() 1626 ctlx->outbuf.rmemreq.offset = cpu_to_le16(offset); hfa384x_dormem() 1627 ctlx->outbuf.rmemreq.page = cpu_to_le16(page); hfa384x_dormem() 1629 ctlx->outbufsize = sizeof(ctlx->outbuf.rmemreq); hfa384x_dormem() 1632 ctlx->outbuf.rmemreq.type, hfa384x_dormem() 1633 ctlx->outbuf.rmemreq.frmlen, hfa384x_dormem() 1634 ctlx->outbuf.rmemreq.offset, ctlx->outbuf.rmemreq.page); hfa384x_dormem() 1636 pr_debug("pktsize=%zd\n", ROUNDUP64(sizeof(ctlx->outbuf.rmemreq))); hfa384x_dormem() 1638 ctlx->reapable = mode; hfa384x_dormem() 1639 ctlx->cmdcb = cmdcb; hfa384x_dormem() 1640 ctlx->usercb = usercb; hfa384x_dormem() 1641 ctlx->usercb_data = usercb_data; hfa384x_dormem() 1643 result = hfa384x_usbctlx_submit(hw, ctlx); hfa384x_dormem() 1645 kfree(ctlx); hfa384x_dormem() 1650 hfa384x_usbctlx_complete_sync(hw, ctlx, hfa384x_dormem() 1653 &ctlx->inbuf.rmemresp, data, hfa384x_dormem() 1704 hfa384x_usbctlx_t *ctlx; hfa384x_dowmem() local 1708 ctlx = usbctlx_alloc(); hfa384x_dowmem() 1709 if (ctlx == NULL) { hfa384x_dowmem() 1715 ctlx->outbuf.wmemreq.type = cpu_to_le16(HFA384x_USB_WMEMREQ); hfa384x_dowmem() 1716 ctlx->outbuf.wmemreq.frmlen = hfa384x_dowmem() 1717 cpu_to_le16(sizeof(ctlx->outbuf.wmemreq.offset) + hfa384x_dowmem() 1718 sizeof(ctlx->outbuf.wmemreq.page) + len); hfa384x_dowmem() 1719 ctlx->outbuf.wmemreq.offset = cpu_to_le16(offset); hfa384x_dowmem() 1720 ctlx->outbuf.wmemreq.page = cpu_to_le16(page); hfa384x_dowmem() 1721 memcpy(ctlx->outbuf.wmemreq.data, data, len); hfa384x_dowmem() 1723 ctlx->outbufsize = sizeof(ctlx->outbuf.wmemreq.type) + hfa384x_dowmem() 1724 sizeof(ctlx->outbuf.wmemreq.frmlen) + hfa384x_dowmem() 1725 sizeof(ctlx->outbuf.wmemreq.offset) + hfa384x_dowmem() 1726 sizeof(ctlx->outbuf.wmemreq.page) + len; hfa384x_dowmem() 1728 ctlx->reapable = mode; hfa384x_dowmem() 1729 ctlx->cmdcb = cmdcb; hfa384x_dowmem() 1730 ctlx->usercb = usercb; hfa384x_dowmem() 1731 ctlx->usercb_data = usercb_data; hfa384x_dowmem() 1733 result = hfa384x_usbctlx_submit(hw, ctlx); hfa384x_dowmem() 1735 kfree(ctlx); hfa384x_dowmem() 1741 ctlx, hfa384x_dowmem() 1744 &ctlx->inbuf.wmemresp, hfa384x_dowmem() 2353 /* Do blocking ctlx */ hfa384x_drvr_ramdl_write() 2826 hfa384x_usbctlx_t *ctlx; hfa384x_usbctlx_reaper_task() local 2828 ctlx = list_entry(entry, hfa384x_usbctlx_t, list); hfa384x_usbctlx_reaper_task() 2829 list_del(&ctlx->list); hfa384x_usbctlx_reaper_task() 2830 kfree(ctlx); hfa384x_usbctlx_reaper_task() 2865 hfa384x_usbctlx_t *ctlx; hfa384x_usbctlx_completion_task() local 2867 ctlx = list_entry(entry, hfa384x_usbctlx_t, list); hfa384x_usbctlx_completion_task() 2872 if (ctlx->cmdcb != NULL) { hfa384x_usbctlx_completion_task() 2874 ctlx->cmdcb(hw, ctlx); hfa384x_usbctlx_completion_task() 2880 ctlx->cmdcb = NULL; hfa384x_usbctlx_completion_task() 2896 if (ctlx->reapable) { hfa384x_usbctlx_completion_task() 2902 list_move_tail(&ctlx->list, &hw->ctlxq.reapable); hfa384x_usbctlx_completion_task() 2906 complete(&ctlx->done); hfa384x_usbctlx_completion_task() 2922 * ctlx ptr to a CTLX structure 2932 hfa384x_usbctlx_t *ctlx) unlocked_usbctlx_cancel_async() 2951 ctlx->state = CTLX_REQ_FAILED; unlocked_usbctlx_cancel_async() 2952 unlocked_usbctlx_complete(hw, ctlx); unlocked_usbctlx_cancel_async() 2971 * ctlx ptr to a ctlx structure 2981 static void unlocked_usbctlx_complete(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx) unlocked_usbctlx_complete() argument 2983 /* Timers have been stopped, and ctlx should be in unlocked_usbctlx_complete() 2987 list_move_tail(&ctlx->list, &hw->ctlxq.completing); unlocked_usbctlx_complete() 2990 switch (ctlx->state) { unlocked_usbctlx_complete() 2998 le16_to_cpu(ctlx->outbuf.type), unlocked_usbctlx_complete() 2999 ctlxstr(ctlx->state)); unlocked_usbctlx_complete() 3303 hfa384x_usbctlx_t *ctlx; hfa384x_usbin_ctlx() local 3332 ctlx = get_active_ctlx(hw); hfa384x_usbin_ctlx() 3340 if (unlocked_usbctlx_cancel_async(hw, ctlx) == 0) hfa384x_usbin_ctlx() 3348 if (ctlx->outbuf.type != intype) { hfa384x_usbin_ctlx() 3351 le16_to_cpu(ctlx->outbuf.type), hfa384x_usbin_ctlx() 3357 memcpy(&ctlx->inbuf, usbin, sizeof(ctlx->inbuf)); hfa384x_usbin_ctlx() 3359 switch (ctlx->state) { hfa384x_usbin_ctlx() 3367 ctlx->state = CTLX_RESP_COMPLETE; hfa384x_usbin_ctlx() 3376 ctlx->state = CTLX_COMPLETE; hfa384x_usbin_ctlx() 3377 unlocked_usbctlx_complete(hw, ctlx); hfa384x_usbin_ctlx() 3387 le16_to_cpu(ctlx->outbuf.type), hfa384x_usbin_ctlx() 3388 ctlxstr(ctlx->state)); hfa384x_usbin_ctlx() 3389 if (unlocked_usbctlx_cancel_async(hw, ctlx) == 0) hfa384x_usbin_ctlx() 3756 hfa384x_usbctlx_t *ctlx; hfa384x_ctlxout_callback() local 3799 ctlx = get_active_ctlx(hw); hfa384x_ctlxout_callback() 3803 switch (ctlx->state) { hfa384x_ctlxout_callback() 3806 ctlx->state = CTLX_REQ_COMPLETE; hfa384x_ctlxout_callback() 3813 ctlx->state = CTLX_COMPLETE; hfa384x_ctlxout_callback() 3814 unlocked_usbctlx_complete(hw, ctlx); hfa384x_ctlxout_callback() 3822 le16_to_cpu(ctlx->outbuf.type), hfa384x_ctlxout_callback() 3823 ctlxstr(ctlx->state), urb->status); hfa384x_ctlxout_callback() 3839 ctlx->state = CTLX_REQ_FAILED; hfa384x_ctlxout_callback() 3840 unlocked_usbctlx_complete(hw, ctlx); hfa384x_ctlxout_callback() 3900 hfa384x_usbctlx_t *ctlx = get_active_ctlx(hw); hfa384x_usbctlx_reqtimerfn() local 3902 ctlx->state = CTLX_REQ_FAILED; hfa384x_usbctlx_reqtimerfn() 3952 hfa384x_usbctlx_t *ctlx = get_active_ctlx(hw); hfa384x_usbctlx_resptimerfn() local 3954 if (unlocked_usbctlx_cancel_async(hw, ctlx) == 0) { hfa384x_usbctlx_resptimerfn() 4010 * ctlx ctlx structure to enqueue 4021 static int hfa384x_usbctlx_submit(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx) hfa384x_usbctlx_submit() argument 4032 ctlx->state = CTLX_PENDING; hfa384x_usbctlx_submit() 4033 list_add_tail(&ctlx->list, &hw->ctlxq.pending); hfa384x_usbctlx_submit() 1232 hfa384x_usbctlx_complete_sync(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx, struct usbctlx_completor *completor) hfa384x_usbctlx_complete_sync() argument 2931 unlocked_usbctlx_cancel_async(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx) unlocked_usbctlx_cancel_async() argument
|