]> Joshua Wise's Git repositories - netwatch.git/blobdiff - tools/port.c
Add port tool
[netwatch.git] / tools / port.c
diff --git a/tools/port.c b/tools/port.c
new file mode 100644 (file)
index 0000000..c939913
--- /dev/null
@@ -0,0 +1,69 @@
+#include <sys/io.h>
+#include <string.h>
+
+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;
+               }
+       }
+}
This page took 0.023565 seconds and 4 git commands to generate.