• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/rt2860/
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 __RTUSB_IO_H__
29#define __RTUSB_IO_H__
30
31#include "rtmp_type.h"
32
33/* New for MeetingHouse Api support */
34#define CMDTHREAD_VENDOR_RESET                      0x0D730101	/* cmd */
35#define CMDTHREAD_VENDOR_UNPLUG                     0x0D730102	/* cmd */
36#define CMDTHREAD_VENDOR_SWITCH_FUNCTION            0x0D730103	/* cmd */
37#define CMDTHREAD_MULTI_WRITE_MAC                   0x0D730107	/* cmd */
38#define CMDTHREAD_MULTI_READ_MAC                    0x0D730108	/* cmd */
39#define CMDTHREAD_VENDOR_EEPROM_WRITE               0x0D73010A	/* cmd */
40#define CMDTHREAD_VENDOR_EEPROM_READ                0x0D73010B	/* cmd */
41#define CMDTHREAD_VENDOR_ENTER_TESTMODE             0x0D73010C	/* cmd */
42#define CMDTHREAD_VENDOR_EXIT_TESTMODE              0x0D73010D	/* cmd */
43#define CMDTHREAD_VENDOR_WRITE_BBP                  0x0D730119	/* cmd */
44#define CMDTHREAD_VENDOR_READ_BBP                   0x0D730118	/* cmd */
45#define CMDTHREAD_VENDOR_WRITE_RF                   0x0D73011A	/* cmd */
46#define CMDTHREAD_VENDOR_FLIP_IQ                    0x0D73011D	/* cmd */
47#define CMDTHREAD_RESET_BULK_OUT                    0x0D730210	/* cmd */
48#define CMDTHREAD_RESET_BULK_IN                     0x0D730211	/* cmd */
49#define CMDTHREAD_SET_PSM_BIT				0x0D730212	/* cmd */
50#define CMDTHREAD_SET_RADIO                         0x0D730214	/* cmd */
51#define CMDTHREAD_UPDATE_TX_RATE                    0x0D730216	/* cmd */
52#define CMDTHREAD_802_11_ADD_KEY_WEP                0x0D730218	/* cmd */
53#define CMDTHREAD_RESET_FROM_ERROR                  0x0D73021A	/* cmd */
54#define CMDTHREAD_LINK_DOWN                         0x0D73021B	/* cmd */
55#define CMDTHREAD_RESET_FROM_NDIS                   0x0D73021C	/* cmd */
56#define CMDTHREAD_CHECK_GPIO                        0x0D730215	/* cmd */
57#define CMDTHREAD_FORCE_WAKE_UP                     0x0D730222	/* cmd */
58#define CMDTHREAD_SET_BW                            0x0D730225	/* cmd */
59#define CMDTHREAD_SET_ASIC_WCID                     0x0D730226	/* cmd */
60#define CMDTHREAD_SET_ASIC_WCID_CIPHER              0x0D730227	/* cmd */
61#define CMDTHREAD_QKERIODIC_EXECUT                  0x0D73023D	/* cmd */
62#define RT_CMD_SET_KEY_TABLE                        0x0D730228	/* cmd */
63#define RT_CMD_SET_RX_WCID_TABLE                    0x0D730229	/* cmd */
64#define CMDTHREAD_SET_CLIENT_MAC_ENTRY              0x0D73023E	/* cmd */
65#define CMDTHREAD_SET_GROUP_KEY						0x0D73023F	/* cmd */
66#define CMDTHREAD_SET_PAIRWISE_KEY					0x0D730240	/* cmd */
67
68#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER    0x0D710105	/* cmd */
69#define CMDTHREAD_802_11_SET_PHY_MODE               0x0D79010C	/* cmd */
70#define CMDTHREAD_802_11_SET_STA_CONFIG             0x0D790111	/* cmd */
71#define CMDTHREAD_802_11_SET_PREAMBLE               0x0D790101	/* cmd */
72#define CMDTHREAD_802_11_COUNTER_MEASURE			0x0D790102	/* cmd */
73/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */
74#define CMDTHREAD_UPDATE_PROTECT					0x0D790103	/* cmd */
75/* end johnli */
76
77/*CMDTHREAD_MULTI_READ_MAC */
78/*CMDTHREAD_MULTI_WRITE_MAC */
79/*CMDTHREAD_VENDOR_EEPROM_READ */
80/*CMDTHREAD_VENDOR_EEPROM_WRITE */
81struct rt_cmdhandler_tlv {
82	u16 Offset;
83	u16 Length;
84	u8 DataFirst;
85};
86
87struct rt_cmdqelmt;
88
89struct rt_cmdqelmt {
90	u32 command;
91	void *buffer;
92	unsigned long bufferlength;
93	BOOLEAN CmdFromNdis;
94	BOOLEAN SetOperation;
95	struct rt_cmdqelmt *next;
96};
97
98struct rt_cmdq {
99	u32 size;
100	struct rt_cmdqelmt *head;
101	struct rt_cmdqelmt *tail;
102	u32 CmdQState;
103};
104
105#define EnqueueCmd(cmdq, cmdqelmt)		\
106{										\
107	if (cmdq->size == 0)				\
108		cmdq->head = cmdqelmt;			\
109	else								\
110		cmdq->tail->next = cmdqelmt;	\
111	cmdq->tail = cmdqelmt;				\
112	cmdqelmt->next = NULL;				\
113	cmdq->size++;						\
114}
115
116/******************************************************************************
117
118	USB Cmd to ASIC Related MACRO
119
120******************************************************************************/
121/* reset MAC of a station entry to 0xFFFFFFFFFFFF */
122#define RTMP_STA_ENTRY_MAC_RESET(pAd, Wcid)					\
123	{	struct rt_set_asic_wcid	SetAsicWcid;						\
124		SetAsicWcid.WCID = Wcid;								\
125		SetAsicWcid.SetTid = 0xffffffff;						\
126		SetAsicWcid.DeleteTid = 0xffffffff;						\
127		RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID,	\
128				&SetAsicWcid, sizeof(struct rt_set_asic_wcid));	}
129
130/* add this entry into ASIC RX WCID search table */
131#define RTMP_STA_ENTRY_ADD(pAd, pEntry)							\
132	RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY,	\
133							pEntry, sizeof(struct rt_mac_table_entry));
134
135/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */
136/* Set MAC register value according operation mode */
137#define RTMP_UPDATE_PROTECT(pAd)	\
138	RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_UPDATE_PROTECT, NULL, 0);
139/* end johnli */
140
141/* remove Pair-wise key material from ASIC */
142/* yet implement */
143#define RTMP_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid)
144
145/* add Client security information into ASIC WCID table and IVEIV table */
146#define RTMP_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry)						\
147	{	RTMP_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid);								\
148		if (pEntry->Aid >= 1) {														\
149			struct rt_set_asic_wcid_attri	SetAsicWcidAttri;								\
150			SetAsicWcidAttri.WCID = pEntry->Aid;									\
151			if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) &&				\
152				(pEntry->WepStatus == Ndis802_11Encryption1Enabled))				\
153			{																		\
154				SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg;	\
155			}																		\
156			else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone)					\
157			{																		\
158				SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg;	\
159			}																		\
160			else SetAsicWcidAttri.Cipher = 0;										\
161            DBGPRINT(RT_DEBUG_TRACE, ("aid cipher = %ld\n",SetAsicWcidAttri.Cipher));       \
162			RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER,			\
163							&SetAsicWcidAttri, sizeof(struct rt_set_asic_wcid_attri)); } }
164
165/* Insert the BA bitmap to ASIC for the Wcid entry */
166#define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID)					\
167		do{																\
168			struct rt_set_asic_wcid	SetAsicWcid;							\
169			SetAsicWcid.WCID = (_Aid);									\
170			SetAsicWcid.SetTid = (0x10000<<(_TID));						\
171			SetAsicWcid.DeleteTid = 0xffffffff;							\
172			RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(struct rt_set_asic_wcid));	\
173		}while(0)
174
175/* Remove the BA bitmap from ASIC for the Wcid entry */
176#define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID)				\
177		do{																\
178			struct rt_set_asic_wcid	SetAsicWcid;							\
179			SetAsicWcid.WCID = (_Wcid);									\
180			SetAsicWcid.SetTid = (0xffffffff);							\
181			SetAsicWcid.DeleteTid = (0x10000<<(_TID) );					\
182			RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(struct rt_set_asic_wcid));	\
183		}while(0)
184
185#endif /* __RTUSB_IO_H__ // */
186