diff options
Diffstat (limited to 'qemu/roms/SLOF/llfw/clib/iolib.c')
-rw-r--r-- | qemu/roms/SLOF/llfw/clib/iolib.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/qemu/roms/SLOF/llfw/clib/iolib.c b/qemu/roms/SLOF/llfw/clib/iolib.c new file mode 100644 index 000000000..7f14b512d --- /dev/null +++ b/qemu/roms/SLOF/llfw/clib/iolib.c @@ -0,0 +1,47 @@ +/****************************************************************************** + * Copyright (c) 2004, 2008 IBM Corporation + * All rights reserved. + * This program and the accompanying materials + * are made available under the terms of the BSD License + * which accompanies this distribution, and is available at + * http://www.opensource.org/licenses/bsd-license.php + * + * Contributors: + * IBM Corporation - initial implementation + *****************************************************************************/ + +#include <stdint.h> +#include <stddef.h> +#include <unistd.h> +#include "iolib.h" + +void uart_send_byte(unsigned char b) +{ + asm volatile ("":::"3","4","5","6","7"); + io_putchar(b); +} + +/** + * Standard write function for the libc. + * + * @param fd file descriptor (should always be 1 or 2) + * @param buf pointer to the array with the output characters + * @param count number of bytes to be written + * @return the number of bytes that have been written successfully + */ +ssize_t write(int fd, const void *buf, size_t count) +{ + size_t i; + char *ptr = (char *)buf; + + if (fd != 1 && fd != 2) + return 0; + + for (i = 0; i < count; i++) { + if (*ptr == '\n') + uart_send_byte('\r'); + uart_send_byte(*ptr++); + } + + return i; +} |