summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h
blob: 53973b19993884ce4ea9934692c22a48d07fd29a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#ifndef __INC_WDI_DEF_H
#define __INC_WDI_DEF_H


#define	RT_CMD_ENTRY_STRING_SIZE			80

typedef enum __RT_COMMAND_ENTRY_TYPE
{
	RT_CMD_ENTRY_TYPE_NONE,
	RT_CMD_ENTRY_TYPE_TASK,
	RT_CMD_ENTRY_TYPE_PROPERTY,
}RT_COMMAND_ENTRY_TYPE;


typedef struct __RT_COMMAND_ENTRY
{
	RT_COMMAND_ENTRY_TYPE		Type;
	u4Byte 						Oid;
	char						szID[RT_CMD_ENTRY_STRING_SIZE];		// The string name of this command
	BOOLEAN						bAdapterObject;						// Refer WDI spec TASK COMMANDS and PROPTERTY COMMANDS

	// func ptr to the tlv parser, set to NULL if not supported
	NDIS_STATUS (__stdcall *TlvParser)(
		_In_ ULONG BufferLength,
		_In_reads_bytes_( BufferLength ) UINT8 const * pBuffer,
		_In_ PCTLV_CONTEXT Context,
		_Out_opt_ VOID *pParsedMessage
		);

 	// func ptr to the tlv cleaner, shall be provided if TlvParser is specified
	void (__stdcall *TlvCleaner)(
		_In_ VOID *pParsedMessage
		);

	// 'sizeof' of the parsed tlv structure, shall be provided if TlvParser is specified
	size_t						parsedTlvSize;
}RT_COMMAND_ENTRY;

typedef union __RT_PARSED_TLV
{
	// general reference
	VOID *param;

	// task
	WDI_TASK_OPEN_PARAMETERS *paramOpen;
	WDI_TASK_CLOSE_PARAMETERS *paramClose;
	WDI_SCAN_PARAMETERS *paramScan;
	WDI_TASK_P2P_DISCOVER_PARAMETERS *paramP2pDiscover;
	WDI_TASK_CONNECT_PARAMETERS *paramConnect;
	WDI_TASK_DOT11_RESET_PARAMETERS *paramDot11Reset;
	WDI_TASK_DISCONNECT_PARAMETERS *paramDisconnect;
	WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *paramP2pSendRequestActionFrame;
	WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *paramP2pSendResponseActionFrame;
	WDI_SET_RADIO_STATE_PARAMETERS *paramSetRadioState;
	WDI_TASK_CREATE_PORT_PARAMETERS *paramCreatePort;
	WDI_TASK_DELETE_PORT_PARAMETERS *paramDeletePort;
	WDI_TASK_START_AP_PARAMETERS *paramStartAp;
	WDI_TASK_STOP_AP_PARAMETERS *paramStopAp;
	WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS *paramSendApAssociationResponse;
	WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS *paramChangeOperationMode;
	WDI_TASK_ROAM_PARAMETERS *paramRoam;
	WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS *paramSendRequestActionFrame;
	WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *paramSendResponseActionFrame;

	// property
	WDI_SET_P2P_LISTEN_STATE_PARAMETERS *paramSetP2pListenState;
	// OID_WDI_SET_P2P_ADDITIONAL_IE, does not have corresp. structure
	WDI_SET_ADD_CIPHER_KEYS_PARAMETERS *paramSetAddCipherKeys;
	WDI_SET_DELETE_CIPHER_KEYS_PARAMETERS *paramSetDeleteDefaultCipherKeys;
	WDI_SET_DEFAULT_KEY_ID_PARAMETERS *paramSetDefaultKeyId;
	WDI_SET_CONNECTION_QUALITY_PARAMETERS *paramSetConnectionQuality;
	WDI_GET_AUTO_POWER_SAVE_PARAMETERS *paramGetAutoPowerSave;
	WDI_GET_STATISTICS_PARAMETERS *paramGetStatistics;
	WDI_SET_RECEIVE_PACKET_FILTER_PARAMETERS *paramSetReceivePacketFilter;
	WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS *paramGetAdapterCapabilities;
	WDI_NETWORK_LIST_OFFLOAD_PARAMETERS *paramNetworkListOffload;
	WDI_SET_RECEIVE_COALESCING_PARAMETERS *paramSetReceiveCoalescing;
	WDI_SET_PRIVACY_EXEMPTION_LIST_PARAMETERS *paramSetPrivacyExemptionList;
	WDI_SET_POWER_PARAMETERS *paramSetPower;
	WDI_TASK_ABORT_PARAMETERS *paramAbort;
	WDI_SET_ADD_WOL_PATTERN_PARAMETERS *paramSetAddWolPattern;
	WDI_SET_REMOVE_WOL_PATTERN_PARAMETERS *paramSetRemoveWolPattern;
	WDI_SET_MULTICAST_LIST_PARAMETERS *paramSetMulticastList;
	WDI_SET_ADD_PM_PROTOCOL_OFFLOAD_PARAMETERS_PARAMETERS *paramSetAddProtocolOffload;
	WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD_PARAMETERS *paramSetRemoveProtocolOffload;
	WDI_SET_FIRMWARE_CONFIGURATION_PARAMETERS *paramSetFirmwareConfiguration;
	WDI_GET_RECEIVE_COALESCING_MATCH_COUNT_INPUTS *paramGetReceiveColescingMatchCountInput;
	WDI_SET_ADVERTISEMENT_INFORMATION_PARAMETERS *paramSetAdvertisementInformation;
	WDI_IHV_REQUEST_PARAMETERS *paramIhvRequest;
	WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_INPUTS *paramGetNextActionFrameDialogTokenInputs;
	WDI_SET_P2P_WPS_ENABLED_PARAMETERS *paramSetP2pWpsEnabled;
	WDI_GET_BSS_ENTRY_LIST_UPDATE_PARAMETERS *paramGetBSSEntryListUpdate;
	WDI_SET_FAST_BSS_TRANSITION_PARAMETERS_COMMAND	*paramSetFastBssTransitionParametersCommand;
}RT_PARSED_TLV;

