Index: kernel/arch/amd64/include/asm.h
===================================================================
--- kernel/arch/amd64/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/amd64/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -74,5 +74,5 @@
  * @return Value read
  */
-static inline uint8_t pio_read_8(uint16_t port)
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	uint8_t val;
@@ -89,5 +89,5 @@
  * @param val Value to write
  */
-static inline void pio_write_8(uint16_t port, uint8_t val)
+static inline void pio_write_8(ioport8_t *port, uint8_t val)
 {
 	asm volatile ("outb %b0, %w1\n" : : "a" (val), "d" (port));
Index: kernel/arch/amd64/include/types.h
===================================================================
--- kernel/arch/amd64/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/amd64/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -58,5 +58,7 @@
 typedef int64_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/arm32/include/asm.h
===================================================================
--- kernel/arch/arm32/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/arm32/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -47,10 +47,10 @@
 }
 
-static inline void pio_write_8(ioport_t port, uint8_t v)
+static inline void pio_write_8(ioport8_t *port, uint8_t v)
 {
 	/* XXX */
 }
 
-static inline uint8_t pio_read_8(ioport_t port)
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	return 0;	/* XXX */
Index: kernel/arch/arm32/include/types.h
===================================================================
--- kernel/arch/arm32/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/arm32/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -65,5 +65,7 @@
 typedef int32_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/ia32/include/asm.h
===================================================================
--- kernel/arch/ia32/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ia32/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -106,7 +106,7 @@
  * @param val Value to write
  */
-static inline void pio_write_8(uint16_t port, uint8_t val)
-{
-	asm volatile ("outb %b0, %w1\n" : : "a" (val), "d" (port) );
+static inline void pio_write_8(ioport8_t *port, uint8_t val)
+{
+	asm volatile ("outb %b0, %w1\n" : : "a" (val), "d" (port));
 }
 
@@ -118,7 +118,7 @@
  * @param val Value to write
  */
-static inline void pio_write_16(uint16_t port, uint16_t val)
-{
-	asm volatile ("outw %w0, %w1\n" : : "a" (val), "d" (port) );
+static inline void pio_write_16(ioport16_t *port, uint16_t val)
+{
+	asm volatile ("outw %w0, %w1\n" : : "a" (val), "d" (port));
 }
 
@@ -130,7 +130,7 @@
  * @param val Value to write
  */
-static inline void pio_write_32(uint16_t port, uint32_t val)
-{
-	asm volatile ("outl %l0, %w1\n" : : "a" (val), "d" (port) );
+static inline void pio_write_32(ioport32_t *port, uint32_t val)
+{
+	asm volatile ("outl %l0, %w1\n" : : "a" (val), "d" (port));
 }
 
@@ -142,9 +142,9 @@
  * @return Value read
  */
-static inline uint8_t pio_read_8(uint16_t port)
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	uint8_t val;
 	
-	asm volatile ("inb %w1, %b0 \n" : "=a" (val) : "d" (port) );
+	asm volatile ("inb %w1, %b0 \n" : "=a" (val) : "d" (port));
 	return val;
 }
@@ -157,9 +157,9 @@
  * @return Value read
  */
-static inline uint16_t pio_read_16(uint16_t port)
+static inline uint16_t pio_read_16(ioport16_t *port)
 {
 	uint16_t val;
 	
-	asm volatile ("inw %w1, %w0 \n" : "=a" (val) : "d" (port) );
+	asm volatile ("inw %w1, %w0 \n" : "=a" (val) : "d" (port));
 	return val;
 }
@@ -172,9 +172,9 @@
  * @return Value read
  */
-static inline uint32_t pio_read_32(uint16_t port)
+static inline uint32_t pio_read_32(ioport32_t *port)
 {
 	uint32_t val;
 	
-	asm volatile ("inl %w1, %l0 \n" : "=a" (val) : "d" (port) );
+	asm volatile ("inl %w1, %l0 \n" : "=a" (val) : "d" (port));
 	return val;
 }
Index: kernel/arch/ia32/include/types.h
===================================================================
--- kernel/arch/ia32/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ia32/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -58,5 +58,7 @@
 typedef int32_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/ia64/include/asm.h
===================================================================
--- kernel/arch/ia64/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ia64/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -42,50 +42,62 @@
 #define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL
 
-static inline void pio_write_8(ioport_t port, uint8_t v)
-{
+static inline void pio_write_8(ioport8_t *port, uint8_t v)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	*((uint8_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xfff) | ((port >> 2) << 12)))) = v;
-
-	asm volatile ("mf\n" ::: "memory");
-}
-
-static inline void pio_write_16(ioport_t port, uint16_t v)
-{
+	    ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
+
+	asm volatile ("mf\n" ::: "memory");
+}
+
+static inline void pio_write_16(ioport16_t *port, uint16_t v)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	*((uint16_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xfff) | ((port >> 2) << 12)))) = v;
-
-	asm volatile ("mf\n" ::: "memory");
-}
-
-static inline void pio_write_32(ioport_t port, uint32_t v)
-{
+	    ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
+
+	asm volatile ("mf\n" ::: "memory");
+}
+
+static inline void pio_write_32(ioport32_t *port, uint32_t v)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	*((uint32_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xfff) | ((port >> 2) << 12)))) = v;
-
-	asm volatile ("mf\n" ::: "memory");
-}
-
-static inline uint8_t pio_read_8(ioport_t port)
-{
+	    ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
+
+	asm volatile ("mf\n" ::: "memory");
+}
+
+static inline uint8_t pio_read_8(ioport8_t *port)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	asm volatile ("mf\n" ::: "memory");
 
 	return *((uint8_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xfff) | ((port >> 2) << 12))));
