Index: kernel/arch/arm32/src/mach/gta02/gta02.c
===================================================================
--- kernel/arch/arm32/src/mach/gta02/gta02.c	(revision ec082866ce8a00ad3f3151e0fda22c79ffe82d50)
+++ kernel/arch/arm32/src/mach/gta02/gta02.c	(revision 277cf603dc7f8b395b1770675edbc7d85cb2c6c5)
@@ -75,5 +75,4 @@
 static void gta02_timer_irq_handler(irq_t *irq);
 
-static void *gta02_scons_out;
 static outdev_t *gta02_scons_dev;
 static s3c24xx_irqc_t gta02_irqc;
@@ -97,5 +96,4 @@
 	s3c24xx_irqc_regs_t *irqc_regs;
 
-	gta02_scons_out = (void *) hw_map(GTA02_SCONS_BASE, PAGE_SIZE);
 	gta02_timer = (void *) hw_map(S3C24XX_TIMER_ADDRESS, PAGE_SIZE);
 	irqc_regs = (void *) hw_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE);
@@ -176,8 +174,10 @@
 
 	/* Initialize serial port of the debugging console. */
-	gta02_scons_dev = s3c24xx_uart_init((ioport8_t *) gta02_scons_out,
-		S3C24XX_INT_UART2);
+	s3c24xx_uart_io_t *scons_io;
+
+	scons_io = (void *) hw_map(GTA02_SCONS_BASE, PAGE_SIZE);
+	gta02_scons_dev = s3c24xx_uart_init(scons_io, S3C24XX_INT_UART2);
+
 	if (gta02_scons_dev) {
-
 		/* Create output device. */
 		stdout_wire(gta02_scons_dev);
@@ -187,5 +187,5 @@
 static void gta02_input_init(void)
 {
-	s3c24xx_uart_instance_t *scons_inst;
+	s3c24xx_uart_t *scons_inst;
 
 	if (gta02_scons_dev) {
Index: kernel/genarch/include/drivers/s3c24xx_uart/s3c24xx_uart.h
===================================================================
--- kernel/genarch/include/drivers/s3c24xx_uart/s3c24xx_uart.h	(revision ec082866ce8a00ad3f3151e0fda22c79ffe82d50)
+++ kernel/genarch/include/drivers/s3c24xx_uart/s3c24xx_uart.h	(revision 277cf603dc7f8b395b1770675edbc7d85cb2c6c5)
@@ -42,12 +42,31 @@
 #include <typedefs.h>
 
+/** S3C24xx UART I/O */
 typedef struct {
-	ioport8_t *base;
+	uint32_t ulcon;
+	uint32_t ucon;
+	uint32_t ufcon;
+	uint32_t umcon;
+
+	uint32_t utrstat;
+	uint32_t uerstat;
+	uint32_t ufstat;
+	uint32_t umstat;
+
+	uint32_t utxh;
+	uint32_t urxh;
+
+	uint32_t ubrdiv;
+} s3c24xx_uart_io_t;
+
+/** S3C24xx UART instance */
+typedef struct {
+	s3c24xx_uart_io_t *io;
 	indev_t *indev;
 	irq_t irq;
-} s3c24xx_uart_instance_t;
+} s3c24xx_uart_t;
 
-extern outdev_t *s3c24xx_uart_init(ioport8_t *, inr_t inr);
-extern void s3c24xx_uart_input_wire(s3c24xx_uart_instance_t *,
+extern outdev_t *s3c24xx_uart_init(s3c24xx_uart_io_t *, inr_t inr);
+extern void s3c24xx_uart_input_wire(s3c24xx_uart_t *,
     indev_t *);
 
Index: kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c	(revision ec082866ce8a00ad3f3151e0fda22c79ffe82d50)
+++ kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c	(revision 277cf603dc7f8b395b1770675edbc7d85cb2c6c5)
@@ -47,17 +47,4 @@
 #include <str.h>
 
-/** S3C24xx UART register offsets */
-#define S3C24XX_ULCON			0x00
-#define S3C24XX_UCON			0x04
-#define S3C24XX_UFCON			0x08
-#define S3C24XX_UMCON			0x0c
-#define S3C24XX_UTRSTAT			0x10
-#define S3C24XX_UERSTAT			0x14
-#define S3C24XX_UFSTAT			0x18
-#define S3C24XX_UMSTAT			0x1c
-#define S3C24XX_UTXH			0x20
-#define S3C24XX_URXH			0x24
-#define S3C24XX_UBRDIV			0x28
-
 /* Bits in UTRSTAT register */
 #define S3C24XX_UTRSTAT_TX_EMPTY	0x4
@@ -66,16 +53,12 @@
 static void s3c24xx_uart_sendb(outdev_t *dev, uint8_t byte)
 {
-	s3c24xx_uart_instance_t *instance =
-	    (s3c24xx_uart_instance_t *) dev->data;
-	ioport32_t *utrstat, *utxh;
-
-	utrstat = (ioport32_t *) (instance->base + S3C24XX_UTRSTAT);
-	utxh = (ioport32_t *) (instance->base + S3C24XX_UTXH);
+	s3c24xx_uart_t *uart =
+	    (s3c24xx_uart_t *) dev->data;
 
 	/* Wait for transmitter to be empty. */
-	while ((pio_read_32(utrstat) & S3C24XX_UTRSTAT_TX_EMPTY) == 0)
+	while ((pio_read_32(&uart->io->utrstat) & S3C24XX_UTRSTAT_TX_EMPTY) == 0)
 		;
 
-	pio_write_32(utxh, byte);
+	pio_write_32(&uart->io->utxh, byte);
 }
 
@@ -100,13 +83,9 @@
 static void s3c24xx_uart_irq_handler(irq_t *irq)
 {
-	s3c24xx_uart_instance_t *instance = irq->instance;
-	ioport32_t *utrstat, *urxh;
+	s3c24xx_uart_t *uart = irq->instance;
 
-	utrstat = (ioport32_t *) (instance->base + S3C24XX_UTRSTAT);
-	urxh = (ioport32_t *) (instance->base + S3C24XX_URXH);
-
-	if ((pio_read_32(utrstat) & S3C24XX_UTRSTAT_RDATA) != 0) {
-		uint32_t data = pio_read_32(urxh);
-		indev_push_character(instance->indev, data & 0xff);
+	if ((pio_read_32(&uart->io->utrstat) & S3C24XX_UTRSTAT_RDATA) != 0) {
+		uint32_t data = pio_read_32(&uart->io->urxh);
+		indev_push_character(uart->indev, data & 0xff);
 	}
 }
@@ -117,5 +96,5 @@
 };
 
-outdev_t *s3c24xx_uart_init(ioport8_t *base, inr_t inr)
+outdev_t *s3c24xx_uart_init(s3c24xx_uart_io_t *io, inr_t inr)
 {
 	outdev_t *uart_dev = malloc(sizeof(outdev_t), FRAME_ATOMIC);
@@ -123,7 +102,7 @@
 		return NULL;
 
-	s3c24xx_uart_instance_t *instance =
-	    malloc(sizeof(s3c24xx_uart_instance_t), FRAME_ATOMIC);
-	if (!instance) {
+	s3c24xx_uart_t *uart =
+	    malloc(sizeof(s3c24xx_uart_t), FRAME_ATOMIC);
+	if (!uart) {
 		free(uart_dev);
 		return NULL;
@@ -131,26 +110,24 @@
 
 	outdev_initialize("s3c24xx_uart_dev", uart_dev, &s3c24xx_uart_ops);
-	uart_dev->data = instance;
+	uart_dev->data = uart;
 
-	instance->base = base;
-	instance->indev = NULL;
+	uart->io = io;
+	uart->indev = NULL;
 
 	/* Initialize IRQ structure. */
-	irq_initialize(&instance->irq);
-	instance->irq.devno = device_assign_devno();
-	instance->irq.inr = inr;
-	instance->irq.claim = s3c24xx_uart_claim;
-	instance->irq.handler = s3c24xx_uart_irq_handler;
-	instance->irq.instance = instance;
+	irq_initialize(&uart->irq);
+	uart->irq.devno = device_assign_devno();
+	uart->irq.inr = inr;
+	uart->irq.claim = s3c24xx_uart_claim;
+	uart->irq.handler = s3c24xx_uart_irq_handler;
+	uart->irq.instance = uart;
 
 	/* Disable FIFO */
-	ioport32_t *ufcon;
-	ufcon = (ioport32_t *) (instance->base + S3C24XX_UFCON);
-	pio_write_32(ufcon, pio_read_32(ufcon) & ~0x01);
+	pio_write_32(&uart->io->ufcon,
+	    pio_read_32(&uart->io->ufcon) & ~0x01);
 
 	/* Set RX interrupt to pulse mode */
-	ioport32_t *ucon;
-	ucon = (ioport32_t *) (instance->base + S3C24XX_UCON);
-	pio_write_32(ucon, pio_read_32(ucon) & ~(1 << 8));
+	pio_write_32(&uart->io->ucon,
+	    pio_read_32(&uart->io->ucon) & ~(1 << 8));
 
 	if (!fb_exported) {
@@ -161,5 +138,5 @@
 		sysinfo_set_item_val("fb", NULL, true);
 		sysinfo_set_item_val("fb.kind", NULL, 3);
-		sysinfo_set_item_val("fb.address.physical", NULL, KA2PA(base));
+		sysinfo_set_item_val("fb.address.physical", NULL, KA2PA(io));
 
 		fb_exported = true;
@@ -169,11 +146,11 @@
 }
 
-void s3c24xx_uart_input_wire(s3c24xx_uart_instance_t *instance, indev_t *indev)
+void s3c24xx_uart_input_wire(s3c24xx_uart_t *uart, indev_t *indev)
 {
-	ASSERT(instance);
+	ASSERT(uart);
 	ASSERT(indev);
 
-	instance->indev = indev;
-	irq_register(&instance->irq);
+	uart->indev = indev;
+	irq_register(&uart->irq);
 }
 
Index: kernel/generic/src/main/kinit.c
===================================================================
--- kernel/generic/src/main/kinit.c	(revision ec082866ce8a00ad3f3151e0fda22c79ffe82d50)
+++ kernel/generic/src/main/kinit.c	(revision 277cf603dc7f8b395b1770675edbc7d85cb2c6c5)
@@ -226,8 +226,8 @@
 	 * Run user tasks.
 	 */
-	for (i = 0; i < init.cnt; i++) {
+/*	for (i = 0; i < init.cnt; i++) {
 		if (programs[i].task != NULL)
 			program_ready(&programs[i]);
-	}
+	}*/
 	
 #ifdef CONFIG_KCONSOLE
