xref: /wlan-driver/qcacld-3.0/core/hdd/inc/wlan_hdd_apf.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 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 /*
21  * This file was originally distributed by Qualcomm Atheros, Inc.
22  * under proprietary terms before Copyright ownership was assigned
23  * to the Linux Foundation.
24  */
25 
26 /**
27  * DOC: wlan_hdd_apf.h
28  *
29  * Android Packet Filter related API's and definitions
30  */
31 
32 #ifndef __WLAN_HDD_APF_H
33 #define __WLAN_HDD_APF_H
34 
35 #ifdef FEATURE_WLAN_APF
36 
37 #include <net/cfg80211.h>
38 #include "sir_api.h"
39 #include "wlan_hdd_main.h"
40 #include "wmi_unified_param.h"
41 #include "qca_vendor.h"
42 
43 #define APF_CONTEXT_MAGIC 0x4575354
44 
45 #define MAX_APF_MEMORY_LEN	4096
46 
47 /* APF commands wait times in msec */
48 #define WLAN_WAIT_TIME_APF_READ_MEM     10000
49 
50 /* QCA_NL80211_VENDOR_PACKET_FILTER policy */
51 extern const struct nla_policy wlan_hdd_apf_offload_policy[
52 			QCA_WLAN_VENDOR_ATTR_PACKET_FILTER_MAX + 1];
53 
54 #define FEATURE_APF_OFFLOAD_VENDOR_COMMANDS \
55 	{ \
56 		.info.vendor_id = QCA_NL80211_VENDOR_ID, \
57 		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_PACKET_FILTER, \
58 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV | \
59 			WIPHY_VENDOR_CMD_NEED_NETDEV | \
60 			WIPHY_VENDOR_CMD_NEED_RUNNING, \
61 		.doit = wlan_hdd_cfg80211_apf_offload, \
62 		vendor_command_policy(wlan_hdd_apf_offload_policy, \
63 				      QCA_WLAN_VENDOR_ATTR_PACKET_FILTER_MAX) \
64 	},
65 
66 /**
67  * wlan_hdd_cfg80211_apf_offload() - SSR Wrapper to APF Offload
68  * @wiphy:    wiphy structure pointer
69  * @wdev:     Wireless device structure pointer
70  * @data:     Pointer to the data received
71  * @data_len: Length of @data
72  *
73  * Return: 0 on success; errno on failure
74  */
75 
76 int wlan_hdd_cfg80211_apf_offload(struct wiphy *wiphy,
77 				  struct wireless_dev *wdev,
78 				  const void *data, int data_len);
79 
80 /**
81  * hdd_apf_context_init - APF Context initialization operations
82  * @adapter: hdd adapter
83  *
84  * Return: None
85  */
86 void hdd_apf_context_init(struct hdd_adapter *adapter);
87 
88 /**
89  * hdd_apf_context_destroy - APF Context de-init operations
90  * @adapter: hdd adapter
91  *
92  * Return: None
93  */
94 void hdd_apf_context_destroy(struct hdd_adapter *adapter);
95 
96 /**
97  * hdd_get_apf_capabilities_cb() - Callback function to get APF capabilities
98  * @hdd_context: pointer to the hdd context
99  * @data: pointer to the data received
100  *
101  * This function receives the response/data from the lower layer and
102  * checks to see if the thread is still waiting then post the results to
103  * upper layer, if the request has timed out then ignore.
104  *
105  * Return: None
106  */
107 void hdd_get_apf_capabilities_cb(void *hdd_context,
108 				 struct sir_apf_get_offload *data);
109 #else /* FEATURE_WLAN_APF */
110 
111 #define FEATURE_APF_OFFLOAD_VENDOR_COMMANDS
112 
hdd_apf_context_init(struct hdd_adapter * adapter)113 static inline void hdd_apf_context_init(struct hdd_adapter *adapter)
114 {
115 }
116 
hdd_apf_context_destroy(struct hdd_adapter * adapter)117 static inline void hdd_apf_context_destroy(struct hdd_adapter *adapter)
118 {
119 }
120 
121 #endif /* FEATURE_WLAN_APF */
122 
123 #endif /* WLAN_HDD_APF_H */
124