diff --git a/src/libsrc/Makefile b/src/libsrc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7f40a82812029275d0714696e9be456bb3ac924c --- /dev/null +++ b/src/libsrc/Makefile @@ -0,0 +1,56 @@ +# Makefile for busy-wait IO tests +# +XCC = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/gcc +AS = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/as +AR = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/ar +CFLAGS = -c -fPIC -Wall -I. -I../../include -mcpu=arm920t -msoft-float +# -g: include hooks for gdb +# -c: only compile +# -mcpu=arm920t: generate code for the 920t architecture +# -fpic: emit position-independent code +# -Wall: report all warnings + +ASFLAGS = -mcpu=arm920t -mapcs-32 +# -mapcs: always generate a complete stack frame + +ARFLAGS = rcs + +all: bwio.a + + +scheduler.s: scheduler.c + $(XCC) -S $(CFLAGS) scheduler.c + +taskdescriptor.s: taskdescriptor.c + $(XCC) -S $(CFLAGS) taskdescriptor.c + +bwio.s: bwio.c + $(XCC) -S $(CFLAGS) bwio.c + + +scheduler.o: scheduler.s + $(AS) $(ASFLAGS) -o scheduler.o scheduler.s + +taskdescriptor.o: taskdescriptor.s + $(AS) $(ASFLAGS) -o taskdescriptor.o taskdescriptor.s + +bwio.o: bwio.s + $(AS) $(ASFLAGS) -o bwio.o bwio.s + + +scheduler.a: scheduler.o + $(AR) $(ARFLAGS) $@ scheduler.o + +taskdescriptor.a: taskdescriptor.o + $(AR) $(ARFLAGS) $@ taskdescriptor.o + +bwio.a: bwio.o + $(AR) $(ARFLAGS) $@ bwio.o + +install: bwio.a taskdescriptor.a scheduler.a + mv bwio.a ../../lib/libbwio.a + mv taskdescriptor.a ../../lib/libtaskdescriptor.a + mv scheduler.a ../../lib/libscheduler.a + +clean: + -rm -f *.s *.o *.a *~ ../../lib/*.a diff --git a/src/libsrc/MakefileOG b/src/libsrc/MakefileOG new file mode 100644 index 0000000000000000000000000000000000000000..a5f22905ccb0afd50d01534a876f86628aa3ae13 --- /dev/null +++ b/src/libsrc/MakefileOG @@ -0,0 +1,44 @@ +# Makefile for busy-wait IO tests +# +XCC = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/gcc +AS = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/as +AR = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/ar +CFLAGS = -c -fPIC -Wall -I. -I../../include -mcpu=arm920t -msoft-float +# -g: include hooks for gdb +# -c: only compile +# -mcpu=arm920t: generate code for the 920t architecture +# -fpic: emit position-independent code +# -Wall: report all warnings + +ASFLAGS = -mcpu=arm920t -mapcs-32 +# -mapcs: always generate a complete stack frame + +ARFLAGS = rcs + +all: bwio.a + + +buffer.s: buffer.c + $(XCC) -S $(CFLAGS) buffer.c + +bwio.s: bwio.c + $(XCC) -S $(CFLAGS) bwio.c + +buffer.o: buffer.s + $(AS) $(ASFLAGS) -o buffer.o buffer.s + +bwio.o: bwio.s + $(AS) $(ASFLAGS) -o bwio.o bwio.s + +buffer.a: buffer.o + $(AR) $(ARFLAGS) $@ buffer.o + +bwio.a: bwio.o + $(AR) $(ARFLAGS) $@ bwio.o + +install: bwio.a buffer.a + mv bwio.a ../../lib/libbwio.a + mv buffer.a ../../lib/libbuffer.a + +clean: + -rm -f *.s *.o *.a *~ ../../lib/*.a diff --git a/src/libsrc/bwio.c b/src/libsrc/bwio.c new file mode 100644 index 0000000000000000000000000000000000000000..dcb131845013e29fe7cea02ef4c33d21b9e1c5f0 --- /dev/null +++ b/src/libsrc/bwio.c @@ -0,0 +1,257 @@ +/* + * bwio.c - busy-wait I/O routines for diagnosis + * + * Specific to the TS-7200 ARM evaluation board + * + */ + +#include <ts7200.h> +#include <bwio.h> + +/* + * The UARTs are initialized by RedBoot to the following state + * 115,200 bps + * 8 bits + * no parity + * fifos enabled + */ +int bwsetfifo( int channel, int state ) { + int *line, buf; + switch( channel ) { + case COM1: + line = (int *)( UART1_BASE + UART_LCRH_OFFSET ); + break; + case COM2: + line = (int *)( UART2_BASE + UART_LCRH_OFFSET ); + break; + default: + return -1; + break; + } + buf = *line; + buf = state ? buf | FEN_MASK : buf & ~FEN_MASK; + *line = buf; + return 0; +} + +int bwsetspeed( int channel, int speed ) { + int *high, *low; + switch( channel ) { + case COM1: + high = (int *)( UART1_BASE + UART_LCRM_OFFSET ); + low = (int *)( UART1_BASE + UART_LCRL_OFFSET ); + break; + case COM2: + high = (int *)( UART2_BASE + UART_LCRM_OFFSET ); + low = (int *)( UART2_BASE + UART_LCRL_OFFSET ); + break; + default: + return -1; + break; + } + switch( speed ) { + case 115200: + *high = 0x0; + *low = 0x3; + return 0; + case 2400: + *high = 0x0; + *low = 0xbf; + return 0; + default: + return -1; + } +} + +int bwputc( int channel, char c ) { + int *flags, *data; + switch( channel ) { + case COM1: + flags = (int *)( UART1_BASE + UART_FLAG_OFFSET ); + data = (int *)( UART1_BASE + UART_DATA_OFFSET ); + break; + case COM2: + flags = (int *)( UART2_BASE + UART_FLAG_OFFSET ); + data = (int *)( UART2_BASE + UART_DATA_OFFSET ); + break; + default: + return -1; + break; + } + while( ( *flags & TXFF_MASK ) ) ; + *data = c; + return 0; +} + +char c2x( char ch ) { + if ( (ch <= 9) ) return '0' + ch; + return 'a' + ch - 10; +} + +int bwputx( int channel, char c ) { + char chh, chl; + + chh = c2x( c / 16 ); + chl = c2x( c % 16 ); + bwputc( channel, chh ); + return bwputc( channel, chl ); +} + +int bwputr( int channel, unsigned int reg ) { + int byte; + char *ch = (char *) ® + + for( byte = 3; byte >= 0; byte-- ) bwputx( channel, ch[byte] ); + return bwputc( channel, ' ' ); +} + +int bwputstr( int channel, char *str ) { + while( *str ) { + if( bwputc( channel, *str ) < 0 ) return -1; + str++; + } + return 0; +} + +void bwputw( int channel, int n, char fc, char *bf ) { + char ch; + char *p = bf; + + while( *p++ && n > 0 ) n--; + while( n-- > 0 ) bwputc( channel, fc ); + while( ( ch = *bf++ ) ) bwputc( channel, ch ); +} + +int bwgetc( int channel ) { + int *flags, *data; + unsigned char c; + + switch( channel ) { + case COM1: + flags = (int *)( UART1_BASE + UART_FLAG_OFFSET ); + data = (int *)( UART1_BASE + UART_DATA_OFFSET ); + break; + case COM2: + flags = (int *)( UART2_BASE + UART_FLAG_OFFSET ); + data = (int *)( UART2_BASE + UART_DATA_OFFSET ); + break; + default: + return -1; + break; + } + while ( !( *flags & RXFF_MASK ) ) ; + c = *data; + return c; +} + +int bwa2d( char ch ) { + if( ch >= '0' && ch <= '9' ) return ch - '0'; + if( ch >= 'a' && ch <= 'f' ) return ch - 'a' + 10; + if( ch >= 'A' && ch <= 'F' ) return ch - 'A' + 10; + return -1; +} + +char bwa2i( char ch, char **src, int base, int *nump ) { + int num, digit; + char *p; + + p = *src; num = 0; + while( ( digit = bwa2d( ch ) ) >= 0 ) { + if ( digit > base ) break; + num = num*base + digit; + ch = *p++; + } + *src = p; *nump = num; + return ch; +} + +void bwui2a( unsigned int num, unsigned int base, char *bf ) { + int n = 0; + int dgt; + unsigned int d = 1; + + while( (num / d) >= base ) d *= base; + while( d != 0 ) { + dgt = num / d; + num %= d; + d /= base; + if( n || dgt > 0 || d == 0 ) { + *bf++ = dgt + ( dgt < 10 ? '0' : 'a' - 10 ); + ++n; + } + } + *bf = 0; +} + +void bwi2a( int num, char *bf ) { + if( num < 0 ) { + num = -num; + *bf++ = '-'; + } + bwui2a( num, 10, bf ); +} + +void bwformat ( int channel, char *fmt, va_list va ) { + char bf[12]; + char ch, lz; + int w; + + + while ( ( ch = *(fmt++) ) ) { + if ( ch != '%' ) + bwputc( channel, ch ); + else { + lz = 0; w = 0; + ch = *(fmt++); + switch ( ch ) { + case '0': + lz = 1; ch = *(fmt++); + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + ch = bwa2i( ch, &fmt, 10, &w ); + break; + } + switch( ch ) { + case 0: return; + case 'c': + bwputc( channel, va_arg( va, char ) ); + break; + case 's': + bwputw( channel, w, 0, va_arg( va, char* ) ); + break; + case 'u': + bwui2a( va_arg( va, unsigned int ), 10, bf ); + bwputw( channel, w, lz, bf ); + break; + case 'd': + bwi2a( va_arg( va, int ), bf ); + bwputw( channel, w, lz, bf ); + break; + case 'x': + bwui2a( va_arg( va, unsigned int ), 16, bf ); + bwputw( channel, w, lz, bf ); + break; + case '%': + bwputc( channel, ch ); + break; + } + } + } +} + +void bwprintf( int channel, char *fmt, ... ) { + va_list va; + + va_start(va,fmt); + bwformat( channel, fmt, va ); + va_end(va); +} + diff --git a/src/libsrc/scheduler.c b/src/libsrc/scheduler.c new file mode 100644 index 0000000000000000000000000000000000000000..76426b7a44d8f3306a1368c25126139095712d4d --- /dev/null +++ b/src/libsrc/scheduler.c @@ -0,0 +1 @@ +#include "scheduler.h" \ No newline at end of file diff --git a/src/libsrc/task-descriptor.c b/src/libsrc/task-descriptor.c new file mode 100644 index 0000000000000000000000000000000000000000..0a5589e22071860c3cdffa8c1e5922f4994e53f8 --- /dev/null +++ b/src/libsrc/task-descriptor.c @@ -0,0 +1,13 @@ +#include "task-descriptor.h" + + +//void TaskInit(); + +int isTaskAlive(int TaskID) { + return +} + + + + +