From f603a589b9b53692e539c6976fb5e65b16aa4439 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Sat, 13 Sep 2008 19:40:41 -0400 Subject: [PATCH] Add port tool --- tools/Makefile | 12 +++++++-- tools/port.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 tools/port.c diff --git a/tools/Makefile b/tools/Makefile index 1cd4d81..7402d79 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,9 +1,17 @@ CFLAGS=-I../include CC=gcc -SMRAM_ICH2_OBJS=smram-linux-tool.o ../pci/pci-linux.o ../ich2/smram-ich2.o +SMRAM_ICH2_OBJS=smram-linux-tool.o ../pci/pci-linux.o ../ich2/smram-ich2.noraw.o + +all: smram-ich2 port + +%.noraw.o: %.c + gcc $(CFLAGS) -c -o $@ $< smram-ich2: $(SMRAM_ICH2_OBJS) - gcc -o smram-ich2 $(SMRAM_ICH2_OBJS) + gcc $(CFLAGS) -o smram-ich2 $(SMRAM_ICH2_OBJS) + +port: port.o + gcc -o port port.o clean: rm -f $(SMRAM_ICH2_OBJS) smram-ich2 diff --git a/tools/port.c b/tools/port.c new file mode 100644 index 0000000..c939913 --- /dev/null +++ b/tools/port.c @@ -0,0 +1,69 @@ +#include +#include + +int main(int argc, char **argv) +{ + unsigned int port; + unsigned char type = 'b'; + unsigned int datum; + + if (iopl(3) < 0) + { + perror("iopl"); + return 1; + } + + if ((argc < 2) || (argc > 4)) + { + usage: + printf("usage: %s port [b|w|l [datum]]\n", argv[0]); + return 2; + } + + port = strtoul(argv[1], NULL, 0); + + if (argc > 2) + type = *argv[2]; + + if (argc > 3) + { + datum = strtoul(argv[3], NULL, 0); + switch (type) + { + case 'b': + datum &= 0xFF; + outb(datum, port); + printf("Wrote byte 0x%02x to port 0x%04x\n", datum, port); + break; + case 'w': + datum &= 0xFFFF; + outw(datum, port); + printf("Wrote word 0x%04x to port 0x%04x\n", datum, port); + break; + case 'l': + outb(datum, port); + printf("Wrote long 0x%08x to port 0x%04x\n", datum, port); + break; + default: + goto usage; + } + } else { + switch(type) + { + case 'b': + datum = inb(port); + printf("Read byte 0x%02x from port 0x%04x\n", datum, port); + break; + case 'w': + datum = inw(port); + printf("Read word 0x%04x from port 0x%04x\n", datum, port); + break; + case 'l': + datum = inl(port); + printf("Read long 0x%08x from port 0x%04x\n", datum, port); + break; + default: + goto usage; + } + } +} -- 2.43.0