u32 enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj) { _irqL irqL; _queue *queue; _func_enter_; if (obj == NULL) goto exit; if(pcmdpriv->padapter->eeprompriv.bautoload_fail_flag==_TRUE) { return _FAIL; } queue = &(pcmdpriv->cmd_queue); _enter_critical(&(queue->lock), &irqL); list_insert_tail(&(obj->list), &(queue->queue)); _exit_critical(&(queue->lock), &irqL); _up_sema(&pcmdpriv->cmd_queue_sema); exit: _func_exit_; return _SUCCESS; }
void evt_notify_isr(struct evt_priv *pevtpriv) { _func_enter_; pevtpriv->evt_done_cnt++; #ifdef CONFIG_EVENT_THREAD_MODE _up_sema(&(pevtpriv->evt_notify)); #endif _func_exit_; }
u32 enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj) { int res; _func_enter_; if(pcmdpriv->padapter->eeprompriv.bautoload_fail_flag==_TRUE) { RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("pcmdpriv->padapter->eeprompriv.bautoload_fail_flag=%x", pcmdpriv->padapter->eeprompriv.bautoload_fail_flag)); return _FAIL; } res = _enqueue_cmd(&(pcmdpriv->cmd_queue), obj); _up_sema(&pcmdpriv->cmd_queue_sema); _func_exit_; return res; }
/*! \brief USB TS In IRP Complete Routine. @param Context pointer of RT_TSB */ static void read_usb_hisr_complete(struct urb *purb, struct pt_regs *regs) { // u32 tmp32; int status; int bytecnt; _adapter * padapter=(_adapter *)purb->context; struct dvobj_priv *pdev=&padapter->dvobjpriv; struct evt_priv *pevt_priv = &(padapter->evtpriv); struct cmd_priv *pcmd_priv = &(padapter->cmdpriv); _func_enter_; //_spinlock(&(pdev->in_lock)); pdev->ts_in_pendding= _FALSE; pdev->ts_in_cnt--; if (pdev->ts_in_cnt == 0) { _up_sema(&(pdev->hisr_retevt)); DEBUG_ERR(("pdvobjpriv->tsint_cnt == 0, set interrupt_retevt!\n")); } if(padapter->bSurpriseRemoved||padapter->bDriverStopped) { DEBUG_ERR(("\nread_usb_hisr_complete: Surprised remove(%d) or DriverStopped(%d)!!!\n",padapter->bSurpriseRemoved,padapter->bDriverStopped)); goto exit; } switch(purb->status) { case 0: //success break; case -ECONNRESET: case -ENOENT: case -ESHUTDOWN: padapter->bDriverStopped=_TRUE; DEBUG_ERR(("\n read_usb_hisr_complete: urb shutting down with status:%d \n",purb->status)); goto exit; default: DEBUG_ERR(("\n read_usb_hisr_complete: nonzero urb status received: %d\n",purb->status)); DEBUG_ERR(("\n purb->actual_length=%d\n",purb->actual_length)); goto resubmit; } if(purb->actual_length>128){ DEBUG_ERR(("TS In size>128!!!\n")); goto exit; } else{ bytecnt=(USHORT)purb->actual_length; if(bytecnt<7){ DEBUG_ERR(("bytecnt must not less than 7 (3 for hisr,4 for fwclsptr) \n")); } } //Copy the value to CEdevice->HisrValue padapter->IsrContent = pdev->ts_in_buf[2]<<16; padapter->IsrContent |= pdev->ts_in_buf[1]<<8; padapter->IsrContent |= pdev->ts_in_buf[0]; if( (padapter->IsrContent & _C2HSET )) // C2HSET { DEBUG_INFO(("\n----------read_usb_hisr_complete: _C2HSET ")); padapter->IsrContent ^= _C2HSET; register_evt_alive(padapter); evt_notify_isr(pevt_priv); } if( (padapter->IsrContent & _H2CCLR)) // H2CCLR { DEBUG_ERR(("\n----------read_usb_hisr_complete: _H2CCLR ")); padapter->IsrContent ^= _H2CCLR; cmd_clr_isr(pcmd_priv); } /* DEBUG_ERR(("padapter->IsrContent = 0x%.8x pdvobjpriv->tsint_buf = 0x00%.2x%.2x%.2x", padapter->IsrContent,pdev->tsint_buf[pdev->tsint_idx][2],pdev->tsint_buf[pdev->tsint_idx][1],pdev->tsint_buf[pdev->tsint_idx][0])); */ //_spinunlock(&(pdev->in_lock)); read_usb_hisr(padapter); exit: _func_exit_; return ; resubmit: status=usb_submit_urb(purb,GFP_ATOMIC); if(status){ DEBUG_ERR(("\n read_usb_hisr_complete: can't resubmit intr status :0x%.8x \n",status)); } //_spinunlock(&(pdev->in_lock)); }
static void usb_write_mem_complete(struct urb *purb, struct pt_regs *regs) #endif { _irqL irqL; _list *head, *plist; struct io_queue *pio_q = (struct io_queue *)purb->context; struct intf_hdl *pintf = &(pio_q->intf); struct intf_priv *pintfpriv = pintf->pintfpriv; _adapter *padapter = (_adapter *)pintf->adapter; struct xmit_priv * pxmitpriv = &padapter->xmitpriv; struct dvobj_priv * pdvobjpriv = (struct dvobj_priv *)&padapter->dvobjpriv; struct usb_device *pusbd = pdvobjpriv->pusbdev; _func_enter_; RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("+usb_write_mem_complete\n")); if(padapter->bSurpriseRemoved || padapter->bDriverStopped) { RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("usb_write_mem_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved)); } if(purb->status==0) { } else { printk("wm_comp: status:%d\n",purb->status); RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_mem_complete : purb->status(%d) != 0 \n", purb->status)); if(purb->status == (-ESHUTDOWN)) { RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_mem_complete: ESHUTDOWN\n")); padapter->bDriverStopped=_TRUE; RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_mem_complete:bDriverStopped=TRUE\n")); } else if(purb->status==-EPIPE||purb->status == -EPROTO) { //printk("wm_comp: work around for pipe error (%d)!\n", purb->status); //if(purb->pipe == usb_sndbulkpipe(pusbd, 0x04)) // _set_workitem(&pxmitpriv->xmit_pipe4_reset_wi); //if(purb->pipe == usb_sndbulkpipe(pusbd, 0x06)) // _set_workitem(&pxmitpriv->xmit_pipe6_reset_wi); //if(purb->pipe == usb_sndbulkpipe(pusbd, 0x0d)) // _set_workitem(&pxmitpriv->xmit_piped_reset_wi); } else { padapter->bSurpriseRemoved=_TRUE; RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_mem_complete:bSurpriseRemoved=TRUE\n")); } } _up_sema(&pintfpriv->io_retevt); RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_mem_complete\n")); _func_exit_; }