purism/librem13v2: Add reading of serial number from CBFS
Check CBFS for 'serial_number' field, and use value if exists; otherwise use value set at compile time. Change-Id: I4b50f6310ca32b9dd372db075a5b5729e3b06619 Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Signed-off-by: Youness Alaoui <youness.alaoui@puri.sm> Reviewed-on: https://review.coreboot.org/22040 Reviewed-by: Nico Huber <nico.h@gmx.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
parent
f68e3bab9f
commit
c0a32cad28
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* This file is part of the coreboot project.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 Purism SPC
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <smbios.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <cbfs.h>
|
||||||
|
|
||||||
|
#define MAX_SERIAL_LENGTH 0x100
|
||||||
|
|
||||||
|
const char *smbios_mainboard_serial_number(void)
|
||||||
|
{
|
||||||
|
static char serial_number[MAX_SERIAL_LENGTH + 1] = {0};
|
||||||
|
struct cbfsf file;
|
||||||
|
|
||||||
|
if (serial_number[0] != 0)
|
||||||
|
return serial_number;
|
||||||
|
|
||||||
|
if (cbfs_boot_locate(&file, "serial_number", NULL) == 0) {
|
||||||
|
struct region_device cbfs_region;
|
||||||
|
size_t serial_len;
|
||||||
|
|
||||||
|
cbfs_file_data(&cbfs_region, &file);
|
||||||
|
|
||||||
|
serial_len = region_device_sz(&cbfs_region);
|
||||||
|
if (serial_len <= MAX_SERIAL_LENGTH) {
|
||||||
|
if (rdev_readat(&cbfs_region, serial_number, 0,
|
||||||
|
serial_len) == serial_len) {
|
||||||
|
serial_number[serial_len] = 0;
|
||||||
|
return serial_number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy(serial_number, CONFIG_MAINBOARD_SERIAL_NUMBER, MAX_SERIAL_LENGTH);
|
||||||
|
|
||||||
|
return serial_number;
|
||||||
|
}
|
Loading…
Reference in New Issue