1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-26 22:52:34 +02:00

dmi.c: Pass is_laptop by ref into dmi

Prefix the remaining global cases with `g_` to avoid shadowing
issues and for easy greping.

Change-Id: I3d5ad6c0623269492d775a99a947fd6fe26c5f91
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/71622
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Sam McNally <sammc@google.com>
This commit is contained in:
Edward O'Callaghan 2022-12-27 11:00:13 +11:00 committed by Edward O'Callaghan
parent c65379cba2
commit 50f812cfc7
4 changed files with 31 additions and 31 deletions

View File

@ -2282,7 +2282,7 @@ static int it8718f_gpio63_raise(void)
static int p2_not_a_laptop(void) static int p2_not_a_laptop(void)
{ {
/* label this board as not a laptop */ /* label this board as not a laptop */
is_laptop = 0; g_is_laptop = 0;
msg_pdbg("Laptop detection overridden by P2 board enable.\n"); msg_pdbg("Laptop detection overridden by P2 board enable.\n");
return 0; return 0;
} }
@ -2292,7 +2292,7 @@ static int p2_not_a_laptop(void)
*/ */
static int p2_whitelist_laptop(void) static int p2_whitelist_laptop(void)
{ {
is_laptop = 1; g_is_laptop = 1;
g_laptop_ok = true; g_laptop_ok = true;
msg_pdbg("Whitelisted laptop detected.\n"); msg_pdbg("Whitelisted laptop detected.\n");
return 0; return 0;

37
dmi.c
View File

@ -151,11 +151,11 @@ static char *dmi_string(const char *buf, uint8_t string_id, const char *limit)
return newbuf; return newbuf;
} }
static void dmi_chassis_type(uint8_t code) static int dmi_chassis_type(uint8_t code)
{ {
unsigned int i; unsigned int i;
code &= 0x7f; /* bits 6:0 are chassis type, 7th bit is the lock bit */ code &= 0x7f; /* bits 6:0 are chassis type, 7th bit is the lock bit */
is_laptop = 2; int is_laptop = 2;
for (i = 0; i < ARRAY_SIZE(dmi_chassis_types); i++) { for (i = 0; i < ARRAY_SIZE(dmi_chassis_types); i++) {
if (code == dmi_chassis_types[i].type) { if (code == dmi_chassis_types[i].type) {
msg_pdbg("DMI string chassis-type: \"%s\"\n", dmi_chassis_types[i].name); msg_pdbg("DMI string chassis-type: \"%s\"\n", dmi_chassis_types[i].name);
@ -163,9 +163,10 @@ static void dmi_chassis_type(uint8_t code)
break; break;
} }
} }
return is_laptop;
} }
static void dmi_table(uint32_t base, uint16_t len, uint16_t num) static void dmi_table(uint32_t base, uint16_t len, uint16_t num, int *is_laptop)
{ {
unsigned int i = 0, j = 0; unsigned int i = 0, j = 0;
@ -198,7 +199,7 @@ static void dmi_table(uint32_t base, uint16_t len, uint16_t num)
if(data[0] == 3) { if(data[0] == 3) {
if (data + 5 < limit) if (data + 5 < limit)
dmi_chassis_type(data[5]); *is_laptop = dmi_chassis_type(data[5]);
else /* the table is broken, but laptop detection is optional, hence continue. */ else /* the table is broken, but laptop detection is optional, hence continue. */
msg_pwarn("DMI table is broken (chassis_type out of bounds)!\n"); msg_pwarn("DMI table is broken (chassis_type out of bounds)!\n");
} else } else
@ -232,7 +233,7 @@ out:
} }
#if SM_SUPPORT #if SM_SUPPORT
static int smbios_decode(uint8_t *buf) static int smbios_decode(uint8_t *buf, int *is_laptop)
{ {
/* TODO: other checks mentioned in the conformance guidelines? */ /* TODO: other checks mentioned in the conformance guidelines? */
if (!dmi_checksum(buf, buf[0x05]) || if (!dmi_checksum(buf, buf[0x05]) ||
@ -240,23 +241,23 @@ static int smbios_decode(uint8_t *buf)
!dmi_checksum(buf + 0x10, 0x0F)) !dmi_checksum(buf + 0x10, 0x0F))
return 0; return 0;
dmi_table(mmio_readl(buf + 0x18), mmio_readw(buf + 0x16), mmio_readw(buf + 0x1C)); dmi_table(mmio_readl(buf + 0x18), mmio_readw(buf + 0x16), mmio_readw(buf + 0x1C), is_laptop);
return 1; return 1;
} }
#endif #endif
static int legacy_decode(uint8_t *buf) static int legacy_decode(uint8_t *buf, int *is_laptop)
{ {
if (!dmi_checksum(buf, 0x0F)) if (!dmi_checksum(buf, 0x0F))
return 1; return 1;
dmi_table(mmio_readl(buf + 0x08), mmio_readw(buf + 0x06), mmio_readw(buf + 0x0C)); dmi_table(mmio_readl(buf + 0x08), mmio_readw(buf + 0x06), mmio_readw(buf + 0x0C), is_laptop);
return 0; return 0;
} }
static int dmi_fill(void) static int dmi_fill(int *is_laptop)
{ {
size_t fp; size_t fp;
uint8_t *dmi_mem; uint8_t *dmi_mem;
@ -274,12 +275,12 @@ static int dmi_fill(void)
for (fp = 0; fp <= 0xFFF0; fp += 16) { for (fp = 0; fp <= 0xFFF0; fp += 16) {
#if SM_SUPPORT #if SM_SUPPORT
if (memcmp(dmi_mem + fp, "_SM_", 4) == 0 && fp <= 0xFFE0) { if (memcmp(dmi_mem + fp, "_SM_", 4) == 0 && fp <= 0xFFE0) {
if (smbios_decode(dmi_mem + fp)) // FIXME: length check if (smbios_decode(dmi_mem + fp), is_laptop) // FIXME: length check
goto out; goto out;
} else } else
#endif #endif
if (memcmp(dmi_mem + fp, "_DMI_", 5) == 0) if (memcmp(dmi_mem + fp, "_DMI_", 5) == 0)
if (legacy_decode(dmi_mem + fp) == 0) { if (legacy_decode(dmi_mem + fp, is_laptop) == 0) {
ret = 0; ret = 0;
goto out; goto out;
} }
@ -350,7 +351,7 @@ static char *get_dmi_string(const char *string_name)
return result; return result;
} }
static int dmi_fill(void) static int dmi_fill(int *is_laptop)
{ {
unsigned int i; unsigned int i;
char *chassis_type; char *chassis_type;
@ -367,10 +368,10 @@ static int dmi_fill(void)
return 0; /* chassis-type handling is optional anyway */ return 0; /* chassis-type handling is optional anyway */
msg_pdbg("DMI string chassis-type: \"%s\"\n", chassis_type); msg_pdbg("DMI string chassis-type: \"%s\"\n", chassis_type);
is_laptop = 2; *is_laptop = 2;
for (i = 0; i < ARRAY_SIZE(dmi_chassis_types); i++) { for (i = 0; i < ARRAY_SIZE(dmi_chassis_types); i++) {
if (strcasecmp(chassis_type, dmi_chassis_types[i].name) == 0) { if (strcasecmp(chassis_type, dmi_chassis_types[i].name) == 0) {
is_laptop = dmi_chassis_types[i].is_laptop; *is_laptop = dmi_chassis_types[i].is_laptop;
break; break;
} }
} }
@ -391,7 +392,7 @@ static int dmi_shutdown(void *data)
return 0; return 0;
} }
void dmi_init(void) void dmi_init(int *is_laptop)
{ {
/* Register shutdown function before we allocate anything. */ /* Register shutdown function before we allocate anything. */
if (register_shutdown(dmi_shutdown, NULL)) { if (register_shutdown(dmi_shutdown, NULL)) {
@ -399,11 +400,11 @@ void dmi_init(void)
return; return;
} }
/* dmi_fill fills the dmi_strings array, and if possible sets the global is_laptop variable. */ /* dmi_fill fills the dmi_strings array, and if possible set the is_laptop parameter. */
if (dmi_fill() != 0) if (dmi_fill(is_laptop) != 0)
return; return;
switch (is_laptop) { switch (*is_laptop) {
case 1: case 1:
msg_pdbg("Laptop detected via DMI.\n"); msg_pdbg("Laptop detected via DMI.\n");
break; break;

View File

@ -244,7 +244,7 @@ int cb_check_image(const uint8_t *bios, unsigned int size);
/* dmi.c */ /* dmi.c */
#if defined(__i386__) || defined(__x86_64__) #if defined(__i386__) || defined(__x86_64__)
void dmi_init(void); void dmi_init(int *is_laptop);
bool dmi_is_supported(void); bool dmi_is_supported(void);
int dmi_match(const char *pattern); int dmi_match(const char *pattern);
#endif // defined(__i386__) || defined(__x86_64__) #endif // defined(__i386__) || defined(__x86_64__)
@ -263,7 +263,7 @@ extern int superio_count;
#endif #endif
#if CONFIG_INTERNAL == 1 #if CONFIG_INTERNAL == 1
extern int is_laptop; extern int g_is_laptop;
extern bool g_laptop_ok; extern bool g_laptop_ok;
extern bool force_boardmismatch; extern bool force_boardmismatch;
void probe_superio(void); void probe_superio(void);

View File

@ -27,7 +27,7 @@
#include "hwaccess_x86_io.h" #include "hwaccess_x86_io.h"
#endif #endif
int is_laptop = 0; int g_is_laptop = 0;
bool g_laptop_ok = false; bool g_laptop_ok = false;
bool force_boardmismatch = false; bool force_boardmismatch = false;
@ -108,12 +108,11 @@ static int get_params(const struct programmer_cfg *cfg,
return 0; return 0;
} }
// FIXME: remove '_' suffix from parameters once global shadowing is fixed. static void report_nonwl_laptop_detected(int is_laptop, bool laptop_ok)
static void report_nonwl_laptop_detected(int is_laptop_, bool laptop_ok)
{ {
if (is_laptop_ && !laptop_ok) { if (is_laptop && !laptop_ok) {
msg_pinfo("========================================================================\n"); msg_pinfo("========================================================================\n");
if (is_laptop_ == 1) { if (is_laptop == 1) {
msg_pinfo("You seem to be running flashrom on an unknown laptop. Some\n" msg_pinfo("You seem to be running flashrom on an unknown laptop. Some\n"
"internal buses have been disabled for safety reasons.\n\n"); "internal buses have been disabled for safety reasons.\n\n");
} else { } else {
@ -204,9 +203,9 @@ static int internal_init(const struct programmer_cfg *cfg)
} }
} }
is_laptop = 2; /* Assume that we don't know by default. */ g_is_laptop = 2; /* Assume that we don't know by default. */
dmi_init(); dmi_init(&g_is_laptop);
/* In case Super I/O probing would cause pretty explosions. */ /* In case Super I/O probing would cause pretty explosions. */
board_handle_before_superio(force_boardenable); board_handle_before_superio(force_boardenable);
@ -229,7 +228,7 @@ static int internal_init(const struct programmer_cfg *cfg)
* this isn't a laptop. Board-enables may override this, * this isn't a laptop. Board-enables may override this,
* non-legacy buses (SPI and opaque atm) are probed anyway. * non-legacy buses (SPI and opaque atm) are probed anyway.
*/ */
if (is_laptop && !(g_laptop_ok || force_laptop || (not_a_laptop && is_laptop == 2))) if (g_is_laptop && !(g_laptop_ok || force_laptop || (not_a_laptop && g_is_laptop == 2)))
internal_buses_supported = BUS_NONE; internal_buses_supported = BUS_NONE;
/* try to enable it. Failure IS an option, since not all motherboards /* try to enable it. Failure IS an option, since not all motherboards
@ -258,7 +257,7 @@ static int internal_init(const struct programmer_cfg *cfg)
internal_par_init(internal_buses_supported); internal_par_init(internal_buses_supported);
/* Report if a non-whitelisted laptop is detected that likely uses a legacy bus. */ /* Report if a non-whitelisted laptop is detected that likely uses a legacy bus. */
report_nonwl_laptop_detected(is_laptop, g_laptop_ok); report_nonwl_laptop_detected(g_is_laptop, g_laptop_ok);
ret = 0; ret = 0;