diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 56 |
1 files changed, 42 insertions, 14 deletions
@@ -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; |
