summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2010-06-17 19:41:02 +0200
committerGeert Uytterhoeven <geert@linux-m68k.org>2010-06-17 19:41:02 +0200
commitc607b61ecbe30fdf71afca81eb671172208bd234 (patch)
treebdce5f1caafad054981a7a71d60da06f3b878a76
parent6a65f5e56ea891dd5429ad81497e39f1be1aa2e5 (diff)
downloadamiga-nvram-c607b61ecbe30fdf71afca81eb671172208bd234.tar.gz
Show individual NVRAM fields
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
-rw-r--r--amiga-nvram.c47
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