From 130eb5797f4fdb7d7be322f3a21d4e6326a1b612 Mon Sep 17 00:00:00 2001 From: Manikandan Mohan Date: Wed, 23 Dec 2015 13:53:34 -0800 Subject: [PATCH] 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 --- core/wmi/wmi_unified.c | 5 ++++ target/inc/wmi_services.h | 1 + target/inc/wmi_tlv_defs.h | 47 +++++++++++++++++++++++++++++-- target/inc/wmi_unified.h | 58 +++++++++++++++++++++++++++++++++++++++ target/inc/wmi_version.h | 2 +- 5 files changed, 110 insertions(+), 3 deletions(-) diff --git a/core/wmi/wmi_unified.c b/core/wmi/wmi_unified.c index d1980c73f5..5048b457ae 100644 --- a/core/wmi/wmi_unified.c +++ b/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"; } diff --git a/target/inc/wmi_services.h b/target/inc/wmi_services.h index 898bdaf7d3..c654dffcf9 100644 --- a/target/inc/wmi_services.h +++ b/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; diff --git a/target/inc/wmi_tlv_defs.h b/target/inc/wmi_tlv_defs.h index 3172cc0eb9..dcda8409f3 100644 --- a/target/inc/wmi_tlv_defs.h +++ b/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 diff --git a/target/inc/wmi_unified.h b/target/inc/wmi_unified.h index 59a1d798cf..80fdf0538b 100644 --- a/target/inc/wmi_unified.h +++ b/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 */ /***************************************************************************** diff --git a/target/inc/wmi_version.h b/target/inc/wmi_version.h index f063ff5a1f..c36a6d2e16 100644 --- a/target/inc/wmi_version.h +++ b/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