Commit cff990ce authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: fix wmi service bitmap debug

The 10.x and main firmware branches have
conflicting WMI service bitmap definitions.

This also fixes WMI services parsing on big-endian
hosts and changes debugfs output to be more human
friendly.

kvalo: remove braces and the last semicolon from SVCSTR()
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 17dc0b80
...@@ -282,7 +282,7 @@ struct ath10k_debug { ...@@ -282,7 +282,7 @@ struct ath10k_debug {
struct dentry *debugfs_phy; struct dentry *debugfs_phy;
struct ath10k_target_stats target_stats; struct ath10k_target_stats target_stats;
u32 wmi_service_bitmap[WMI_SERVICE_BM_SIZE]; DECLARE_BITMAP(wmi_service_bitmap, WMI_SERVICE_BM_SIZE);
struct completion event_stats_compl; struct completion event_stats_compl;
......
...@@ -115,9 +115,10 @@ static ssize_t ath10k_read_wmi_services(struct file *file, ...@@ -115,9 +115,10 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
{ {
struct ath10k *ar = file->private_data; struct ath10k *ar = file->private_data;
char *buf; char *buf;
unsigned int len = 0, buf_len = 1500; unsigned int len = 0, buf_len = 4096;
const char *status; const char *name;
ssize_t ret_cnt; ssize_t ret_cnt;
bool enabled;
int i; int i;
buf = kzalloc(buf_len, GFP_KERNEL); buf = kzalloc(buf_len, GFP_KERNEL);
...@@ -129,15 +130,22 @@ static ssize_t ath10k_read_wmi_services(struct file *file, ...@@ -129,15 +130,22 @@ static ssize_t ath10k_read_wmi_services(struct file *file,
if (len > buf_len) if (len > buf_len)
len = buf_len; len = buf_len;
for (i = 0; i < WMI_SERVICE_LAST; i++) { for (i = 0; i < WMI_MAX_SERVICE; i++) {
if (WMI_SERVICE_IS_ENABLED(ar->debug.wmi_service_bitmap, i)) enabled = test_bit(i, ar->debug.wmi_service_bitmap);
status = "enabled"; name = wmi_service_name(i);
else
status = "disabled"; if (!name) {
if (enabled)
len += scnprintf(buf + len, buf_len - len,
"%-40s %s (bit %d)\n",
"unknown", "enabled", i);
continue;
}
len += scnprintf(buf + len, buf_len - len, len += scnprintf(buf + len, buf_len - len,
"0x%02x - %20s - %s\n", "%-40s %s\n",
i, wmi_service_name(i), status); name, enabled ? "enabled" : "-");
} }
ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len); ret_cnt = simple_read_from_buffer(user_buf, count, ppos, buf, len);
......
...@@ -2080,6 +2080,7 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, ...@@ -2080,6 +2080,7 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar,
struct sk_buff *skb) struct sk_buff *skb)
{ {
struct wmi_service_ready_event *ev = (void *)skb->data; struct wmi_service_ready_event *ev = (void *)skb->data;
DECLARE_BITMAP(svc_bmap, WMI_SERVICE_BM_SIZE) = {};
if (skb->len < sizeof(*ev)) { if (skb->len < sizeof(*ev)) {
ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n",
...@@ -2113,8 +2114,10 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, ...@@ -2113,8 +2114,10 @@ static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar,
ar->ath_common.regulatory.current_rd = ar->ath_common.regulatory.current_rd =
__le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd);
ath10k_debug_read_service_map(ar, ev->wmi_service_bitmap, wmi_10x_svc_map(ev->wmi_service_bitmap, svc_bmap);
sizeof(ev->wmi_service_bitmap)); ath10k_debug_read_service_map(ar, svc_bmap, sizeof(svc_bmap));
ath10k_dbg_dump(ATH10K_DBG_WMI, NULL, "ath10k: wmi svc: ",
ev->wmi_service_bitmap, sizeof(ev->wmi_service_bitmap));
if (strlen(ar->hw->wiphy->fw_version) == 0) { if (strlen(ar->hw->wiphy->fw_version) == 0) {
snprintf(ar->hw->wiphy->fw_version, snprintf(ar->hw->wiphy->fw_version,
...@@ -2154,6 +2157,7 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar, ...@@ -2154,6 +2157,7 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar,
u32 num_units, req_id, unit_size, num_mem_reqs, num_unit_info, i; u32 num_units, req_id, unit_size, num_mem_reqs, num_unit_info, i;
int ret; int ret;
struct wmi_service_ready_event_10x *ev = (void *)skb->data; struct wmi_service_ready_event_10x *ev = (void *)skb->data;
DECLARE_BITMAP(svc_bmap, WMI_SERVICE_BM_SIZE) = {};
if (skb->len < sizeof(*ev)) { if (skb->len < sizeof(*ev)) {
ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n", ath10k_warn("Service ready event was %d B but expected %zu B. Wrong firmware version?\n",
...@@ -2180,8 +2184,10 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar, ...@@ -2180,8 +2184,10 @@ static void ath10k_wmi_10x_service_ready_event_rx(struct ath10k *ar,
ar->ath_common.regulatory.current_rd = ar->ath_common.regulatory.current_rd =
__le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd); __le32_to_cpu(ev->hal_reg_capabilities.eeprom_rd);
ath10k_debug_read_service_map(ar, ev->wmi_service_bitmap, wmi_main_svc_map(ev->wmi_service_bitmap, svc_bmap);
sizeof(ev->wmi_service_bitmap)); ath10k_debug_read_service_map(ar, svc_bmap, sizeof(svc_bmap));
ath10k_dbg_dump(ATH10K_DBG_WMI, NULL, "ath10k: wmi svc: ",
ev->wmi_service_bitmap, sizeof(ev->wmi_service_bitmap));
if (strlen(ar->hw->wiphy->fw_version) == 0) { if (strlen(ar->hw->wiphy->fw_version) == 0) {
snprintf(ar->hw->wiphy->fw_version, snprintf(ar->hw->wiphy->fw_version,
......
...@@ -73,116 +73,279 @@ struct wmi_cmd_hdr { ...@@ -73,116 +73,279 @@ struct wmi_cmd_hdr {
#define HTC_PROTOCOL_VERSION 0x0002 #define HTC_PROTOCOL_VERSION 0x0002
#define WMI_PROTOCOL_VERSION 0x0002 #define WMI_PROTOCOL_VERSION 0x0002
enum wmi_service_id { enum wmi_service {
WMI_SERVICE_BEACON_OFFLOAD = 0, /* beacon offload */ WMI_SERVICE_BEACON_OFFLOAD = 0,
WMI_SERVICE_SCAN_OFFLOAD, /* scan offload */ WMI_SERVICE_SCAN_OFFLOAD,
WMI_SERVICE_ROAM_OFFLOAD, /* roam offload */ WMI_SERVICE_ROAM_OFFLOAD,
WMI_SERVICE_BCN_MISS_OFFLOAD, /* beacon miss offload */ WMI_SERVICE_BCN_MISS_OFFLOAD,
WMI_SERVICE_STA_PWRSAVE, /* fake sleep + basic power save */ WMI_SERVICE_STA_PWRSAVE,
WMI_SERVICE_STA_ADVANCED_PWRSAVE, /* uapsd, pspoll, force sleep */ WMI_SERVICE_STA_ADVANCED_PWRSAVE,
WMI_SERVICE_AP_UAPSD, /* uapsd on AP */ WMI_SERVICE_AP_UAPSD,
WMI_SERVICE_AP_DFS, /* DFS on AP */ WMI_SERVICE_AP_DFS,
WMI_SERVICE_11AC, /* supports 11ac */ WMI_SERVICE_11AC,
WMI_SERVICE_BLOCKACK, /* Supports triggering ADDBA/DELBA from host*/ WMI_SERVICE_BLOCKACK,
WMI_SERVICE_PHYERR, /* PHY error */ WMI_SERVICE_PHYERR,
WMI_SERVICE_BCN_FILTER, /* Beacon filter support */ WMI_SERVICE_BCN_FILTER,
WMI_SERVICE_RTT, /* RTT (round trip time) support */ WMI_SERVICE_RTT,
WMI_SERVICE_RATECTRL, /* Rate-control */ WMI_SERVICE_RATECTRL,
WMI_SERVICE_WOW, /* WOW Support */ WMI_SERVICE_WOW,
WMI_SERVICE_RATECTRL_CACHE, /* Rate-control caching */ WMI_SERVICE_RATECTRL_CACHE,
WMI_SERVICE_IRAM_TIDS, /* TIDs in IRAM */ WMI_SERVICE_IRAM_TIDS,
WMI_SERVICE_ARPNS_OFFLOAD, /* ARP NS Offload support */ WMI_SERVICE_ARPNS_OFFLOAD,
WMI_SERVICE_NLO, /* Network list offload service */ WMI_SERVICE_NLO,
WMI_SERVICE_GTK_OFFLOAD, /* GTK offload */ WMI_SERVICE_GTK_OFFLOAD,
WMI_SERVICE_SCAN_SCH, /* Scan Scheduler Service */ WMI_SERVICE_SCAN_SCH,
WMI_SERVICE_CSA_OFFLOAD, /* CSA offload service */ WMI_SERVICE_CSA_OFFLOAD,
WMI_SERVICE_CHATTER, /* Chatter service */ WMI_SERVICE_CHATTER,
WMI_SERVICE_COEX_FREQAVOID, /* FW report freq range to avoid */ WMI_SERVICE_COEX_FREQAVOID,
WMI_SERVICE_PACKET_POWER_SAVE, /* packet power save service */ WMI_SERVICE_PACKET_POWER_SAVE,
WMI_SERVICE_FORCE_FW_HANG, /* To test fw recovery mechanism */ WMI_SERVICE_FORCE_FW_HANG,
WMI_SERVICE_GPIO, /* GPIO service */ WMI_SERVICE_GPIO,
WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, /* Modulated DTIM support */ WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
WMI_STA_UAPSD_BASIC_AUTO_TRIG, /* UAPSD AC Trigger Generation */ WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
WMI_STA_UAPSD_VAR_AUTO_TRIG, /* -do- */ WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
WMI_SERVICE_STA_KEEP_ALIVE, /* STA keep alive mechanism support */ WMI_SERVICE_STA_KEEP_ALIVE,
WMI_SERVICE_TX_ENCAP, /* Packet type for TX encapsulation */ WMI_SERVICE_TX_ENCAP,
WMI_SERVICE_BURST,
WMI_SERVICE_LAST, WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT,
WMI_MAX_SERVICE = 64 /* max service */ WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT,
};
enum wmi_10x_service {
WMI_10X_SERVICE_BEACON_OFFLOAD = 0,
WMI_10X_SERVICE_SCAN_OFFLOAD,
WMI_10X_SERVICE_ROAM_OFFLOAD,
WMI_10X_SERVICE_BCN_MISS_OFFLOAD,
WMI_10X_SERVICE_STA_PWRSAVE,
WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE,
WMI_10X_SERVICE_AP_UAPSD,
WMI_10X_SERVICE_AP_DFS,
WMI_10X_SERVICE_11AC,
WMI_10X_SERVICE_BLOCKACK,
WMI_10X_SERVICE_PHYERR,
WMI_10X_SERVICE_BCN_FILTER,
WMI_10X_SERVICE_RTT,
WMI_10X_SERVICE_RATECTRL,
WMI_10X_SERVICE_WOW,
WMI_10X_SERVICE_RATECTRL_CACHE,
WMI_10X_SERVICE_IRAM_TIDS,
WMI_10X_SERVICE_BURST,
/* introduced in 10.2 */
WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT,
WMI_10X_SERVICE_FORCE_FW_HANG,
WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT,
};
enum wmi_main_service {
WMI_MAIN_SERVICE_BEACON_OFFLOAD = 0,
WMI_MAIN_SERVICE_SCAN_OFFLOAD,
WMI_MAIN_SERVICE_ROAM_OFFLOAD,
WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD,
WMI_MAIN_SERVICE_STA_PWRSAVE,
WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE,
WMI_MAIN_SERVICE_AP_UAPSD,
WMI_MAIN_SERVICE_AP_DFS,
WMI_MAIN_SERVICE_11AC,
WMI_MAIN_SERVICE_BLOCKACK,
WMI_MAIN_SERVICE_PHYERR,
WMI_MAIN_SERVICE_BCN_FILTER,
WMI_MAIN_SERVICE_RTT,
WMI_MAIN_SERVICE_RATECTRL,
WMI_MAIN_SERVICE_WOW,
WMI_MAIN_SERVICE_RATECTRL_CACHE,
WMI_MAIN_SERVICE_IRAM_TIDS,
WMI_MAIN_SERVICE_ARPNS_OFFLOAD,
WMI_MAIN_SERVICE_NLO,
WMI_MAIN_SERVICE_GTK_OFFLOAD,
WMI_MAIN_SERVICE_SCAN_SCH,
WMI_MAIN_SERVICE_CSA_OFFLOAD,
WMI_MAIN_SERVICE_CHATTER,
WMI_MAIN_SERVICE_COEX_FREQAVOID,
WMI_MAIN_SERVICE_PACKET_POWER_SAVE,
WMI_MAIN_SERVICE_FORCE_FW_HANG,
WMI_MAIN_SERVICE_GPIO,
WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
WMI_MAIN_SERVICE_STA_KEEP_ALIVE,
WMI_MAIN_SERVICE_TX_ENCAP,
}; };
static inline char *wmi_service_name(int service_id) static inline char *wmi_service_name(int service_id)
{ {
#define SVCSTR(x) case x: return #x
switch (service_id) { switch (service_id) {
case WMI_SERVICE_BEACON_OFFLOAD: SVCSTR(WMI_SERVICE_BEACON_OFFLOAD);
return "BEACON_OFFLOAD"; SVCSTR(WMI_SERVICE_SCAN_OFFLOAD);
case WMI_SERVICE_SCAN_OFFLOAD: SVCSTR(WMI_SERVICE_ROAM_OFFLOAD);
return "SCAN_OFFLOAD"; SVCSTR(WMI_SERVICE_BCN_MISS_OFFLOAD);
case WMI_SERVICE_ROAM_OFFLOAD: SVCSTR(WMI_SERVICE_STA_PWRSAVE);
return "ROAM_OFFLOAD"; SVCSTR(WMI_SERVICE_STA_ADVANCED_PWRSAVE);
case WMI_SERVICE_BCN_MISS_OFFLOAD: SVCSTR(WMI_SERVICE_AP_UAPSD);
return "BCN_MISS_OFFLOAD"; SVCSTR(WMI_SERVICE_AP_DFS);
case WMI_SERVICE_STA_PWRSAVE: SVCSTR(WMI_SERVICE_11AC);
return "STA_PWRSAVE"; SVCSTR(WMI_SERVICE_BLOCKACK);
case WMI_SERVICE_STA_ADVANCED_PWRSAVE: SVCSTR(WMI_SERVICE_PHYERR);
return "STA_ADVANCED_PWRSAVE"; SVCSTR(WMI_SERVICE_BCN_FILTER);
case WMI_SERVICE_AP_UAPSD: SVCSTR(WMI_SERVICE_RTT);
return "AP_UAPSD"; SVCSTR(WMI_SERVICE_RATECTRL);
case WMI_SERVICE_AP_DFS: SVCSTR(WMI_SERVICE_WOW);
return "AP_DFS"; SVCSTR(WMI_SERVICE_RATECTRL_CACHE);
case WMI_SERVICE_11AC: SVCSTR(WMI_SERVICE_IRAM_TIDS);
return "11AC"; SVCSTR(WMI_SERVICE_ARPNS_OFFLOAD);
case WMI_SERVICE_BLOCKACK: SVCSTR(WMI_SERVICE_NLO);
return "BLOCKACK"; SVCSTR(WMI_SERVICE_GTK_OFFLOAD);
case WMI_SERVICE_PHYERR: SVCSTR(WMI_SERVICE_SCAN_SCH);
return "PHYERR"; SVCSTR(WMI_SERVICE_CSA_OFFLOAD);
case WMI_SERVICE_BCN_FILTER: SVCSTR(WMI_SERVICE_CHATTER);
return "BCN_FILTER"; SVCSTR(WMI_SERVICE_COEX_FREQAVOID);
case WMI_SERVICE_RTT: SVCSTR(WMI_SERVICE_PACKET_POWER_SAVE);
return "RTT"; SVCSTR(WMI_SERVICE_FORCE_FW_HANG);
case WMI_SERVICE_RATECTRL: SVCSTR(WMI_SERVICE_GPIO);
return "RATECTRL"; SVCSTR(WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM);
case WMI_SERVICE_WOW: SVCSTR(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG);
return "WOW"; SVCSTR(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG);
case WMI_SERVICE_RATECTRL_CACHE: SVCSTR(WMI_SERVICE_STA_KEEP_ALIVE);
return "RATECTRL CACHE"; SVCSTR(WMI_SERVICE_TX_ENCAP);
case WMI_SERVICE_IRAM_TIDS: SVCSTR(WMI_SERVICE_BURST);
return "IRAM TIDS"; SVCSTR(WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT);
case WMI_SERVICE_ARPNS_OFFLOAD: SVCSTR(WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT);
return "ARPNS_OFFLOAD";
case WMI_SERVICE_NLO:
return "NLO";
case WMI_SERVICE_GTK_OFFLOAD:
return "GTK_OFFLOAD";
case WMI_SERVICE_SCAN_SCH:
return "SCAN_SCH";
case WMI_SERVICE_CSA_OFFLOAD:
return "CSA_OFFLOAD";
case WMI_SERVICE_CHATTER:
return "CHATTER";
case WMI_SERVICE_COEX_FREQAVOID:
return "COEX_FREQAVOID";
case WMI_SERVICE_PACKET_POWER_SAVE:
return "PACKET_POWER_SAVE";
case WMI_SERVICE_FORCE_FW_HANG:
return "FORCE FW HANG";
case WMI_SERVICE_GPIO:
return "GPIO";
case WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM:
return "MODULATED DTIM";
case WMI_STA_UAPSD_BASIC_AUTO_TRIG:
return "BASIC UAPSD";
case WMI_STA_UAPSD_VAR_AUTO_TRIG:
return "VAR UAPSD";
case WMI_SERVICE_STA_KEEP_ALIVE:
return "STA KEEP ALIVE";
case WMI_SERVICE_TX_ENCAP:
return "TX ENCAP";
default: default:
return "UNKNOWN SERVICE\n"; return NULL;
} }
#undef SVCSTR
}
#define WMI_MAX_SERVICE 64
#define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id) \
(__le32_to_cpu((wmi_svc_bmap)[(svc_id)/(sizeof(u32))]) & \
BIT((svc_id)%(sizeof(u32))))
#define SVCMAP(x, y) \
do { \
if (WMI_SERVICE_IS_ENABLED((in), (x))) \
__set_bit(y, out); \
} while (0)
static inline void wmi_10x_svc_map(const __le32 *in, unsigned long *out)
{
SVCMAP(WMI_10X_SERVICE_BEACON_OFFLOAD,
WMI_SERVICE_BEACON_OFFLOAD);
SVCMAP(WMI_10X_SERVICE_SCAN_OFFLOAD,
WMI_SERVICE_SCAN_OFFLOAD);
SVCMAP(WMI_10X_SERVICE_ROAM_OFFLOAD,
WMI_SERVICE_ROAM_OFFLOAD);
SVCMAP(WMI_10X_SERVICE_BCN_MISS_OFFLOAD,
WMI_SERVICE_BCN_MISS_OFFLOAD);
SVCMAP(WMI_10X_SERVICE_STA_PWRSAVE,
WMI_SERVICE_STA_PWRSAVE);
SVCMAP(WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE,
WMI_SERVICE_STA_ADVANCED_PWRSAVE);
SVCMAP(WMI_10X_SERVICE_AP_UAPSD,
WMI_SERVICE_AP_UAPSD);
SVCMAP(WMI_10X_SERVICE_AP_DFS,
WMI_SERVICE_AP_DFS);
SVCMAP(WMI_10X_SERVICE_11AC,
WMI_SERVICE_11AC);
SVCMAP(WMI_10X_SERVICE_BLOCKACK,
WMI_SERVICE_BLOCKACK);
SVCMAP(WMI_10X_SERVICE_PHYERR,
WMI_SERVICE_PHYERR);
SVCMAP(WMI_10X_SERVICE_BCN_FILTER,
WMI_SERVICE_BCN_FILTER);
SVCMAP(WMI_10X_SERVICE_RTT,
WMI_SERVICE_RTT);
SVCMAP(WMI_10X_SERVICE_RATECTRL,
WMI_SERVICE_RATECTRL);
SVCMAP(WMI_10X_SERVICE_WOW,
WMI_SERVICE_WOW);
SVCMAP(WMI_10X_SERVICE_RATECTRL_CACHE,
WMI_SERVICE_RATECTRL_CACHE);
SVCMAP(WMI_10X_SERVICE_IRAM_TIDS,
WMI_SERVICE_IRAM_TIDS);
SVCMAP(WMI_10X_SERVICE_BURST,
WMI_SERVICE_BURST);
SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT,
WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT);
SVCMAP(WMI_10X_SERVICE_FORCE_FW_HANG,
WMI_SERVICE_FORCE_FW_HANG);
SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT,
WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT);
} }
static inline void wmi_main_svc_map(const __le32 *in, unsigned long *out)
{
SVCMAP(WMI_MAIN_SERVICE_BEACON_OFFLOAD,
WMI_SERVICE_BEACON_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_SCAN_OFFLOAD,
WMI_SERVICE_SCAN_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_ROAM_OFFLOAD,
WMI_SERVICE_ROAM_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD,
WMI_SERVICE_BCN_MISS_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_STA_PWRSAVE,
WMI_SERVICE_STA_PWRSAVE);
SVCMAP(WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE,
WMI_SERVICE_STA_ADVANCED_PWRSAVE);
SVCMAP(WMI_MAIN_SERVICE_AP_UAPSD,
WMI_SERVICE_AP_UAPSD);
SVCMAP(WMI_MAIN_SERVICE_AP_DFS,
WMI_SERVICE_AP_DFS);
SVCMAP(WMI_MAIN_SERVICE_11AC,
WMI_SERVICE_11AC);
SVCMAP(WMI_MAIN_SERVICE_BLOCKACK,
WMI_SERVICE_BLOCKACK);
SVCMAP(WMI_MAIN_SERVICE_PHYERR,
WMI_SERVICE_PHYERR);
SVCMAP(WMI_MAIN_SERVICE_BCN_FILTER,
WMI_SERVICE_BCN_FILTER);
SVCMAP(WMI_MAIN_SERVICE_RTT,
WMI_SERVICE_RTT);
SVCMAP(WMI_MAIN_SERVICE_RATECTRL,
WMI_SERVICE_RATECTRL);
SVCMAP(WMI_MAIN_SERVICE_WOW,
WMI_SERVICE_WOW);
SVCMAP(WMI_MAIN_SERVICE_RATECTRL_CACHE,
WMI_SERVICE_RATECTRL_CACHE);
SVCMAP(WMI_MAIN_SERVICE_IRAM_TIDS,
WMI_SERVICE_IRAM_TIDS);
SVCMAP(WMI_MAIN_SERVICE_ARPNS_OFFLOAD,
WMI_SERVICE_ARPNS_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_NLO,
WMI_SERVICE_NLO);
SVCMAP(WMI_MAIN_SERVICE_GTK_OFFLOAD,
WMI_SERVICE_GTK_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_SCAN_SCH,
WMI_SERVICE_SCAN_SCH);
SVCMAP(WMI_MAIN_SERVICE_CSA_OFFLOAD,
WMI_SERVICE_CSA_OFFLOAD);
SVCMAP(WMI_MAIN_SERVICE_CHATTER,
WMI_SERVICE_CHATTER);
SVCMAP(WMI_MAIN_SERVICE_COEX_FREQAVOID,
WMI_SERVICE_COEX_FREQAVOID);
SVCMAP(WMI_MAIN_SERVICE_PACKET_POWER_SAVE,
WMI_SERVICE_PACKET_POWER_SAVE);
SVCMAP(WMI_MAIN_SERVICE_FORCE_FW_HANG,
WMI_SERVICE_FORCE_FW_HANG);
SVCMAP(WMI_MAIN_SERVICE_GPIO,
WMI_SERVICE_GPIO);
SVCMAP(WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM);
SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG);
SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG);
SVCMAP(WMI_MAIN_SERVICE_STA_KEEP_ALIVE,
WMI_SERVICE_STA_KEEP_ALIVE);
SVCMAP(WMI_MAIN_SERVICE_TX_ENCAP,
WMI_SERVICE_TX_ENCAP);
}
#undef SVCMAP
#define WMI_SERVICE_BM_SIZE \ #define WMI_SERVICE_BM_SIZE \
((WMI_MAX_SERVICE + sizeof(u32) - 1)/sizeof(u32)) ((WMI_MAX_SERVICE + sizeof(u32) - 1)/sizeof(u32))
...@@ -1229,10 +1392,6 @@ struct wlan_host_mem_req { ...@@ -1229,10 +1392,6 @@ struct wlan_host_mem_req {
__le32 num_units; __le32 num_units;
} __packed; } __packed;
#define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id) \
((((wmi_svc_bmap)[(svc_id)/(sizeof(u32))]) & \
(1 << ((svc_id)%(sizeof(u32))))) != 0)
/* /*
* The following struct holds optional payload for * The following struct holds optional payload for
* wmi_service_ready_event,e.g., 11ac pass some of the * wmi_service_ready_event,e.g., 11ac pass some of the
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment