1 /*
2  * Copyright (c) 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 #include <wlan_hdd_includes.h>
18 #include "osif_psoc_sync.h"
19 #include <wlan_hdd_sysfs.h>
20 #include <wlan_hdd_sysfs_log_buffer.h>
21 #include <wlan_hdd_ioctl.h>
22 
hdd_sysfs_log_buffer_show(struct kobject * kobj,struct kobj_attribute * attr,char * buf)23 static ssize_t hdd_sysfs_log_buffer_show(struct kobject *kobj,
24 					 struct kobj_attribute *attr,
25 					 char *buf)
26 {
27 	struct hdd_sysfs_print_ctx ctx;
28 
29 	ctx.buf = buf;
30 	ctx.idx = 0;
31 	ctx.new_line = true;
32 	hdd_dump_log_buffer(&ctx, &hdd_sysfs_print);
33 	return ctx.idx;
34 }
35 
36 static struct kobj_attribute log_buffer_attribute =
37 	__ATTR(log_buffer, 0440, hdd_sysfs_log_buffer_show,
38 	       NULL);
39 
hdd_sysfs_log_buffer_create(struct kobject * driver_kobject)40 int hdd_sysfs_log_buffer_create(struct kobject *driver_kobject)
41 {
42 	int error;
43 
44 	if (!driver_kobject) {
45 		hdd_err("could not get driver kobject!");
46 		return -EINVAL;
47 	}
48 
49 	error = sysfs_create_file(driver_kobject,
50 				  &log_buffer_attribute.attr);
51 	if (error)
52 		hdd_err("could not create log_buffer sysfs file");
53 
54 	return error;
55 }
56 
57 void
hdd_sysfs_log_buffer_destroy(struct kobject * driver_kobject)58 hdd_sysfs_log_buffer_destroy(struct kobject *driver_kobject)
59 {
60 	if (!driver_kobject) {
61 		hdd_err("could not get driver kobject!");
62 		return;
63 	}
64 	sysfs_remove_file(driver_kobject, &log_buffer_attribute.attr);
65 }
66