wifi: renew patch drivers/net/wireless
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / mt5931_kk / drv_wlan / include / nic / hif_rx.h
1 /*
2 ** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/include/nic/hif_rx.h#1 $
3 */
4
5 /*! \file   "hif_rx.h"
6     \brief  Provide HIF RX Header Information between F/W and Driver
7
8     N/A
9 */
10 /*******************************************************************************
11 * Copyright (c) 2007 MediaTek Inc.
12 *
13 * All rights reserved. Copying, compilation, modification, distribution
14 * or any other use whatsoever of this material is strictly prohibited
15 * except in accordance with a Software License Agreement with
16 * MediaTek Inc.
17 ********************************************************************************
18 */
19
20 /*******************************************************************************
21 * LEGAL DISCLAIMER
22 *
23 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND
24 * AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK
25 * SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE
26 * PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY
27 * DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
28 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
29 * PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE
30 * ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY
31 * WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
32 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
33 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE
34 * FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO
35 * CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
36 *
37 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
38 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL
39 * BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT
40 * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY
41 * BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
42 *
43 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
44 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT
45 * OF LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING
46 * THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN
47 * FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE
48 * (ICC).
49 ********************************************************************************
50 */
51
52 /*
53 ** $Log: hif_rx.h $
54  *
55  * 09 01 2010 kevin.huang
56  * NULL
57  * Use LINK LIST operation to process SCAN result
58  *
59  * 07 16 2010 yarco.yang
60  * 
61  * 1. Support BSS Absence/Presence Event
62  * 2. Support STA change PS mode Event
63  * 3. Support BMC forwarding for AP mode.
64  *
65  * 07 08 2010 cp.wu
66  * 
67  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
68  *
69  * 06 14 2010 cp.wu
70  * [WPD00003833][MT6620 and MT5931] Driver migration 
71  * follow-ups for HIF_RX_HEADER_T update:
72  * 1) add TCL 
73  * 2) add RCPI
74  * 3) add ChannelNumber
75  *
76  * 06 11 2010 cp.wu
77  * [WPD00003833][MT6620 and MT5931] Driver migration 
78  * 1) migrate assoc.c.
79  * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
80  * 3) add configuration options for CNM_MEM and RSN modules
81  * 4) add data path for management frames
82  * 5) eliminate rPacketInfo of MSDU_INFO_T
83  *
84  * 06 09 2010 cp.wu
85  * [WPD00003833][MT6620 and MT5931] Driver migration 
86  * add necessary changes to driver data paths.
87  *
88  * 06 06 2010 kevin.huang
89  * [WPD00003832][MT6620 5931] Create driver base 
90  * [MT6620 5931] Create driver base
91 **  \main\maintrunk.MT6620WiFiDriver_Prj\10 2009-12-10 16:44:00 GMT mtk02752
92 **  code clean
93 **  \main\maintrunk.MT6620WiFiDriver_Prj\9 2009-12-09 13:59:20 GMT MTK02468
94 **  Added HIF_RX_HDR parsing macros
95 **  \main\maintrunk.MT6620WiFiDriver_Prj\8 2009-11-24 19:54:54 GMT mtk02752
96 **  adopt HIF_RX_HEADER_T in new data path
97 **  \main\maintrunk.MT6620WiFiDriver_Prj\7 2009-10-29 19:51:19 GMT mtk01084
98 **  modify FW/ driver interface
99 **  \main\maintrunk.MT6620WiFiDriver_Prj\6 2009-04-28 10:33:58 GMT mtk01461
100 **  Add define of HW_APPENED_LEN
101 **  \main\maintrunk.MT6620WiFiDriver_Prj\5 2009-04-01 10:51:02 GMT mtk01461
102 **  Rename ENUM_HIF_RX_PKT_TYPE_T
103 **  \main\maintrunk.MT6620WiFiDriver_Prj\4 2009-03-19 12:05:03 GMT mtk01426
104 **  Remove __KAL_ATTRIB_PACKED__ and add hifDataTypeCheck()
105 **  \main\maintrunk.MT6620WiFiDriver_Prj\3 2009-03-17 20:18:52 GMT mtk01426
106 **  Add comment to HIF_RX_HEADER_T
107 **  \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:16:23 GMT mtk01426
108 **  Init for develop
109 **
110 */
111
112 #ifndef _HIF_RX_H
113 #define _HIF_RX_H
114
115 /*******************************************************************************
116 *                         C O M P I L E R   F L A G S
117 ********************************************************************************
118 */
119
120 /*******************************************************************************
121 *                    E X T E R N A L   R E F E R E N C E S
122 ********************************************************************************
123 */
124
125 /*******************************************************************************
126 *                              C O N S T A N T S
127 ********************************************************************************
128 */
129 /*! HIF_RX_HEADER_T */
130 // DW 0, Byte 1
131 #define HIF_RX_HDR_PACKET_TYPE_MASK      BITS(0,1)
132
133 // DW 1, Byte 0
134 #define HIF_RX_HDR_HEADER_LEN            BITS(2,7)
135 #define HIF_RX_HDR_HEADER_LEN_OFFSET     2
136 #define HIF_RX_HDR_HEADER_OFFSET_MASK    BITS(0,1)
137
138 // DW 1, Byte 1
139 #define HIF_RX_HDR_80211_HEADER_FORMAT   BIT(0)
140 #define HIF_RX_HDR_DO_REORDER            BIT(1)
141 #define HIF_RX_HDR_PAL                   BIT(2)
142 #define HIF_RX_HDR_TCL                   BIT(3)
143 #define HIF_RX_HDR_NETWORK_IDX_MASK      BITS(4,7)
144 #define HIF_RX_HDR_NETWORK_IDX_OFFSET    4
145
146 // DW 1, Byte 2, 3
147 #define HIF_RX_HDR_SEQ_NO_MASK           BITS(0,11)
148 #define HIF_RX_HDR_TID_MASK              BITS(12,14)
149 #define HIF_RX_HDR_TID_OFFSET            12
150 #define HIF_RX_HDR_BAR_FRAME             BIT(15)
151
152
153
154 #define HIF_RX_HDR_FLAG_AMP_WDS             BIT(0)
155 #define HIF_RX_HDR_FLAG_802_11_FORMAT       BIT(1)
156 #define HIF_RX_HDR_FLAG_BAR_FRAME           BIT(2)
157 #define HIF_RX_HDR_FLAG_DO_REORDERING       BIT(3)
158 #define HIF_RX_HDR_FLAG_CTRL_WARPPER_FRAME  BIT(4)
159
160 #define HIF_RX_HW_APPENDED_LEN              4
161
162 // For DW 2, Byte 3 - ucHwChannelNum
163 #define HW_CHNL_NUM_MAX_2G4                 14
164 #define HW_CHNL_NUM_MAX_4G_5G               (255 - HW_CHNL_NUM_MAX_2G4)
165
166 /*******************************************************************************
167 *                         D A T A   T Y P E S
168 ********************************************************************************
169 */
170
171 typedef struct _HIF_RX_HEADER_T {
172     UINT_16    u2PacketLen;
173     UINT_16    u2PacketType;
174     UINT_8     ucHerderLenOffset;
175     UINT_8     uc80211_Reorder_PAL_TCL;
176     UINT_16    u2SeqNoTid;
177     UINT_8     ucStaRecIdx;
178     UINT_8     ucRcpi;
179     UINT_8     ucHwChannelNum;
180     UINT_8     ucReserved;
181 }  HIF_RX_HEADER_T, *P_HIF_RX_HEADER_T;
182
183 typedef enum _ENUM_HIF_RX_PKT_TYPE_T {
184     HIF_RX_PKT_TYPE_DATA = 0,
185     HIF_RX_PKT_TYPE_EVENT,
186     HIF_RX_PKT_TYPE_TX_LOOPBACK,
187     HIF_RX_PKT_TYPE_MANAGEMENT,
188     HIF_RX_PKT_TYPE_NUM
189 } ENUM_HIF_RX_PKT_TYPE_T, *P_ENUM_HIF_RX_PKT_TYPE_T;
190
191 /*******************************************************************************
192 *                            P U B L I C   D A T A
193 ********************************************************************************
194 */
195
196 /*******************************************************************************
197 *                           P R I V A T E   D A T A
198 ********************************************************************************
199 */
200
201 /*******************************************************************************
202 *                                 M A C R O S
203 ********************************************************************************
204 */
205 #define HIF_RX_HDR_SIZE        sizeof(HIF_RX_HEADER_T)
206
207 #define HIF_RX_HDR_GET_80211_FLAG(_prHifRxHdr) \
208     (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_80211_HEADER_FORMAT) ? TRUE : FALSE))
209 #define HIF_RX_HDR_GET_REORDER_FLAG(_prHifRxHdr) \
210     (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_DO_REORDER) ? TRUE : FALSE))
211 #define HIF_RX_HDR_GET_PAL_FLAG(_prHifRxHdr) \
212     (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_PAL) ? TRUE : FALSE))
213 #define HIF_RX_HDR_GET_TCL_FLAG(_prHifRxHdr) \
214     (((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_TCL) ? TRUE : FALSE))
215 #define HIF_RX_HDR_GET_NETWORK_IDX(_prHifRxHdr) \
216     ((((_prHifRxHdr)->uc80211_Reorder_PAL_TCL) & HIF_RX_HDR_NETWORK_IDX_MASK)\
217     >> HIF_RX_HDR_NETWORK_IDX_OFFSET)
218
219
220 #define HIF_RX_HDR_GET_TID(_prHifRxHdr) \
221     ((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_TID_MASK)\
222     >> HIF_RX_HDR_TID_OFFSET)
223 #define HIF_RX_HDR_GET_SN(_prHifRxHdr) \
224     (((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_SEQ_NO_MASK)
225 #define HIF_RX_HDR_GET_BAR_FLAG(_prHifRxHdr) \
226     (((((_prHifRxHdr)->u2SeqNoTid) & HIF_RX_HDR_BAR_FRAME)? TRUE: FALSE))
227
228
229 #define HIF_RX_HDR_GET_CHNL_NUM(_prHifRxHdr) \
230     ( ( ((_prHifRxHdr)->ucHwChannelNum) > HW_CHNL_NUM_MAX_4G_5G ) ? \
231       ( ((_prHifRxHdr)->ucHwChannelNum) - HW_CHNL_NUM_MAX_4G_5G ) : \
232       ((_prHifRxHdr)->ucHwChannelNum) )
233
234 /* To do: support more bands other than 2.4G and 5G */
235 #define HIF_RX_HDR_GET_RF_BAND(_prHifRxHdr) \
236     ( ( ((_prHifRxHdr)->ucHwChannelNum) <= HW_CHNL_NUM_MAX_2G4 ) ? \
237       BAND_2G4 : BAND_5G)
238
239 /*******************************************************************************
240 *                  F U N C T I O N   D E C L A R A T I O N S
241 ********************************************************************************
242 */
243 __KAL_INLINE__ VOID
244 hifDataTypeCheck (
245     VOID
246     );
247
248 /*******************************************************************************
249 *                              F U N C T I O N S
250 ********************************************************************************
251 */
252
253 /* Kevin: we don't have to call following function to inspect the data structure.
254  * It will check automatically while at compile time.
255  * We'll need this for porting driver to different RTOS.
256  */
257 __KAL_INLINE__ VOID
258 hifDataTypeCheck (
259     VOID
260     )
261 {
262     DATA_STRUC_INSPECTING_ASSERT(sizeof(HIF_RX_HEADER_T) == 12);
263
264     return;
265 }
266
267 #endif