mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-21 10:12:04 +02:00
util/nvmutil: make defines easier to understand
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+43
-13
@@ -52,6 +52,12 @@ static void err(int, const char *, ...);
|
|||||||
static const char *getnvmprogname(void);
|
static const char *getnvmprogname(void);
|
||||||
static void set_err(int);
|
static void set_err(int);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On the platforms below, we will use arc4random
|
||||||
|
* for random MAC address generation.
|
||||||
|
*
|
||||||
|
* Later on, the code has fallbacks for other systems.
|
||||||
|
*/
|
||||||
#if defined(__OpenBSD__) || defined(__FreeBSD__) || \
|
#if defined(__OpenBSD__) || defined(__FreeBSD__) || \
|
||||||
defined(__NetBSD__) || defined(__APPLE__) || \
|
defined(__NetBSD__) || defined(__APPLE__) || \
|
||||||
defined(__DragonFly__)
|
defined(__DragonFly__)
|
||||||
@@ -60,19 +66,43 @@ static void set_err(int);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NVM_CHECKSUM 0xBABA
|
/*
|
||||||
#define NVM_SIZE 128
|
* Sizes in bytes:
|
||||||
#define NVM_WORDS (NVM_SIZE / 2)
|
*/
|
||||||
#define NVM_CHECKSUM_WORD (NVM_WORDS - 1)
|
|
||||||
|
|
||||||
#define SIZE_1KB 1024
|
#define SIZE_1KB 1024
|
||||||
#define SIZE_4KB (4 * SIZE_1KB)
|
#define SIZE_4KB (4 * SIZE_1KB)
|
||||||
#define SIZE_8KB (8 * SIZE_1KB)
|
#define SIZE_8KB (8 * SIZE_1KB)
|
||||||
#define SIZE_16KB (16 * SIZE_1KB)
|
#define SIZE_16KB (16 * SIZE_1KB)
|
||||||
#define SIZE_128KB (128 * SIZE_1KB)
|
#define SIZE_128KB (128 * SIZE_1KB)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First 128 bytes of a GbE part contains
|
||||||
|
* the regular NVM (Non-Volatile-Memory)
|
||||||
|
* area. All of these bytes must add up,
|
||||||
|
* truncated to 0xBABA.
|
||||||
|
*
|
||||||
|
* The full GbE region is 4KB, but only
|
||||||
|
* the first 128 bytes are used here.
|
||||||
|
*
|
||||||
|
* There is a second 4KB part with the same
|
||||||
|
* rules, and it *should* be identical.
|
||||||
|
*/
|
||||||
|
#define GBE_PART_SIZE SIZE_4KB
|
||||||
|
#define NVM_CHECKSUM 0xBABA
|
||||||
|
#define NVM_SIZE 128
|
||||||
|
#define NVM_WORDS (NVM_SIZE / 2)
|
||||||
|
#define NVM_CHECKSUM_WORD (NVM_WORDS - 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When reading files, we loop on error EINTR
|
||||||
|
* a maximum number of defined defined thus:
|
||||||
|
*/
|
||||||
#define MAX_RETRY_READ 30
|
#define MAX_RETRY_READ 30
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Portably macro based on BSD nitems.
|
||||||
|
* Used to count the number of commands (see below).
|
||||||
|
*/
|
||||||
#define items(x) (sizeof((x)) / sizeof((x)[0]))
|
#define items(x) (sizeof((x)) / sizeof((x)[0]))
|
||||||
|
|
||||||
static const char newrandom[] = "/dev/urandom";
|
static const char newrandom[] = "/dev/urandom";
|
||||||
@@ -338,8 +368,8 @@ read_gbe(void)
|
|||||||
static void
|
static void
|
||||||
read_gbe_part(int p, int invert)
|
read_gbe_part(int p, int invert)
|
||||||
{
|
{
|
||||||
read_file_PERFECTLY_or_die(fd, buf + (SIZE_4KB * (p ^ invert)),
|
read_file_PERFECTLY_or_die(fd, buf + (GBE_PART_SIZE * (p ^ invert)),
|
||||||
SIZE_4KB, gbe_bound(p, "pread"), fname, "pread");
|
GBE_PART_SIZE, gbe_bound(p, "pread"), fname, "pread");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -682,7 +712,7 @@ word(size_t pos16, int p)
|
|||||||
size_t pos;
|
size_t pos;
|
||||||
|
|
||||||
check_bound(pos16, p);
|
check_bound(pos16, p);
|
||||||
pos = (pos16 << 1) + ((size_t)p * SIZE_4KB);
|
pos = (pos16 << 1) + ((size_t)p * GBE_PART_SIZE);
|
||||||
|
|
||||||
return (uint16_t)buf[pos] | ((uint16_t)buf[pos + 1] << 8);
|
return (uint16_t)buf[pos] | ((uint16_t)buf[pos + 1] << 8);
|
||||||
}
|
}
|
||||||
@@ -693,7 +723,7 @@ set_word(size_t pos16, int p, uint16_t val16)
|
|||||||
size_t pos;
|
size_t pos;
|
||||||
|
|
||||||
check_bound(pos16, p);
|
check_bound(pos16, p);
|
||||||
pos = (pos16 << 1) + ((size_t)p * SIZE_4KB);
|
pos = (pos16 << 1) + ((size_t)p * GBE_PART_SIZE);
|
||||||
|
|
||||||
buf[pos] = (uint8_t)(val16 & 0xff);
|
buf[pos] = (uint8_t)(val16 & 0xff);
|
||||||
buf[pos + 1] = (uint8_t)(val16 >> 8);
|
buf[pos + 1] = (uint8_t)(val16 >> 8);
|
||||||
@@ -741,10 +771,10 @@ write_gbe(void)
|
|||||||
static void
|
static void
|
||||||
write_gbe_part(int p)
|
write_gbe_part(int p)
|
||||||
{
|
{
|
||||||
if (pwrite(fd, buf + (SIZE_4KB * p),
|
if (pwrite(fd, buf + (GBE_PART_SIZE * p),
|
||||||
SIZE_4KB, gbe_bound(p, "pwrite")) != (ssize_t)SIZE_4KB) {
|
GBE_PART_SIZE, gbe_bound(p, "pwrite")) != GBE_PART_SIZE) {
|
||||||
err(ECANCELED,
|
err(ECANCELED,
|
||||||
"Can't write %d b to '%s' p%d", SIZE_4KB, fname, p);
|
"Can't write %d b to '%s' p%d", GBE_PART_SIZE, fname, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -761,7 +791,7 @@ gbe_bound(int p, const char *f_op)
|
|||||||
{
|
{
|
||||||
off_t off = (off_t)p * partsize;
|
off_t off = (off_t)p * partsize;
|
||||||
|
|
||||||
if (off + SIZE_4KB > st.st_size)
|
if (off + GBE_PART_SIZE > st.st_size)
|
||||||
err(ECANCELED, "GbE file %s out of bounds: %s", f_op, fname);
|
err(ECANCELED, "GbE file %s out of bounds: %s", f_op, fname);
|
||||||
|
|
||||||
if (off != 0 && off != st.st_size >> 1)
|
if (off != 0 && off != st.st_size >> 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user