aboutsummaryrefslogtreecommitdiff
path: root/toys/pending
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2019-03-02 17:56:06 -0600
committerRob Landley <rob@landley.net>2019-03-02 17:56:06 -0600
commit0ef76aab5ecf7de5522095dbc33dc8b93cc7bc43 (patch)
tree663ff20306143fe7c7f74997f7dac8449011a10e /toys/pending
parentd588ba74439604cf29100aec7cd1da640a5d6fe5 (diff)
downloadtoybox-0ef76aab5ecf7de5522095dbc33dc8b93cc7bc43.tar.gz
Promote devmem.
Diffstat (limited to 'toys/pending')
-rw-r--r--toys/pending/devmem.c62
1 files changed, 0 insertions, 62 deletions
diff --git a/toys/pending/devmem.c b/toys/pending/devmem.c
deleted file mode 100644
index d5b7bdb4..00000000
--- a/toys/pending/devmem.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* devmem.c - Access physical addresses
- *
- * Copyright 2019 The Android Open Source Project
-
-USE_DEVMEM(NEWTOY(devmem, "<1>3", TOYFLAG_USR|TOYFLAG_BIN))
-
-config DEVMEM
- bool "devmem"
- default n
- help
- usage: devmem ADDR [WIDTH [DATA]]
-
- Read/write physical address via /dev/mem.
-
- WIDTH is 1, 2, 4, or 8 bytes (default 4).
-*/
-
-#define FOR_devmem
-#include "toys.h"
-
-void devmem_main(void)
-{
- int writing = toys.optc == 3, page_size = getpagesize(), bytes = 4, fd;
- unsigned long long addr = atolx(toys.optargs[0]), data = 0, map_off, map_len;
- void *map, *p;
-
- // WIDTH?
- if (toys.optc>1) {
- int i;
-
- if (strlen(toys.optargs[1])!=1 || (i=stridx("1248", *toys.optargs[1]))==-1)
- error_exit("bad width: %s", toys.optargs[1]);
- bytes = 1<<i;
- }
-
- // DATA? Report out of range values as errors rather than truncating.
- if (writing) data = atolx_range(toys.optargs[2], 0, (1ULL<<(8*bytes))-1);
-
- // Map in just enough.
- fd = xopen("/dev/mem", (writing ? O_RDWR : O_RDONLY) | O_SYNC);
- map_off = addr & ~(page_size - 1);
- map_len = (addr+bytes-map_off);
- map = xmmap(NULL, map_len, writing ? PROT_WRITE : PROT_READ, MAP_SHARED, fd,
- map_off);
- p = map + (addr & (page_size - 1));
- close(fd);
-
- if (writing) {
- if (bytes == 1) *(char *)p = data;
- else if (bytes == 2) *(short *)p = data;
- else if (bytes == 4) *(int *)p = data;
- else if (bytes == 8) *(long long *)p = data;
- } else {
- if (bytes == 1) data = *(char *)p;
- else if (bytes == 2) data = *(short *)p;
- else if (bytes == 4) data = *(int *)p;
- else if (bytes == 8) data = *(long long *)p;
- printf("%#0*llx\n", bytes*2, data);
- }
-
- munmap(map, map_len);
-}