1  /*
2   * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. 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: contains interface prototypes for spatial_reuse api
19   */
20  
21  #ifndef _SPATIAL_REUSE_API_H_
22  #define _SPATIAL_REUSE_API_H_
23  
24  #include <qdf_types.h>
25  #include <qdf_trace.h>
26  #include <wlan_objmgr_vdev_obj.h>
27  
28  /**
29   * enum sr_osif_operation - Spatial Reuse operation
30   * @SR_OPERATION_SUSPEND: Spatial Reuse suspend indication
31   * @SR_OPERATION_RESUME: Spatial Reuse resume indication
32   * @SR_OPERATION_UPDATE_PARAMS: Spatial Reuse parameters are updated
33   */
34  enum sr_osif_operation {
35  	SR_OPERATION_SUSPEND = 0,
36  	SR_OPERATION_RESUME = 1,
37  	SR_OPERATION_UPDATE_PARAMS = 2,
38  };
39  
40  /**
41   * enum sr_osif_reason_code - Spatial Reuse reason codes
42   * @SR_REASON_CODE_ROAMING: Spatial Reuse reason code is Roaming will be
43   *			     set when SR is suspended / resumed due to roaming
44   * @SR_REASON_CODE_CONCURRENCY: Spatial Reuse reason code is concurrency
45   *				 will be set when SR is suspended / resumed
46   *				 due to concurrency
47   * @SR_REASON_CODE_BCN_IE_CHANGE: Spatial Reuse reason code is SRP IE change
48   *				  in the beacon/probe rsp of the associated AP
49   */
50  enum sr_osif_reason_code {
51  	SR_REASON_CODE_ROAMING = 0,
52  	SR_REASON_CODE_CONCURRENCY = 1,
53  	SR_REASON_CODE_BCN_IE_CHANGE = 2,
54  };
55  
56  /**
57   * typedef sr_osif_event_cb() - CB to deliver SR events
58   * @vdev: objmgr manager vdev
59   * @sr_osif_oper: SR Operation like suspend / resume
60   * @sr_osif_rc: Event reason code
61   *
62   * Return: void
63   */
64  typedef void (*sr_osif_event_cb)(struct wlan_objmgr_vdev *vdev,
65  				 enum sr_osif_operation sr_osif_oper,
66  				 enum sr_osif_reason_code sr_osif_rc);
67  
68  #ifdef WLAN_FEATURE_SR
69  /**
70   * wlan_spatial_reuse_config_set() - Set spatial reuse config
71   * @vdev: objmgr manager vdev
72   * @sr_ctrl: spatial reuse control
73   * @non_srg_max_pd_offset: non-srg max pd offset
74   *
75   * Return: QDF_STATUS
76   */
77  QDF_STATUS wlan_spatial_reuse_config_set(struct wlan_objmgr_vdev *vdev,
78  					 uint8_t sr_ctrl,
79  					 uint8_t non_srg_max_pd_offset);
80  
81  /**
82   * wlan_sr_register_callback() - registers SR osif events
83   * @psoc: pointer to psoc
84   * @cb: Callback to be registered
85   *
86   * Return: void
87   */
88  void wlan_sr_register_callback(struct wlan_objmgr_psoc *psoc,
89  			       sr_osif_event_cb cb);
90  
91  /**
92   * wlan_spatial_reuse_osif_event() - Send SR asynchronous events
93   * @vdev: objmgr manager vdev
94   * @sr_osif_oper: SR Operation like suspend / resume
95   * @sr_osif_rc: Event reason code
96   *
97   * Return: void
98   */
99  void wlan_spatial_reuse_osif_event(struct wlan_objmgr_vdev *vdev,
100  				   enum sr_osif_operation sr_osif_oper,
101  				   enum sr_osif_reason_code sr_osif_rc);
102  #else
103  static inline
wlan_spatial_reuse_config_set(struct wlan_objmgr_vdev * vdev,uint8_t sr_ctrl,uint8_t non_srg_max_pd_offset)104  QDF_STATUS wlan_spatial_reuse_config_set(struct wlan_objmgr_vdev *vdev,
105  					 uint8_t sr_ctrl,
106  					 uint8_t non_srg_max_pd_offset)
107  {
108  	return QDF_STATUS_SUCCESS;
109  }
110  
111  static inline
wlan_spatial_reuse_osif_event(struct wlan_objmgr_vdev * vdev,enum sr_osif_operation sr_osif_oper,enum sr_osif_reason_code sr_osif_rc)112  void wlan_spatial_reuse_osif_event(struct wlan_objmgr_vdev *vdev,
113  				   enum sr_osif_operation sr_osif_oper,
114  				   enum sr_osif_reason_code sr_osif_rc)
115  {
116  }
117  #endif
118  
119  /**
120   * wlan_spatial_reuse_he_siga_val15_allowed_set() - Set spatial reuse config
121   *						    he_siga_val15_allowed
122   * @vdev: objmgr manager vdev
123   * @he_siga_va15_allowed: enable/disable he_siga_val15_allowed
124   *
125   * Return: QDF_STATUS
126   */
127  QDF_STATUS wlan_spatial_reuse_he_siga_val15_allowed_set(
128  					struct wlan_objmgr_vdev *vdev,
129  					bool he_siga_va15_allowed);
130  
131  /**
132   * wlan_sr_setup_req() - Enable SR with provided pd threshold
133   * @vdev: objmgr vdev
134   * @pdev: objmgr pdev
135   * @is_sr_enable: sr enable/disable
136   * @srg_pd_threshold: SRG pd threshold
137   * @non_srg_pd_threshold: NON SRG PD threshold
138   *
139   * Return: QDF_STATUS
140   */
141  QDF_STATUS
142  wlan_sr_setup_req(struct wlan_objmgr_vdev *vdev,
143  		  struct wlan_objmgr_pdev *pdev, bool is_sr_enable,
144  		  int32_t srg_pd_threshold, int32_t non_srg_pd_threshold);
145  #endif
146