diff -urN a/drivers/ar6000/ar6000/ar6000_drv.c b/drivers/ar6000/ar6000/ar6000_drv.c --- a/drivers/ar6000/ar6000/ar6000_drv.c 2009-03-31 22:06:55.000000000 +0400 +++ b/drivers/ar6000/ar6000/ar6000_drv.c 2009-03-31 23:18:06.000000000 +0400 @@ -1310,6 +1310,13 @@ connect.ConnectionFlags |= ((A_UINT16)reduce_credit_dribble - 1) & HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK; } + + /* + * Only one data packet can be stored in driver queue. + * In this case, will be used kernel data priority mechanism. + */ + connect.MaxSendQueueDepth = 1; + /* connect to best-effort service */ connect.ServiceID = WMI_DATA_BE_SVC; @@ -1786,9 +1793,10 @@ AR_SOFTC_T *ar = (AR_SOFTC_T *)Context; if (Endpoint == arWMIStream2EndpointID(ar,WMI_CONTROL_PRI)) { - /* FIXME: what do for it? */ + AR6000_SPIN_LOCK(&ar->arLock,0); + ar->arWMIControlEpFull = FALSE; + AR6000_SPIN_UNLOCK(&ar->arLock,0); } else { - /* Wake up interface, rescheduling prevented. */ if (ar->arConnected == TRUE || bypasswmi) netif_wake_queue(ar->arNetDev); } @@ -1835,11 +1843,6 @@ if (streamID == WMI_CONTROL_PRI) { - if (ar->arWMIControlEpFull) { - /* since this packet completed, the WMI EP is no longer full */ - ar->arWMIControlEpFull = FALSE; - } - if (ar->arTxPending[streamID] == 0) { wakeEvent = TRUE; } diff -urN a/drivers/ar6000/include/htc_api.h b/drivers/ar6000/include/htc_api.h --- a/drivers/ar6000/include/htc_api.h 2009-03-31 22:06:55.000000000 +0400 +++ b/drivers/ar6000/include/htc_api.h 2009-03-28 15:59:44.000000000 +0300 @@ -95,7 +95,7 @@ HTC_EP_RECV_PKT EpRecv; /* receive callback for connected endpoint */ HTC_EP_RECV_REFILL EpRecvRefill; /* OPTIONAL receive re-fill callback for connected endpoint */ HTC_EP_SEND_QUEUE_FULL EpSendFull; /* OPTIONAL send full callback */ - HTC_EP_SEND_QUEUE_AVAIL EpSendAvail; /* OPTIONAL send available callback */ + HTC_EP_SEND_QUEUE_AVAIL EpSendAvail; /* OPTIONAL send available callback */ } HTC_EP_CALLBACKS; /* service connection information */