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