// SPDX-License-Identifier: GPL-2.0 /* * Functions corresponding to sure start object type attributes under * BIOS for use with hp-bioscfg driver * * Copyright (c) 2022 HP Development Company, L.P.
*/
#include"bioscfg.h" #include <linux/types.h>
/* Maximum number of log entries supported when log entry size is 16 * bytes. This value is calculated by dividing 4096 (page size) by * log entry size.
*/ #define LOG_MAX_ENTRIES 254
/* * Current Log entry size. This value size will change in the * future. The driver reads a total of 128 bytes for each log entry * provided by BIOS but only the first 16 bytes are used/read.
*/ #define LOG_ENTRY_SIZE 16
/* * audit_log_entry_count_show - Reports the number of * existing audit log entries available * to be read
*/ static ssize_t audit_log_entry_count_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{ int ret;
u32 count = 0;
ret = hp_wmi_perform_query(HPWMI_SURESTART_GET_LOG_COUNT,
HPWMI_SURESTART,
&count, 1, sizeof(count));
/* * audit_log_entries_show() - Return all entries found in log file
*/ static ssize_t audit_log_entries_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{ int ret; int i;
u32 count = 0;
u8 audit_log_buffer[128];
// Get the number of event logs
ret = hp_wmi_perform_query(HPWMI_SURESTART_GET_LOG_COUNT,
HPWMI_SURESTART,
&count, 1, sizeof(count));
if (ret < 0) return ret;
/* * The show() api will not work if the audit logs ever go * beyond 4KB
*/ if (count * LOG_ENTRY_SIZE > PAGE_SIZE) return -EIO;
/* * We are guaranteed the buffer is 4KB so today all the event * logs will fit
*/ for (i = 0; i < count; i++) {
audit_log_buffer[0] = i + 1;
/* * read audit log entry at a time. 'buf' input value * provides the audit log entry to be read. On * input, Byte 0 = Audit Log entry number from * beginning (1..254) * Entry number 1 is the newest entry whereas the * highest entry number (number of entries) is the * oldest entry.
*/
ret = hp_wmi_perform_query(HPWMI_SURESTART_GET_LOG,
HPWMI_SURESTART,
audit_log_buffer, 1, 128);
if (ret < 0 || (LOG_ENTRY_SIZE * i) > PAGE_SIZE) { /* * Encountered a failure while reading * individual logs. Only a partial list of * audit log will be returned.
*/ break;
} else {
memcpy(buf, audit_log_buffer, LOG_ENTRY_SIZE);
buf += LOG_ENTRY_SIZE;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.