1 /*
2  * Copyright (c) 2019-2021 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  * DOC: os_if_fwol.h
22  *
23  * This Header file provide declaration for OS interface API
24  */
25 
26 #ifndef __OS_IF_FWOL_H__
27 #define __OS_IF_FWOL_H__
28 
29 #include "wlan_objmgr_vdev_obj.h"
30 #include "wlan_fwol_public_structs.h"
31 
32 #ifdef WLAN_FEATURE_ELNA
33 /**
34  * os_if_fwol_set_elna_bypass() - Set eLNA bypass
35  * @vdev: Pointer to vdev
36  * @attr: Pointer to struct nlattr
37  *
38  * Return: 0 on success; error number otherwise
39  */
40 int os_if_fwol_set_elna_bypass(struct wlan_objmgr_vdev *vdev,
41 			       const struct nlattr *attr);
42 
43 /**
44  * os_if_fwol_get_elna_bypass() - Get eLNA bypass
45  * @vdev: Pointer to vdev
46  * @skb: sk buffer to hold nl80211 attributes
47  * @attr: Pointer to struct nlattr
48  *
49  * Return: 0 on success; error number otherwise
50  */
51 int os_if_fwol_get_elna_bypass(struct wlan_objmgr_vdev *vdev,
52 			       struct sk_buff *skb,
53 			       const struct nlattr *attr);
54 #else
os_if_fwol_set_elna_bypass(struct wlan_objmgr_vdev * vdev,const struct nlattr * attr)55 static inline int os_if_fwol_set_elna_bypass(struct wlan_objmgr_vdev *vdev,
56 					     const struct nlattr *attr)
57 {
58 	return 0;
59 }
60 
os_if_fwol_get_elna_bypass(struct wlan_objmgr_vdev * vdev,struct sk_buff * skb,const struct nlattr * attr)61 static inline int os_if_fwol_get_elna_bypass(struct wlan_objmgr_vdev *vdev,
62 					     struct sk_buff *skb,
63 					     const struct nlattr *attr)
64 {
65 	return 0;
66 }
67 #endif /* WLAN_FEATURE_ELNA */
68 
69 #ifdef WLAN_SEND_DSCP_UP_MAP_TO_FW
70 /**
71  * os_if_fwol_send_dscp_up_map_to_fw() - Send DSCP to UP map to FW
72  * @vdev: Pointer to vdev
73  * @dscp_to_up_map: Array of DSCP to UP map values
74  *
75  * Return: 0 on success; error number otherwise
76  */
77 int os_if_fwol_send_dscp_up_map_to_fw(struct wlan_objmgr_vdev *vdev,
78 				     uint32_t *dscp_to_up_map);
79 #else
os_if_fwol_send_dscp_up_map_to_fw(struct wlan_objmgr_vdev * vdev,uint32_t * dscp_to_up_map)80 static inline int os_if_fwol_send_dscp_up_map_to_fw(
81 		struct wlan_objmgr_vdev *vdev, uint32_t *dscp_to_up_map)
82 {
83 	return -EOPNOTSUPP;
84 }
85 #endif /* WLAN_SEND_DSCP_UP_MAP_TO_FW */
86 
87 #ifdef WLAN_FEATURE_MDNS_OFFLOAD
88 /**
89  * os_if_fwol_enable_mdns_offload() - Enable mdns offload
90  * @psoc: Pointer to psoc object
91  * @mdns_info: MDNS offload information
92  *
93  * This function will offload mdns response to FW.
94  *
95  * Return: 0 on success; error number otherwise
96  */
97 int os_if_fwol_enable_mdns_offload(struct wlan_objmgr_psoc *psoc,
98 				   struct mdns_config_info *mdns_info);
99 
100 /**
101  * os_if_fwol_disable_mdns_offload() - Disable mdns offload
102  * @psoc: Pointer to psoc
103  *
104  * This function will disable the mdns offload feature.
105  *
106  * Return: 0 on success; error number otherwise
107  */
108 int os_if_fwol_disable_mdns_offload(struct wlan_objmgr_psoc *psoc);
109 #else
os_if_fwol_enable_mdns_offload(struct wlan_objmgr_psoc * psoc)110 static inline int os_if_fwol_enable_mdns_offload(struct wlan_objmgr_psoc *psoc)
111 {
112 	return 0;
113 }
114 
os_if_fwol_disable_mdns_offload(struct wlan_objmgr_psoc * psoc)115 static inline int os_if_fwol_disable_mdns_offload(struct wlan_objmgr_psoc *psoc)
116 {
117 	return 0;
118 }
119 #endif /* WLAN_FEATURE_MDNS_OFFLOAD */
120 
121 #ifdef THERMAL_STATS_SUPPORT
122 int os_if_fwol_get_thermal_stats_req(struct wlan_objmgr_psoc *psoc,
123 				     enum thermal_stats_request_type req,
124 				     void (*callback)(void *context,
125 				     struct thermal_throttle_info *response),
126 				     void *context);
127 #endif /* THERMAL_STATS_SUPPORT */
128 
129 #endif /* __OS_IF_FWOL_H__ */
130