xref: /wlan-driver/qcacld-3.0/components/pmo/dispatcher/inc/wlan_pmo_pkt_filter_public_struct.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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