diff options
author | Geert Uytterhoeven <geert@linux-m68k.org> | 2010-06-17 19:41:02 +0200 |
---|---|---|
committer | Geert Uytterhoeven <geert@linux-m68k.org> | 2010-06-17 19:41:02 +0200 |
commit | c607b61ecbe30fdf71afca81eb671172208bd234 (patch) | |
tree | bdce5f1caafad054981a7a71d60da06f3b878a76 | |
parent | 6a65f5e56ea891dd5429ad81497e39f1be1aa2e5 (diff) | |
download | amiga-nvram-c607b61ecbe30fdf71afca81eb671172208bd234.tar.gz |
Show individual NVRAM fields
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
-rw-r--r-- | amiga-nvram.c | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/amiga-nvram.c b/amiga-nvram.c index 9dd99e1..e21825a 100644 --- a/amiga-nvram.c +++ b/amiga-nvram.c @@ -20,6 +20,8 @@ #define NVRAM_FILE "/sys/devices/platform/rtc-rp5c01/nvram" +#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) + static const char *program_name; @@ -42,6 +44,25 @@ struct nvram { static struct nvram nvram, backup; +static const struct nvram_field { + const char *name; + unsigned int word; + unsigned int offset; + unsigned int len; +} nvram_fields[] = { + { "amiga", 0, 0, 32 }, + { "amiga.amnesia", 0, 0, 1 }, + { "amiga.scsi_timeout", 0, 1, 1 }, + { "amiga.scsi_luns", 0, 2, 1 }, + { "amix", 1, 0, 32 }, + { "shared", 2, 0, 32 }, + { "shared.amnesia", 2, 0, 1 }, + { "shared.scsi_host_id", 2, 1, 3 }, + { "shared.scsi_sync_xfer", 2, 4, 1 }, + { "shared.scsi_fast_sync", 2, 5, 1 }, + { "shared.scsi_tag_queues", 2, 6, 1 }, +}; + static void msg(const char *fmt, ...) __attribute__((format(printf, 1, 2))); static void msg(const char *fmt, ...) @@ -167,11 +188,29 @@ uint32_t be32_to_cpu(uint32_t x) return bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3]; } +static uint32_t nvram_get_field(const struct nvram_field *field) +{ + uint32_t val = be32_to_cpu(nvram.words[field->word]); + if (field->len == 32) + return val; + + val >>= 32 - field->offset - field->len; + val &= (1 << field->len) - 1; + return val; +} + static void nvram_dump(void) { - printf("Amiga bits: 0x%08x\n", be32_to_cpu(nvram.bits.amiga)); - printf("AMIX bits: 0x%08x\n", be32_to_cpu(nvram.bits.amix)); - printf("Shared bits: 0x%08x\n", be32_to_cpu(nvram.bits.shared)); + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(nvram_fields); i++) { + const struct nvram_field *field = &nvram_fields[i]; + uint32_t val = nvram_get_field(field); + if (field->len == 32) + printf("%-23s= 0x%08x\n", field->name, val); + else + printf("%-23s= %u\n", field->name, val); + } } @@ -231,7 +270,7 @@ int main(int argc, char *argv[]) if (!opt_quiet) { nvram_dump(); - printf("Checksum: 0x%02x ", nvram.checksum); + printf("checksum = 0x%02x ", nvram.checksum); if (sum == nvram.checksum) puts("[correct]"); else |