diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2005-11-01 19:38:29 +0000 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2005-11-01 19:38:29 +0000 |
commit | b525d3b600bc325a4d1937b0bb6920d51b99dd79 (patch) | |
tree | 16d051bdc539ac8498af5de428f9f940753b894c /tools | |
parent | 9168e1f8c1e19c14b4b49d13bc91c6041c646f0d (diff) |
Add support for checking the memory type
Diffstat (limited to 'tools')
-rw-r--r-- | tools/pskey.c | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/tools/pskey.c b/tools/pskey.c index 247f0c35..c185cf58 100644 --- a/tools/pskey.c +++ b/tools/pskey.c @@ -45,10 +45,68 @@ enum { NONE = 0, + MEMORY, LIST, READ, }; +static char *storestostr(uint16_t stores) +{ + switch (stores) { + case 0x0000: + return "Default"; + case 0x0001: + return "psi"; + case 0x0002: + return "psf"; + case 0x0004: + return "psrom"; + case 0x0008: + return "psram"; + default: + return "Unknown"; + } +} + +static char *memorytostr(uint16_t type) +{ + switch (type) { + case 0x0000: + return "Flash memory"; + case 0x0001: + return "EEPROM"; + case 0x0002: + return "RAM (transient)"; + case 0x0003: + return "ROM (or \"read-only\" flash memory)"; + default: + return "Unknown"; + } +} + +static int cmd_memory(int dd, uint16_t stores, int argc, char *argv[]) +{ + uint8_t array[8]; + uint16_t type; + int err; + + memset(array, 0, sizeof(array)); + array[2] = stores & 0xff; + array[3] = stores >> 8; + + err = csr_read_varid_complex(dd, 0x4711, + CSR_VARID_PS_MEMORY_TYPE, array, sizeof(array)); + if (err < 0) + return err; + + type = array[4] + (array[5] << 8); + + printf("%s (0x%04x) = %s (%d)\n", storestostr(stores), stores, + memorytostr(type), type); + + return 0; +} + static int cmd_list(int dd, uint16_t stores, int argc, char *argv[]) { uint8_t array[8]; @@ -331,8 +389,9 @@ static void usage(void) printf("Usage:\n" "\tpskey [-i <dev>] [-r] [-s stores] <key> [value]\n" "\tpskey [-i <dev>] [-r] [-s stores] --clear <key>\n" - "\tpskey [-i <dev>] --list\n" - "\tpskey [-i <dev>] --read\n\n"); + "\tpskey [-i <dev>] [-s stores] --memory\n" + "\tpskey [-i <dev>] [-s stores] --list\n" + "\tpskey [-i <dev>] [-s stores] --read\n\n"); printf("Keys:\n\t"); for (i = 0; storage[i].pskey; i++) { @@ -351,6 +410,7 @@ static struct option main_options[] = { { "reset", 0, 0, 'r' }, { "stores", 1, 0, 's' }, { "clear", 0, 0, 'c' }, + { "memory", 0, 0, 'M' }, { "list", 0, 0, 'L' }, { "read", 0, 0, 'R' }, { "help", 0, 0, 'h' }, @@ -364,7 +424,7 @@ int main(int argc, char *argv[]) uint16_t stores = 0x0001 | 0x0002 | 0x0008; int i, err, dd, opt, dev = 0, reset = 0, clear = 0, mode = NONE; - while ((opt=getopt_long(argc, argv, "+i:rs:cLRh", main_options, NULL)) != -1) { + while ((opt=getopt_long(argc, argv, "+i:rs:cMLRh", main_options, NULL)) != -1) { switch (opt) { case 'i': dev = hci_devid(optarg); @@ -407,6 +467,10 @@ int main(int argc, char *argv[]) clear = 1; break; + case 'M': + mode = MEMORY; + break; + case 'L': mode = LIST; break; @@ -460,14 +524,15 @@ int main(int argc, char *argv[]) if (mode > 0) { switch (mode) { + case MEMORY: + err = cmd_memory(dd, stores, argc, argv); + break; case LIST: err = cmd_list(dd, stores, argc, argv); break; - case READ: err = cmd_read(dd, stores, argc, argv); break; - default: usage(); err = -1; |