-}
-
-static inline uint16_t pio_read_16(ioport_t port)
-{
+	    ((prt & 0xfff) | ((prt >> 2) << 12))));
+}
+
+static inline uint16_t pio_read_16(ioport16_t *port)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	asm volatile ("mf\n" ::: "memory");
 
 	return *((uint16_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xffE) | ((port >> 2) << 12))));
-}
-
-static inline uint32_t pio_read_32(ioport_t port)
-{
+	    ((prt & 0xffE) | ((prt >> 2) << 12))));
+}
+
+static inline uint32_t pio_read_32(ioport32_t *port)
+{
+	uintptr_t prt = (uintptr_t) port;
+
 	asm volatile ("mf\n" ::: "memory");
 
 	return *((uint32_t *)(IA64_IOSPACE_ADDRESS +
-	    ((port & 0xfff) | ((port >> 2) << 12))));
+	    ((prt & 0xfff) | ((prt >> 2) << 12))));
 }
 
Index: kernel/arch/ia64/include/types.h
===================================================================
--- kernel/arch/ia64/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ia64/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -66,5 +66,7 @@
 typedef int64_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/mips32/include/asm.h
===================================================================
--- kernel/arch/mips32/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/mips32/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -76,10 +76,10 @@
 extern void asm_delay_loop(uint32_t t);
 
-static inline void pio_write_8(ioport_t port, uint8_t v)
+static inline void pio_write_8(ioport8_t *port, uint8_t v)
 {
 	/* XXX */
 }
 
-static inline uint8_t pio_read_8(ioport_t port)
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	return 0;	/* XXX */
Index: kernel/arch/mips32/include/types.h
===================================================================
--- kernel/arch/mips32/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/mips32/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -58,5 +58,7 @@
 typedef int32_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/ppc32/include/asm.h
===================================================================
--- kernel/arch/ppc32/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ppc32/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -150,10 +150,10 @@
 extern void userspace_asm(uintptr_t uspace_uarg, uintptr_t stack, uintptr_t entry);
 
-static inline void pio_write_8(ioport_t port, uint8_t v)
+static inline void pio_write_8(ioport8_t *port, uint8_t v)
 {
 	/* XXX */
 }
 
-static inline uint8_t pio_read_8(ioport_t port)
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	return 0;	/* XXX */
Index: kernel/arch/ppc32/include/types.h
===================================================================
--- kernel/arch/ppc32/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/ppc32/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -58,5 +58,7 @@
 typedef int32_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
Index: kernel/arch/sparc64/include/asm.h
===================================================================
--- kernel/arch/sparc64/include/asm.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/sparc64/include/asm.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -45,27 +45,27 @@
 #include <arch/barrier.h>
 
-static inline void pio_write_8(ioport_t port, uint8_t v)
-{
-	*((volatile uint8_t *)(port)) = v;
-	memory_barrier();
-}
-
-static inline void pio_write_16(ioport_t port, uint16_t v)
-{
-	*((volatile uint16_t *)(port)) = v;
-	memory_barrier();
-}
-
-static inline void pio_write_32(ioport_t port, uint32_t v)
-{
-	*((volatile uint32_t *)(port)) = v;
-	memory_barrier();
-}
-
-static inline uint8_t pio_read_8(ioport_t port)
+static inline void pio_write_8(ioport8_t *port, uint8_t v)
+{
+	*port = v;
+	memory_barrier();
+}
+
+static inline void pio_write_16(ioport16_t *port, uint16_t v)
+{
+	*port = v;
+	memory_barrier();
+}
+
+static inline void pio_write_32(ioport32_t *port, uint32_t v)
+{
+	*port = v;
+	memory_barrier();
+}
+
+static inline uint8_t pio_read_8(ioport8_t *port)
 {
 	uint8_t rv;
 
-	rv = *((volatile uint8_t *)(port));
+	rv = *port;
 	memory_barrier();
 
@@ -73,9 +73,9 @@
 }
 
-static inline uint16_t pio_read_16(ioport_t port)
+static inline uint16_t pio_read_16(ioport16_t *port)
 {
 	uint16_t rv;
 
-	rv = *((volatile uint16_t *)(port));
+	rv = *port;
 	memory_barrier();
 
@@ -83,9 +83,9 @@
 }
 
-static inline uint32_t pio_read_32(ioport_t port)
+static inline uint32_t pio_read_32(ioport32_t *port)
 {
 	uint32_t rv;
 
-	rv = *((volatile uint32_t *)(port));
+	rv = *port;
 	memory_barrier();
 
Index: kernel/arch/sparc64/include/types.h
===================================================================
--- kernel/arch/sparc64/include/types.h	(revision 4b44099d821552a64452274b994f2cf5cb8adbaf)
+++ kernel/arch/sparc64/include/types.h	(revision 7d60cf59c22009459162657970aeff4fb02727ed)
@@ -58,5 +58,7 @@
 typedef int64_t native_t;
 
-typedef uintptr_t ioport_t;
+typedef volatile uint8_t ioport8_t;
+typedef volatile uint16_t ioport16_t;
+typedef volatile uint32_t ioport32_t;
 
 typedef struct {
