1 /*
2 * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 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 /**
21 * DOC: Thin filesystem API abstractions
22 */
23
24 #ifndef __QDF_FILE_H
25 #define __QDF_FILE_H
26
27 #include "qdf_status.h"
28
29 /**
30 * qdf_file_read() - read the entire contents of a file
31 * @path: the full path of the file to read
32 * @out_buf: double pointer for referring to the file contents buffer
33 *
34 * This API allocates a new, null-terminated buffer containing the contents of
35 * the file at @path. On success, @out_buf points to this new buffer, otherwise
36 * @out_buf is set to NULL.
37 *
38 * Consumers must free the allocated buffer by calling qdf_file_buf_free().
39 *
40 * Return: QDF_STATUS
41 */
42 QDF_STATUS qdf_file_read(const char *path, char **out_buf);
43
44 /**
45 * qdf_file_read_bytes() - read the entire contents of a file and return the
46 * size read along with the content
47 * @path: the full path of the file to read
48 * @out_buf: double pointer for referring to the file contents buffer
49 * @out_buff_size: size of the contents read
50 *
51 * This API allocates a new, null-terminated buffer containing the contents of
52 * the file at @path. On success, @out_buf points to this new buffer, otherwise
53 * @out_buf is set to NULL.
54 *
55 * Consumers must free the allocated buffer by calling qdf_file_buf_free().
56 *
57 * Return: QDF_STATUS
58 */
59 QDF_STATUS qdf_file_read_bytes(const char *path, char **out_buf,
60 unsigned int *out_buff_size);
61
62 /**
63 * qdf_file_buf_free() - free a previously allocated file buffer
64 * @file_buf: pointer to the file buffer to free
65 *
66 * This API is used in conjunction with qdf_file_read() and
67 * qdf_file_read_bytes().
68 *
69 * Return: None
70 */
71 void qdf_file_buf_free(char *file_buf);
72
73 #ifdef QCA_WIFI_MODULE_PARAMS_FROM_INI
74 /**
75 * qdf_module_param_file_read() - read the entire contents of a file
76 * @path: the full path of the file to read
77 * @out_buf: double pointer for referring to the file contents buffer
78 *
79 * This API allocates a new buffer before qdf_mem_init() is being called.
80 * Thus, this API helps to allocate memory which is being used before qdf
81 * memory tracking framework is available. Buffer is null-terminated,
82 * containing the contents of the file at @path. On success, @out_buf
83 * points to this new buffer, otherwise @out_buf is set to NULL.
84 *
85 * Consumers must free the allocated buffer by calling
86 * qdf_module_param_file_free().
87 *
88 * Return: QDF_STATUS
89 */
90
91 QDF_STATUS qdf_module_param_file_read(const char *path, char **out_buf);
92
93 /**
94 * qdf_module_param_file_free() - free a previously allocated file buffer
95 * @file_buf: pointer to the file buffer to free. The buffer allocated in
96 * qdf_module_param_file_read is not tracked by qdf framework.
97 *
98 * This API is used in conjunction with qdf_module_param_file_read().
99 *
100 * Return: None
101 */
102 void qdf_module_param_file_free(char *file_buf);
103 #else
104 static inline
qdf_module_param_file_read(const char * path,char ** out_buf)105 QDF_STATUS qdf_module_param_file_read(const char *path, char **out_buf)
106 {
107 return QDF_STATUS_E_INVAL;
108 }
109
110 static inline
qdf_module_param_file_free(char * file_buf)111 void qdf_module_param_file_free(char *file_buf)
112 {
113 }
114 #endif
115 #endif /* __QDF_FILE_H */
116
117