| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <utility> |
| #include <dirent.h> |
| #include <endian.h> |
| #include <fcntl.h> |
| #include <lib/fdio/fdio.h> |
| #include <lib/zx/channel.h> |
| #include <stdio.h> |
| #include <zircon/status.h> |
| |
| #include "register-util.h" |
| |
| int main(int argc, const char** argv) { |
| if (argc < 3) { |
| fprintf(stderr, |
| "Usage: %s /path/to/device registeroffset [registervalue]\nregisteroffset and " |
| "registervalue " |
| "must both be formatted in hex.\nregisteroffset is the address offset from base of " |
| "MMIO.\nregistervalue is optional. if it exists, write, " |
| "otherwise, read.\n", |
| argv[0]); |
| return 0; |
| } |
| int fd = open(argv[1], O_RDWR); |
| zx::channel channel; |
| zx_status_t status = fdio_get_service_handle(fd, channel.reset_and_get_address()); |
| if (status != ZX_OK) { |
| fprintf(stderr, "Unable to open register device due to error %s\n", |
| zx_status_get_string(status)); |
| return -1; |
| } |
| return run(argc, argv, std::move(channel)); |
| } |