summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c56
1 files changed, 42 insertions, 14 deletions
diff --git a/main.c b/main.c
index 2e2f1c2..2161503 100644
--- a/main.c
+++ b/main.c
@@ -51,11 +51,13 @@ int usage(char* progname)
return 0;
}
-int dump_flash_gpio_status(int debug, char* devmem, int fd, size_t page_size)
+int dump_flash_gpio_status(int debug, char* devmem, int fd, size_t page_size,
+ void *gpio_hardware_blocks_addr)
{
int rc;
- rc = dump_gpio_infos(debug, devmem, fd, page_size, "gpj1", 1);
+ rc = dump_gpio_infos(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr, "gpj1", 1);
if (rc == -1) {
printf("dump_gpio_infos failed with error %d\n", rc);
@@ -66,11 +68,13 @@ int dump_flash_gpio_status(int debug, char* devmem, int fd, size_t page_size)
return 0;
}
-int dump_flash_gps_status(int debug, char* devmem, int fd, size_t page_size)
+int dump_flash_gps_status(int debug, char* devmem, int fd, size_t page_size,
+ void *gpio_hardware_blocks_addr)
{
int rc;
- rc = dump_gpio_infos(debug, devmem, fd, page_size, "gpl2", 1);
+ rc = dump_gpio_infos(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr, "gpl2", 1);
if (rc == -1) {
printf("dump_gpio_infos failed with error %d\n", rc);
@@ -78,7 +82,8 @@ int dump_flash_gps_status(int debug, char* devmem, int fd, size_t page_size)
return EX_UNAVAILABLE;
}
- rc = dump_gpio_infos(debug, devmem, fd, page_size, "gpl2", 2);
+ rc = dump_gpio_infos(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr, "gpl2", 2);
if (rc == -1) {
printf("dump_gpio_infos failed with error %d\n", rc);
@@ -90,7 +95,7 @@ int dump_flash_gps_status(int debug, char* devmem, int fd, size_t page_size)
}
int dump_gpio_bank_status(int debug, char* devmem, int fd, size_t page_size,
- char* bank)
+ void *gpio_hardware_blocks_addr, char* bank)
{
int i;
int nr_gpios;
@@ -107,7 +112,8 @@ int dump_gpio_bank_status(int debug, char* devmem, int fd, size_t page_size,
}
for (i=0; i < nr_gpios; i++) {
- rc = dump_gpio_infos(debug, devmem, fd, page_size, bank, i);
+ rc = dump_gpio_infos(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr, bank, i);
if (rc == -1) {
printf("dump_gpio_infos failed with error %d\n", rc);
@@ -127,6 +133,7 @@ int main(int argc, char *argv[])
char *devmem = "/dev/mem";
size_t page_size = 4096;
+ void *gpio_hardware_blocks_addr;
assert(argc >= 1);
@@ -155,28 +162,49 @@ int main(int argc, char *argv[])
return EX_UNAVAILABLE;
}
+ if (strcmp("flash", argv[1]) &&
+ strcmp("gpl1", argv[1]) &&
+ strcmp("gpl2", argv[1]) &&
+ strcmp("gps", argv[1]) &&
+ strcmp("gpy0", argv[1]) &&
+ strcmp("modem", argv[1]) &&
+ strcmp("test", argv[1])) {
+ usage(argv[0]);
+ return EX_USAGE;
+ }
+
+ gpio_hardware_blocks_addr = mmap_gpio_hardware_blocks(debug, devmem, fd,
+ page_size);
+ if (gpio_hardware_blocks_addr == NULL) {
+ /* mmap_gpio_bank already prints an error */
+ goto end;
+ }
+
if (argc == 2 && !strcmp("flash", argv[1])) {
- return dump_flash_gpio_status(debug, devmem, fd, page_size);
+ return dump_flash_gpio_status(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr);
} else if (argc == 2 && !strcmp("gpl1", argv[1])) {
return dump_gpio_bank_status(debug, devmem, fd, page_size,
- "gpl1");
+ gpio_hardware_blocks_addr, "gpl1");
} else if (argc == 2 && !strcmp("gpl2", argv[1])) {
return dump_gpio_bank_status(debug, devmem, fd, page_size,
- "gpl2");
+ gpio_hardware_blocks_addr, "gpl2");
} else if (argc == 2 && !strcmp("gps", argv[1])) {
- return dump_flash_gps_status(debug, devmem, fd, page_size);
+ return dump_flash_gps_status(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr);
} else if (argc == 2 && !strcmp("gpy0", argv[1])) {
return dump_gpio_bank_status(debug, devmem, fd, page_size,
- "gpy0");
+ gpio_hardware_blocks_addr, "gpy0");
} else if (argc == 2 && !strcmp("modem", argv[1])) {
- return dump_modem_gpio_infos(debug, devmem, fd, page_size);
+ return dump_modem_gpio_infos(debug, devmem, fd, page_size,
+ gpio_hardware_blocks_addr);
} else if (argc == 2 && !strcmp("test", argv[1])) {
return run_tests(debug, devmem, fd, page_size);
} else {
usage(argv[0]);
return EX_USAGE;
}
-
+end:
rc = close(fd);
if (rc == -1) {
rc = errno;