mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-14 06:35:12 +00:00
5cd382b269
Replace uint8_t to u8, uint16_t to u16, uint32_t to u32 int8_t to s8,int16_t to s16 and int32_t to s32 As per recommendation of checkpatch tool. Signed-off-by: Jules Irenge <jbi.octave@gmail.com> Link: https://lore.kernel.org/r/20191111133055.214410-1-jbi.octave@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
437 lines
11 KiB
C
437 lines
11 KiB
C
/* SPDX-License-Identifier: Apache-2.0 */
|
|
/*
|
|
* WFx hardware interface definitions
|
|
*
|
|
* Copyright (c) 2018-2019, Silicon Laboratories Inc.
|
|
*/
|
|
|
|
#ifndef WFX_HIF_API_GENERAL_H
|
|
#define WFX_HIF_API_GENERAL_H
|
|
|
|
#ifdef __KERNEL__
|
|
#include <linux/types.h>
|
|
#include <linux/if_ether.h>
|
|
#else
|
|
#include <net/ethernet.h>
|
|
#include <stdint.h>
|
|
#define __packed __attribute__((__packed__))
|
|
#endif
|
|
|
|
#define API_SSID_SIZE 32
|
|
|
|
#define HIF_ID_IS_INDICATION 0x80
|
|
#define HIF_COUNTER_MAX 7
|
|
|
|
struct hif_msg {
|
|
u16 len;
|
|
u8 id;
|
|
u8 reserved:1;
|
|
u8 interface:2;
|
|
u8 seqnum:3;
|
|
u8 encrypted:2;
|
|
u8 body[];
|
|
} __packed;
|
|
|
|
enum hif_general_requests_ids {
|
|
HIF_REQ_ID_CONFIGURATION = 0x09,
|
|
HIF_REQ_ID_CONTROL_GPIO = 0x26,
|
|
HIF_REQ_ID_SET_SL_MAC_KEY = 0x27,
|
|
HIF_REQ_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
|
|
HIF_REQ_ID_SL_CONFIGURE = 0x29,
|
|
HIF_REQ_ID_PREVENT_ROLLBACK = 0x2a,
|
|
HIF_REQ_ID_PTA_SETTINGS = 0x2b,
|
|
HIF_REQ_ID_PTA_PRIORITY = 0x2c,
|
|
HIF_REQ_ID_PTA_STATE = 0x2d,
|
|
HIF_REQ_ID_SHUT_DOWN = 0x32,
|
|
};
|
|
|
|
enum hif_general_confirmations_ids {
|
|
HIF_CNF_ID_CONFIGURATION = 0x09,
|
|
HIF_CNF_ID_CONTROL_GPIO = 0x26,
|
|
HIF_CNF_ID_SET_SL_MAC_KEY = 0x27,
|
|
HIF_CNF_ID_SL_EXCHANGE_PUB_KEYS = 0x28,
|
|
HIF_CNF_ID_SL_CONFIGURE = 0x29,
|
|
HIF_CNF_ID_PREVENT_ROLLBACK = 0x2a,
|
|
HIF_CNF_ID_PTA_SETTINGS = 0x2b,
|
|
HIF_CNF_ID_PTA_PRIORITY = 0x2c,
|
|
HIF_CNF_ID_PTA_STATE = 0x2d,
|
|
HIF_CNF_ID_SHUT_DOWN = 0x32,
|
|
};
|
|
|
|
enum hif_general_indications_ids {
|
|
HIF_IND_ID_EXCEPTION = 0xe0,
|
|
HIF_IND_ID_STARTUP = 0xe1,
|
|
HIF_IND_ID_WAKEUP = 0xe2,
|
|
HIF_IND_ID_GENERIC = 0xe3,
|
|
HIF_IND_ID_ERROR = 0xe4,
|
|
HIF_IND_ID_SL_EXCHANGE_PUB_KEYS = 0xe5
|
|
};
|
|
|
|
enum hif_hi_status {
|
|
HI_STATUS_SUCCESS = 0x0000,
|
|
HI_STATUS_FAILURE = 0x0001,
|
|
HI_INVALID_PARAMETER = 0x0002,
|
|
HI_STATUS_GPIO_WARNING = 0x0003,
|
|
HI_ERROR_UNSUPPORTED_MSG_ID = 0x0004,
|
|
SL_MAC_KEY_STATUS_SUCCESS = 0x005A,
|
|
SL_MAC_KEY_STATUS_FAILED_KEY_ALREADY_BURNED = 0x006B,
|
|
SL_MAC_KEY_STATUS_FAILED_RAM_MODE_NOT_ALLOWED = 0x007C,
|
|
SL_MAC_KEY_STATUS_FAILED_UNKNOWN_MODE = 0x008D,
|
|
SL_PUB_KEY_EXCHANGE_STATUS_SUCCESS = 0x009E,
|
|
SL_PUB_KEY_EXCHANGE_STATUS_FAILED = 0x00AF,
|
|
PREVENT_ROLLBACK_CNF_SUCCESS = 0x1234,
|
|
PREVENT_ROLLBACK_CNF_WRONG_MAGIC_WORD = 0x1256
|
|
};
|
|
|
|
enum hif_api_rate_index {
|
|
API_RATE_INDEX_B_1MBPS = 0,
|
|
API_RATE_INDEX_B_2MBPS = 1,
|
|
API_RATE_INDEX_B_5P5MBPS = 2,
|
|
API_RATE_INDEX_B_11MBPS = 3,
|
|
API_RATE_INDEX_PBCC_22MBPS = 4,
|
|
API_RATE_INDEX_PBCC_33MBPS = 5,
|
|
API_RATE_INDEX_G_6MBPS = 6,
|
|
API_RATE_INDEX_G_9MBPS = 7,
|
|
API_RATE_INDEX_G_12MBPS = 8,
|
|
API_RATE_INDEX_G_18MBPS = 9,
|
|
API_RATE_INDEX_G_24MBPS = 10,
|
|
API_RATE_INDEX_G_36MBPS = 11,
|
|
API_RATE_INDEX_G_48MBPS = 12,
|
|
API_RATE_INDEX_G_54MBPS = 13,
|
|
API_RATE_INDEX_N_6P5MBPS = 14,
|
|
API_RATE_INDEX_N_13MBPS = 15,
|
|
API_RATE_INDEX_N_19P5MBPS = 16,
|
|
API_RATE_INDEX_N_26MBPS = 17,
|
|
API_RATE_INDEX_N_39MBPS = 18,
|
|
API_RATE_INDEX_N_52MBPS = 19,
|
|
API_RATE_INDEX_N_58P5MBPS = 20,
|
|
API_RATE_INDEX_N_65MBPS = 21,
|
|
API_RATE_NUM_ENTRIES = 22
|
|
};
|
|
|
|
|
|
enum hif_fw_type {
|
|
HIF_FW_TYPE_ETF = 0x0,
|
|
HIF_FW_TYPE_WFM = 0x1,
|
|
HIF_FW_TYPE_WSM = 0x2
|
|
};
|
|
|
|
struct hif_capabilities {
|
|
u8 link_mode:2;
|
|
u8 reserved1:6;
|
|
u8 reserved2;
|
|
u8 reserved3;
|
|
u8 reserved4;
|
|
} __packed;
|
|
|
|
struct hif_otp_regul_sel_mode_info {
|
|
u8 region_sel_mode:4;
|
|
u8 reserved:4;
|
|
} __packed;
|
|
|
|
struct hif_otp_phy_info {
|
|
u8 phy1_region:3;
|
|
u8 phy0_region:3;
|
|
u8 otp_phy_ver:2;
|
|
} __packed;
|
|
|
|
#define API_OPN_SIZE 14
|
|
#define API_UID_SIZE 8
|
|
#define API_DISABLED_CHANNEL_LIST_SIZE 2
|
|
#define API_FIRMWARE_LABEL_SIZE 128
|
|
|
|
struct hif_ind_startup {
|
|
u32 status;
|
|
u16 hardware_id;
|
|
u8 opn[API_OPN_SIZE];
|
|
u8 uid[API_UID_SIZE];
|
|
u16 num_inp_ch_bufs;
|
|
u16 size_inp_ch_buf;
|
|
u8 num_links_ap;
|
|
u8 num_interfaces;
|
|
u8 mac_addr[2][ETH_ALEN];
|
|
u8 api_version_minor;
|
|
u8 api_version_major;
|
|
struct hif_capabilities capabilities;
|
|
u8 firmware_build;
|
|
u8 firmware_minor;
|
|
u8 firmware_major;
|
|
u8 firmware_type;
|
|
u8 disabled_channel_list[API_DISABLED_CHANNEL_LIST_SIZE];
|
|
struct hif_otp_regul_sel_mode_info regul_sel_mode_info;
|
|
struct hif_otp_phy_info otp_phy_info;
|
|
u32 supported_rate_mask;
|
|
u8 firmware_label[API_FIRMWARE_LABEL_SIZE];
|
|
} __packed;
|
|
|
|
struct hif_ind_wakeup {
|
|
} __packed;
|
|
|
|
struct hif_req_configuration {
|
|
u16 length;
|
|
u8 pds_data[];
|
|
} __packed;
|
|
|
|
struct hif_cnf_configuration {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
enum hif_gpio_mode {
|
|
HIF_GPIO_MODE_D0 = 0x0,
|
|
HIF_GPIO_MODE_D1 = 0x1,
|
|
HIF_GPIO_MODE_OD0 = 0x2,
|
|
HIF_GPIO_MODE_OD1 = 0x3,
|
|
HIF_GPIO_MODE_TRISTATE = 0x4,
|
|
HIF_GPIO_MODE_TOGGLE = 0x5,
|
|
HIF_GPIO_MODE_READ = 0x6
|
|
};
|
|
|
|
struct hif_req_control_gpio {
|
|
u8 gpio_label;
|
|
u8 gpio_mode;
|
|
} __packed;
|
|
|
|
enum hif_gpio_error {
|
|
HIF_GPIO_ERROR_0 = 0x0,
|
|
HIF_GPIO_ERROR_1 = 0x1,
|
|
HIF_GPIO_ERROR_2 = 0x2
|
|
};
|
|
|
|
struct hif_cnf_control_gpio {
|
|
u32 status;
|
|
u32 value;
|
|
} __packed;
|
|
|
|
enum hif_generic_indication_type {
|
|
HIF_GENERIC_INDICATION_TYPE_RAW = 0x0,
|
|
HIF_GENERIC_INDICATION_TYPE_STRING = 0x1,
|
|
HIF_GENERIC_INDICATION_TYPE_RX_STATS = 0x2
|
|
};
|
|
|
|
struct hif_rx_stats {
|
|
u32 nb_rx_frame;
|
|
u32 nb_crc_frame;
|
|
u32 per_total;
|
|
u32 throughput;
|
|
u32 nb_rx_by_rate[API_RATE_NUM_ENTRIES];
|
|
u16 per[API_RATE_NUM_ENTRIES];
|
|
s16 snr[API_RATE_NUM_ENTRIES];
|
|
s16 rssi[API_RATE_NUM_ENTRIES];
|
|
s16 cfo[API_RATE_NUM_ENTRIES];
|
|
u32 date;
|
|
u32 pwr_clk_freq;
|
|
u8 is_ext_pwr_clk;
|
|
s8 current_temp;
|
|
} __packed;
|
|
|
|
union hif_indication_data {
|
|
struct hif_rx_stats rx_stats;
|
|
u8 raw_data[1];
|
|
};
|
|
|
|
struct hif_ind_generic {
|
|
u32 indication_type;
|
|
union hif_indication_data indication_data;
|
|
} __packed;
|
|
|
|
|
|
#define HIF_EXCEPTION_DATA_SIZE 124
|
|
|
|
struct hif_ind_exception {
|
|
u8 data[HIF_EXCEPTION_DATA_SIZE];
|
|
} __packed;
|
|
|
|
|
|
enum hif_error {
|
|
HIF_ERROR_FIRMWARE_ROLLBACK = 0x0,
|
|
HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x1,
|
|
HIF_ERROR_OUTDATED_SESSION_KEY = 0x2,
|
|
HIF_ERROR_INVALID_SESSION_KEY = 0x3,
|
|
HIF_ERROR_OOR_VOLTAGE = 0x4,
|
|
HIF_ERROR_PDS_VERSION = 0x5,
|
|
HIF_ERROR_OOR_TEMPERATURE = 0x6,
|
|
HIF_ERROR_REQ_DURING_KEY_EXCHANGE = 0x7,
|
|
HIF_ERROR_MULTI_TX_CNF_SECURELINK = 0x8,
|
|
HIF_ERROR_SECURELINK_OVERFLOW = 0x9,
|
|
HIF_ERROR_SECURELINK_DECRYPTION = 0xa
|
|
};
|
|
|
|
struct hif_ind_error {
|
|
u32 type;
|
|
u8 data[];
|
|
} __packed;
|
|
|
|
enum hif_secure_link_state {
|
|
SEC_LINK_UNAVAILABLE = 0x0,
|
|
SEC_LINK_RESERVED = 0x1,
|
|
SEC_LINK_EVAL = 0x2,
|
|
SEC_LINK_ENFORCED = 0x3
|
|
};
|
|
|
|
enum hif_sl_encryption_type {
|
|
NO_ENCRYPTION = 0,
|
|
TX_ENCRYPTION = 1,
|
|
RX_ENCRYPTION = 2,
|
|
HP_ENCRYPTION = 3
|
|
};
|
|
|
|
struct hif_sl_msg_hdr {
|
|
u32 seqnum:30;
|
|
u32 encrypted:2;
|
|
} __packed;
|
|
|
|
struct hif_sl_msg {
|
|
struct hif_sl_msg_hdr hdr;
|
|
u16 len;
|
|
u8 payload[];
|
|
} __packed;
|
|
|
|
#define AES_CCM_TAG_SIZE 16
|
|
|
|
struct hif_sl_tag {
|
|
u8 tag[16];
|
|
} __packed;
|
|
|
|
enum hif_sl_mac_key_dest {
|
|
SL_MAC_KEY_DEST_OTP = 0x78,
|
|
SL_MAC_KEY_DEST_RAM = 0x87
|
|
};
|
|
|
|
#define API_KEY_VALUE_SIZE 32
|
|
|
|
struct hif_req_set_sl_mac_key {
|
|
u8 otp_or_ram;
|
|
u8 key_value[API_KEY_VALUE_SIZE];
|
|
} __packed;
|
|
|
|
struct hif_cnf_set_sl_mac_key {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
#define API_HOST_PUB_KEY_SIZE 32
|
|
#define API_HOST_PUB_KEY_MAC_SIZE 64
|
|
|
|
enum hif_sl_session_key_alg {
|
|
HIF_SL_CURVE25519 = 0x01,
|
|
HIF_SL_KDF = 0x02
|
|
};
|
|
|
|
struct hif_req_sl_exchange_pub_keys {
|
|
u8 algorithm:2;
|
|
u8 reserved1:6;
|
|
u8 reserved2[3];
|
|
u8 host_pub_key[API_HOST_PUB_KEY_SIZE];
|
|
u8 host_pub_key_mac[API_HOST_PUB_KEY_MAC_SIZE];
|
|
} __packed;
|
|
|
|
struct hif_cnf_sl_exchange_pub_keys {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
#define API_NCP_PUB_KEY_SIZE 32
|
|
#define API_NCP_PUB_KEY_MAC_SIZE 64
|
|
|
|
struct hif_ind_sl_exchange_pub_keys {
|
|
u32 status;
|
|
u8 ncp_pub_key[API_NCP_PUB_KEY_SIZE];
|
|
u8 ncp_pub_key_mac[API_NCP_PUB_KEY_MAC_SIZE];
|
|
} __packed;
|
|
|
|
#define API_ENCR_BMP_SIZE 32
|
|
|
|
struct hif_req_sl_configure {
|
|
u8 encr_bmp[API_ENCR_BMP_SIZE];
|
|
u8 disable_session_key_protection:1;
|
|
u8 reserved1:7;
|
|
u8 reserved2[3];
|
|
} __packed;
|
|
|
|
struct hif_cnf_sl_configure {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
struct hif_req_prevent_rollback {
|
|
u32 magic_word;
|
|
} __packed;
|
|
|
|
struct hif_cnf_prevent_rollback {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
enum hif_pta_mode {
|
|
PTA_1W_WLAN_MASTER = 0,
|
|
PTA_1W_COEX_MASTER = 1,
|
|
PTA_2W = 2,
|
|
PTA_3W = 3,
|
|
PTA_4W = 4
|
|
};
|
|
|
|
enum hif_signal_level {
|
|
SIGNAL_LOW = 0,
|
|
SIGNAL_HIGH = 1
|
|
};
|
|
|
|
enum hif_coex_type {
|
|
COEX_TYPE_GENERIC = 0,
|
|
COEX_TYPE_BLE = 1
|
|
};
|
|
|
|
enum hif_grant_state {
|
|
NO_GRANT = 0,
|
|
GRANT = 1
|
|
};
|
|
|
|
struct hif_req_pta_settings {
|
|
u8 pta_mode;
|
|
u8 request_signal_active_level;
|
|
u8 priority_signal_active_level;
|
|
u8 freq_signal_active_level;
|
|
u8 grant_signal_active_level;
|
|
u8 coex_type;
|
|
u8 default_grant_state;
|
|
u8 simultaneous_rx_accesses;
|
|
u8 priority_sampling_time;
|
|
u8 tx_rx_sampling_time;
|
|
u8 freq_sampling_time;
|
|
u8 grant_valid_time;
|
|
u8 fem_control_time;
|
|
u8 first_slot_time;
|
|
u16 periodic_tx_rx_sampling_time;
|
|
u16 coex_quota;
|
|
u16 wlan_quota;
|
|
} __packed;
|
|
|
|
struct hif_cnf_pta_settings {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
enum hif_pta_priority {
|
|
HIF_PTA_PRIORITY_COEX_MAXIMIZED = 0x00000562,
|
|
HIF_PTA_PRIORITY_COEX_HIGH = 0x00000462,
|
|
HIF_PTA_PRIORITY_BALANCED = 0x00001461,
|
|
HIF_PTA_PRIORITY_WLAN_HIGH = 0x00001851,
|
|
HIF_PTA_PRIORITY_WLAN_MAXIMIZED = 0x00001A51
|
|
};
|
|
|
|
struct hif_req_pta_priority {
|
|
u32 priority;
|
|
} __packed;
|
|
|
|
struct hif_cnf_pta_priority {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
enum hif_pta_state {
|
|
PTA_OFF = 0,
|
|
PTA_ON = 1
|
|
};
|
|
|
|
struct hif_req_pta_state {
|
|
u32 pta_state;
|
|
} __packed;
|
|
|
|
struct hif_cnf_pta_state {
|
|
u32 status;
|
|
} __packed;
|
|
|
|
#endif
|