1 /* 2 * Copyright (c) 2017 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 /** 20 * DOC: Declare various struct, macros which shall be used in 21 * pmo packet filter feature. 22 * 23 * Note: This file shall not contain public API's prototype/declarations. 24 * 25 */ 26 27 #ifndef _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ 28 #define _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ 29 30 #include "qdf_types.h" 31 32 #define PMO_MAX_FILTER_TEST_DATA_LEN 8 33 #define PMO_MAX_NUM_TESTS_PER_FILTER 10 34 35 /** 36 * enum pmo_rcv_pkt_fltr_type: Receive Filter Parameters 37 * @PMO_RCV_FILTER_TYPE_INVALID: invalied filter type 38 * @PMO_RCV_FILTER_TYPE_FILTER_PKT: packet filter 39 * @PMO_RCV_FILTER_TYPE_BUFFER_PKT: buffer packet 40 * @PMO_RCV_FILTER_TYPE_MAX_ENUM_SIZE: max filter 41 */ 42 enum pmo_rcv_pkt_fltr_type { 43 PMO_RCV_FILTER_TYPE_INVALID, 44 PMO_RCV_FILTER_TYPE_FILTER_PKT, 45 PMO_RCV_FILTER_TYPE_BUFFER_PKT, 46 PMO_RCV_FILTER_TYPE_MAX_ENUM_SIZE 47 }; 48 49 /** 50 * enum pmo_rcv_pkt_fltr_flag_type: Receive Filter flags 51 * @PMO_FILTER_CMP_TYPE_INVALID: invalied flag 52 * @PMO_FILTER_CMP_TYPE_EQUAL: equal 53 * @PMO_FILTER_CMP_TYPE_MASK_EQUAL: mask 54 * @PMO_FILTER_CMP_TYPE_NOT_EQUAL: not equal 55 * @PMO_FILTER_CMP_TYPE_MASK_NOT_EQUAL: mask not equal 56 * @PMO_FILTER_CMP_TYPE_MAX: max size of flag 57 */ 58 enum pmo_rcv_pkt_fltr_flag_type { 59 PMO_FILTER_CMP_TYPE_INVALID, 60 PMO_FILTER_CMP_TYPE_EQUAL, 61 PMO_FILTER_CMP_TYPE_MASK_EQUAL, 62 PMO_FILTER_CMP_TYPE_NOT_EQUAL, 63 PMO_FILTER_CMP_TYPE_MASK_NOT_EQUAL, 64 PMO_FILTER_CMP_TYPE_MAX 65 }; 66 67 /** 68 * enum pmo_rcv_pkt_fltr_protocol_params: Receive Filter protocol parameters 69 * @PMO_FILTER_HDR_TYPE_INVALID: invalied type 70 * @PMO_FILTER_HDR_TYPE_MAC: mac protocol 71 * @PMO_FILTER_HDR_TYPE_ARP: arp protocol 72 * @PMO_FILTER_HDR_TYPE_IPV4: ipv4 protocol 73 * @PMO_FILTER_HDR_TYPE_IPV6: ipv6 protocol 74 * @PMO_FILTER_HDR_TYPE_UDP: udp protocol 75 * @PMO_FILTER_HDR_TYPE_MAX: max of type of protocol 76 */ 77 enum pmo_rcv_pkt_fltr_protocol_params { 78 PMO_FILTER_HDR_TYPE_INVALID, 79 PMO_FILTER_HDR_TYPE_MAC, 80 PMO_FILTER_HDR_TYPE_ARP, 81 PMO_FILTER_HDR_TYPE_IPV4, 82 PMO_FILTER_HDR_TYPE_IPV6, 83 PMO_FILTER_HDR_TYPE_UDP, 84 PMO_FILTER_HDR_TYPE_MAX 85 }; 86 87 /** 88 * struct pmo_rcv_pkt_fltr_field_params - pmo packet filter field parameters 89 * @protocol_layer: Protocol layer 90 * @compare_flag: Comparison flag 91 * @data_length: Length of the data to compare 92 * @data_offset: from start of the respective frame header 93 * @reserved: Reserved field 94 * @compare_data: Data to compare 95 * @data_mask: Mask to be applied on the received packet data before compare 96 */ 97 struct pmo_rcv_pkt_fltr_field_params { 98 enum pmo_rcv_pkt_fltr_protocol_params protocol_layer; 99 enum pmo_rcv_pkt_fltr_flag_type compare_flag; 100 uint16_t data_length; 101 uint8_t data_offset; 102 uint8_t reserved; 103 uint8_t compare_data[PMO_MAX_FILTER_TEST_DATA_LEN]; 104 uint8_t data_mask[PMO_MAX_FILTER_TEST_DATA_LEN]; 105 }; 106 107 /** 108 * struct pmo_rcv_pkt_fltr_cfg - pmo packet filter config 109 * @filter_id: filter id 110 * @filter_type: filter type 111 * @num_params: number of parameters 112 * @coalesce_time: time 113 * @self_macaddr: mac address 114 * @bssid: Bssid of the connected AP 115 * @params_data: data 116 */ 117 struct pmo_rcv_pkt_fltr_cfg { 118 uint8_t filter_id; 119 enum pmo_rcv_pkt_fltr_type filter_type; 120 uint32_t num_params; 121 uint32_t coalesce_time; 122 struct qdf_mac_addr self_macaddr; 123 struct qdf_mac_addr bssid; 124 struct pmo_rcv_pkt_fltr_field_params 125 params_data[PMO_MAX_NUM_TESTS_PER_FILTER]; 126 }; 127 128 /** 129 * struct pmo_rcv_pkt_fltr_clear_param - pmo receive Filter Clear Parameters 130 * @status: only valid for response message 131 * @filter_id: 132 * @self_macaddr: 133 * @bssid: peer ap address 134 */ 135 struct pmo_rcv_pkt_fltr_clear_param { 136 uint32_t status; 137 uint8_t filter_id; 138 struct qdf_mac_addr self_macaddr; 139 struct qdf_mac_addr bssid; 140 }; 141 142 #endif /* end of _WLAN_PMO_PKT_FILTER_PUBLIC_STRUCT_H_ */ 143