diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/elog/elog.c | 49 | ||||
-rw-r--r-- | src/include/elog.h | 25 |
2 files changed, 36 insertions, 38 deletions
diff --git a/src/drivers/elog/elog.c b/src/drivers/elog/elog.c index 9024cda89e..0981d777cc 100644 --- a/src/drivers/elog/elog.c +++ b/src/drivers/elog/elog.c @@ -503,7 +503,7 @@ static size_t elog_do_shrink(size_t requested_size, size_t last_write) * Shrink the log, deleting old entries and moving the * remaining ones to the front of the log. */ -static void elog_shrink_by_size(size_t requested_size) +static int elog_shrink_by_size(size_t requested_size) { size_t shrunk_size; size_t captured_last_write; @@ -528,24 +528,20 @@ static void elog_shrink_by_size(size_t requested_size) captured_last_write); /* Add clear event */ - elog_add_event_word(ELOG_TYPE_LOG_CLEAR, shrunk_size); + return elog_add_event_word(ELOG_TYPE_LOG_CLEAR, shrunk_size); } static int elog_prepare_empty(void) { elog_debug("elog_prepare_empty()\n"); - elog_shrink_by_size(elog_events_total_space()); - - if (elog_initialized != ELOG_INITIALIZED) - return -1; - - return 0; + return elog_shrink_by_size(elog_events_total_space()); } -static void elog_shrink(void) +static int elog_shrink(void) { if (elog_should_shrink()) - elog_shrink_by_size(shrink_size); + return elog_shrink_by_size(shrink_size); + return 0; } /* @@ -808,7 +804,7 @@ static void elog_fill_timestamp(struct event_header *event) /* * Add an event to the log */ -void elog_add_event_raw(u8 event_type, void *data, u8 data_size) +int elog_add_event_raw(u8 event_type, void *data, u8 data_size) { struct event_header *event; u8 event_size; @@ -817,14 +813,14 @@ void elog_add_event_raw(u8 event_type, void *data, u8 data_size) /* Make sure ELOG structures are initialized */ if (elog_init() < 0) - return; + return -1; /* Header + Data + Checksum */ event_size = sizeof(*event) + data_size + 1; if (event_size > MAX_EVENT_SIZE) { printk(BIOS_ERR, "ELOG: Event(%X) data size too " "big (%d)\n", event_type, event_size); - return; + return -1; } /* Make sure event data can fit */ @@ -832,7 +828,7 @@ void elog_add_event_raw(u8 event_type, void *data, u8 data_size) if (event == NULL) { printk(BIOS_ERR, "ELOG: Event(%X) does not fit\n", event_type); - return; + return -1; } /* Fill out event data */ @@ -854,37 +850,38 @@ void elog_add_event_raw(u8 event_type, void *data, u8 data_size) event_type, event_size); /* Shrink the log if we are getting too full */ - elog_shrink(); + if (elog_shrink() < 0) + return -1; /* Ensure the updates hit the non-volatile storage. */ - elog_sync_to_nv(); + return elog_sync_to_nv(); } -void elog_add_event(u8 event_type) +int elog_add_event(u8 event_type) { - elog_add_event_raw(event_type, NULL, 0); + return elog_add_event_raw(event_type, NULL, 0); } -void elog_add_event_byte(u8 event_type, u8 data) +int elog_add_event_byte(u8 event_type, u8 data) { - elog_add_event_raw(event_type, &data, sizeof(data)); + return elog_add_event_raw(event_type, &data, sizeof(data)); } -void elog_add_event_word(u8 event_type, u16 data) +int elog_add_event_word(u8 event_type, u16 data) { - elog_add_event_raw(event_type, &data, sizeof(data)); + return elog_add_event_raw(event_type, &data, sizeof(data)); } -void elog_add_event_dword(u8 event_type, u32 data) +int elog_add_event_dword(u8 event_type, u32 data) { - elog_add_event_raw(event_type, &data, sizeof(data)); + return elog_add_event_raw(event_type, &data, sizeof(data)); } -void elog_add_event_wake(u8 source, u32 instance) +int elog_add_event_wake(u8 source, u32 instance) { struct elog_event_data_wake wake = { .source = source, .instance = instance }; - elog_add_event_raw(ELOG_TYPE_WAKE_SOURCE, &wake, sizeof(wake)); + return elog_add_event_raw(ELOG_TYPE_WAKE_SOURCE, &wake, sizeof(wake)); } diff --git a/src/include/elog.h b/src/include/elog.h index 3f949bf384..504c52e9a2 100644 --- a/src/include/elog.h +++ b/src/include/elog.h @@ -146,23 +146,24 @@ struct elog_event_data_me_extended { /* Eventlog backing storage must be initialized before calling elog_init(). */ extern int elog_init(void); extern int elog_clear(void); -extern void elog_add_event_raw(u8 event_type, void *data, u8 data_size); -extern void elog_add_event(u8 event_type); -extern void elog_add_event_byte(u8 event_type, u8 data); -extern void elog_add_event_word(u8 event_type, u16 data); -extern void elog_add_event_dword(u8 event_type, u32 data); -extern void elog_add_event_wake(u8 source, u32 instance); +/* Event addition functions return < 0 on failure and 0 on success. */ +extern int elog_add_event_raw(u8 event_type, void *data, u8 data_size); +extern int elog_add_event(u8 event_type); +extern int elog_add_event_byte(u8 event_type, u8 data); +extern int elog_add_event_word(u8 event_type, u16 data); +extern int elog_add_event_dword(u8 event_type, u32 data); +extern int elog_add_event_wake(u8 source, u32 instance); extern int elog_smbios_write_type15(unsigned long *current, int handle); #else /* Stubs to help avoid littering sources with #if CONFIG_ELOG */ static inline int elog_init(void) { return -1; } static inline int elog_clear(void) { return -1; } -static inline void elog_add_event_raw(void) { return; } -static inline void elog_add_event(u8 event_type) { return; } -static inline void elog_add_event_byte(u8 event_type, u8 data) { return; } -static inline void elog_add_event_word(u8 event_type, u16 data) { return; } -static inline void elog_add_event_dword(u8 event_type, u32 data) { return; } -static inline void elog_add_event_wake(u8 source, u32 instance) { return; } +static inline int elog_add_event_raw(void) { return 0; } +static inline int elog_add_event(u8 event_type) { return 0; } +static inline int elog_add_event_byte(u8 event_type, u8 data) { return 0; } +static inline int elog_add_event_word(u8 event_type, u16 data) { return 0; } +static inline int elog_add_event_dword(u8 event_type, u32 data) { return 0; } +static inline int elog_add_event_wake(u8 source, u32 instance) { return 0; } static inline int elog_smbios_write_type15(unsigned long *current, int handle) { return 0; |