Staging: rt2870: remove dead code
[safe/jmp/linux-2.6] / drivers / staging / rt2870 / common / rtusb_data.c
1 /*
2  *************************************************************************
3  * Ralink Tech Inc.
4  * 5F., No.36, Taiyuan St., Jhubei City,
5  * Hsinchu County 302,
6  * Taiwan, R.O.C.
7  *
8  * (c) Copyright 2002-2007, Ralink Technology, Inc.
9  *
10  * This program is free software; you can redistribute it and/or modify  *
11  * it under the terms of the GNU General Public License as published by  *
12  * the Free Software Foundation; either version 2 of the License, or     *
13  * (at your option) any later version.                                   *
14  *                                                                       *
15  * This program is distributed in the hope that it will be useful,       *
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
18  * GNU General Public License for more details.                          *
19  *                                                                       *
20  * You should have received a copy of the GNU General Public License     *
21  * along with this program; if not, write to the                         *
22  * Free Software Foundation, Inc.,                                       *
23  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
24  *                                                                       *
25  *************************************************************************
26
27         Module Name:
28         rtusb_data.c
29
30         Abstract:
31         Ralink USB driver Tx/Rx functions.
32
33         Revision History:
34         Who         When          What
35         --------    ----------    ----------------------------------------------
36         Jan            03-25-2006    created
37
38 */
39 #include "../rt_config.h"
40
41 extern  UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c
42 extern UCHAR    EpToQueue[];
43
44 VOID REPORT_AMSDU_FRAMES_TO_LLC(
45         IN      PRTMP_ADAPTER   pAd,
46         IN      PUCHAR                  pData,
47         IN      ULONG                   DataSize)
48 {
49         PNDIS_PACKET    pPacket;
50         UINT                    nMSDU;
51         struct                  sk_buff *pSkb;
52
53         nMSDU = 0;
54         /* allocate a rx packet */
55         pSkb = dev_alloc_skb(RX_BUFFER_AGGRESIZE);
56         pPacket = (PNDIS_PACKET)OSPKT_TO_RTPKT(pSkb);
57         if (pSkb)
58         {
59
60                 /* convert 802.11 to 802.3 packet */
61                 pSkb->dev = get_netdev_from_bssid(pAd, BSS0);
62                 RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS);
63                 deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize);
64         }
65         else
66         {
67                 DBGPRINT(RT_DEBUG_ERROR,("Can't allocate skb\n"));
68         }
69 }
70
71 NDIS_STATUS     RTUSBFreeDescriptorRequest(
72         IN      PRTMP_ADAPTER   pAd,
73         IN      UCHAR                   BulkOutPipeId,
74         IN      UINT32                  NumberRequired)
75 {
76 //      UCHAR                   FreeNumber = 0;
77 //      UINT                    Index;
78         NDIS_STATUS             Status = NDIS_STATUS_FAILURE;
79         unsigned long   IrqFlags;
80         HT_TX_CONTEXT   *pHTTXContext;
81
82
83         pHTTXContext = &pAd->TxContext[BulkOutPipeId];
84         RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
85         if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition) && ((pHTTXContext->CurWritePosition + NumberRequired + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition))
86         {
87
88                 RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
89         }
90         else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < (NumberRequired + LOCAL_TXBUF_SIZE)))
91         {
92                 RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
93         }
94         else if (pHTTXContext->bCurWriting == TRUE)
95         {
96                 DBGPRINT(RT_DEBUG_TRACE,("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n", BulkOutPipeId, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition));
97                 RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
98         }
99         else
100         {
101                 Status = NDIS_STATUS_SUCCESS;
102         }
103         RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
104
105
106         return (Status);
107 }
108
109 NDIS_STATUS RTUSBFreeDescriptorRelease(
110         IN RTMP_ADAPTER *pAd,
111         IN UCHAR                BulkOutPipeId)
112 {
113         unsigned long   IrqFlags;
114         HT_TX_CONTEXT   *pHTTXContext;
115
116         pHTTXContext = &pAd->TxContext[BulkOutPipeId];
117         RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
118         pHTTXContext->bCurWriting = FALSE;
119         RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
120
121         return (NDIS_STATUS_SUCCESS);
122 }
123
124
125 BOOLEAN RTUSBNeedQueueBackForAgg(
126         IN RTMP_ADAPTER *pAd,
127         IN UCHAR                BulkOutPipeId)
128 {
129         unsigned long   IrqFlags;
130         HT_TX_CONTEXT   *pHTTXContext;
131         BOOLEAN                 needQueBack = FALSE;
132
133         pHTTXContext = &pAd->TxContext[BulkOutPipeId];
134
135         RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
136         if ((pHTTXContext->IRPPending == TRUE)  /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */)
137         {
138                 if ((pHTTXContext->CurWritePosition < pHTTXContext->ENextBulkOutPosition) &&
139                         (((pHTTXContext->ENextBulkOutPosition+MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT) || (pHTTXContext->CurWritePosition > MAX_AGGREGATION_SIZE)))
140                 {
141                         needQueBack = TRUE;
142                 }
143                 else if ((pHTTXContext->CurWritePosition > pHTTXContext->ENextBulkOutPosition) &&
144                                  ((pHTTXContext->ENextBulkOutPosition + MAX_AGGREGATION_SIZE) < pHTTXContext->CurWritePosition))
145                 {
146                         needQueBack = TRUE;
147                 }
148         }
149         RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
150
151         return needQueBack;
152
153 }
154
155
156 /*
157         ========================================================================
158
159         Routine Description:
160
161         Arguments:
162
163         Return Value:
164
165         IRQL =
166
167         Note:
168
169         ========================================================================
170 */
171 VOID    RTUSBRejectPendingPackets(
172         IN      PRTMP_ADAPTER   pAd)
173 {
174         UCHAR                   Index;
175         PQUEUE_ENTRY    pEntry;
176         PNDIS_PACKET    pPacket;
177         PQUEUE_HEADER   pQueue;
178
179
180         for (Index = 0; Index < 4; Index++)
181         {
182                 NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]);
183                 while (pAd->TxSwQueue[Index].Head != NULL)
184                 {
185                         pQueue = (PQUEUE_HEADER) &(pAd->TxSwQueue[Index]);
186                         pEntry = RemoveHeadQueue(pQueue);
187                         pPacket = QUEUE_ENTRY_TO_PACKET(pEntry);
188                         RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
189                 }
190                 NdisReleaseSpinLock(&pAd->TxSwQueueLock[Index]);
191
192         }
193
194 }
195
196 VOID RTMPWriteTxInfo(
197         IN      PRTMP_ADAPTER   pAd,
198         IN      PTXINFO_STRUC   pTxInfo,
199         IN        USHORT                USBDMApktLen,
200         IN        BOOLEAN               bWiv,
201         IN        UCHAR                 QueueSel,
202         IN        UCHAR                 NextValid,
203         IN        UCHAR                 TxBurst)
204 {
205         pTxInfo->USBDMATxPktLen = USBDMApktLen;
206         pTxInfo->QSEL = QueueSel;
207         if (QueueSel != FIFO_EDCA)
208                 DBGPRINT(RT_DEBUG_TRACE, ("====> QueueSel != FIFO_EDCA<============\n"));
209         pTxInfo->USBDMANextVLD = FALSE; //NextValid;  // Need to check with Jan about this.
210         pTxInfo->USBDMATxburst = TxBurst;
211         pTxInfo->WIV = bWiv;
212         pTxInfo->SwUseLastRound = 0;
213         pTxInfo->rsv = 0;
214         pTxInfo->rsv2 = 0;
215 }
216