typedef struct __RT_TLV_PARSER
{
	// dbg info
	size_t					nonCleanedup;
	
	// buffer
	u1Byte					*buf;
	size_t					bufSize;

	// parsed tlv
	RT_PARSED_TLV			parsedTlv;
}RT_TLV_PARSER;

typedef struct _RT_OID_HANDLER
{
	// Associate which NdisRequest to process
	PNDIS_OID_REQUEST		pNdisRequest;
	
	// For task command, NdisRequest is returned with NDIS_STATUS_SUCCESS
	// So copy the content of NdisRequest
	NDIS_OID_REQUEST		PendedRequest;

	// InformationBuffer of NdisRequest, length is stored in NdisRequest
	pu1Byte					pInputBuffer;

	ULONG					AllocatedBufferLength;

	// Output length of this NdisRequest
	ULONG					OutputBufferLength;

	// Keep current handler's status
	u1Byte					Status;

	// Protection of status
	NDIS_SPIN_LOCK			Lock;

	// Record Oid start/returned/complete time
	u8Byte					OidStartTime;
	u8Byte					OidExecutionTime;
	u8Byte					OidReturnTime;

	// Event to notify there is a pending NdisRequest waiting for process
	NDIS_EVENT				PendingEvent;

	// Event to notify completion of NdisRequest
	NDIS_EVENT				CompleteEvent;

	// Associated command entry
	RT_COMMAND_ENTRY		*CmdEntry;

	// Parsed TLV structure
	RT_TLV_PARSER			tlvParser;
	
	// Oid returned status
	NDIS_STATUS				OidStatus;

	RT_WORK_ITEM			WDICommandWorkitem;

	VOID					*pvCtx;
}RT_OID_HANDLER, *PRT_OID_HANDLER;

typedef struct __RT_TASK_ENTRY
{
	RT_COMMAND_ENTRY			super;

	NDIS_STATUS					StatusCode;
	BOOLEAN						bWaitComplete;
	u1Byte						TimeoutSec;

	NDIS_STATUS (*Func)(											// The command handler function
		IN  PADAPTER			pAdapter,
		IN  PRT_OID_HANDLER	pOidHandle
		);

	NDIS_STATUS (*AbortFunc)(
		IN  PADAPTER pAdapter
		);

	NDIS_STATUS (*TimeoutFunc)(
		IN  PADAPTER pAdapter
		);

	NDIS_STATUS (*PreM4Cb)(
		IN  PADAPTER			pAdapter,
		IN  PRT_OID_HANDLER	pOidHandle
		);

	NDIS_STATUS (*PostM4Cb)(
		IN  PADAPTER		pAdapter,
		IN  PVOID			pContext
		);
		
}RT_TASK_ENTRY, *PRT_TASK_ENTRY;


typedef struct __RT_PROPERTY_ENTRY
{
	RT_COMMAND_ENTRY			super;
	
	NDIS_STATUS (*Func)(											// The command handler function
		IN  PADAPTER 			pAdapter,
		IN  PRT_OID_HANDLER		pOidHandle
		);

}RT_PROPERTY_ENTRY, *PRT_PROPERTY_ENTRY;


typedef struct __RT_COMPLETE_ENTRY
{
	RT_LIST_ENTRY	List;
	u4Byte			Oid;
	u4Byte			TransactionId;
	u2Byte			PortId;
}RT_COMPLETE_ENTRY, *PRT_COMPLETE_ENTRY;


//--------------------------------------------------------------------
//
// Here we define required format for WDI
//
//--------------------------------------------------------------------

typedef struct _WDI_DATA_STRUCT
{
	NDIS_HANDLE					DataPathHandle;
	NDIS_WDI_DATA_API			WdiDataApi;
	PNDIS_WDI_INIT_PARAMETERS	pWdiInitParameters;
	WDI_PORT_ID					StaPortId;
	RT_THREAD					TaskThread;
	RT_THREAD					PropertyThread;
	RT_OID_HANDLER				TaskHandle;
	RT_OID_HANDLER				PropertyHandle;
	RT_WORK_ITEM				TaskWorkItem;
	RT_WORK_ITEM				PropertyWorkItem;
	PVOID						LatestScanRequestId;		// temporary
	NDIS_SPIN_LOCK				TaskCompleteIndicationLock;
	RT_LIST_ENTRY				TaskCompleteIndicationList;
	RT_COMPLETE_ENTRY			CurrentTask;
	TLV_CONTEXT					TlvContext;
	u4Byte						txPauseReason;
	BOOLEAN						bWdiLEPLDR; // LE Hang detection and recovery, which currently is for PLDR
	BOOLEAN						bRFOffSwitchProgress;
	RT_OID_HANDLER				TaskPostHangHandle;
	BOOLEAN						bCommandHangHappened;
	RT_LIST_ENTRY				TaskPostHangCompleteIndicationList;
	RT_COMPLETE_ENTRY			CurrentTaskPostHang;
} WDI_DATA_STRUCT, *PWDI_DATA_STRUCT;


typedef struct _TLV_WDI_STRUCT
{
	u2Byte		Type;
	u2Byte		Length;
	u1Byte		Value[1];
} TLV_WDI_STRUCT, *PTLV_WDI_STRUCT;


#endif