diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2009-04-26 10:06:25 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-19 14:00:50 -0400 |
commit | 3a32ed12b69113094f0921dad50f112626cde44d (patch) | |
tree | 6942cd9503be2151aa34582f7fd32894dd30a408 /drivers/staging/rt2860/rt_linux.h | |
parent | 0eae1ca391ab35da89b08afde74030ced103fd86 (diff) |
Staging: rt2860: prepare for rt28[67]0/*.[ch] merge
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/rt2860/rt_linux.h')
-rw-r--r-- | drivers/staging/rt2860/rt_linux.h | 151 |
1 files changed, 146 insertions, 5 deletions
diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h index bfd9d062d09..85175c18243 100644 --- a/drivers/staging/rt2860/rt_linux.h +++ b/drivers/staging/rt2860/rt_linux.h | |||
@@ -43,6 +43,9 @@ | |||
43 | #include "rtmp_type.h" | 43 | #include "rtmp_type.h" |
44 | #include <linux/module.h> | 44 | #include <linux/module.h> |
45 | #include <linux/kernel.h> | 45 | #include <linux/kernel.h> |
46 | #if !defined(RT2860) && !defined(RT30xx) | ||
47 | #include <linux/kthread.h> | ||
48 | #endif | ||
46 | 49 | ||
47 | #include <linux/spinlock.h> | 50 | #include <linux/spinlock.h> |
48 | #include <linux/init.h> | 51 | #include <linux/init.h> |
@@ -64,6 +67,9 @@ | |||
64 | #include <linux/vmalloc.h> | 67 | #include <linux/vmalloc.h> |
65 | 68 | ||
66 | 69 | ||
70 | #ifdef RT30xx | ||
71 | #include <linux/wireless.h> | ||
72 | #endif | ||
67 | #include <net/iw_handler.h> | 73 | #include <net/iw_handler.h> |
68 | 74 | ||
69 | // load firmware | 75 | // load firmware |
@@ -87,16 +93,31 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_ | |||
87 | 93 | ||
88 | // add by kathy | 94 | // add by kathy |
89 | 95 | ||
96 | #ifdef RT2860 | ||
90 | #define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" | 97 | #define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat" |
91 | #define STA_RTMP_FIRMWARE_FILE_NAME "/etc/Wireless/RT2860STA/RT2860STA.bin" | 98 | #define STA_RTMP_FIRMWARE_FILE_NAME "/etc/Wireless/RT2860STA/RT2860STA.bin" |
92 | #define STA_NIC_DEVICE_NAME "RT2860STA" | 99 | #define STA_NIC_DEVICE_NAME "RT2860STA" |
93 | #define STA_DRIVER_VERSION "1.8.1.1" | 100 | #define STA_DRIVER_VERSION "1.8.1.1" |
101 | #endif | ||
102 | #ifdef RT2870 | ||
103 | #define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat" | ||
104 | #define STA_RT2870_IMAGE_FILE_NAME "/etc/Wireless/RT2870STA/rt2870.bin" | ||
105 | #define STA_NIC_DEVICE_NAME "RT2870STA" | ||
106 | #ifndef RT30xx | ||
107 | #define STA_DRIVER_VERSION "1.4.0.0" | ||
108 | #endif | ||
109 | #ifdef RT30xx | ||
110 | #define STA_DRIVER_VERSION "2.0.1.0" | ||
111 | #endif | ||
112 | #endif | ||
94 | 113 | ||
114 | #ifdef RT2860 | ||
95 | #ifndef PCI_DEVICE | 115 | #ifndef PCI_DEVICE |
96 | #define PCI_DEVICE(vend,dev) \ | 116 | #define PCI_DEVICE(vend,dev) \ |
97 | .vendor = (vend), .device = (dev), \ | 117 | .vendor = (vend), .device = (dev), \ |
98 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID | 118 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID |
99 | #endif // PCI_DEVICE // | 119 | #endif // PCI_DEVICE // |
120 | #endif | ||
100 | 121 | ||
101 | #define RTMP_TIME_AFTER(a,b) \ | 122 | #define RTMP_TIME_AFTER(a,b) \ |
102 | (typecheck(unsigned long, (unsigned long)a) && \ | 123 | (typecheck(unsigned long, (unsigned long)a) && \ |
@@ -143,12 +164,16 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_ | |||
143 | #define NDIS_PACKET_TYPE_BROADCAST 2 | 164 | #define NDIS_PACKET_TYPE_BROADCAST 2 |
144 | #define NDIS_PACKET_TYPE_ALL_MULTICAST 3 | 165 | #define NDIS_PACKET_TYPE_ALL_MULTICAST 3 |
145 | 166 | ||
167 | #ifndef RT30xx | ||
146 | typedef struct pid * THREAD_PID; | 168 | typedef struct pid * THREAD_PID; |
169 | #ifdef RT2860 | ||
147 | #define THREAD_PID_INIT_VALUE NULL | 170 | #define THREAD_PID_INIT_VALUE NULL |
171 | #endif | ||
148 | #define GET_PID(_v) find_get_pid(_v) | 172 | #define GET_PID(_v) find_get_pid(_v) |
149 | #define GET_PID_NUMBER(_v) pid_nr(_v) | 173 | #define GET_PID_NUMBER(_v) pid_nr(_v) |
150 | #define CHECK_PID_LEGALITY(_pid) if (pid_nr(_pid) >= 0) | 174 | #define CHECK_PID_LEGALITY(_pid) if (pid_nr(_pid) >= 0) |
151 | #define KILL_THREAD_PID(_A, _B, _C) kill_pid(_A, _B, _C) | 175 | #define KILL_THREAD_PID(_A, _B, _C) kill_pid(_A, _B, _C) |
176 | #endif | ||
152 | 177 | ||
153 | struct os_lock { | 178 | struct os_lock { |
154 | spinlock_t lock; | 179 | spinlock_t lock; |
@@ -157,10 +182,25 @@ struct os_lock { | |||
157 | 182 | ||
158 | 183 | ||
159 | struct os_cookie { | 184 | struct os_cookie { |
185 | #ifdef RT2860 | ||
160 | struct pci_dev *pci_dev; | 186 | struct pci_dev *pci_dev; |
161 | struct pci_dev *parent_pci_dev; | 187 | struct pci_dev *parent_pci_dev; |
162 | dma_addr_t pAd_pa; | 188 | dma_addr_t pAd_pa; |
189 | #endif | ||
190 | #ifdef RT2870 | ||
191 | struct usb_device *pUsb_Dev; | ||
163 | 192 | ||
193 | #ifndef RT30xx | ||
194 | struct task_struct *MLMEThr_task; | ||
195 | struct task_struct *RTUSBCmdThr_task; | ||
196 | struct task_struct *TimerQThr_task; | ||
197 | #endif | ||
198 | #ifdef RT30xx | ||
199 | struct pid *MLMEThr_pid; | ||
200 | struct pid *RTUSBCmdThr_pid; | ||
201 | struct pid *TimerQThr_pid; | ||
202 | #endif | ||
203 | #endif // RT2870 // | ||
164 | 204 | ||
165 | struct tasklet_struct rx_done_task; | 205 | struct tasklet_struct rx_done_task; |
166 | struct tasklet_struct mgmt_dma_done_task; | 206 | struct tasklet_struct mgmt_dma_done_task; |
@@ -170,8 +210,14 @@ struct os_cookie { | |||
170 | struct tasklet_struct ac3_dma_done_task; | 210 | struct tasklet_struct ac3_dma_done_task; |
171 | struct tasklet_struct hcca_dma_done_task; | 211 | struct tasklet_struct hcca_dma_done_task; |
172 | struct tasklet_struct tbtt_task; | 212 | struct tasklet_struct tbtt_task; |
213 | #ifdef RT2860 | ||
173 | struct tasklet_struct fifo_statistic_full_task; | 214 | struct tasklet_struct fifo_statistic_full_task; |
174 | 215 | #endif | |
216 | #ifdef RT2870 | ||
217 | struct tasklet_struct null_frame_complete_task; | ||
218 | struct tasklet_struct rts_frame_complete_task; | ||
219 | struct tasklet_struct pspoll_frame_complete_task; | ||
220 | #endif // RT2870 // | ||
175 | 221 | ||
176 | unsigned long apd_pid; //802.1x daemon pid | 222 | unsigned long apd_pid; //802.1x daemon pid |
177 | INT ioctl_if_type; | 223 | INT ioctl_if_type; |
@@ -219,6 +265,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int | |||
219 | 265 | ||
220 | #define RT2860_PCI_DEVICE_ID 0x0601 | 266 | #define RT2860_PCI_DEVICE_ID 0x0601 |
221 | 267 | ||
268 | #ifdef RT2860 | ||
222 | #define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ | 269 | #define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ |
223 | linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) | 270 | linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) |
224 | 271 | ||
@@ -233,7 +280,12 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int | |||
233 | 280 | ||
234 | #define DEV_ALLOC_SKB(_length) \ | 281 | #define DEV_ALLOC_SKB(_length) \ |
235 | dev_alloc_skb(_length) | 282 | dev_alloc_skb(_length) |
283 | #endif | ||
284 | #ifdef RT2870 | ||
285 | #define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0 | ||
236 | 286 | ||
287 | #define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) | ||
288 | #endif // RT2870 // | ||
237 | 289 | ||
238 | 290 | ||
239 | #define BEACON_FRAME_DMA_CACHE_WBACK(_ptr, _size) \ | 291 | #define BEACON_FRAME_DMA_CACHE_WBACK(_ptr, _size) \ |
@@ -247,9 +299,20 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int | |||
247 | 299 | ||
248 | #define NdisMIndicateStatus(_w, _x, _y, _z) | 300 | #define NdisMIndicateStatus(_w, _x, _y, _z) |
249 | 301 | ||
250 | |||
251 | typedef struct timer_list RTMP_OS_TIMER; | 302 | typedef struct timer_list RTMP_OS_TIMER; |
252 | 303 | ||
304 | #ifdef RT2870 | ||
305 | /* ----------------- Timer Related MARCO ---------------*/ | ||
306 | // In RT2870, we have a lot of timer functions and will read/write register, it's | ||
307 | // not allowed in Linux USB sub-system to do it ( because of sleep issue when submit | ||
308 | // to ctrl pipe). So we need a wrapper function to take care it. | ||
309 | |||
310 | typedef VOID (*RT2870_TIMER_HANDLE)( | ||
311 | IN PVOID SystemSpecific1, | ||
312 | IN PVOID FunctionContext, | ||
313 | IN PVOID SystemSpecific2, | ||
314 | IN PVOID SystemSpecific3); | ||
315 | #endif // RT2870 // | ||
253 | 316 | ||
254 | 317 | ||
255 | typedef struct _RALINK_TIMER_STRUCT { | 318 | typedef struct _RALINK_TIMER_STRUCT { |
@@ -260,9 +323,42 @@ typedef struct _RALINK_TIMER_STRUCT { | |||
260 | BOOLEAN Repeat; // True if periodic timer | 323 | BOOLEAN Repeat; // True if periodic timer |
261 | ULONG TimerValue; // Timer value in milliseconds | 324 | ULONG TimerValue; // Timer value in milliseconds |
262 | ULONG cookie; // os specific object | 325 | ULONG cookie; // os specific object |
326 | #ifdef RT2870 | ||
327 | RT2870_TIMER_HANDLE handle; | ||
328 | void *pAd; | ||
329 | #endif // RT2870 // | ||
263 | } RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; | 330 | } RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT; |
264 | 331 | ||
265 | 332 | ||
333 | #ifdef RT2870 | ||
334 | |||
335 | typedef enum _RT2870_KERNEL_THREAD_STATUS_ | ||
336 | { | ||
337 | RT2870_THREAD_UNKNOWN = 0, | ||
338 | RT2870_THREAD_INITED = 1, | ||
339 | RT2870_THREAD_RUNNING = 2, | ||
340 | RT2870_THREAD_STOPED = 4, | ||
341 | }RT2870_KERNEL_THREAD_STATUS; | ||
342 | |||
343 | #define RT2870_THREAD_CAN_DO_INSERT (RT2870_THREAD_INITED |RT2870_THREAD_RUNNING) | ||
344 | |||
345 | typedef struct _RT2870_TIMER_ENTRY_ | ||
346 | { | ||
347 | RALINK_TIMER_STRUCT *pRaTimer; | ||
348 | struct _RT2870_TIMER_ENTRY_ *pNext; | ||
349 | }RT2870_TIMER_ENTRY; | ||
350 | |||
351 | |||
352 | #define TIMER_QUEUE_SIZE_MAX 128 | ||
353 | typedef struct _RT2870_TIMER_QUEUE_ | ||
354 | { | ||
355 | unsigned int status; | ||
356 | UCHAR *pTimerQPoll; | ||
357 | RT2870_TIMER_ENTRY *pQPollFreeList; | ||
358 | RT2870_TIMER_ENTRY *pQHead; | ||
359 | RT2870_TIMER_ENTRY *pQTail; | ||
360 | }RT2870_TIMER_QUEUE; | ||
361 | #endif // RT2870 // | ||
266 | 362 | ||
267 | 363 | ||
268 | //#define DBG 1 | 364 | //#define DBG 1 |
@@ -352,6 +448,7 @@ extern ULONG RTDebugLevel; | |||
352 | spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \ | 448 | spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \ |
353 | } | 449 | } |
354 | 450 | ||
451 | #ifdef RT2860 | ||
355 | #if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0) | 452 | #if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0) |
356 | //Patch for ASIC turst read/write bug, needs to remove after metel fix | 453 | //Patch for ASIC turst read/write bug, needs to remove after metel fix |
357 | #define RTMP_IO_READ32(_A, _R, _pV) \ | 454 | #define RTMP_IO_READ32(_A, _R, _pV) \ |
@@ -453,7 +550,32 @@ extern ULONG RTDebugLevel; | |||
453 | writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ | 550 | writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \ |
454 | } | 551 | } |
455 | #endif | 552 | #endif |
553 | #endif /* RT2860 */ | ||
554 | #ifdef RT2870 | ||
555 | //Patch for ASIC turst read/write bug, needs to remove after metel fix | ||
556 | #define RTMP_IO_READ32(_A, _R, _pV) \ | ||
557 | RTUSBReadMACRegister(_A, _R, _pV) | ||
558 | |||
559 | #define RTMP_IO_READ8(_A, _R, _pV) \ | ||
560 | { \ | ||
561 | } | ||
456 | 562 | ||
563 | #define RTMP_IO_WRITE32(_A, _R, _V) \ | ||
564 | RTUSBWriteMACRegister(_A, _R, _V) | ||
565 | |||
566 | |||
567 | #define RTMP_IO_WRITE8(_A, _R, _V) \ | ||
568 | { \ | ||
569 | USHORT _Val = _V; \ | ||
570 | RTUSBSingleWrite(_A, _R, _Val); \ | ||
571 | } | ||
572 | |||
573 | |||
574 | #define RTMP_IO_WRITE16(_A, _R, _V) \ | ||
575 | { \ | ||
576 | RTUSBSingleWrite(_A, _R, _V); \ | ||
577 | } | ||
578 | #endif // RT2870 // | ||
457 | 579 | ||
458 | #ifndef wait_event_interruptible_timeout | 580 | #ifndef wait_event_interruptible_timeout |
459 | #define __wait_event_interruptible_timeout(wq, condition, ret) \ | 581 | #define __wait_event_interruptible_timeout(wq, condition, ret) \ |
@@ -496,7 +618,6 @@ do { \ | |||
496 | wait_event_interruptible_timeout(_wait, 0, ONE_TICK); } | 618 | wait_event_interruptible_timeout(_wait, 0, ONE_TICK); } |
497 | 619 | ||
498 | 620 | ||
499 | /* Modified by Wu Xi-Kun 4/21/2006 */ | ||
500 | typedef void (*TIMER_FUNCTION)(unsigned long); | 621 | typedef void (*TIMER_FUNCTION)(unsigned long); |
501 | 622 | ||
502 | #define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) | 623 | #define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN) |
@@ -504,6 +625,7 @@ typedef void (*TIMER_FUNCTION)(unsigned long); | |||
504 | #define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE) | 625 | #define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE) |
505 | #define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA) | 626 | #define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA) |
506 | 627 | ||
628 | #ifdef RT2860 | ||
507 | #define BUILD_TIMER_FUNCTION(_func) \ | 629 | #define BUILD_TIMER_FUNCTION(_func) \ |
508 | void linux_##_func(unsigned long data) \ | 630 | void linux_##_func(unsigned long data) \ |
509 | { \ | 631 | { \ |
@@ -513,7 +635,22 @@ void linux_##_func(unsigned long data) \ | |||
513 | if (pTimer->Repeat) \ | 635 | if (pTimer->Repeat) \ |
514 | RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ | 636 | RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \ |
515 | } | 637 | } |
516 | 638 | #endif | |
639 | #ifdef RT2870 | ||
640 | #define BUILD_TIMER_FUNCTION(_func) \ | ||
641 | void linux_##_func(unsigned long data) \ | ||
642 | { \ | ||
643 | PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \ | ||
644 | RT2870_TIMER_ENTRY *_pQNode; \ | ||
645 | RTMP_ADAPTER *_pAd; \ | ||
646 | \ | ||
647 | _pTimer->handle = _func; \ | ||
648 | _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \ | ||
649 | _pQNode = RT2870_TimerQ_Insert(_pAd, _pTimer); \ | ||
650 | if ((_pQNode == NULL) && (_pAd->TimerQ.status & RT2870_THREAD_CAN_DO_INSERT)) \ | ||
651 | RTMP_OS_Add_Timer(&_pTimer->TimerObj, HZ); \ | ||
652 | } | ||
653 | #endif // RT2870 // | ||
517 | 654 | ||
518 | 655 | ||
519 | #define DECLARE_TIMER_FUNCTION(_func) \ | 656 | #define DECLARE_TIMER_FUNCTION(_func) \ |
@@ -527,6 +664,9 @@ DECLARE_TIMER_FUNCTION(MlmeRssiReportExec); | |||
527 | DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); | 664 | DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); |
528 | DECLARE_TIMER_FUNCTION(APSDPeriodicExec); | 665 | DECLARE_TIMER_FUNCTION(APSDPeriodicExec); |
529 | DECLARE_TIMER_FUNCTION(AsicRfTuningExec); | 666 | DECLARE_TIMER_FUNCTION(AsicRfTuningExec); |
667 | #ifdef RT2870 | ||
668 | DECLARE_TIMER_FUNCTION(BeaconUpdateExec); | ||
669 | #endif // RT2870 // | ||
530 | 670 | ||
531 | DECLARE_TIMER_FUNCTION(BeaconTimeout); | 671 | DECLARE_TIMER_FUNCTION(BeaconTimeout); |
532 | DECLARE_TIMER_FUNCTION(ScanTimeout); | 672 | DECLARE_TIMER_FUNCTION(ScanTimeout); |
@@ -849,6 +989,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb); | |||
849 | 989 | ||
850 | void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify); | 990 | void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify); |
851 | 991 | ||
992 | #ifdef RT2860 | ||
852 | #if !defined(PCI_CAP_ID_EXP) | 993 | #if !defined(PCI_CAP_ID_EXP) |
853 | #define PCI_CAP_ID_EXP 0x10 | 994 | #define PCI_CAP_ID_EXP 0x10 |
854 | #endif | 995 | #endif |
@@ -862,5 +1003,5 @@ void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify); | |||
862 | #endif | 1003 | #endif |
863 | 1004 | ||
864 | #define PCIBUS_INTEL_VENDOR 0x8086 | 1005 | #define PCIBUS_INTEL_VENDOR 0x8086 |
865 | 1006 | #endif | |
866 | 1007 | ||