Преглед на файлове

qcacld-3.0: CL 1431762 update fw common interface files

qcacld-2.0 to qcacld-3.0 propagation

Update to add WMI interface for Berkeley packet filter feature.

Change-Id: Ib531691c227a4b9e4c4087f6eaf08796677c93c1
CRs-fixed: 865207
Manikandan Mohan преди 9 години
родител
ревизия
032eb4869c
променени са 5 файла, в които са добавени 110 реда и са изтрити 3 реда
  1. 5 0
      core/wmi/wmi_unified.c
  2. 1 0
      target/inc/wmi_services.h
  3. 45 2
      target/inc/wmi_tlv_defs.h
  4. 58 0
      target/inc/wmi_unified.h
  5. 1 1
      target/inc/wmi_version.h

+ 5 - 0
core/wmi/wmi_unified.c

@@ -743,6 +743,11 @@ static uint8_t *get_wmi_cmd_string(WMI_CMD_ID wmi_command)
 		CASE_RETURN_STRING(WMI_WOW_HOSTWAKEUP_GPIO_PIN_PATTERN_CONFIG_CMDID);
 		CASE_RETURN_STRING(WMI_AP_PS_EGAP_PARAM_CMDID);
 		CASE_RETURN_STRING(WMI_PMF_OFFLOAD_SET_SA_QUERY_CMDID);
+		CASE_RETURN_STRING(WMI_BPF_GET_CAPABILITY_CMDID);
+		CASE_RETURN_STRING(WMI_BPF_GET_VDEV_STATS_CMDID);
+		CASE_RETURN_STRING(WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID);
+		CASE_RETURN_STRING(WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID);
+
 	}
 	return "Invalid WMI cmd";
 }

+ 1 - 0
target/inc/wmi_services.h

@@ -139,6 +139,7 @@ typedef enum {
 	WMI_SERVICE_BSS_CHANNEL_INFO_64,  /* BSS channel info (freq, noise floor, 64-bit counters) event support */
 	WMI_SERVICE_ENTERPRISE_MESH,      /* Enterprise MESH Service Support */
 	WMI_SERVICE_RESTRT_CHNL_SUPPORT,  /* Restricted Channel Support */
+	WMI_SERVICE_BPF_OFFLOAD,          /* FW supports bpf offload */
 
 	WMI_MAX_SERVICE = 128             /* max service */
 } WMI_SERVICE;

+ 45 - 2
target/inc/wmi_tlv_defs.h

@@ -605,6 +605,12 @@ typedef enum {
 	WMITLV_TAG_STRUC_wmi_scpc_event_fixed_param,
 	WMITLV_TAG_STRUC_wmi_ap_ps_egap_info_chainmask_list,
 	WMITLV_TAG_STRUC_wmi_sta_smps_force_mode_complete_event_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_get_capability_cmd_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_capability_info_evt_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_get_vdev_stats_cmd_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_vdev_stats_info_evt_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_set_vdev_instructions_cmd_fixed_param,
+	WMITLV_TAG_STRUC_wmi_bpf_del_vdev_instructions_cmd_fixed_param,
 } WMITLV_TAG_ID;
 
 /*
@@ -844,7 +850,12 @@ typedef enum {
 	OP(WMI_AP_PS_EGAP_PARAM_CMDID) \
 	OP(WMI_PMF_OFFLOAD_SET_SA_QUERY_CMDID) \
 	OP(WMI_TRANSFER_DATA_TO_FLASH_CMDID) \
-	OP(WMI_OEM_REQUEST_CMDID)
+	OP(WMI_OEM_REQUEST_CMDID) \
+	OP(WMI_BPF_GET_CAPABILITY_CMDID) \
+	OP(WMI_BPF_GET_VDEV_STATS_CMDID) \
+	OP(WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID) \
+	OP(WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID)
+
 /*
  * IMPORTANT: Please add _ALL_ WMI Events Here.
  * Otherwise, these WMI TLV Functions will be process them.
@@ -963,7 +974,9 @@ typedef enum {
 	OP(WMI_TRANSFER_DATA_TO_FLASH_COMPLETE_EVENTID) \
 	OP(WMI_OEM_RESPONSE_EVENTID) \
 	OP(WMI_PDEV_UTF_SCPC_EVENTID) \
-	OP(WMI_STA_SMPS_FORCE_MODE_COMPLETE_EVENTID)
+	OP(WMI_STA_SMPS_FORCE_MODE_COMPLETE_EVENTID) \
+	OP(WMI_BPF_CAPABILIY_INFO_EVENTID) \
+	OP(WMI_BPF_VDEV_STATS_INFO_EVENTID)
 
 /* TLV definitions of WMI commands */
 
