1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (c) 2017-2026 Morse Micro 4 */ 5 6 #ifndef _MM81X_COMMAND_H_ 7 #define _MM81X_COMMAND_H_ 8 9 #include <linux/skbuff.h> 10 #include <linux/workqueue.h> 11 #include "core.h" 12 #include "command_defs.h" 13 14 #define HOST_CMD_IS_REQ(cmd) (le16_to_cpu((cmd)->hdr.flags) & HOST_CMD_TYPE_REQ) 15 #define HOST_CMD_IS_RESP(cmd) \ 16 (le16_to_cpu((cmd)->hdr.flags) & HOST_CMD_TYPE_RESP) 17 #define HOST_CMD_IS_EVT(cmd) (le16_to_cpu((cmd)->hdr.flags) & HOST_CMD_TYPE_EVT) 18 19 struct mm81x_queue_params; 20 21 enum mm81x_cmd_return_code { 22 MM81X_RET_SUCCESS = 0, 23 MM81X_RET_EPERM = -1, 24 MM81X_RET_ENOMEM = -12, 25 MM81X_RET_CMD_NOT_HANDLED = -32757, 26 }; 27 28 #define HOST_CMD_HOST_ID_SEQ_MAX 0xFFF 29 #define HOST_CMD_HOST_ID_RETRY_MASK 0x000F 30 #define HOST_CMD_HOST_ID_SEQ_SHIFT 4 31 #define HOST_CMD_HOST_ID_SEQ_MASK 0xFFF0 32 33 struct host_cmd_req { 34 struct host_cmd_header hdr; 35 u8 data[]; 36 } __packed; 37 38 struct host_cmd_resp { 39 struct host_cmd_header hdr; 40 __le32 status; 41 u8 data[]; 42 } __packed; 43 44 struct host_cmd_event { 45 struct host_cmd_header hdr; 46 u8 data[]; 47 } __packed; 48 49 int mm81x_cmd_resp_process(struct mm81x *mors, struct sk_buff *skb); 50 int mm81x_cmd_add_if(struct mm81x *mors, u16 *vif_id, const u8 *addr, 51 enum nl80211_iftype type); 52 int mm81x_cmd_get_capabilities(struct mm81x *mors, u16 vif_id, 53 struct mm81x_fw_caps *capabilities); 54 int mm81x_cmd_cfg_qos(struct mm81x *mors, struct mm81x_queue_params *params); 55 int mm81x_cmd_config_beacon_timer(struct mm81x *mors, void *mm81x_vif, 56 bool enabled); 57 int mm81x_cmd_cfg_bss(struct mm81x *mors, u16 vif_id, u16 beacon_int, 58 u16 dtim_period, u32 cssid); 59 int mm81x_cmd_set_channel(struct mm81x *mors, u32 op_chan_freq_hz, 60 u8 pri_1mhz_chan_idx, u8 op_bw_mhz, u8 pri_bw_mhz, 61 s32 *power_mbm); 62 int mm81x_cmd_get_max_txpower(struct mm81x *mors, s32 *out_power_mbm); 63 int mm81x_cmd_set_txpower(struct mm81x *mors, s32 *out_power_mbm, 64 int txpower_mbm); 65 int mm81x_cmd_hw_scan(struct mm81x *mors, struct mm81x_hw_scan_params *params, 66 bool store); 67 int mm81x_cmd_set_ps(struct mm81x *mors, bool enabled); 68 int mm81x_cmd_cfg_multicast_filter(struct mm81x *mors, 69 struct mm81x_vif *mors_vif); 70 int mm81x_cmd_sta_state(struct mm81x *mors, struct mm81x_vif *mors_vif, u16 aid, 71 struct ieee80211_sta *sta, 72 enum ieee80211_sta_state state); 73 int mm81x_cmd_install_key(struct mm81x *mors, struct mm81x_vif *mors_vif, 74 u16 aid, struct ieee80211_key_conf *key, 75 enum host_cmd_key_cipher cipher, 76 enum host_cmd_aes_key_len length); 77 int mm81x_cmd_disable_key(struct mm81x *mors, struct mm81x_vif *mors_vif, 78 u16 aid, struct ieee80211_key_conf *key); 79 int mm81x_cmd_rm_if(struct mm81x *mors, u16 vif_id); 80 int mm81x_cmd_set_frag_threshold(struct mm81x *mors, u32 frag_threshold); 81 int mm81x_cmd_get_disabled_channels( 82 struct mm81x *mors, struct host_cmd_resp_get_disabled_channels *resp, 83 uint resp_len); 84 85 #endif /* !_MM81X_COMMAND_H_ */ 86