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