2e9165effb99dc47372e3f31c386265088c63c63
[pandora-kernel.git] / drivers / staging / rt2860 / iface / rtmp_usb.h
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
28 #ifndef __RTMP_USB_H__
29 #define __RTMP_USB_H__
30
31
32 #include "../rtusb_io.h"
33
34
35 #ifdef LINUX
36 #include <linux/usb.h>
37
38 typedef struct usb_device       * PUSB_DEV;
39 typedef struct urb *purbb_t;
40 typedef struct usb_ctrlrequest devctrlrequest;
41 #endif // LINUX //
42
43 extern UCHAR EpToQueue[6];
44
45
46 #define RXBULKAGGRE_ZISE                        12
47 #define MAX_TXBULK_LIMIT                        (LOCAL_TXBUF_SIZE*(BULKAGGRE_ZISE-1))
48 #define MAX_TXBULK_SIZE                 (LOCAL_TXBUF_SIZE*BULKAGGRE_ZISE)
49 #define MAX_RXBULK_SIZE                 (LOCAL_TXBUF_SIZE*RXBULKAGGRE_ZISE)
50 #define MAX_MLME_HANDLER_MEMORY 20
51
52
53 // Flags for Bulkflags control for bulk out data
54 //
55 #define fRTUSB_BULK_OUT_DATA_NULL                               0x00000001
56 #define fRTUSB_BULK_OUT_RTS                                             0x00000002
57 #define fRTUSB_BULK_OUT_MLME                                            0x00000004
58
59 #define fRTUSB_BULK_OUT_PSPOLL                                  0x00000010
60 #define fRTUSB_BULK_OUT_DATA_FRAG                               0x00000020
61 #define fRTUSB_BULK_OUT_DATA_FRAG_2                             0x00000040
62 #define fRTUSB_BULK_OUT_DATA_FRAG_3                             0x00000080
63 #define fRTUSB_BULK_OUT_DATA_FRAG_4                             0x00000100
64
65 #define fRTUSB_BULK_OUT_DATA_NORMAL                             0x00010000
66 #define fRTUSB_BULK_OUT_DATA_NORMAL_2                   0x00020000
67 #define fRTUSB_BULK_OUT_DATA_NORMAL_3                   0x00040000
68 #define fRTUSB_BULK_OUT_DATA_NORMAL_4                   0x00080000
69
70 // TODO:move to ./ate/include/iface/ate_usb.h
71
72
73 #define FREE_HTTX_RING(_pCookie, _pipeId, _txContext)                   \
74 {                                                                               \
75         if ((_txContext)->ENextBulkOutPosition == (_txContext)->CurWritePosition)       \
76         {                                                                                                                                       \
77                 (_txContext)->bRingEmpty = TRUE;                        \
78         }                                                                                                                                       \
79         /*NdisInterlockedDecrement(&(_p)->TxCount); */\
80 }
81
82
83
84 /******************************************************************************
85
86         USB Bulk operation related definitions
87
88 ******************************************************************************/
89
90 #ifdef LINUX
91 #define BULKAGGRE_ZISE          100
92 #define RT28XX_PUT_DEVICE                                                       usb_put_dev
93 #define RTUSB_ALLOC_URB(iso)                                                    usb_alloc_urb(iso, GFP_ATOMIC)
94 #define RTUSB_SUBMIT_URB(pUrb)                                                  usb_submit_urb(pUrb, GFP_ATOMIC)
95 #define RTUSB_URB_ALLOC_BUFFER(pUsb_Dev, BufSize, pDma_addr)                    usb_buffer_alloc(pUsb_Dev, BufSize, GFP_ATOMIC, pDma_addr)
96 #define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)        usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)
97
98 #define RTUSB_FREE_URB(pUrb)    usb_free_urb(pUrb)
99
100 // unlink urb
101 #define RTUSB_UNLINK_URB(pUrb)          usb_kill_urb(pUrb)
102
103 extern void dump_urb(struct urb* purb);
104
105 #define InterlockedIncrement            atomic_inc
106 #define NdisInterlockedIncrement        atomic_inc
107 #define InterlockedDecrement            atomic_dec
108 #define NdisInterlockedDecrement        atomic_dec
109 #define InterlockedExchange             atomic_set
110
111 #endif // LINUX //
112
113
114
115 #define NT_SUCCESS(status)                      (((status) >=0) ? (TRUE):(FALSE))
116
117
118
119 #define USBD_TRANSFER_DIRECTION_OUT             0
120 #define USBD_TRANSFER_DIRECTION_IN              0
121 #define USBD_SHORT_TRANSFER_OK                  0
122 #define PURB                    purbb_t
123
124 #define PIRP            PVOID
125 #define NDIS_OID        UINT
126 #ifndef USB_ST_NOERROR
127 #define USB_ST_NOERROR     0
128 #endif
129
130 // vendor-specific control operations
131 #define CONTROL_TIMEOUT_JIFFIES ( (100 * OS_HZ) / 1000)
132 #define UNLINK_TIMEOUT_MS               3
133
134
135 VOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs);
136 VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs);
137 VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs);
138 VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs);
139 VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs);
140 VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs);
141
142
143 #ifdef KTHREAD_SUPPORT
144 #define RTUSBMlmeUp(pAd) \
145         do{                                                                 \
146                 RTMP_OS_TASK    *_pTask = &((pAd)->mlmeTask);\
147                 if (_pTask->kthread_task) \
148         { \
149                         _pTask->kthread_running = TRUE; \
150                 wake_up(&_pTask->kthread_q); \
151                 } \
152         }while(0)
153 #else
154 #define RTUSBMlmeUp(pAd)                \
155         do{                                                                 \
156                 RTMP_OS_TASK    *_pTask = &((pAd)->mlmeTask);\
157                 CHECK_PID_LEGALITY(_pTask->taskPID)                 \
158                 { \
159                         RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \
160                 }\
161         }while(0)
162 #endif
163
164 #ifdef KTHREAD_SUPPORT
165 #define RTUSBCMDUp(pAd) \
166         do{     \
167                 RTMP_OS_TASK    *_pTask = &((pAd)->cmdQTask);   \
168                 { \
169                         _pTask->kthread_running = TRUE; \
170                 wake_up(&_pTask->kthread_q); \
171                 } \
172         }while(0)
173
174 #else
175 #define RTUSBCMDUp(pAd)                 \
176         do{                                                                         \
177                 RTMP_OS_TASK    *_pTask = &((pAd)->cmdQTask);   \
178                 CHECK_PID_LEGALITY(_pTask->taskPID)         \
179                 {\
180                         RTMP_SEM_EVENT_UP(&(_pTask->taskSema)); \
181                 }\
182         }while(0)
183 #endif
184
185 #define DEVICE_VENDOR_REQUEST_OUT       0x40
186 #define DEVICE_VENDOR_REQUEST_IN        0xc0
187 //#define INTERFACE_VENDOR_REQUEST_OUT    0x41
188 //#define INTERFACE_VENDOR_REQUEST_IN     0xc1
189
190 #define BULKOUT_MGMT_RESET_FLAG         0x80
191
192 #define RTUSB_SET_BULK_FLAG(_M, _F)     ((_M)->BulkFlags |= (_F))
193 #define RTUSB_CLEAR_BULK_FLAG(_M, _F)   ((_M)->BulkFlags &= ~(_F))
194 #define RTUSB_TEST_BULK_FLAG(_M, _F)    (((_M)->BulkFlags & (_F)) != 0)
195
196 #define RTMP_IRQ_REQUEST(net_dev)               do{}while(0)
197 #define RTMP_IRQ_RELEASE(net_dev)               do{}while(0)
198
199
200 #endif // __RTMP_USB_H__ //