![Thierry Escande](/assets/img/avatar_default.png)
Coreboot (http://www.coreboot.org) allows to save the firmware console output in a memory buffer. With this patch, the address of this memory buffer is obtained from coreboot tables on x86 chromebook devices declaring an ACPI device with name matching GOOGCB00 or BOOT0000. If the memconsole-coreboot driver is able to find the coreboot table, the memconsole driver sets the cbmem_console address and initializes the memconsole sysfs entries. The coreboot_table-acpi driver is responsible for setting the address of the coreboot table header when probed. If this address is not yet set when memconsole-coreboot is probed, then the probe is deferred by returning -EPROBE_DEFER. This patch is a rework/split/merge of patches from the chromeos v4.4 kernel tree originally authored by: Vadim Bendebury <vbendeb@chromium.org> Wei-Ning Huang <wnhuang@google.com> Yuji Sasaki <sasakiy@google.com> Duncan Laurie <dlaurie@chromium.org> Julius Werner <jwerner@chromium.org> Brian Norris <briannorris@chromium.org> Signed-off-by: Thierry Escande <thierry.escande@collabora.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
51 lines
1.3 KiB
C
51 lines
1.3 KiB
C
/*
|
|
* coreboot_table.h
|
|
*
|
|
* Internal header for coreboot table access.
|
|
*
|
|
* Copyright 2017 Google Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License v2.0 as published by
|
|
* the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef __COREBOOT_TABLE_H
|
|
#define __COREBOOT_TABLE_H
|
|
|
|
#include <linux/io.h>
|
|
|
|
/* List of coreboot entry structures that is used */
|
|
struct lb_cbmem_ref {
|
|
uint32_t tag;
|
|
uint32_t size;
|
|
|
|
uint64_t cbmem_addr;
|
|
};
|
|
|
|
/* Coreboot table header structure */
|
|
struct coreboot_table_header {
|
|
char signature[4];
|
|
u32 header_bytes;
|
|
u32 header_checksum;
|
|
u32 table_bytes;
|
|
u32 table_checksum;
|
|
u32 table_entries;
|
|
};
|
|
|
|
/* Retrieve coreboot table entry with tag *tag* and copy it to data */
|
|
int coreboot_table_find(int tag, void *data, size_t data_size);
|
|
|
|
/* Initialize coreboot table module given a pointer to iomem */
|
|
int coreboot_table_init(void __iomem *ptr);
|
|
|
|
/* Cleanup coreboot table module */
|
|
int coreboot_table_exit(void);
|
|
|
|
#endif /* __COREBOOT_TABLE_H */
|