diff options
Diffstat (limited to 'llfw/clib')
-rw-r--r-- | llfw/clib/Makefile.inc | 42 | ||||
-rw-r--r-- | llfw/clib/iolib.c | 65 | ||||
-rw-r--r-- | llfw/clib/iolib.h | 42 | ||||
-rw-r--r-- | llfw/clib/types.h | 27 |
4 files changed, 176 insertions, 0 deletions
diff --git a/llfw/clib/Makefile.inc b/llfw/clib/Makefile.inc new file mode 100644 index 0000000..2de8e94 --- /dev/null +++ b/llfw/clib/Makefile.inc @@ -0,0 +1,42 @@ +# ***************************************************************************** +# * Copyright (c) 2004, 2007 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 ../../make.rules + +CFLAGS_COMLIB = -pedantic -std=gnu99 -O0 +ASFLAGS_COMLIB = + + +COMLIBDIR = $(LLFWCMNDIR)/clib + +COMLIB_SRC_ASM = +COMLIB_SRC_C = iolib.c + +COMLIB_SRCS = $(COMLIB_SRC_ASM:%=$(COMLIBDIR)/%) \ + $(COMLIB_SRC_C:%=$(COMLIBDIR)/%) +COMLIB_OBJ_ASM = $(COMLIB_SRC_ASM:%.S=%.o) +COMLIB_OBJ_C = $(COMLIB_SRC_C:%.c=%.o) + + +comlib.o: $(COMLIB_OBJ_C) $(COMLIB_OBJ_ASM) + $(LD) $(LDFLAGS) $^ -o $@ -r + +%.o: $(LLFWCMNDIR)/clib/%.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(CFLAGS_COMLIB) -c $< -o $@ + +%.o: $(LLFWCMNDIR)/clib/%.S + $(CC) $(CPPFLAGS) $(ASFLAGS) $(ASFLAGS_COMLIB) -c $< -o $@ + +LLFW_CLEAN_TARGETS += clean_clib +.PHONY : clean_clib +clean_clib: + rm -f $(COMLIB_OBJ_C) $(COMLIB_OBJ_ASM) comlib.o diff --git a/llfw/clib/iolib.c b/llfw/clib/iolib.c new file mode 100644 index 0000000..9d202f4 --- /dev/null +++ b/llfw/clib/iolib.c @@ -0,0 +1,65 @@ +/****************************************************************************** + * Copyright (c) 2004, 2007 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 "types.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; +} + + +/** + * @brief C-routine to delay for a number of milliseconds. + * @param delay interval in terms of ms + */ +void delay_ms( unsigned int ms ) +{ + uint32_t ticks_per_ms; + + ticks_per_ms = tb_frequency() / 1000; + + while (0 < ms) { + set_dec(ticks_per_ms); + while( ((get_dec()) & 0x80000000) == 0 ); + ms--; + } +} diff --git a/llfw/clib/iolib.h b/llfw/clib/iolib.h new file mode 100644 index 0000000..fbe161d --- /dev/null +++ b/llfw/clib/iolib.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright (c) 2004, 2007 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 + *****************************************************************************/ + +#ifndef IOLIB_H +#define IOLIB_H +#include <types.h> + +#define addr_t volatile unsigned int +#define addr8_t volatile unsigned char + +extern void out32 (uint64_t base, uint64_t addr, uint32_t val); +extern void out16 (uint64_t base, uint64_t addr, uint16_t val); +extern void out8 (uint64_t base, uint64_t addr, uint8_t val); +extern uint32_t in32 (uint64_t base, uint64_t addr); +extern uint16_t in16 (uint64_t base, uint64_t addr); +extern uint8_t in8 (uint64_t base, uint64_t addr); + +extern void halt_sys (unsigned int); + +extern uint32_t get_sb_version (void); + +extern void init_uart (void); +extern void uart_send_byte(unsigned char b); +extern void io_putchar(unsigned char); + +extern uint64_t tb_frequency(void); +extern uint64_t be_frequency(void); + +extern uint32_t get_dec(void); +extern void set_dec(uint32_t); +extern void delay_ms( unsigned int ms ); + +#endif diff --git a/llfw/clib/types.h b/llfw/clib/types.h new file mode 100644 index 0000000..e11a4cf --- /dev/null +++ b/llfw/clib/types.h @@ -0,0 +1,27 @@ +/****************************************************************************** + * Copyright (c) 2004, 2007 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 + *****************************************************************************/ + +#ifndef _TYPES_H +#define _TYPES_H + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed int int32_t; +typedef signed long long int64_t; + + +#endif |