Eugene Krasnikov | 8e84c25 | 2013-10-08 21:25:58 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com> |
| 3 | * |
| 4 | * Permission to use, copy, modify, and/or distribute this software for any |
| 5 | * purpose with or without fee is hereby granted, provided that the above |
| 6 | * copyright notice and this permission notice appear in all copies. |
| 7 | * |
| 8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
| 11 | * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION |
| 13 | * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN |
| 14 | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 15 | */ |
| 16 | |
| 17 | #ifndef _SMD_H_ |
| 18 | #define _SMD_H_ |
| 19 | |
| 20 | #include "wcn36xx.h" |
| 21 | |
| 22 | /* Max shared size is 4k but we take less.*/ |
| 23 | #define WCN36XX_NV_FRAGMENT_SIZE 3072 |
| 24 | |
| 25 | #define WCN36XX_HAL_BUF_SIZE 4096 |
| 26 | |
Pontus Fuchs | 546c505 | 2014-02-12 19:04:42 +0000 | [diff] [blame] | 27 | #define HAL_MSG_TIMEOUT 500 |
Eugene Krasnikov | 8e84c25 | 2013-10-08 21:25:58 +0100 | [diff] [blame] | 28 | #define WCN36XX_SMSM_WLAN_TX_ENABLE 0x00000400 |
| 29 | #define WCN36XX_SMSM_WLAN_TX_RINGS_EMPTY 0x00000200 |
| 30 | /* The PNO version info be contained in the rsp msg */ |
| 31 | #define WCN36XX_FW_MSG_PNO_VERSION_MASK 0x8000 |
| 32 | |
| 33 | enum wcn36xx_fw_msg_result { |
| 34 | WCN36XX_FW_MSG_RESULT_SUCCESS = 0, |
| 35 | WCN36XX_FW_MSG_RESULT_SUCCESS_SYNC = 1, |
| 36 | |
| 37 | WCN36XX_FW_MSG_RESULT_MEM_FAIL = 5, |
| 38 | }; |
| 39 | |
| 40 | /******************************/ |
| 41 | /* SMD requests and responses */ |
| 42 | /******************************/ |
| 43 | struct wcn36xx_fw_msg_status_rsp { |
| 44 | u32 status; |
| 45 | } __packed; |
| 46 | |
| 47 | struct wcn36xx_hal_ind_msg { |
| 48 | struct list_head list; |
| 49 | u8 *msg; |
| 50 | size_t msg_len; |
| 51 | }; |
| 52 | |
| 53 | struct wcn36xx; |
| 54 | |
| 55 | int wcn36xx_smd_open(struct wcn36xx *wcn); |
| 56 | void wcn36xx_smd_close(struct wcn36xx *wcn); |
| 57 | |
| 58 | int wcn36xx_smd_load_nv(struct wcn36xx *wcn); |
| 59 | int wcn36xx_smd_start(struct wcn36xx *wcn); |
| 60 | int wcn36xx_smd_stop(struct wcn36xx *wcn); |
| 61 | int wcn36xx_smd_init_scan(struct wcn36xx *wcn, enum wcn36xx_hal_sys_mode mode); |
| 62 | int wcn36xx_smd_start_scan(struct wcn36xx *wcn); |
| 63 | int wcn36xx_smd_end_scan(struct wcn36xx *wcn); |
| 64 | int wcn36xx_smd_finish_scan(struct wcn36xx *wcn, |
| 65 | enum wcn36xx_hal_sys_mode mode); |
| 66 | int wcn36xx_smd_update_scan_params(struct wcn36xx *wcn); |
| 67 | int wcn36xx_smd_add_sta_self(struct wcn36xx *wcn, struct ieee80211_vif *vif); |
| 68 | int wcn36xx_smd_delete_sta_self(struct wcn36xx *wcn, u8 *addr); |
| 69 | int wcn36xx_smd_delete_sta(struct wcn36xx *wcn, u8 sta_index); |
| 70 | int wcn36xx_smd_join(struct wcn36xx *wcn, const u8 *bssid, u8 *vif, u8 ch); |
| 71 | int wcn36xx_smd_set_link_st(struct wcn36xx *wcn, const u8 *bssid, |
| 72 | const u8 *sta_mac, |
| 73 | enum wcn36xx_hal_link_state state); |
| 74 | int wcn36xx_smd_config_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif, |
| 75 | struct ieee80211_sta *sta, const u8 *bssid, |
| 76 | bool update); |
| 77 | int wcn36xx_smd_delete_bss(struct wcn36xx *wcn, struct ieee80211_vif *vif); |
| 78 | int wcn36xx_smd_config_sta(struct wcn36xx *wcn, struct ieee80211_vif *vif, |
| 79 | struct ieee80211_sta *sta); |
| 80 | int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif, |
| 81 | struct sk_buff *skb_beacon, u16 tim_off, |
| 82 | u16 p2p_off); |
| 83 | int wcn36xx_smd_switch_channel(struct wcn36xx *wcn, |
| 84 | struct ieee80211_vif *vif, int ch); |
| 85 | int wcn36xx_smd_update_proberesp_tmpl(struct wcn36xx *wcn, |
| 86 | struct ieee80211_vif *vif, |
| 87 | struct sk_buff *skb); |
| 88 | int wcn36xx_smd_set_stakey(struct wcn36xx *wcn, |
| 89 | enum ani_ed_type enc_type, |
| 90 | u8 keyidx, |
| 91 | u8 keylen, |
| 92 | u8 *key, |
| 93 | u8 sta_index); |
| 94 | int wcn36xx_smd_set_bsskey(struct wcn36xx *wcn, |
| 95 | enum ani_ed_type enc_type, |
| 96 | u8 keyidx, |
| 97 | u8 keylen, |
| 98 | u8 *key); |
| 99 | int wcn36xx_smd_remove_stakey(struct wcn36xx *wcn, |
| 100 | enum ani_ed_type enc_type, |
| 101 | u8 keyidx, |
| 102 | u8 sta_index); |
| 103 | int wcn36xx_smd_remove_bsskey(struct wcn36xx *wcn, |
| 104 | enum ani_ed_type enc_type, |
| 105 | u8 keyidx); |
| 106 | int wcn36xx_smd_enter_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif); |
| 107 | int wcn36xx_smd_exit_bmps(struct wcn36xx *wcn, struct ieee80211_vif *vif); |
| 108 | int wcn36xx_smd_set_power_params(struct wcn36xx *wcn, bool ignore_dtim); |
| 109 | int wcn36xx_smd_keep_alive_req(struct wcn36xx *wcn, |
| 110 | struct ieee80211_vif *vif, |
| 111 | int packet_type); |
| 112 | int wcn36xx_smd_dump_cmd_req(struct wcn36xx *wcn, u32 arg1, u32 arg2, |
| 113 | u32 arg3, u32 arg4, u32 arg5); |
| 114 | int wcn36xx_smd_feature_caps_exchange(struct wcn36xx *wcn); |
Pontus Fuchs | 2be6636 | 2014-02-12 19:04:44 +0000 | [diff] [blame] | 115 | void set_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap); |
| 116 | int get_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap); |
| 117 | void clear_feat_caps(u32 *bitmap, enum place_holder_in_cap_bitmap cap); |
Eugene Krasnikov | 8e84c25 | 2013-10-08 21:25:58 +0100 | [diff] [blame] | 118 | |
| 119 | int wcn36xx_smd_add_ba_session(struct wcn36xx *wcn, |
| 120 | struct ieee80211_sta *sta, |
| 121 | u16 tid, |
| 122 | u16 *ssn, |
| 123 | u8 direction, |
| 124 | u8 sta_index); |
| 125 | int wcn36xx_smd_add_ba(struct wcn36xx *wcn); |
| 126 | int wcn36xx_smd_del_ba(struct wcn36xx *wcn, u16 tid, u8 sta_index); |
| 127 | int wcn36xx_smd_trigger_ba(struct wcn36xx *wcn, u8 sta_index); |
| 128 | |
| 129 | int wcn36xx_smd_update_cfg(struct wcn36xx *wcn, u32 cfg_id, u32 value); |
| 130 | #endif /* _SMD_H_ */ |