| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
| 2 | /* |
| 3 | * Copyright (C) 2012-2014, 2018-2021 Intel Corporation |
| 4 | * Copyright (C) 2013-2015 Intel Mobile Communications GmbH |
| 5 | * Copyright (C) 2016-2017 Intel Deutschland GmbH |
| 6 | */ |
| 7 | #ifndef __VENDOR_CMD_INTEL_H__ |
| 8 | #define __VENDOR_CMD_INTEL_H__ |
| 9 | |
| 10 | #define INTEL_OUI 0x001735 |
| 11 | |
| 12 | /** |
| 13 | * enum iwl_mvm_vendor_cmd - supported vendor commands |
| 14 | * @IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO: reports CSME connection info. |
| 15 | * @IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP: asks for ownership on the device. |
| 16 | * This is useful when the CSME firmware owns the device and the kernel |
| 17 | * wants to use it. In case the CSME firmware has no connection active the |
| 18 | * kernel will manage on its own to get ownership of the device. |
| 19 | * When the CSME firmware has an active connection, the user space |
| 20 | * involvement is required. The kernel will assert the RFKILL signal with |
| 21 | * the "device not owned" reason so that nobody can touch the device. Then |
| 22 | * the user space can run the following flow to be able to get connected |
| 23 | * to the very same AP the CSME firmware is currently connected to: |
| 24 | * |
| 25 | * 1) The user space (NetworkManager) boots and sees that the device is |
| 26 | * in RFKILL because the host doesn't own the device |
| 27 | * 2) The user space asks the kernel what AP the CSME firmware is |
| 28 | * connected to (with %IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO) |
| 29 | * 3) The user space checks if it has a profile that matches the reply |
| 30 | * from the CSME firmware |
| 31 | * 4) The user space installs a network to the wpa_supplicant with a |
| 32 | * specific BSSID and a specific frequency |
| 33 | * 5) The user space prevents any type of full scan |
| 34 | * 6) The user space asks iwlmei to request ownership on the device (with |
| 35 | * this command) |
| 36 | * 7) iwlmei requests ownership from the CSME firmware |
| 37 | * 8) The CSME firmware grants ownership |
| 38 | * 9) iwlmei tells iwlwifi to lift the RFKILL |
| 39 | * 10) RFKILL OFF is reported to user space |
| 40 | * 11) The host boots the device, loads the firwmare, and connects to a |
| 41 | * specific BSSID without scanning including IP as fast as it can |
| 42 | * 12) The host reports to the CSME firmware that there is a connection |
| 43 | * 13) The TCP connection is preserved and the host has connectivity |
| 44 | * |
| 45 | * @IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT: notifies if roaming is allowed. |
| 46 | * It contains a &IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN and a |
| 47 | * &IWL_MVM_VENDOR_ATTR_VIF_ADDR attributes. |
| 48 | */ |
| 49 | |
| 50 | enum iwl_mvm_vendor_cmd { |
| 51 | IWL_MVM_VENDOR_CMD_GET_CSME_CONN_INFO = 0x2d, |
| 52 | IWL_MVM_VENDOR_CMD_HOST_GET_OWNERSHIP = 0x30, |
| 53 | IWL_MVM_VENDOR_CMD_ROAMING_FORBIDDEN_EVENT = 0x32, |
| 54 | }; |
| 55 | |
| 56 | enum iwl_vendor_auth_akm_mode { |
| 57 | IWL_VENDOR_AUTH_OPEN, |
| 58 | IWL_VENDOR_AUTH_RSNA = 0x6, |
| 59 | IWL_VENDOR_AUTH_RSNA_PSK, |
| 60 | IWL_VENDOR_AUTH_SAE = 0x9, |
| 61 | IWL_VENDOR_AUTH_MAX, |
| 62 | }; |
| 63 | |
| 64 | /** |
| 65 | * enum iwl_mvm_vendor_attr - attributes used in vendor commands |
| 66 | * @__IWL_MVM_VENDOR_ATTR_INVALID: attribute 0 is invalid |
| 67 | * @IWL_MVM_VENDOR_ATTR_VIF_ADDR: interface MAC address |
| 68 | * @IWL_MVM_VENDOR_ATTR_ADDR: MAC address |
| 69 | * @IWL_MVM_VENDOR_ATTR_SSID: SSID (binary attribute, 0..32 octets) |
| 70 | * @IWL_MVM_VENDOR_ATTR_STA_CIPHER: the cipher to use for the station with the |
| 71 | * mac address specified in &IWL_MVM_VENDOR_ATTR_ADDR. |
| 72 | * @IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN: u8 attribute. Indicates whether |
| 73 | * roaming is forbidden or not. Value 1 means roaming is forbidden, |
| 74 | * 0 mean roaming is allowed. |
| 75 | * @IWL_MVM_VENDOR_ATTR_AUTH_MODE: u32 attribute. Authentication mode type |
| 76 | * as specified in &enum iwl_vendor_auth_akm_mode. |
| 77 | * @IWL_MVM_VENDOR_ATTR_CHANNEL_NUM: u8 attribute. Contains channel number. |
| 78 | * @IWL_MVM_VENDOR_ATTR_BAND: u8 attribute. |
| 79 | * 0 for 2.4 GHz band, 1 for 5.2GHz band and 2 for 6GHz band. |
| 80 | * @IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL: u32 attribute. Channel number of |
| 81 | * collocated AP. Relevant for 6GHz AP info. |
| 82 | * @IWL_MVM_VENDOR_ATTR_COLLOC_ADDR: MAC address of a collocated AP. |
| 83 | * Relevant for 6GHz AP info. |
| 84 | * |
| 85 | * @NUM_IWL_MVM_VENDOR_ATTR: number of vendor attributes |
| 86 | * @MAX_IWL_MVM_VENDOR_ATTR: highest vendor attribute number |
| 87 | */ |
| 88 | enum iwl_mvm_vendor_attr { |
| 89 | __IWL_MVM_VENDOR_ATTR_INVALID = 0x00, |
| 90 | IWL_MVM_VENDOR_ATTR_VIF_ADDR = 0x02, |
| 91 | IWL_MVM_VENDOR_ATTR_ADDR = 0x0a, |
| 92 | IWL_MVM_VENDOR_ATTR_SSID = 0x3d, |
| 93 | IWL_MVM_VENDOR_ATTR_STA_CIPHER = 0x51, |
| 94 | IWL_MVM_VENDOR_ATTR_ROAMING_FORBIDDEN = 0x64, |
| 95 | IWL_MVM_VENDOR_ATTR_AUTH_MODE = 0x65, |
| 96 | IWL_MVM_VENDOR_ATTR_CHANNEL_NUM = 0x66, |
| 97 | IWL_MVM_VENDOR_ATTR_BAND = 0x69, |
| 98 | IWL_MVM_VENDOR_ATTR_COLLOC_CHANNEL = 0x70, |
| 99 | IWL_MVM_VENDOR_ATTR_COLLOC_ADDR = 0x71, |
| 100 | |
| 101 | NUM_IWL_MVM_VENDOR_ATTR, |
| 102 | MAX_IWL_MVM_VENDOR_ATTR = NUM_IWL_MVM_VENDOR_ATTR - 1, |
| 103 | }; |
| 104 | |
| 105 | #endif /* __VENDOR_CMD_INTEL_H__ */ |
| 106 | |