staging: vt6656: PIPEnsControlIn use usb_control_msg
Now that this function is nolonger atomic useusb_control_msg. Return STATUS_FAILURE if ntStatus less than wLength Remove the old struct urb and struct usb_ctrlrequest structures. Remove fMP_CONTROL_READS flag. Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7021b684eb
commit
0fb2af353f
3 changed files with 9 additions and 99 deletions
|
|
@ -380,9 +380,7 @@ struct vnt_private {
|
|||
u32 uCurrentDFCBIdx;
|
||||
|
||||
/* USB */
|
||||
struct urb *pControlURB;
|
||||
struct urb *pInterruptURB;
|
||||
struct usb_ctrlrequest sUsbCtlRequest;
|
||||
u32 int_interval;
|
||||
|
||||
/* Variables to track resources for the BULK In Pipe */
|
||||
|
|
@ -743,7 +741,6 @@ struct vnt_private {
|
|||
#define fMP_RECV_SIDE_RESOURCE_ALLOCATED 0x00000080
|
||||
#define fMP_POST_READS 0x00000100
|
||||
#define fMP_POST_WRITES 0x00000200
|
||||
#define fMP_CONTROL_READS 0x00000400
|
||||
|
||||
#define MP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
|
||||
#define MP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
|
||||
|
|
|
|||
|
|
@ -702,12 +702,6 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
|||
INIT_WORK(&pDevice->read_work_item, RXvWorkItem);
|
||||
INIT_WORK(&pDevice->rx_mng_work_item, RXvMngWorkItem);
|
||||
|
||||
pDevice->pControlURB = usb_alloc_urb(0, GFP_ATOMIC);
|
||||
if (!pDevice->pControlURB) {
|
||||
DBG_PRT(MSG_LEVEL_ERR, KERN_ERR"Failed to alloc control urb\n");
|
||||
goto err_netdev;
|
||||
}
|
||||
|
||||
pDevice->tx_80211 = device_dma0_tx_80211;
|
||||
pDevice->vnt_mgmt.pAdapter = (void *) pDevice;
|
||||
|
||||
|
|
@ -964,7 +958,6 @@ static int device_open(struct net_device *dev)
|
|||
}
|
||||
|
||||
MP_CLEAR_FLAG(pDevice, fMP_DISCONNECTED);
|
||||
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||
MP_SET_FLAG(pDevice, fMP_POST_READS);
|
||||
MP_SET_FLAG(pDevice, fMP_POST_WRITES);
|
||||
|
||||
|
|
@ -1130,10 +1123,6 @@ static void vt6656_disconnect(struct usb_interface *intf)
|
|||
|
||||
if (device->dev) {
|
||||
unregister_netdev(device->dev);
|
||||
|
||||
usb_kill_urb(device->pControlURB);
|
||||
usb_free_urb(device->pControlURB);
|
||||
|
||||
free_netdev(device->dev);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,6 @@ static int msglevel =MSG_LEVEL_INFO;
|
|||
static void s_nsInterruptUsbIoCompleteRead(struct urb *urb);
|
||||
static void s_nsBulkInUsbIoCompleteRead(struct urb *urb);
|
||||
static void s_nsBulkOutIoCompleteWrite(struct urb *urb);
|
||||
static void s_nsControlInUsbIoCompleteRead(struct urb *urb);
|
||||
|
||||
int PIPEnsControlOutAsyn(struct vnt_private *pDevice, u8 byRequest,
|
||||
u16 wValue, u16 wIndex, u16 wLength, u8 *pbyBuffer)
|
||||
|
|
@ -126,100 +125,25 @@ int PIPEnsControlOut(struct vnt_private *pDevice, u8 byRequest, u16 wValue,
|
|||
}
|
||||
|
||||
int PIPEnsControlIn(struct vnt_private *pDevice, u8 byRequest, u16 wValue,
|
||||
u16 wIndex, u16 wLength, u8 *pbyBuffer)
|
||||
__releases(&pDevice->lock)
|
||||
__acquires(&pDevice->lock)
|
||||
u16 wIndex, u16 wLength, u8 *pbyBuffer)
|
||||
{
|
||||
int ntStatus = 0;
|
||||
int ii;
|
||||
int ntStatus;
|
||||
|
||||
if (pDevice->Flags & fMP_DISCONNECTED)
|
||||
return STATUS_FAILURE;
|
||||
|
||||
if (pDevice->Flags & fMP_CONTROL_READS)
|
||||
return STATUS_FAILURE;
|
||||
|
||||
if (pDevice->pControlURB->hcpriv)
|
||||
if (pDevice->Flags & fMP_DISCONNECTED)
|
||||
return STATUS_FAILURE;
|
||||
|
||||
mutex_lock(&pDevice->usb_lock);
|
||||
|
||||
MP_SET_FLAG(pDevice, fMP_CONTROL_READS);
|
||||
|
||||
pDevice->sUsbCtlRequest.bRequestType = 0xC0;
|
||||
pDevice->sUsbCtlRequest.bRequest = byRequest;
|
||||
pDevice->sUsbCtlRequest.wValue = cpu_to_le16p(&wValue);
|
||||
pDevice->sUsbCtlRequest.wIndex = cpu_to_le16p(&wIndex);
|
||||
pDevice->sUsbCtlRequest.wLength = cpu_to_le16p(&wLength);
|
||||
pDevice->pControlURB->transfer_flags |= URB_ASYNC_UNLINK;
|
||||
pDevice->pControlURB->actual_length = 0;
|
||||
usb_fill_control_urb(pDevice->pControlURB, pDevice->usb,
|
||||
usb_rcvctrlpipe(pDevice->usb , 0), (char *) &pDevice->sUsbCtlRequest,
|
||||
pbyBuffer, wLength, s_nsControlInUsbIoCompleteRead, pDevice);
|
||||
|
||||
ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC);
|
||||
if (ntStatus != 0) {
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO
|
||||
"control request submission failed: %d\n", ntStatus);
|
||||
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||
mutex_unlock(&pDevice->usb_lock);
|
||||
return STATUS_FAILURE;
|
||||
}
|
||||
|
||||
for (ii = 0; ii <= USB_CTL_WAIT; ii ++) {
|
||||
|
||||
if (pDevice->Flags & fMP_CONTROL_READS)
|
||||
mdelay(1);
|
||||
else
|
||||
break;
|
||||
|
||||
if (ii >= USB_CTL_WAIT) {
|
||||
DBG_PRT(MSG_LEVEL_DEBUG,
|
||||
KERN_INFO "control rcv request submission timeout\n");
|
||||
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||
mutex_unlock(&pDevice->usb_lock);
|
||||
return STATUS_FAILURE;
|
||||
}
|
||||
}
|
||||
ntStatus = usb_control_msg(pDevice->usb,
|
||||
usb_rcvctrlpipe(pDevice->usb, 0), byRequest, 0xc0, wValue,
|
||||
wIndex, pbyBuffer, wLength, USB_CTL_WAIT);
|
||||
|
||||
mutex_unlock(&pDevice->usb_lock);
|
||||
|
||||
return ntStatus;
|
||||
}
|
||||
if (ntStatus < (int)wLength)
|
||||
return STATUS_FAILURE;
|
||||
|
||||
/*
|
||||
* Description:
|
||||
* Complete function of usb Control callback
|
||||
*
|
||||
* Parameters:
|
||||
* In:
|
||||
* pDevice - Pointer to the adapter
|
||||
*
|
||||
* Out:
|
||||
* none
|
||||
*
|
||||
* Return Value: STATUS_INSUFFICIENT_RESOURCES or result of IoCallDriver
|
||||
*
|
||||
*/
|
||||
|
||||
static void s_nsControlInUsbIoCompleteRead(struct urb *urb)
|
||||
{
|
||||
struct vnt_private *pDevice = (struct vnt_private *)urb->context;
|
||||
|
||||
switch (urb->status) {
|
||||
case 0:
|
||||
break;
|
||||
case -EINPROGRESS:
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status EINPROGRESS%d\n", urb->status);
|
||||
break;
|
||||
case -ENOENT:
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status = ENOENT %d\n", urb->status);
|
||||
break;
|
||||
default:
|
||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ctrl read urb status %d\n", urb->status);
|
||||
}
|
||||
|
||||
MP_CLEAR_FLAG(pDevice, fMP_CONTROL_READS);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue