Esempio n. 1
0
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;

}
Esempio n. 2
0
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_;	
}
Esempio n. 3
0
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;
	
}
Esempio n. 4
0
/*! \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));
}
Esempio n. 5
0
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_;	

}