File Index
Files and directories
Sign in
FILE

sap.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/wireless/intel/iwlwifi/mei/sap.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (C) 2021 - 2022, 2025 Intel Corporation
  4 */
  5
  6#ifndef __sap_h__
  7#define __sap_h__
  8
  9#include "mei/iwl-mei.h"
 10
 11/**
 12 * DOC: Introduction
 13 *
 14 * SAP is the protocol used by the Intel Wireless driver (iwlwifi)
 15 * and the wireless driver implemented in the CSME firmware.
 16 * It allows to do several things:
 17 * 1) Decide who is the owner of the device: CSME or the host
 18 * 2) When the host is the owner of the device, CSME can still
 19 * send and receive packets through iwlwifi.
 20 *
 21 * The protocol uses the ME interface (mei driver) to send
 22 * messages to the CSME firmware. Those messages have a header
 23 * &struct iwl_sap_me_msg_hdr and this header is followed
 24 * by a payload.
 25 *
 26 * Since this messaging system cannot support high amounts of
 27 * traffic, iwlwifi and the CSME firmware's WLAN driver have an
 28 * additional communication pipe to exchange information. The body
 29 * of the message is copied to a shared area and the message that
 30 * goes over the ME interface just signals the other side
 31 * that a new message is waiting in the shared area. The ME
 32 * interface is used only for signaling and not to transfer
 33 * the payload.
 34 *
 35 * This shared area of memory is DMA'able mapped to be
 36 * writable by both the CSME firmware and iwlwifi. It is
 37 * mapped to address space of the device that controls the ME
 38 * interface's DMA engine. Any data that iwlwifi needs to
 39 * send to the CSME firmware needs to be copied to there.
 40 */
 41
 42/**
 43 * DOC: Initial Handshake
 44 *
 45 * Once we get a link to the CMSE's WLAN driver we start the handshake
 46 * to establish the shared memory that will allow the communication between
 47 * the CSME's WLAN driver and the host.
 48 *
 49 * 1) Host sends %SAP_ME_MSG_START message with the physical address
 50 * of the shared area.
 51 * 2) CSME replies with %SAP_ME_MSG_START_OK which includes the versions
 52 * protocol versions supported by CSME.
 53 */
 54
 55/**
 56 * DOC: Host and driver state messages
 57 *
 58 * In order to let CSME know about the host state and the host driver state,
 59 * the host sends messages that let CSME know about the host's state.
 60 * When the host driver is loaded, the host sends %SAP_MSG_NOTIF_WIFIDR_UP.
 61 * When the host driver is unloaded, the host sends %SAP_MSG_NOTIF_WIFIDR_DOWN.
 62 * When the iwlmei is unloaded, %SAP_MSG_NOTIF_HOST_GOES_DOWN is sent to let
 63 * CSME know not to access the shared memory anymore since it'll be freed.
 64 *
 65 * CSME will reply to SAP_MSG_NOTIF_WIFIDR_UP by
 66 * %SAP_MSG_NOTIF_AMT_STATE to let the host driver whether CSME can use the
 67 * WiFi device or not followed by %SAP_MSG_NOTIF_CSME_CONN_STATUS to inform
 68 * the host driver on the connection state of CSME.
 69 *
 70 * When host is associated to an AP, it must send %SAP_MSG_NOTIF_HOST_LINK_UP
 71 * and when it disconnect from the AP, it must send
 72 * %SAP_MSG_NOTIF_HOST_LINK_DOWN.
 73 */
 74
 75/**
 76 * DOC: Ownership
 77 *
 78 * The device can be controlled either by the CSME firmware or
 79 * by the host driver: iwlwifi. There is a negotiation between
 80 * those two entities to determine who controls (or owns) the
 81 * device. Since the CSME can control the device even when the
 82 * OS is not working or even missing, the CSME can request the
 83 * device if it comes to the conclusion that the OS's host driver
 84 * is not operational. This is why the host driver needs to
 85 * signal CSME that it is up and running. If the driver is
 86 * unloaded, it'll signal CSME that it is going down so that
 87 * CSME can take ownership.
 88 */
 89
 90/**
 91 * DOC: Ownership transfer
 92 *
 93 * When the host driver needs the device, it'll send the
 94 * %SAP_MSG_NOTIF_HOST_ASKS_FOR_NIC_OWNERSHIP that will be replied by
 95 * %SAP_MSG_NOTIF_CSME_REPLY_TO_HOST_OWNERSHIP_REQ which will let the
 96 * host know whether the ownership is granted or no. If the ownership is
 97 * granted, the hosts sends %SAP_MSG_NOTIF_HOST_OWNERSHIP_CONFIRMED.
 98 *
 99 * When CSME requests ownership, it'll send the
100 * %SAP_MSG_NOTIF_CSME_TAKING_OWNERSHIP and give some time to host to stop
101 * accessing the device. The host needs to send
102 * %SAP_MSG_NOTIF_CSME_OWNERSHIP_CONFIRMED to confirm that it won't access
103 * the device anymore. If the host failed to send this message fast enough,
104 * CSME will take ownership on the device anyway.
105 * When CSME is willing to release the ownership, it'll send
106 * %SAP_MSG_NOTIF_CSME_CAN_RELEASE_OWNERSHIP.
107 */
108
109/**
110 * DOC: Data messages
111 *
112 * Data messages must be sent and receives on a separate queue in the shared
113 * memory. Almost all the data messages use the %SAP_MSG_DATA_PACKET for both
114 * packets sent by CSME to the host to be sent to the AP or for packets
115 * received from the AP and sent by the host to CSME.
116 * CSME sends filters to the host to let the host what inbound packets it must
117 * send to CSME. Those filters are received by the host as a
118 * %SAP_MSG_NOTIF_CSME_FILTERS command.
119 * The only outbound packets that must be sent to CSME are the DHCP packets.
120 * Those packets must use the %SAP_MSG_CB_DATA_PACKET message.
121 */
122
123/**
124 * enum iwl_sap_me_msg_id - the ID of the ME message
125 * @SAP_ME_MSG_START: See &struct iwl_sap_me_msg_start.
126 * @SAP_ME_MSG_START_OK: See &struct iwl_sap_me_msg_start_ok.
127 * @SAP_ME_MSG_CHECK_SHARED_AREA: This message has no payload.
128 */
129enum iwl_sap_me_msg_id {
130	SAP_ME_MSG_START	= 1,
131	SAP_ME_MSG_START_OK,
132	SAP_ME_MSG_CHECK_SHARED_AREA,
133};
134
135/**
136 * struct iwl_sap_me_msg_hdr - the header of the ME message
137 * @type: the type of the message, see &enum iwl_sap_me_msg_id.
138 * @seq_num: a sequence number used for debug only.
139 * @len: the length of the message.
140 */
141struct iwl_sap_me_msg_hdr {
142	__le32 type;
143	__le32 seq_num;
144	__le32 len;
145} __packed;
146
147/**
148 * struct iwl_sap_me_msg_start - used for the %SAP_ME_MSG_START message
149 * @hdr: See &struct iwl_sap_me_msg_hdr.
150 * @shared_mem: physical address of SAP shared memory area.
151 * @init_data_seq_num: seq_num of the first data packet HOST -> CSME.
152 * @init_notif_seq_num: seq_num of the first notification HOST -> CSME.
153 * @supported_versions: The host sends to the CSME a zero-terminated array
154 * of versions its supports.
155 *
156 * This message is sent by the host to CSME and will responded by the
157 * %SAP_ME_MSG_START_OK message.
158 */
159struct iwl_sap_me_msg_start {
160	struct iwl_sap_me_msg_hdr hdr;
161	__le64 shared_mem;
162	__le16 init_data_seq_num;
163	__le16 init_notif_seq_num;
164	u8 supported_versions[64];
165} __packed;
166
167/**
168 * struct iwl_sap_me_msg_start_ok - used for the %SAP_ME_MSG_START_OK
169 * @hdr: See &struct iwl_sap_me_msg_hdr
170 * @init_data_seq_num: Not used.
171 * @init_notif_seq_num: Not used
172 * @supported_version: The version that will be used.
173 * @reserved: For alignment.
174 *
175 * This message is sent by CSME to the host in response to the
176 * %SAP_ME_MSG_START message.
177 */
178struct iwl_sap_me_msg_start_ok {
179	struct iwl_sap_me_msg_hdr hdr;
180	__le16 init_data_seq_num;
181	__le16 init_notif_seq_num;
182	u8 supported_version;
183	u8 reserved[3];
184} __packed;
185
186/**
187 * enum iwl_sap_msg - SAP messages
188 * @SAP_MSG_NOTIF_BOTH_WAYS_MIN: Not used.
189 * @SAP_MSG_NOTIF_PING: No payload. Solicitate a response message (check-alive).
190 * @SAP_MSG_NOTIF_PONG: No payload. The response message.
191 * @SAP_MSG_NOTIF_BOTH_WAYS_MAX: Not used.
192 *
193 * @SAP_MSG_NOTIF_FROM_CSME_MIN: Not used.
194 * @SAP_MSG_NOTIF_CSME_FILTERS: TODO
195 * @SAP_MSG_NOTIF_AMT_STATE: Payload is a DW. Any non-zero value means
196 *	that CSME is enabled.
197 * @SAP_MSG_NOTIF_CSME_REPLY_TO_HOST_OWNERSHIP_REQ: Payload is a DW. 0 means
198 *	the host will not get ownership. Any other value means the host is
199 *	the owner.
200 * @SAP_MSG_NOTIF_CSME_TAKING_OWNERSHIP: No payload.
201 * @SAP_MSG_NOTIF_TRIGGER_IP_REFRESH: No payload.
202 * @SAP_MSG_NOTIF_CSME_CAN_RELEASE_OWNERSHIP: No payload.
203 * @SAP_MSG_NOTIF_NIC_OWNER: Payload is a DW. See &enum iwl_sap_nic_owner.
204 * @SAP_MSG_NOTIF_CSME_CONN_STATUS: See &struct iwl_sap_notif_conn_status.
205 * @SAP_MSG_NOTIF_NVM: See &struct iwl_sap_nvm.
206 * @SAP_MSG_NOTIF_PLDR_ACK: See &struct iwl_sap_pldr_ack_data.
207 * @SAP_MSG_NOTIF_FROM_CSME_MAX: Not used.
208 *
209 * @SAP_MSG_NOTIF_FROM_HOST_MIN: Not used.
210 * @SAP_MSG_NOTIF_BAND_SELECTION: TODO
211 * @SAP_MSG_NOTIF_RADIO_STATE: Payload is a DW.
212 *	See &enum iwl_sap_radio_state_bitmap.
213 * @SAP_MSG_NOTIF_NIC_INFO: See &struct iwl_sap_notif_host_nic_info.
214 * @SAP_MSG_NOTIF_HOST_ASKS_FOR_NIC_OWNERSHIP: No payload.
215 * @SAP_MSG_NOTIF_HOST_SUSPENDS: Payload is a DW. Bitmap described in
216 *	&enum iwl_sap_notif_host_suspends_bitmap.
217 * @SAP_MSG_NOTIF_HOST_RESUMES: Payload is a DW. 0 or 1. 1 says that
218 *	the CSME should re-initialize the init control block.
219 * @SAP_MSG_NOTIF_HOST_GOES_DOWN: No payload.
220 * @SAP_MSG_NOTIF_CSME_OWNERSHIP_CONFIRMED: No payload.
221 * @SAP_MSG_NOTIF_COUNTRY_CODE: See &struct iwl_sap_notif_country_code.
222 * @SAP_MSG_NOTIF_HOST_LINK_UP: See &struct iwl_sap_notif_host_link_up.
223 * @SAP_MSG_NOTIF_HOST_LINK_DOWN: See &struct iwl_sap_notif_host_link_down.
224 * @SAP_MSG_NOTIF_WHO_OWNS_NIC: No payload.
225 * @SAP_MSG_NOTIF_WIFIDR_DOWN: No payload.
226 * @SAP_MSG_NOTIF_WIFIDR_UP: No payload.
227 * @SAP_MSG_NOTIF_HOST_OWNERSHIP_CONFIRMED: No payload.
228 * @SAP_MSG_NOTIF_SAR_LIMITS: See &struct iwl_sap_notif_sar_limits.
229 * @SAP_MSG_NOTIF_GET_NVM: No payload. Triggers %SAP_MSG_NOTIF_NVM.
230 * @SAP_MSG_NOTIF_PLDR: See &struct iwl_sap_pldr_data.
231 * @SAP_MSG_NOTIF_PLDR_END: See &struct iwl_sap_pldr_end_data.
232 * @SAP_MSG_NOTIF_FROM_HOST_MAX: Not used.
233 *
234 * @SAP_MSG_DATA_MIN: Not used.
235 * @SAP_MSG_DATA_PACKET: Packets that passed the filters defined by
236 *	%SAP_MSG_NOTIF_CSME_FILTERS. The payload is &struct iwl_sap_hdr with
237 *	the payload of the packet immediately afterwards.
238 * @SAP_MSG_CB_DATA_PACKET: Indicates to CSME that we transmitted a specific
239 *	packet. Used only for DHCP transmitted packets. See
240 *	&struct iwl_sap_cb_data.
241 * @SAP_MSG_DATA_MAX: Not used.
242 */
243enum iwl_sap_msg {
244	SAP_MSG_NOTIF_BOTH_WAYS_MIN			= 0,
245	SAP_MSG_NOTIF_PING				= 1,
246	SAP_MSG_NOTIF_PONG				= 2,
247	SAP_MSG_NOTIF_BOTH_WAYS_MAX,
248
249	SAP_MSG_NOTIF_FROM_CSME_MIN			= 500,
250	SAP_MSG_NOTIF_CSME_FILTERS			= SAP_MSG_NOTIF_FROM_CSME_MIN,
251	/* 501 is deprecated */
252	SAP_MSG_NOTIF_AMT_STATE				= 502,
253	SAP_MSG_NOTIF_CSME_REPLY_TO_HOST_OWNERSHIP_REQ	= 503,
254	SAP_MSG_NOTIF_CSME_TAKING_OWNERSHIP		= 504,
255	SAP_MSG_NOTIF_TRIGGER_IP_REFRESH		= 505,
256	SAP_MSG_NOTIF_CSME_CAN_RELEASE_OWNERSHIP	= 506,
257	/* 507 is deprecated */
258	/* 508 is deprecated */
259	/* 509 is deprecated */
260	/* 510 is deprecated */
261	SAP_MSG_NOTIF_NIC_OWNER				= 511,
262	SAP_MSG_NOTIF_CSME_CONN_STATUS			= 512,
263	SAP_MSG_NOTIF_NVM				= 513,
264	/* 514 - 517 not supported */
265	SAP_MSG_NOTIF_PLDR_ACK				= 518,
266	SAP_MSG_NOTIF_FROM_CSME_MAX,
267
268	SAP_MSG_NOTIF_FROM_HOST_MIN			= 1000,
269	SAP_MSG_NOTIF_BAND_SELECTION			= SAP_MSG_NOTIF_FROM_HOST_MIN,
270	SAP_MSG_NOTIF_RADIO_STATE			= 1001,
271	SAP_MSG_NOTIF_NIC_INFO				= 1002,
272	SAP_MSG_NOTIF_HOST_ASKS_FOR_NIC_OWNERSHIP	= 1003,
273	SAP_MSG_NOTIF_HOST_SUSPENDS			= 1004,
274	SAP_MSG_NOTIF_HOST_RESUMES			= 1005,
275	SAP_MSG_NOTIF_HOST_GOES_DOWN			= 1006,
276	SAP_MSG_NOTIF_CSME_OWNERSHIP_CONFIRMED		= 1007,
277	SAP_MSG_NOTIF_COUNTRY_CODE			= 1008,
278	SAP_MSG_NOTIF_HOST_LINK_UP			= 1009,
279	SAP_MSG_NOTIF_HOST_LINK_DOWN			= 1010,
280	SAP_MSG_NOTIF_WHO_OWNS_NIC			= 1011,
281	SAP_MSG_NOTIF_WIFIDR_DOWN			= 1012,
282	SAP_MSG_NOTIF_WIFIDR_UP				= 1013,
283	/* 1014 is deprecated */
284	SAP_MSG_NOTIF_HOST_OWNERSHIP_CONFIRMED		= 1015,
285	SAP_MSG_NOTIF_SAR_LIMITS			= 1016,
286	SAP_MSG_NOTIF_GET_NVM				= 1017,
287	/* 1018 - 1023 not supported */
288	SAP_MSG_NOTIF_PLDR				= 1024,
289	SAP_MSG_NOTIF_PLDR_END				= 1025,
290	SAP_MSG_NOTIF_FROM_HOST_MAX,
291
292	SAP_MSG_DATA_MIN				= 2000,
293	SAP_MSG_DATA_PACKET				= SAP_MSG_DATA_MIN,
294	SAP_MSG_CB_DATA_PACKET				= 2001,
295	SAP_MSG_DATA_MAX,
296};
297
298/**
299 * struct iwl_sap_hdr - prefixes any SAP message
300 * @type: See &enum iwl_sap_msg.
301 * @len: The length of the message (header not included).
302 * @seq_num: For debug.
303 */
304struct iwl_sap_hdr {
305	__le16 type;
306	__le16 len;
307	__le32 seq_num;
308};
309
310/**
311 * struct iwl_sap_msg_dw - suits any DW long SAP message
312 * @hdr: The SAP header
313 * @val: The value of the DW.
314 */
315struct iwl_sap_msg_dw {
316	struct iwl_sap_hdr hdr;
317	__le32 val;
318};
319
320/**
321 * enum iwl_sap_nic_owner - used by %SAP_MSG_NOTIF_NIC_OWNER
322 * @SAP_NIC_OWNER_UNKNOWN: Not used.
323 * @SAP_NIC_OWNER_HOST: The host owns the NIC.
324 * @SAP_NIC_OWNER_ME: CSME owns the NIC.
325 */
326enum iwl_sap_nic_owner {
327	SAP_NIC_OWNER_UNKNOWN,
328	SAP_NIC_OWNER_HOST,
329	SAP_NIC_OWNER_ME,
330};
331
332enum iwl_sap_wifi_auth_type {
333	SAP_WIFI_AUTH_TYPE_OPEN		= IWL_MEI_AKM_AUTH_OPEN,
334	SAP_WIFI_AUTH_TYPE_RSNA		= IWL_MEI_AKM_AUTH_RSNA,
335	SAP_WIFI_AUTH_TYPE_RSNA_PSK	= IWL_MEI_AKM_AUTH_RSNA_PSK,
336	SAP_WIFI_AUTH_TYPE_SAE		= IWL_MEI_AKM_AUTH_SAE,
337	SAP_WIFI_AUTH_TYPE_MAX,
338};
339
340/**
341 * enum iwl_sap_wifi_cipher_alg - MEI WiFi cipher algorithm IDs
342 * @SAP_WIFI_CIPHER_ALG_NONE: No encryption
343 * @SAP_WIFI_CIPHER_ALG_TKIP: TKIPO
344 * @SAP_WIFI_CIPHER_ALG_CCMP: CCMP
345 * @SAP_WIFI_CIPHER_ALG_GCMP: GCMP-128
346 * @SAP_WIFI_CIPHER_ALG_GCMP_256: GCMP-256
347 */
348enum iwl_sap_wifi_cipher_alg {
349	SAP_WIFI_CIPHER_ALG_NONE	= IWL_MEI_CIPHER_NONE,
350	SAP_WIFI_CIPHER_ALG_TKIP	= IWL_MEI_CIPHER_TKIP,
351	SAP_WIFI_CIPHER_ALG_CCMP	= IWL_MEI_CIPHER_CCMP,
352	SAP_WIFI_CIPHER_ALG_GCMP	= IWL_MEI_CIPHER_GCMP,
353	SAP_WIFI_CIPHER_ALG_GCMP_256	= IWL_MEI_CIPHER_GCMP_256,
354};
355
356/**
357 * struct iwl_sap_notif_connection_info - nested in other structures
358 * @ssid_len: The length of the SSID.
359 * @ssid: The SSID.
360 * @auth_mode: The authentication mode. See &enum iwl_sap_wifi_auth_type.
361 * @pairwise_cipher: The cipher used for unicast packets.
362 *	See &enum iwl_sap_wifi_cipher_alg.
363 * @channel: The channel on which we are associated.
364 * @band: The band on which we are associated.
365 * @reserved: For alignment.
366 * @bssid: The BSSID.
367 * @reserved1: For alignment.
368 */
369struct iwl_sap_notif_connection_info {
370	__le32 ssid_len;
371	u8 ssid[32];
372	__le32 auth_mode;
373	__le32 pairwise_cipher;
374	u8 channel;
375	u8 band;
376	__le16 reserved;
377	u8 bssid[6];
378	__le16 reserved1;
379} __packed;
380
381/**
382 * enum iwl_sap_scan_request - for the scan_request field
383 * @SCAN_REQUEST_FILTERING: Filtering is requested.
384 * @SCAN_REQUEST_FAST: Fast scan is requested.
385 */
386enum iwl_sap_scan_request {
387	SCAN_REQUEST_FILTERING	= 1 << 0,
388	SCAN_REQUEST_FAST	= 1 << 1,
389};
390
391/**
392 * struct iwl_sap_notif_conn_status - payload of %SAP_MSG_NOTIF_CSME_CONN_STATUS
393 * @hdr: The SAP header
394 * @link_prot_state: Non-zero if link protection is active.
395 * @scan_request: See &enum iwl_sap_scan_request.
396 * @conn_info: Information about the connection.
397 */
398struct iwl_sap_notif_conn_status {
399	struct iwl_sap_hdr hdr;
400	__le32 link_prot_state;
401	__le32 scan_request;
402	struct iwl_sap_notif_connection_info conn_info;
403} __packed;
404
405/**
406 * enum iwl_sap_radio_state_bitmap - used for %SAP_MSG_NOTIF_RADIO_STATE
407 * @SAP_SW_RFKILL_DEASSERTED: If set, SW RfKill is de-asserted
408 * @SAP_HW_RFKILL_DEASSERTED: If set, HW RfKill is de-asserted
409 *
410 * If both bits are set, then the radio is on.
411 */
412enum iwl_sap_radio_state_bitmap {
413	SAP_SW_RFKILL_DEASSERTED	= 1 << 0,
414	SAP_HW_RFKILL_DEASSERTED	= 1 << 1,
415};
416
417/**
418 * enum iwl_sap_notif_host_suspends_bitmap - used for %SAP_MSG_NOTIF_HOST_SUSPENDS
419 * @SAP_OFFER_NIC: TBD
420 * @SAP_FILTER_CONFIGURED: TBD
421 * @SAP_NLO_CONFIGURED: TBD
422 * @SAP_HOST_OWNS_NIC: TBD
423 * @SAP_LINK_PROTECTED: TBD
424 */
425enum iwl_sap_notif_host_suspends_bitmap {
426	SAP_OFFER_NIC		= 1 << 0,
427	SAP_FILTER_CONFIGURED	= 1 << 1,
428	SAP_NLO_CONFIGURED	= 1 << 2,
429	SAP_HOST_OWNS_NIC	= 1 << 3,
430	SAP_LINK_PROTECTED	= 1 << 4,
431};
432
433/**
434 * struct iwl_sap_notif_country_code - payload of %SAP_MSG_NOTIF_COUNTRY_CODE
435 * @hdr: The SAP header
436 * @mcc: The country code.
437 * @source_id: TBD
438 * @reserved: For alignment.
439 * @diff_time: TBD
440 */
441struct iwl_sap_notif_country_code {
442	struct iwl_sap_hdr hdr;
443	__le16 mcc;
444	u8 source_id;
445	u8 reserved;
446	__le32 diff_time;
447} __packed;
448
449/**
450 * struct iwl_sap_notif_host_link_up - payload of %SAP_MSG_NOTIF_HOST_LINK_UP
451 * @hdr: The SAP header
452 * @conn_info: Information about the connection.
453 * @colloc_channel: The collocated channel
454 * @colloc_band: The band of the collocated channel.
455 * @reserved: For alignment.
456 * @colloc_bssid: The collocated BSSID.
457 * @reserved1: For alignment.
458 */
459struct iwl_sap_notif_host_link_up {
460	struct iwl_sap_hdr hdr;
461	struct iwl_sap_notif_connection_info conn_info;
462	u8 colloc_channel;
463	u8 colloc_band;
464	__le16 reserved;
465	u8 colloc_bssid[6];
466	__le16 reserved1;
467} __packed;
468
469/**
470 * enum iwl_sap_notif_link_down_type - used in &struct iwl_sap_notif_host_link_down
471 * @HOST_LINK_DOWN_TYPE_NONE: TBD
472 * @HOST_LINK_DOWN_TYPE_TEMPORARY: TBD
473 * @HOST_LINK_DOWN_TYPE_LONG: TBD
474 */
475enum iwl_sap_notif_link_down_type {
476	HOST_LINK_DOWN_TYPE_NONE,
477	HOST_LINK_DOWN_TYPE_TEMPORARY,
478	HOST_LINK_DOWN_TYPE_LONG,
479};
480
481/**
482 * struct iwl_sap_notif_host_link_down - payload for %SAP_MSG_NOTIF_HOST_LINK_DOWN
483 * @hdr: The SAP header
484 * @type: See &enum iwl_sap_notif_link_down_type.
485 * @reserved: For alignment.
486 * @reason_valid: If 0, ignore the next field.
487 * @reason: The reason of the disconnection.
488 */
489struct iwl_sap_notif_host_link_down {
490	struct iwl_sap_hdr hdr;
491	u8 type;
492	u8 reserved[2];
493	u8 reason_valid;
494	__le32 reason;
495} __packed;
496
497/**
498 * struct iwl_sap_notif_host_nic_info - payload for %SAP_MSG_NOTIF_NIC_INFO
499 * @hdr: The SAP header
500 * @mac_address: The MAC address as configured to the interface.
501 * @nvm_address: The MAC address as configured in the NVM.
502 */
503struct iwl_sap_notif_host_nic_info {
504	struct iwl_sap_hdr hdr;
505	u8 mac_address[6];
506	u8 nvm_address[6];
507} __packed;
508
509/**
510 * struct iwl_sap_notif_dw - payload is a dw
511 * @hdr: The SAP header.
512 * @dw: The payload.
513 */
514struct iwl_sap_notif_dw {
515	struct iwl_sap_hdr hdr;
516	__le32 dw;
517} __packed;
518
519/**
520 * struct iwl_sap_notif_sar_limits - payload for %SAP_MSG_NOTIF_SAR_LIMITS
521 * @hdr: The SAP header
522 * @sar_chain_info_table: Tx power limits.
523 */
524struct iwl_sap_notif_sar_limits {
525	struct iwl_sap_hdr hdr;
526	__le16 sar_chain_info_table[2][5];
527} __packed;
528
529/**
530 * enum iwl_sap_nvm_caps - capabilities for NVM SAP
531 * @SAP_NVM_CAPS_LARI_SUPPORT: Lari is supported
532 * @SAP_NVM_CAPS_11AX_SUPPORT: 11AX is supported
533 */
534enum iwl_sap_nvm_caps {
535	SAP_NVM_CAPS_LARI_SUPPORT	= BIT(0),
536	SAP_NVM_CAPS_11AX_SUPPORT	= BIT(1),
537};
538
539/**
540 * struct iwl_sap_nvm - payload for %SAP_MSG_NOTIF_NVM
541 * @hdr: The SAP header.
542 * @hw_addr: The MAC address
543 * @n_hw_addrs: The number of MAC addresses
544 * @reserved: For alignment.
545 * @radio_cfg: The radio configuration.
546 * @caps: See &enum iwl_sap_nvm_caps.
547 * @nvm_version: The version of the NVM.
548 * @channels: The data for each channel.
549 */
550struct iwl_sap_nvm {
551	struct iwl_sap_hdr hdr;
552	u8 hw_addr[6];
553	u8 n_hw_addrs;
554	u8 reserved;
555	__le32 radio_cfg;
556	__le32 caps;
557	__le32 nvm_version;
558	__le32 channels[110];
559} __packed;
560
561/**
562 * enum iwl_sap_eth_filter_flags - used in &struct iwl_sap_eth_filter
563 * @SAP_ETH_FILTER_STOP: Do not process further filters.
564 * @SAP_ETH_FILTER_COPY: Copy the packet to the CSME.
565 * @SAP_ETH_FILTER_ENABLED: If false, the filter should be ignored.
566 */
567enum iwl_sap_eth_filter_flags {
568	SAP_ETH_FILTER_STOP    = BIT(0),
569	SAP_ETH_FILTER_COPY    = BIT(1),
570	SAP_ETH_FILTER_ENABLED = BIT(2),
571};
572
573/**
574 * struct iwl_sap_eth_filter - a L2 filter
575 * @mac_address: Address to filter.
576 * @flags: See &enum iwl_sap_eth_filter_flags.
577 */
578struct iwl_sap_eth_filter {
579	u8 mac_address[6];
580	u8 flags;
581} __packed;
582
583/**
584 * enum iwl_sap_flex_filter_flags - used in &struct iwl_sap_flex_filter
585 * @SAP_FLEX_FILTER_COPY: Pass UDP / TCP packets to CSME.
586 * @SAP_FLEX_FILTER_ENABLED: If false, the filter should be ignored.
587 * @SAP_FLEX_FILTER_IPV4: Filter requires match on the IP address as well.
588 * @SAP_FLEX_FILTER_IPV6: Filter requires match on the IP address as well.
589 * @SAP_FLEX_FILTER_TCP: Filter should be applied on TCP packets.
590 * @SAP_FLEX_FILTER_UDP: Filter should be applied on UDP packets.
591 */
592enum iwl_sap_flex_filter_flags {
593	SAP_FLEX_FILTER_COPY		= BIT(0),
594	SAP_FLEX_FILTER_ENABLED		= BIT(1),
595	SAP_FLEX_FILTER_IPV6		= BIT(2),
596	SAP_FLEX_FILTER_IPV4		= BIT(3),
597	SAP_FLEX_FILTER_TCP		= BIT(4),
598	SAP_FLEX_FILTER_UDP		= BIT(5),
599};
600
601/**
602 * struct iwl_sap_flex_filter - filter configuration
603 * @src_port: Source port in network format.
604 * @dst_port: Destination port in network format.
605 * @flags: Flags and protocol, see &enum iwl_sap_flex_filter_flags.
606 * @reserved: For alignment.
607 */
608struct iwl_sap_flex_filter {
609	__be16 src_port;
610	__be16 dst_port;
611	u8 flags;
612	u8 reserved;
613} __packed;
614
615/**
616 * enum iwl_sap_ipv4_filter_flags - used in &struct iwl_sap_ipv4_filter
617 * @SAP_IPV4_FILTER_ICMP_PASS: Pass ICMP packets to CSME.
618 * @SAP_IPV4_FILTER_ICMP_COPY: Pass ICMP packets to host.
619 * @SAP_IPV4_FILTER_ARP_REQ_PASS: Pass ARP requests to CSME.
620 * @SAP_IPV4_FILTER_ARP_REQ_COPY: Pass ARP requests to host.
621 * @SAP_IPV4_FILTER_ARP_RESP_PASS: Pass ARP responses to CSME.
622 * @SAP_IPV4_FILTER_ARP_RESP_COPY: Pass ARP responses to host.
623 */
624enum iwl_sap_ipv4_filter_flags {
625	SAP_IPV4_FILTER_ICMP_PASS	= BIT(0),
626	SAP_IPV4_FILTER_ICMP_COPY	= BIT(1),
627	SAP_IPV4_FILTER_ARP_REQ_PASS	= BIT(2),
628	SAP_IPV4_FILTER_ARP_REQ_COPY	= BIT(3),
629	SAP_IPV4_FILTER_ARP_RESP_PASS	= BIT(4),
630	SAP_IPV4_FILTER_ARP_RESP_COPY	= BIT(5),
631};
632
633/**
634 * struct iwl_sap_ipv4_filter - IPv4 filter configuration
635 * @ipv4_addr: The IP address to filer.
636 * @flags: See &enum iwl_sap_ipv4_filter_flags.
637 */
638struct iwl_sap_ipv4_filter {
639	__be32 ipv4_addr;
640	__le32 flags;
641} __packed;
642
643/**
644 * enum iwl_sap_ipv6_filter_flags - IPv6 filter flags
645 * @SAP_IPV6_ADDR_FILTER_COPY: Pass packets to the host.
646 * @SAP_IPV6_ADDR_FILTER_ENABLED: If false, the filter should be ignored.
647 */
648enum iwl_sap_ipv6_filter_flags {
649	SAP_IPV6_ADDR_FILTER_COPY	= BIT(0),
650	SAP_IPV6_ADDR_FILTER_ENABLED	= BIT(1),
651};
652
653/**
654 * struct iwl_sap_ipv6_filter - IPv6 filter configuration
655 * @addr_lo24: Lowest 24 bits of the IPv6 address.
656 * @flags: See &enum iwl_sap_ipv6_filter_flags.
657 */
658struct iwl_sap_ipv6_filter {
659	u8 addr_lo24[3];
660	u8 flags;
661} __packed;
662
663/**
664 * enum iwl_sap_icmpv6_filter_flags - ICMPv6 filter flags
665 * @SAP_ICMPV6_FILTER_ENABLED: If false, the filter should be ignored.
666 * @SAP_ICMPV6_FILTER_COPY: Pass packets to the host.
667 */
668enum iwl_sap_icmpv6_filter_flags {
669	SAP_ICMPV6_FILTER_ENABLED	= BIT(0),
670	SAP_ICMPV6_FILTER_COPY		= BIT(1),
671};
672
673/**
674 * enum iwl_sap_vlan_filter_flags - VLAN filter flags
675 * @SAP_VLAN_FILTER_VLAN_ID_MSK: VLAN ID
676 * @SAP_VLAN_FILTER_ENABLED: If false, the filter should be ignored.
677 */
678enum iwl_sap_vlan_filter_flags {
679	SAP_VLAN_FILTER_VLAN_ID_MSK	= 0x0FFF,
680	SAP_VLAN_FILTER_ENABLED		= BIT(15),
681};
682
683/**
684 * struct iwl_sap_oob_filters - Out of band filters (for RX only)
685 * @flex_filters: Array of &struct iwl_sap_flex_filter.
686 * @icmpv6_flags: See &enum iwl_sap_icmpv6_filter_flags.
687 * @ipv6_filters: Array of &struct iwl_sap_ipv6_filter.
688 * @eth_filters: Array of &struct iwl_sap_eth_filter.
689 * @reserved: For alignment.
690 * @ipv4_filter: &struct iwl_sap_ipv4_filter.
691 * @vlan: See &enum iwl_sap_vlan_filter_flags.
692 */
693struct iwl_sap_oob_filters {
694	struct iwl_sap_flex_filter flex_filters[14];
695	__le32 icmpv6_flags;
696	struct iwl_sap_ipv6_filter ipv6_filters[4];
697	struct iwl_sap_eth_filter eth_filters[5];
698	u8 reserved;
699	struct iwl_sap_ipv4_filter ipv4_filter;
700	__le16 vlan[4];
701} __packed;
702
703/**
704 * struct iwl_sap_csme_filters - payload of %SAP_MSG_NOTIF_CSME_FILTERS
705 * @hdr: The SAP header.
706 * @mode: Not used.
707 * @mac_address: Not used.
708 * @reserved: For alignment.
709 * @cbfilters: Not used.
710 * @filters: Out of band filters.
711 */
712struct iwl_sap_csme_filters {
713	struct iwl_sap_hdr hdr;
714	__le32 mode;
715	u8 mac_address[6];
716	__le16 reserved;
717	u8 cbfilters[1728];
718	struct iwl_sap_oob_filters filters;
719} __packed;
720
721#define CB_TX_DHCP_FILT_IDX 30
722/**
723 * struct iwl_sap_cb_data - header to be added for transmitted packets.
724 * @hdr: The SAP header.
725 * @reserved: Not used.
726 * @to_me_filt_status: The filter that matches. Bit %CB_TX_DHCP_FILT_IDX should
727 *	be set for DHCP (the only packet that uses this header).
728 * @reserved2: Not used.
729 * @data_len: The length of the payload.
730 * @payload: The payload of the transmitted packet.
731 */
732struct iwl_sap_cb_data {
733	struct iwl_sap_hdr hdr;
734	__le32 reserved[7];
735	__le32 to_me_filt_status;
736	__le32 reserved2;
737	__le32 data_len;
738	u8 payload[];
739};
740
741/**
742 * struct iwl_sap_pldr_data - payload of %SAP_MSG_NOTIF_PLDR
743 * @hdr: The SAP header.
744 * @version: SAP message version
745 */
746struct iwl_sap_pldr_data {
747	struct iwl_sap_hdr hdr;
748	__le32 version;
749} __packed;
750
751/**
752 * enum iwl_sap_pldr_status - product reset status
753 * @SAP_PLDR_STATUS_SUCCESS: PLDR started/ended successfully
754 * @SAP_PLDR_STATUS_FAILURE: PLDR failed to start/end
755 */
756enum iwl_sap_pldr_status {
757	SAP_PLDR_STATUS_SUCCESS	= 0,
758	SAP_PLDR_STATUS_FAILURE	= 1,
759};
760
761/*
762 * struct iwl_sap_pldr_end_data - payload of %SAP_MSG_NOTIF_PLDR_END
763 * @hdr: The SAP header.
764 * @version: SAP message version
765 * @status: PLDR end status
766 */
767struct iwl_sap_pldr_end_data {
768	struct iwl_sap_hdr hdr;
769	__le32 version;
770	__le32 status;
771} __packed;
772
773/*
774 * struct iwl_sap_pldr_ack_data - payload of %SAP_MSG_NOTIF_PLDR_ACK
775 * @version: SAP message version
776 * @status: CSME accept/refuse to the PLDR request
777 */
778struct iwl_sap_pldr_ack_data {
779	struct iwl_sap_hdr hdr;
780	__le32 version;
781	__le32 status;
782} __packed;
783
784#endif /* __sap_h__ */
~/ Read-only file preview.