Blame view
common/cmd_portio.c
2.71 KB
7a8e9bed1 * Patch by Marc S... |
1 2 3 4 |
/* * (C) Copyright 2003 * Marc Singer, elf@buici.com * |
1a4596601 Add GPL-2.0+ SPDX... |
5 |
* SPDX-License-Identifier: GPL-2.0+ |
7a8e9bed1 * Patch by Marc S... |
6 7 8 9 10 11 12 13 14 15 |
*/ /* * Port I/O Functions * * Copied from FADS ROM, Dan Malek (dmalek@jlc.net) */ #include <common.h> #include <command.h> |
7a8e9bed1 * Patch by Marc S... |
16 |
|
7a8e9bed1 * Patch by Marc S... |
17 18 19 20 21 |
/* Display values from last command. * Memory modify remembered values are different from display memory. */ static uint in_last_addr, in_last_size; static uint out_last_addr, out_last_size, out_last_value; |
54841ab50 Make sure that ar... |
22 |
int do_portio_out (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) |
7a8e9bed1 * Patch by Marc S... |
23 24 25 26 |
{ uint addr = out_last_addr; uint size = out_last_size; uint value = out_last_value; |
47e26b1bf cmd_usage(): simp... |
27 |
if (argc != 3) |
4c12eeb8b Convert cmd_usage... |
28 |
return CMD_RET_USAGE; |
7a8e9bed1 * Patch by Marc S... |
29 30 |
if ((flag & CMD_FLAG_REPEAT) == 0) { |
47e26b1bf cmd_usage(): simp... |
31 32 |
/* * New command specified. Check for a size specification. |
7a8e9bed1 * Patch by Marc S... |
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
* Defaults to long if no or incorrect specification. */ size = cmd_get_data_size (argv[0], 1); addr = simple_strtoul (argv[1], NULL, 16); value = simple_strtoul (argv[2], NULL, 16); } #if defined (CONFIG_X86) { unsigned short port = addr; switch (size) { default: case 1: { unsigned char ch = value; __asm__ volatile ("out %0, %%dx"::"a" (ch), "d" (port)); } break; case 2: { unsigned short w = value; __asm__ volatile ("out %0, %%dx"::"a" (w), "d" (port)); } break; case 4: __asm__ volatile ("out %0, %%dx"::"a" (value), "d" (port)); break; } } #endif /* CONFIG_X86 */ out_last_addr = addr; out_last_size = size; out_last_value = value; return 0; } |
0d4983930 Patch by Kenneth ... |
73 74 |
U_BOOT_CMD( out, 3, 1, do_portio_out, |
2fb2604d5 Command usage cle... |
75 |
"write datum to IO port", |
a89c33db9 General help mess... |
76 77 |
"[.b, .w, .l] port value - output to IO port" |
b0fce99bf Fix some missing ... |
78 |
); |
54841ab50 Make sure that ar... |
79 |
int do_portio_in (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) |
7a8e9bed1 * Patch by Marc S... |
80 81 82 |
{ uint addr = in_last_addr; uint size = in_last_size; |
47e26b1bf cmd_usage(): simp... |
83 |
if (argc != 2) |
4c12eeb8b Convert cmd_usage... |
84 |
return CMD_RET_USAGE; |
7a8e9bed1 * Patch by Marc S... |
85 86 |
if ((flag & CMD_FLAG_REPEAT) == 0) { |
47e26b1bf cmd_usage(): simp... |
87 88 |
/* * New command specified. Check for a size specification. |
7a8e9bed1 * Patch by Marc S... |
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
* Defaults to long if no or incorrect specification. */ size = cmd_get_data_size (argv[0], 1); addr = simple_strtoul (argv[1], NULL, 16); } #if defined (CONFIG_X86) { unsigned short port = addr; switch (size) { default: case 1: { unsigned char ch; __asm__ volatile ("in %%dx, %0":"=a" (ch):"d" (port)); printf (" %02x ", ch); } break; case 2: { unsigned short w; __asm__ volatile ("in %%dx, %0":"=a" (w):"d" (port)); printf (" %04x ", w); } break; case 4: { unsigned long l; __asm__ volatile ("in %%dx, %0":"=a" (l):"d" (port)); printf (" %08lx ", l); } break; } } #endif /* CONFIG_X86 */ in_last_addr = addr; in_last_size = size; return 0; } |
0d4983930 Patch by Kenneth ... |
137 138 |
U_BOOT_CMD( in, 2, 1, do_portio_in, |
2fb2604d5 Command usage cle... |
139 |
"read data from an IO port", |
b0fce99bf Fix some missing ... |
140 141 |
"[.b, .w, .l] port " |
a89c33db9 General help mess... |
142 |
" - read datum from IO port" |
b0fce99bf Fix some missing ... |
143 |
); |