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 {
