1  /*
2   * Copyright (c) 2012-2014, 2017-2019, 2020 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  #if !defined(WLAN_HDD_IOCTL_H)
21  #define WLAN_HDD_IOCTL_H
22  
23  #include <linux/netdevice.h>
24  #include <uapi/linux/if.h>
25  #include "wlan_hdd_main.h"
26  
27  extern struct sock *cesium_nl_srv_sock;
28  
29  /**
30   * hdd_ioctl() - ioctl handler (wrapper) for wlan network interfaces
31   * @dev: device upon which the ioctl was received
32   * @ifr: ioctl request information
33   * @cmd: ioctl command
34   *
35   * This function acts as an SSR-protecting wrapper to __hdd_ioctl()
36   * which is where the ioctls are really handled.
37   *
38   * Return: 0 on success, non-zero on error
39   */
40  int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
41  
42  /**
43   * hdd_dev_private_ioctl() - private ioctl handler for wlan network interfaces
44   * @dev: device upon which the ioctl was received
45   * @ifr: ioctl request information
46   * @data: pointer to the raw command data in the ioctl request
47   * @cmd: ioctl command
48   *
49   * For Kernel 5.15+, this function acts as an SSR-protecting wrapper
50   * to __hdd_ioctl(), which is where the ioctls are really handled.
51   *
52   * Return: 0 on success, non-zero on error
53   */
54  int hdd_dev_private_ioctl(struct net_device *dev, struct ifreq *ifr,
55  			  void __user *data, int cmd);
56  
57  /**
58   * wlan_hdd_set_mc_rate() - Function to set MC rate.
59   * @link_info: Link info pointer in HDD adapter
60   * @target_rate: Target rate to set.
61   *
62   * The API sets the value in @target_rate for MC Tx
63   *
64   * Return: Non-zero value on failure.
65   */
66  int wlan_hdd_set_mc_rate(struct wlan_hdd_link_info *link_info, int target_rate);
67  
68  /**
69   * hdd_update_smps_antenna_mode() - set smps and antenna mode
70   * @hdd_ctx: Pointer to hdd context
71   * @mode: antenna mode
72   *
73   * This function will set smps and antenna mode.
74   *
75   * Return: QDF_STATUS
76   */
77  QDF_STATUS hdd_update_smps_antenna_mode(struct hdd_context *hdd_ctx, int mode);
78  
79  /**
80   * hdd_set_antenna_mode() - SET ANTENNA MODE command handler
81   * @link_info: Link info pointer in HDD adapter
82   * @mode: new antenna mode
83   */
84  int hdd_set_antenna_mode(struct wlan_hdd_link_info *link_info, int mode);
85  
86  #ifdef WLAN_FEATURE_ROAM_OFFLOAD
87  /**
88   * hdd_get_roam_scan_ch_cb() - roam scan channel list callback handler
89   * @hdd_handle: Pointer to hdd context
90   * @roam_ch: pointer to roam scan ch event data
91   * @context: cookie
92   *
93   * Callback function to processes roam scan chaanel list event. If
94   * command response field in the response message is set that means
95   * event received as a response of GETROAMSCANCHANNELS command else
96   * event was raised by firmware upon disconnection.
97   *
98   * Return: none
99   */
100  void hdd_get_roam_scan_ch_cb(hdd_handle_t hdd_handle,
101  			     struct roam_scan_ch_resp *roam_ch,
102  			     void *context);
103  
104  /**
105   * hdd_get_roam_scan_freq() - roam scan freq list
106   * @adapter: Pointer to hdd adapter
107   * @mac_handle: pointer to mac_handle
108   * @chan_list: Pointer to hold roam scan freq list
109   * @num_channels: Pointer to hold num of roam scan channels in list
110   *
111   * This function gets roam scan frequencies from FW if FW is capable else
112   * roam scan frequencies are taken from host maintained list.
113   *
114   * Return: 0 on success else error value
115   */
116  int
117  hdd_get_roam_scan_freq(struct hdd_adapter *adapter, mac_handle_t mac_handle,
118  		       uint32_t *chan_list, uint8_t *num_channels);
119  #else
120  static inline void
hdd_get_roam_scan_ch_cb(hdd_handle_t hdd_handle,void * roam_ch,void * context)121  hdd_get_roam_scan_ch_cb(hdd_handle_t hdd_handle,
122  			void *roam_ch,
123  			void *context)
124  {
125  }
126  
127  static inline int
hdd_get_roam_scan_freq(struct hdd_adapter * adapter,mac_handle_t mac_handle,uint32_t * chan_list,uint8_t * num_channels)128  hdd_get_roam_scan_freq(struct hdd_adapter *adapter, mac_handle_t mac_handle,
129  		       uint32_t *chan_list, uint8_t *num_channels)
130  {
131  	return -EFAULT;
132  }
133  #endif
134  
135  /**
136   * hdd_ioctl_log_buffer() - dump log buffer of a type
137   * @log_id: id of what log type to be
138   * @count: number of lines to be copied
139   * @custom_print: custom print function pointer
140   * @print_ctx: print context for custom print function
141   *
142   * If custom print function is NULL, will default to printk
143   *
144   * Return: None
145   */
146  void hdd_ioctl_log_buffer(int log_id, uint32_t count, qdf_abstract_print
147  							     *custom_print,
148  							     void *print_ctx);
149  #ifdef WLAN_DUMP_LOG_BUF_CNT
150  /**
151   * hdd_dump_log_buffer() - dump log buffer history
152   * @print_ctx: print context for custom print function
153   * @custom_print: custom print function pointer
154   *
155   * If custom print function is NULL, will default to printk
156   *
157   * Return: None
158   */
159  void hdd_dump_log_buffer(void *print_ctx, qdf_abstract_print *custom_print);
160  
161  #else
162  static inline
hdd_dump_log_buffer(void * print_ctx,qdf_abstract_print * custom_print)163  void hdd_dump_log_buffer(void *print_ctx, qdf_abstract_print *custom_print)
164  {
165  }
166  
167  #endif
168  #endif /* end #if !defined(WLAN_HDD_IOCTL_H) */
169