1 /*
2  * Copyright (c) 2020, The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /**
18  * DOC: Declare private API which shall be used internally only
19  * in ftm_time_sync component. This file shall include prototypes of
20  * various notification handlers and logging functions.
21  *
22  * Note: This API should be never accessed out of ftm_time_sync component.
23  */
24 
25 #ifndef _FTM_TIME_SYNC_MAIN_H_
26 #define _FTM_TIME_SYNC_MAIN_H_
27 
28 #include <qdf_types.h>
29 #include <qdf_delayed_work.h>
30 #include "ftm_time_sync_priv.h"
31 #include "ftm_time_sync_objmgr.h"
32 
33 #define ftm_time_sync_log(level, args...) \
34 	QDF_TRACE(QDF_MODULE_ID_FTM_TIME_SYNC, level, ## args)
35 
36 #define ftm_time_sync_logfl(level, format, args...) \
37 	ftm_time_sync_log(level, FL(format), ## args)
38 
39 #define ftm_time_sync_fatal(format, args...) \
40 		ftm_time_sync_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args)
41 #define ftm_time_sync_err(format, args...) \
42 		ftm_time_sync_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args)
43 #define ftm_time_sync_warn(format, args...) \
44 		ftm_time_sync_logfl(QDF_TRACE_LEVEL_WARN, format, ## args)
45 #define ftm_time_sync_info(format, args...) \
46 		ftm_time_sync_logfl(QDF_TRACE_LEVEL_INFO, format, ## args)
47 #define ftm_time_sync_debug(format, args...) \
48 		ftm_time_sync_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args)
49 
50 #define FTM_TIME_SYNC_ENTER() ftm_time_sync_debug("enter")
51 #define FTM_TIME_SYNC_EXIT() ftm_time_sync_debug("exit")
52 
53 /**
54  * ftm_time_sync_vdev_create_notification() - Handler for vdev create notify.
55  * @vdev: vdev which is going to be created by objmgr
56  * @arg: argument for notification handler
57  *
58  * Allocate and attach vdev private object.
59  *
60  * Return: QDF_STATUS
61  */
62 QDF_STATUS ftm_time_sync_vdev_create_notification(struct wlan_objmgr_vdev *vdev,
63 						  void *arg);
64 
65 /**
66  * ftm_time_sync_vdev_destroy_notification() - Handler for vdev destroy notify.
67  * @vdev: vdev which is going to be destroyed by objmgr
68  * @arg: argument for notification handler.
69  *
70  * Deallocate and detach vdev private object.
71  *
72  * Return: QDF_STATUS
73  */
74 QDF_STATUS
75 ftm_time_sync_vdev_destroy_notification(struct wlan_objmgr_vdev *vdev,
76 					void *arg);
77 
78 /**
79  * ftm_time_sync_psoc_create_notification() - Handler for psoc create notify.
80  * @psoc: psoc which is going to be created by objmgr
81  * @arg: argument for notification handler.
82  *
83  * Allocate and attach psoc private object.
84  *
85  * Return: QDF_STATUS
86  */
87 QDF_STATUS
88 ftm_time_sync_psoc_create_notification(struct wlan_objmgr_psoc *psoc,
89 				       void *arg);
90 
91 /**
92  * ftm_time_sync_psoc_destroy_notification() -  Handler for psoc destroy notify.
93  * @psoc: psoc which is going to be destroyed by objmgr
94  * @arg: argument for notification handler.
95  *
96  * Deallocate and detach psoc private object.
97  *
98  * Return: QDF_STATUS
99  */
100 QDF_STATUS
101 ftm_time_sync_psoc_destroy_notification(struct wlan_objmgr_psoc *psoc,
102 					void *arg);
103 
104 /**
105  * ftm_time_sync_is_enable() - Function to advertise feature is enabled or not
106  * @psoc: psoc context
107  *
108  * This function advertises whether the feature is enabled or not.
109  *
110  * Return: true if enable, false if disable
111  */
112 bool ftm_time_sync_is_enable(struct wlan_objmgr_psoc *psoc);
113 
114 /**
115  * ftm_time_sync_set_enable() - Handler to enable the feature
116  * @psoc: psoc context
117  * @value: value to be set
118  *
119  * This function is used to enable the ftm time sync feature.
120  * The feature is enabled iff both ini and wmi service is advertised by
121  * firmware.
122  *
123  * Return: None
124  */
125 void ftm_time_sync_set_enable(struct wlan_objmgr_psoc *psoc, bool value);
126 
127 /**
128  * ftm_time_sync_get_mode() - API to get the ftm time sync mode
129  * @psoc: psoc context
130  *
131  * Return: enum ftm_time_sync_mode
132  */
133 enum ftm_time_sync_mode ftm_time_sync_get_mode(struct wlan_objmgr_psoc *psoc);
134 
135 /**
136  * ftm_time_sync_get_role() -  API to get the ftm time sync role
137  * @psoc: psoc context
138  *
139  * Return: enum ftm_time_sync_role
140  */
141 enum ftm_time_sync_role ftm_time_sync_get_role(struct wlan_objmgr_psoc *psoc);
142 
143 /**
144  * ftm_time_sync_send_trigger() - Handler for sending trigger cmd to FW
145  * @vdev: vdev for which FTM time_sync trigger cmd to be send
146  *
147  * This function sends the ftm trigger cmd to target.
148  *
149  * Return: QDF_STATUS
150  */
151 QDF_STATUS ftm_time_sync_send_trigger(struct wlan_objmgr_vdev *vdev);
152 
153 /**
154  * ftm_time_sync_stop() - Handler for stopping the FTM time sync
155  * @vdev: vdev for which FTM time_sync feature to be stopped
156  *
157  * This function stops the ftm time sync functionality.
158  *
159  * Return: QDF_STATUS
160  */
161 QDF_STATUS ftm_time_sync_stop(struct wlan_objmgr_vdev *vdev);
162 
163 /**
164  * ftm_time_sync_show() - Handler to print the offset derived
165  * @vdev: vdev for which offset is to be shown
166  * @buf: buffer in which the values to be printed
167  *
168  * Return: the number of bytes written in buf
169  */
170 ssize_t ftm_time_sync_show(struct wlan_objmgr_vdev *vdev, char *buf);
171 
172 /**
173  * ftm_time_sync_update_bssid() - Update the bssid info
174  * @vdev: vdev context
175  * @bssid: bssid of connected AP
176  *
177  * Return: None
178  */
179 void ftm_time_sync_update_bssid(struct wlan_objmgr_vdev *vdev,
180 				struct qdf_mac_addr bssid);
181 
182 #endif /* end of _FTM_TIME_SYNC_MAIN_H_ */
183