Merge commit 'kumar/next' into merge
[linux-2.6] / drivers / staging / vt6655 / key.h
1 /*
2  * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  *
20  * File: key.h
21  *
22  * Purpose: Implement functions for 802.11i Key management
23  *
24  * Author: Jerry Chen
25  *
26  * Date: May 29, 2003
27  *
28  */
29
30
31 #ifndef __KEY_H__
32 #define __KEY_H__
33
34 #if !defined(__TTYPE_H__)
35 #include "ttype.h"
36 #endif
37
38 #if !defined(__TETHER_H__)
39 #include "tether.h"
40 #endif
41
42 #if !defined(__80211MGR_H__)
43 #include "80211mgr.h"
44 #endif
45
46 /*---------------------  Export Definitions -------------------------*/
47 #define MAX_GROUP_KEY       4
48 #define MAX_KEY_TABLE       11
49 #define MAX_KEY_LEN         32
50 #define AES_KEY_LEN         16
51
52
53 #define AUTHENTICATOR_KEY   0x10000000
54 #define USE_KEYRSC          0x20000000
55 #define PAIRWISE_KEY        0x40000000
56 #define TRANSMIT_KEY        0x80000000
57
58 #define GROUP_KEY           0x00000000
59
60 #define KEY_CTL_WEP         0x00
61 #define KEY_CTL_NONE        0x01
62 #define KEY_CTL_TKIP        0x02
63 #define KEY_CTL_CCMP        0x03
64 #define KEY_CTL_INVALID     0xFF
65
66
67 typedef struct tagSKeyItem
68 {
69     BOOL        bKeyValid;
70     ULONG       uKeyLength;
71     BYTE        abyKey[MAX_KEY_LEN];
72     QWORD       KeyRSC;
73     DWORD       dwTSC47_16;
74     WORD        wTSC15_0;
75     BYTE        byCipherSuite;
76     BYTE        byReserved0;
77     DWORD       dwKeyIndex;
78     PVOID       pvKeyTable;
79 } SKeyItem, DEF* PSKeyItem; //64
80
81 typedef struct tagSKeyTable
82 {
83     BYTE        abyBSSID[U_ETHER_ADDR_LEN];  //6
84     BYTE        byReserved0[2];              //8
85     SKeyItem    PairwiseKey;
86     SKeyItem    GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328
87     DWORD       dwGTKeyIndex;            // GroupTransmitKey Index
88     BOOL        bInUse;
89     //2006-1116-01,<Modify> by NomadZhao
90     //WORD      wKeyCtl;
91     //BOOL      bSoftWEP;
92     BOOL        bSoftWEP;
93     WORD        wKeyCtl;      // for address of wKeyCtl at align 4
94
95     BYTE        byReserved1[6];
96 } SKeyTable, DEF* PSKeyTable; //348
97
98 typedef struct tagSKeyManagement
99 {
100     SKeyTable   KeyTable[MAX_KEY_TABLE];
101 } SKeyManagement, DEF* PSKeyManagement;
102
103 /*---------------------  Export Types  ------------------------------*/
104
105 /*---------------------  Export Macros ------------------------------*/
106
107 /*---------------------  Export Classes  ----------------------------*/
108
109 /*---------------------  Export Variables  --------------------------*/
110
111 /*---------------------  Export Functions  --------------------------*/
112 #ifdef __cplusplus
113 extern "C" {                            /* Assume C declarations for C++ */
114 #endif /* __cplusplus */
115
116 VOID KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase);
117
118 BOOL KeybGetKey(
119     IN  PSKeyManagement pTable,
120     IN  PBYTE           pbyBSSID,
121     IN  DWORD           dwKeyIndex,
122     OUT PSKeyItem       *pKey
123     );
124
125 BOOL KeybSetKey(
126     PSKeyManagement pTable,
127     PBYTE           pbyBSSID,
128     DWORD           dwKeyIndex,
129     ULONG           uKeyLength,
130     PQWORD          pKeyRSC,
131     PBYTE           pbyKey,
132     BYTE            byKeyDecMode,
133     DWORD_PTR       dwIoBase,
134     BYTE            byLocalID
135     );
136
137 BOOL KeybSetDefaultKey(
138     PSKeyManagement pTable,
139     DWORD           dwKeyIndex,
140     ULONG           uKeyLength,
141     PQWORD          pKeyRSC,
142     PBYTE           pbyKey,
143     BYTE            byKeyDecMode,
144     DWORD_PTR       dwIoBase,
145     BYTE            byLocalID
146     );
147
148 BOOL KeybRemoveKey(
149     PSKeyManagement pTable,
150     PBYTE           pbyBSSID,
151     DWORD           dwKeyIndex,
152     DWORD_PTR       dwIoBase
153     );
154
155 BOOL KeybGetTransmitKey(
156     IN  PSKeyManagement pTable,
157     IN  PBYTE           pbyBSSID,
158     IN  DWORD           dwKeyType,
159     OUT PSKeyItem       *pKey
160     );
161
162 BOOL KeybCheckPairewiseKey(
163     IN  PSKeyManagement pTable,
164     OUT PSKeyItem       *pKey
165     );
166
167 BOOL KeybRemoveAllKey(
168     PSKeyManagement pTable,
169     PBYTE           pbyBSSID,
170     DWORD_PTR       dwIoBase
171     );
172
173 VOID KeyvRemoveWEPKey(
174     PSKeyManagement pTable,
175     DWORD           dwKeyIndex,
176     DWORD_PTR       dwIoBase
177     );
178
179 VOID KeyvRemoveAllWEPKey(
180     PSKeyManagement pTable,
181     DWORD_PTR       dwIoBase
182     );
183
184 BOOL KeybSetAllGroupKey (
185     PSKeyManagement pTable,
186     DWORD           dwKeyIndex,
187     ULONG           uKeyLength,
188     PQWORD          pKeyRSC,
189     PBYTE           pbyKey,
190     BYTE            byKeyDecMode,
191     DWORD_PTR       dwIoBase,
192     BYTE            byLocalID
193     );
194
195 #ifdef __cplusplus
196 }                                       /* End of extern "C" { */
197
198 #endif /* __cplusplus */
199
200
201 #endif // __KEY_H__
202