@@ -2227,6 +2240,26 @@ WMITLV_CREATE_PARAM_STRUC(WMI_NLO_CONFIGURE_MAWC_CMDID);
 	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_extscan_configure_mawc_cmd_fixed_param, wmi_extscan_configure_mawc_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
 WMITLV_CREATE_PARAM_STRUC(WMI_EXTSCAN_CONFIGURE_MAWC_CMDID);
 
+/* bpf offload capability get cmd */
+#define WMITLV_TABLE_WMI_BPF_GET_CAPABILITY_CMDID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_get_capability_cmd_fixed_param, wmi_bpf_get_capability_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_GET_CAPABILITY_CMDID);
+
+/* bpf offload get vdev status cmd */
+#define WMITLV_TABLE_WMI_BPF_GET_VDEV_STATS_CMDID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_get_vdev_stats_cmd_fixed_param, wmi_bpf_get_vdev_stats_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_GET_VDEV_STATS_CMDID);
+
+/* bpf offload set vdev instructions cmd */
+#define WMITLV_TABLE_WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_set_vdev_instructions_cmd_fixed_param, wmi_bpf_set_vdev_instructions_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID);
+
+/* bpf offload delete vdev instructions cmd */
+#define WMITLV_TABLE_WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_del_vdev_instructions_cmd_fixed_param, wmi_bpf_del_vdev_instructions_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID);
+
 /* Set rssi monitoring config Cmd */
 #define WMITLV_TABLE_WMI_RSSI_BREACH_MONITOR_CONFIG_CMDID(id, op, buf, len) \
 	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_rssi_breach_monitor_config_fixed_param, wmi_rssi_breach_monitor_config_fixed_param, fixed_param, WMITLV_SIZE_FIX)
@@ -3030,6 +3063,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MAWC_ENABLE_SENSOR_EVENTID);
 	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_sta_smps_force_mode_complete_event_fixed_param, wmi_sta_smps_force_mode_complete_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)
 WMITLV_CREATE_PARAM_STRUC(WMI_STA_SMPS_FORCE_MODE_COMPLETE_EVENTID);
 
+/* bpf offload capability info event */
+#define WMITLV_TABLE_WMI_BPF_CAPABILIY_INFO_EVENTID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_capability_info_evt_fixed_param,  wmi_bpf_capability_info_evt_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_CAPABILIY_INFO_EVENTID);
+
+/* bpf offload vdev status info event */
+#define WMITLV_TABLE_WMI_BPF_VDEV_STATS_INFO_EVENTID(id, op, buf, len) \
+	WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_bpf_vdev_stats_info_evt_fixed_param, wmi_bpf_vdev_stats_info_evt_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_BPF_VDEV_STATS_INFO_EVENTID);
+
 #ifdef __cplusplus
 }
 #endif

+ 58 - 0
target/inc/wmi_unified.h

@@ -231,6 +231,7 @@ typedef enum {
 	WMI_GRP_PKT_FILTER,
 	WMI_GRP_MAWC,
 	WMI_GRP_PMF_OFFLOAD,
+	WMI_GRP_BPF_OFFLOAD, /* Berkeley Packet Filter */
 } WMI_GRP_ID;
 
 #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
