Linux Audio

Check our new training course

Loading...
v6.8
  1// SPDX-License-Identifier: GPL-2.0-only
  2
  3#include "wcn36xx.h"
  4#include "firmware.h"
  5
  6#define DEFINE(s)[s] = #s
  7
  8static const char * const wcn36xx_firmware_caps_names[] = {
  9	DEFINE(MCC),
 10	DEFINE(P2P),
 11	DEFINE(DOT11AC),
 12	DEFINE(SLM_SESSIONIZATION),
 13	DEFINE(DOT11AC_OPMODE),
 14	DEFINE(SAP32STA),
 15	DEFINE(TDLS),
 16	DEFINE(P2P_GO_NOA_DECOUPLE_INIT_SCAN),
 17	DEFINE(WLANACTIVE_OFFLOAD),
 18	DEFINE(BEACON_OFFLOAD),
 19	DEFINE(SCAN_OFFLOAD),
 20	DEFINE(ROAM_OFFLOAD),
 21	DEFINE(BCN_MISS_OFFLOAD),
 22	DEFINE(STA_POWERSAVE),
 23	DEFINE(STA_ADVANCED_PWRSAVE),
 24	DEFINE(AP_UAPSD),
 25	DEFINE(AP_DFS),
 26	DEFINE(BLOCKACK),
 27	DEFINE(PHY_ERR),
 28	DEFINE(BCN_FILTER),
 29	DEFINE(RTT),
 30	DEFINE(RATECTRL),
 31	DEFINE(WOW),
 32	DEFINE(WLAN_ROAM_SCAN_OFFLOAD),
 33	DEFINE(SPECULATIVE_PS_POLL),
 34	DEFINE(SCAN_SCH),
 35	DEFINE(IBSS_HEARTBEAT_OFFLOAD),
 36	DEFINE(WLAN_SCAN_OFFLOAD),
 37	DEFINE(WLAN_PERIODIC_TX_PTRN),
 38	DEFINE(ADVANCE_TDLS),
 39	DEFINE(BATCH_SCAN),
 40	DEFINE(FW_IN_TX_PATH),
 41	DEFINE(EXTENDED_NSOFFLOAD_SLOT),
 42	DEFINE(CH_SWITCH_V1),
 43	DEFINE(HT40_OBSS_SCAN),
 44	DEFINE(UPDATE_CHANNEL_LIST),
 45	DEFINE(WLAN_MCADDR_FLT),
 46	DEFINE(WLAN_CH144),
 47	DEFINE(NAN),
 48	DEFINE(TDLS_SCAN_COEXISTENCE),
 49	DEFINE(LINK_LAYER_STATS_MEAS),
 50	DEFINE(MU_MIMO),
 51	DEFINE(EXTENDED_SCAN),
 52	DEFINE(DYNAMIC_WMM_PS),
 53	DEFINE(MAC_SPOOFED_SCAN),
 54	DEFINE(BMU_ERROR_GENERIC_RECOVERY),
 55	DEFINE(DISA),
 56	DEFINE(FW_STATS),
 57	DEFINE(WPS_PRBRSP_TMPL),
 58	DEFINE(BCN_IE_FLT_DELTA),
 59	DEFINE(TDLS_OFF_CHANNEL),
 60	DEFINE(RTT3),
 61	DEFINE(MGMT_FRAME_LOGGING),
 62	DEFINE(ENHANCED_TXBD_COMPLETION),
 63	DEFINE(LOGGING_ENHANCEMENT),
 64	DEFINE(EXT_SCAN_ENHANCED),
 65	DEFINE(MEMORY_DUMP_SUPPORTED),
 66	DEFINE(PER_PKT_STATS_SUPPORTED),
 67	DEFINE(EXT_LL_STAT),
 68	DEFINE(WIFI_CONFIG),
 69	DEFINE(ANTENNA_DIVERSITY_SELECTION),
 70};
 71
 72#undef DEFINE
 73
 74const char *wcn36xx_firmware_get_cap_name(enum wcn36xx_firmware_feat_caps x)
 75{
 76	if (x >= ARRAY_SIZE(wcn36xx_firmware_caps_names))
 77		return "UNKNOWN";
 78	return wcn36xx_firmware_caps_names[x];
 79}
 80
 81void wcn36xx_firmware_set_feat_caps(u32 *bitmap,
 82				    enum wcn36xx_firmware_feat_caps cap)
 83{
 84	int arr_idx, bit_idx;
 85
 86	if (cap < 0 || cap > 127) {
 87		wcn36xx_warn("error cap idx %d\n", cap);
 88		return;
 89	}
 90
 91	arr_idx = cap / 32;
 92	bit_idx = cap % 32;
 93	bitmap[arr_idx] |= (1 << bit_idx);
 94}
 95
 96int wcn36xx_firmware_get_feat_caps(u32 *bitmap,
 97				   enum wcn36xx_firmware_feat_caps cap)
 98{
 99	int arr_idx, bit_idx;
100
101	if (cap < 0 || cap > 127) {
102		wcn36xx_warn("error cap idx %d\n", cap);
103		return -EINVAL;
104	}
105
106	arr_idx = cap / 32;
107	bit_idx = cap % 32;
108
109	return (bitmap[arr_idx] & (1 << bit_idx)) ? 1 : 0;
110}
111
112void wcn36xx_firmware_clear_feat_caps(u32 *bitmap,
113				      enum wcn36xx_firmware_feat_caps cap)
114{
115	int arr_idx, bit_idx;
116
117	if (cap < 0 || cap > 127) {
118		wcn36xx_warn("error cap idx %d\n", cap);
119		return;
120	}
121
122	arr_idx = cap / 32;
123	bit_idx = cap % 32;
124	bitmap[arr_idx] &= ~(1 << bit_idx);
125}
v6.9.4
  1// SPDX-License-Identifier: GPL-2.0-only
  2
  3#include "wcn36xx.h"
  4#include "firmware.h"
  5
  6#define DEFINE(s)[s] = #s
  7
  8static const char * const wcn36xx_firmware_caps_names[] = {
  9	DEFINE(MCC),
 10	DEFINE(P2P),
 11	DEFINE(DOT11AC),
 12	DEFINE(SLM_SESSIONIZATION),
 13	DEFINE(DOT11AC_OPMODE),
 14	DEFINE(SAP32STA),
 15	DEFINE(TDLS),
 16	DEFINE(P2P_GO_NOA_DECOUPLE_INIT_SCAN),
 17	DEFINE(WLANACTIVE_OFFLOAD),
 18	DEFINE(BEACON_OFFLOAD),
 19	DEFINE(SCAN_OFFLOAD),
 20	DEFINE(ROAM_OFFLOAD),
 21	DEFINE(BCN_MISS_OFFLOAD),
 22	DEFINE(STA_POWERSAVE),
 23	DEFINE(STA_ADVANCED_PWRSAVE),
 24	DEFINE(AP_UAPSD),
 25	DEFINE(AP_DFS),
 26	DEFINE(BLOCKACK),
 27	DEFINE(PHY_ERR),
 28	DEFINE(BCN_FILTER),
 29	DEFINE(RTT),
 30	DEFINE(RATECTRL),
 31	DEFINE(WOW),
 32	DEFINE(WLAN_ROAM_SCAN_OFFLOAD),
 33	DEFINE(SPECULATIVE_PS_POLL),
 34	DEFINE(SCAN_SCH),
 35	DEFINE(IBSS_HEARTBEAT_OFFLOAD),
 36	DEFINE(WLAN_SCAN_OFFLOAD),
 37	DEFINE(WLAN_PERIODIC_TX_PTRN),
 38	DEFINE(ADVANCE_TDLS),
 39	DEFINE(BATCH_SCAN),
 40	DEFINE(FW_IN_TX_PATH),
 41	DEFINE(EXTENDED_NSOFFLOAD_SLOT),
 42	DEFINE(CH_SWITCH_V1),
 43	DEFINE(HT40_OBSS_SCAN),
 44	DEFINE(UPDATE_CHANNEL_LIST),
 45	DEFINE(WLAN_MCADDR_FLT),
 46	DEFINE(WLAN_CH144),
 47	DEFINE(NAN),
 48	DEFINE(TDLS_SCAN_COEXISTENCE),
 49	DEFINE(LINK_LAYER_STATS_MEAS),
 50	DEFINE(MU_MIMO),
 51	DEFINE(EXTENDED_SCAN),
 52	DEFINE(DYNAMIC_WMM_PS),
 53	DEFINE(MAC_SPOOFED_SCAN),
 54	DEFINE(BMU_ERROR_GENERIC_RECOVERY),
 55	DEFINE(DISA),
 56	DEFINE(FW_STATS),
 57	DEFINE(WPS_PRBRSP_TMPL),
 58	DEFINE(BCN_IE_FLT_DELTA),
 59	DEFINE(TDLS_OFF_CHANNEL),
 60	DEFINE(RTT3),
 61	DEFINE(MGMT_FRAME_LOGGING),
 62	DEFINE(ENHANCED_TXBD_COMPLETION),
 63	DEFINE(LOGGING_ENHANCEMENT),
 64	DEFINE(EXT_SCAN_ENHANCED),
 65	DEFINE(MEMORY_DUMP_SUPPORTED),
 66	DEFINE(PER_PKT_STATS_SUPPORTED),
 67	DEFINE(EXT_LL_STAT),
 68	DEFINE(WIFI_CONFIG),
 69	DEFINE(ANTENNA_DIVERSITY_SELECTION),
 70};
 71
 72#undef DEFINE
 73
 74const char *wcn36xx_firmware_get_cap_name(enum wcn36xx_firmware_feat_caps x)
 75{
 76	if (x >= ARRAY_SIZE(wcn36xx_firmware_caps_names))
 77		return "UNKNOWN";
 78	return wcn36xx_firmware_caps_names[x];
 79}
 80
 81void wcn36xx_firmware_set_feat_caps(u32 *bitmap,
 82				    enum wcn36xx_firmware_feat_caps cap)
 83{
 84	int arr_idx, bit_idx;
 85
 86	if (cap < 0 || cap > 127) {
 87		wcn36xx_warn("error cap idx %d\n", cap);
 88		return;
 89	}
 90
 91	arr_idx = cap / 32;
 92	bit_idx = cap % 32;
 93	bitmap[arr_idx] |= (1 << bit_idx);
 94}
 95
 96int wcn36xx_firmware_get_feat_caps(u32 *bitmap,
 97				   enum wcn36xx_firmware_feat_caps cap)
 98{
 99	int arr_idx, bit_idx;
100
101	if (cap < 0 || cap > 127) {
102		wcn36xx_warn("error cap idx %d\n", cap);
103		return -EINVAL;
104	}
105
106	arr_idx = cap / 32;
107	bit_idx = cap % 32;
108
109	return (bitmap[arr_idx] & (1 << bit_idx)) ? 1 : 0;
110}
111
112void wcn36xx_firmware_clear_feat_caps(u32 *bitmap,
113				      enum wcn36xx_firmware_feat_caps cap)
114{
115	int arr_idx, bit_idx;
116
117	if (cap < 0 || cap > 127) {
118		wcn36xx_warn("error cap idx %d\n", cap);
119		return;
120	}
121
122	arr_idx = cap / 32;
123	bit_idx = cap % 32;
124	bitmap[arr_idx] &= ~(1 << bit_idx);
125}