/*
 * This file is part of the coreboot project.
 *
 * Copyright 2014 Google Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <types.h>
#include <console/uart.h>
#include <arch/io.h>
#include <boot/coreboot_tables.h>

static uint8_t *buf = (void *)0x3f8;
uintptr_t uart_platform_base(int idx)
{
	return (uintptr_t) buf;
}

void uart_init(int idx)
{
}

unsigned char uart_rx_byte(int idx)
{
	return *buf;
}

void uart_tx_byte(int idx, unsigned char data)
{
	*buf = data;
}

void uart_tx_flush(int idx)
{
}

#ifndef __PRE_RAM__
void uart_fill_lb(void *data)
{
	struct lb_serial serial;
	serial.type = LB_SERIAL_TYPE_MEMORY_MAPPED;
	serial.baseaddr = 0x3f8;
	serial.baud = 115200;
	serial.regwidth = 1;
	lb_add_serial(&serial, data);
        lb_add_console(LB_TAG_CONSOLE_SERIAL8250MEM, data);
}
#endif
