aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rt2860/rt_linux.h
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2009-04-26 10:06:25 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-19 14:00:50 -0400
commit3a32ed12b69113094f0921dad50f112626cde44d (patch)
tree6942cd9503be2151aa34582f7fd32894dd30a408 /drivers/staging/rt2860/rt_linux.h
parent0eae1ca391ab35da89b08afde74030ced103fd86 (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.h151
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
146typedef struct pid * THREAD_PID; 168typedef 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
153struct os_lock { 178struct os_lock {
154 spinlock_t lock; 179 spinlock_t lock;
@@ -157,10 +182,25 @@ struct os_lock {
157 182
158 183
159struct os_cookie { 184struct 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
251typedef struct timer_list RTMP_OS_TIMER; 302typedef 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
310typedef 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
255typedef struct _RALINK_TIMER_STRUCT { 318typedef 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
335typedef 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
345typedef 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
353typedef 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 */
500typedef void (*TIMER_FUNCTION)(unsigned long); 621typedef 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) \
508void linux_##_func(unsigned long data) \ 630void 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) \
641void 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);
527DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout); 664DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout);
528DECLARE_TIMER_FUNCTION(APSDPeriodicExec); 665DECLARE_TIMER_FUNCTION(APSDPeriodicExec);
529DECLARE_TIMER_FUNCTION(AsicRfTuningExec); 666DECLARE_TIMER_FUNCTION(AsicRfTuningExec);
667#ifdef RT2870
668DECLARE_TIMER_FUNCTION(BeaconUpdateExec);
669#endif // RT2870 //
530 670
531DECLARE_TIMER_FUNCTION(BeaconTimeout); 671DECLARE_TIMER_FUNCTION(BeaconTimeout);
532DECLARE_TIMER_FUNCTION(ScanTimeout); 672DECLARE_TIMER_FUNCTION(ScanTimeout);
@@ -849,6 +989,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb);
849 989
850void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify); 990void 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