1 /*
2 * Copyright (c) 2017-2018, 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 #ifndef _WLAN_HDD_SYSFS_H_
21 #define _WLAN_HDD_SYSFS_H_
22
23 /**
24 * struct hdd_sysfs_print_ctx - keeps track of sysfs buffer printing
25 * @buf: pointer to sysfs char buffer
26 * @idx: current position in char buffer
27 * @new_line: if set true, newline will be added at end of each print
28 */
29 struct hdd_sysfs_print_ctx {
30 char *buf;
31 int idx;
32 bool new_line;
33 };
34
35 #ifdef WLAN_SYSFS
36
37 #define MAX_SYSFS_USER_COMMAND_SIZE_LENGTH (32)
38 #define MAX_CMD_INPUT (512)
39
40 /**
41 * hdd_sysfs_validate_and_copy_buf() - validate sysfs input buf and copy into
42 * destination buffer
43 * @dest_buf: pointer to destination buffer where data should be copied
44 * @dest_buf_size: size of destination buffer
45 * @src_buf: pointer to constant sysfs source buffer
46 * @src_buf_size: size of source buffer
47 *
48 * Return: 0 for success and error code for failure
49 */
50 int
51 hdd_sysfs_validate_and_copy_buf(char *dest_buf, size_t dest_buf_size,
52 char const *src_buf, size_t src_buf_size);
53
54 /**
55 * hdd_create_sysfs_files() - create sysfs files
56 * @hdd_ctx: pointer to hdd context
57 *
58 * Return: none
59 */
60 void hdd_create_sysfs_files(struct hdd_context *hdd_ctx);
61
62 /**
63 * hdd_destroy_sysfs_files() - destroy sysfs files
64 *
65 * Return: none
66 */
67 void hdd_destroy_sysfs_files(void);
68
69 /**
70 * hdd_create_adapter_sysfs_files - create adapter sysfs files
71 * @adapter: pointer to adapter
72 *
73 * Return: none
74 */
75 void hdd_create_adapter_sysfs_files(struct hdd_adapter *adapter);
76
77 /**
78 * hdd_destroy_adapter_sysfs_files - destroy adapter sysfs files
79 * @adapter: pointer to adapter
80 *
81 * Return: none
82 */
83 void hdd_destroy_adapter_sysfs_files(struct hdd_adapter *adapter);
84
85 /**
86 * hdd_create_wifi_feature_interface_sysfs_file - Create wifi feature interface
87 * sysfs file
88 *
89 * Return: none
90 */
91 void hdd_create_wifi_feature_interface_sysfs_file(void);
92
93 /**
94 * hdd_destroy_wifi_feature_interface_sysfs_file - Destroy wifi feature
95 * interface sysfs file
96 *
97 * Return: none
98 */
99 void hdd_destroy_wifi_feature_interface_sysfs_file(void);
100
101 /**
102 * hdd_sysfs_create_wifi_root_obj() - create wifi root kobj
103 *
104 * Return: none
105 */
106 void hdd_sysfs_create_wifi_root_obj(void);
107
108 /**
109 * hdd_sysfs_destroy_wifi_root_obj() - Destroy wifi root kobj
110 *
111 * Return: none
112 */
113 void hdd_sysfs_destroy_wifi_root_obj(void);
114
115 /*
116 * hdd_sysfs_print() - print to sysfs char buffer
117 * @ctx: pointer to struct hdd_sysfs_print_ctx
118 * @fmt: string format
119 *
120 * To use this function, create a hdd_sysfs_print_ctx variable, set
121 * idx to 0, set buf to the outbuffer and set new_line to true or false.
122 * Pass this context struct to every function call.
123 * Using this function will then write the data to the outbuffer and
124 * increment the counter.
125 *
126 * The context pointer is void to be compatible with qdf_abstract_print,
127 * to allow for abstract printing.
128 *
129 * Return: Number of characters written
130 */
131 int hdd_sysfs_print(void *ctx, const char *fmt, ...);
132
133 #else
134 static inline int
hdd_sysfs_validate_and_copy_buf(char * dest_buf,size_t dest_buf_size,char const * src_buf,size_t src_buf_size)135 hdd_sysfs_validate_and_copy_buf(char *dest_buf, size_t dest_buf_size,
136 char const *src_buf, size_t src_buf_size)
137 {
138 return -EPERM;
139 }
140
hdd_create_sysfs_files(struct hdd_context * hdd_ctx)141 static inline void hdd_create_sysfs_files(struct hdd_context *hdd_ctx)
142 {
143 }
144
hdd_destroy_sysfs_files(void)145 static inline void hdd_destroy_sysfs_files(void)
146 {
147 }
148
hdd_create_adapter_sysfs_files(struct hdd_adapter * adapter)149 static inline void hdd_create_adapter_sysfs_files(struct hdd_adapter *adapter)
150 {
151 }
152
hdd_destroy_adapter_sysfs_files(struct hdd_adapter * adapter)153 static inline void hdd_destroy_adapter_sysfs_files(struct hdd_adapter *adapter)
154 {
155 }
156
hdd_create_wifi_feature_interface_sysfs_file(void)157 static inline void hdd_create_wifi_feature_interface_sysfs_file(void)
158 {
159 }
160
hdd_destroy_wifi_feature_interface_sysfs_file(void)161 static inline void hdd_destroy_wifi_feature_interface_sysfs_file(void)
162 {
163 }
164
hdd_sysfs_create_wifi_root_obj(void)165 static inline void hdd_sysfs_create_wifi_root_obj(void)
166 {
167 }
168
hdd_sysfs_destroy_wifi_root_obj(void)169 static inline void hdd_sysfs_destroy_wifi_root_obj(void)
170 {
171 }
172
173 #endif /* End of WLAN SYSFS*/
174
175 #endif /* End of _WLAN_HDD_SYSFS_H_ */
176