@@ -869,6 +870,11 @@ typedef enum {
 	WMI_PMF_OFFLOAD_SET_SA_QUERY_CMDID =
 		WMI_CMD_GRP_START_ID(WMI_GRP_PMF_OFFLOAD),
 
+	/** WMI commands related to pkt filter (BPF) offload */
+	WMI_BPF_GET_CAPABILITY_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_BPF_OFFLOAD),
+	WMI_BPF_GET_VDEV_STATS_CMDID,
+	WMI_BPF_SET_VDEV_INSTRUCTIONS_CMDID,
+	WMI_BPF_DEL_VDEV_INSTRUCTIONS_CMDID,
 } WMI_CMD_ID;
 
 typedef enum {
@@ -1201,6 +1207,10 @@ typedef enum {
 	/** Motion Aided WiFi Connectivity (MAWC) events */
 	WMI_MAWC_ENABLE_SENSOR_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MAWC),
 
+	/** pkt filter (BPF) offload relevant events */
+	WMI_BPF_CAPABILIY_INFO_EVENTID =
+				WMI_EVT_GRP_START_ID(WMI_GRP_BPF_OFFLOAD),
+	WMI_BPF_VDEV_STATS_INFO_EVENTID,
 } WMI_EVT_ID;
 
 /* defines for OEM message sub-types */
@@ -6968,6 +6978,7 @@ typedef enum wake_reason_e {
 	WOW_REASON_REASSOC_REQ_RECV,
 	WOW_REASON_REASSOC_RES_RECV,
 	WOW_REASON_ACTION_FRAME_RECV,
+	WOW_REASON_BPF_ALLOW,
 	WOW_REASON_DEBUG_TEST = 0xFF,
 } WOW_WAKE_REASON_TYPE;
 
@@ -12519,6 +12530,53 @@ typedef struct {
 	 */
 } wmi_scpc_event_fixed_param;
 
+/* bpf interface structure */
+typedef struct wmi_bpf_get_capability_cmd_s {
+	A_UINT32 tlv_header;
+	A_UINT32 reserved;  /* reserved for future use - must be filled with 0x0 */
+} wmi_bpf_get_capability_cmd_fixed_param;
+
+typedef struct wmi_bpf_capability_info_evt_s {
+	A_UINT32 tlv_header;
+	A_UINT32 bpf_version; /* fw's implement version */
+	A_UINT32 max_bpf_filters; /* max filters that fw supports */
+	A_UINT32 max_bytes_for_bpf_inst; /* the maximum bytes that can be used as bpf instructions */
+} wmi_bpf_capability_info_evt_fixed_param;
+
+/* bit 0 of flags: report counters */
+#define WMI_BPF_GET_VDEV_STATS_FLAG_CTR_S  0
+#define WMI_BPF_GET_VDEV_STATS_FLAG_CTR_M  0x1
+typedef struct wmi_bpf_get_vdev_stats_cmd_s {
+	A_UINT32 tlv_header;
+	A_UINT32 flags;
+	A_UINT32 vdev_id;
+} wmi_bpf_get_vdev_stats_cmd_fixed_param;
+
+typedef struct wmi_bpf_vdev_stats_info_evt_s {
+	A_UINT32 tlv_header;
+	A_UINT32 vdev_id;
+	A_UINT32 num_filters;
+	A_UINT32 num_checked_pkts;
+	A_UINT32 num_dropped_pkts;
+	} wmi_bpf_vdev_stats_info_evt_fixed_param;
+
+typedef struct wmi_bpf_set_vdev_instructions_cmd_s {
+	A_UINT32 tlv_header;
+	A_UINT32 vdev_id;
+	A_UINT32 filter_id;
+	A_UINT32 bpf_version;  /* host bpf version */
+	A_UINT32 total_length;
+	A_UINT32 current_offset;
+	A_UINT32 current_length;
+} wmi_bpf_set_vdev_instructions_cmd_fixed_param;
+
+#define BPF_FILTER_ID_ALL  0xFFFFFFFF
+typedef struct wmi_bpf_del_vdev_instructions_cmd_s {
+	A_UINT32 tlv_header;
+	A_UINT32 vdev_id;
+	A_UINT32 filter_id;  /* BPF_FILTER_ID_ALL means delete all */
+} wmi_bpf_del_vdev_instructions_cmd_fixed_param;
+
 /* ADD NEW DEFS HERE */
 
 /*****************************************************************************

+ 1 - 1
target/inc/wmi_version.h

@@ -36,7 +36,7 @@
 #define __WMI_VER_MINOR_    0
 /** WMI revision number has to be incremented when there is a
  *  change that may or may not break compatibility */
-#define __WMI_REVISION_ 189
+#define __WMI_REVISION_ 190
 
 /** The Version Namespace should not be normally changed. Only
  *  host and firmware of the same WMI namespace will work