blob: 35587baffdcf0a68e9970c9f054e71f0d0fb7c34 [file] [log] [blame]
/*
* Copyright (C) 2015 Google Inc.
*
* Commands for testing x86 LPC I/O.
*/
#include "common.h"
static int do_ior(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int size;
u16 port;
if (argc < 2)
return CMD_RET_USAGE;
/* Check for size specification */
size = cmd_get_data_size(argv[0], 1);
if (size < 1)
return CMD_RET_USAGE;
/* Get IO port */
port = strtoul(argv[1], NULL, 16);
switch (size) {
case 4:
printf("0x%08x\n", inl(port));
break;
case 2:
printf("0x%04x\n", inw(port));
break;
case 1:
printf("0x%02x\n", inb(port));
break;
default:
return CMD_RET_USAGE;
}
return CMD_RET_SUCCESS;
}
static int do_iow(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
int size;
u16 port;
u32 value;
if (argc < 3)
return CMD_RET_USAGE;
/* Check for size specification */
size = cmd_get_data_size(argv[0], 1);
if (size < 1)
return CMD_RET_USAGE;
/* Get IO port */
port = strtoul(argv[1], NULL, 16);
/* Get write value */
value = strtoul(argv[2], NULL, 16);
switch (size) {
case 4:
outl(value, port);
break;
case 2:
outw((u16)value, port);
break;
case 1:
outb((u8)value, port);
break;
default:
return CMD_RET_USAGE;
}
return CMD_RET_SUCCESS;
}
U_BOOT_CMD(
ior, 2, 1,
"IO port input",
"[.b, .w, .l] port"
);
U_BOOT_CMD(
iow, 3, 1,
"IO port output",
"[.b, .w, .l] port value"
);