PERFORCE change 95232 for review
Warner Losh
imp at FreeBSD.org
Fri Apr 14 06:30:23 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=95232
Change 95232 by imp at imp_hammer on 2006/04/14 06:29:43
Initial integration into the tree. The text + data is now under
8k, but the bss makes it over 12.5k. I believe that we need
to initialize this area, since we read the whole 16k eeprom with
the loader as it stands. I think that we should be able to do away
with the extra 8k read if we get bss working right (otherwise the bss
gets junk in it, which is likely why my experiments with the
bootloader failed last time).
More could be done to better integrate this, as well as chopping it
up into smaller bits.
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/AT91RM9200.h#2 delete
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/Makefile#2 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/debug_io.c#2 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#2 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/loader_prompt.c#2 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/loader_prompt.h#2 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/main.c#2 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/Makefile#2 (text+ko) ====
@@ -1,77 +1,24 @@
-#/******************************************************************************
-# *
-# * Filename: Makefile
-# *
-# * Classic makefile intended for use in gnu environment. The entries listed
-# * here are intentionally simple to aid the novice user in his/her own
-# * development - for easy modification.
-# *
-# * Revision information:
-# *
-# * 20AUG2004 kb_admin initial creation
-# * 12JAN2005 kb_admin re-org, added emac
-# *
-# * BEGIN_KBDD_BLOCK
-# * No warranty, expressed or implied, is included with this software. It is
-# * provided "AS IS" and no warranty of any kind including statutory or aspects
-# * relating to merchantability or fitness for any purpose is provided. All
-# * intellectual property rights of others is maintained with the respective
-# * owners. This software is not copyrighted and is intended for reference
-# * only.
-# * END_BLOCK
-# ******************************************************************************
-#
-
-SHELL = /bin/sh
-
-basetoolsdir = /usr/local/arm
-bindir = ${basetoolsdir}/bin
-libdir = ${basetoolsdir}/lib/gcc/arm-linux-uclibc/3.4.2
-
-CC = ${bindir}/arm-linux-gcc
-AS = ${bindir}/arm-linux-as
-LD = ${bindir}/arm-linux-ld
-OBJCOPY = ${bindir}/arm-linux-objcopy
-
-CFILES = eeprom.o at91rm9200_lowlevel.o main.o env_vars.o debug_io.o loader_prompt.o p_string.o xmodem.o tag_list.o emac.o
-ASFILES = arm_init.o
-
-bootloader: ${CFILES} ${ASFILES}
- ${LD} -e 0 -o bootloader.out -T linker.cfg ${ASFILES} ${CFILES}
- ${OBJCOPY} -O binary bootloader.out bootloader.bin
-
-main.o: main.c
- ${CC} -c $?
-
-env_vars.o: env_vars.c
- ${CC} -c $?
-
-debug_io.o: debug_io.c
- ${CC} -c $?
-
-at91rm9200_lowlevel.o: at91rm9200_lowlevel.c
- ${CC} -c $?
-
-loader_prompt.o: loader_prompt.c
- ${CC} -c $?
-
-p_string.o: p_string.c
- ${CC} -c $?
-
-xmodem.o: xmodem.c
- ${CC} -c $?
-
-tag_list.o: tag_list.c
- ${CC} -c $?
-
-eeprom.o: eeprom.c
- ${CC} -c $?
-
-emac.o: emac.c
- ${CC} -c $?
-
-arm_init.o: arm_init.s
- ${AS} -o $@ $?
-
-clean:
- rm -f *.o
+# $FreeBSD: src/sys/boot/arm/at91/boot0/Makefile,v 1.1 2006/04/12 21:22:44 imp Exp $
+
+.PATH: ${.CURDIR}/../boot0
+
+PROG=bootiic
+SRCS=arm_init.s at91rm9200_lowlevel.c lib.c main.c xmodem.c eeprom.c \
+ env_vars.c debug_io.c loader_prompt.c p_string.c emac.c
+NO_MAN=
+LDFLAGS=-e 0 -T linker.cfg
+CFLAGS=-O2 -mcpu=arm9 -ffreestanding -I${.CURDIR}/../inc -I${.CURDIR}/../boot0
+CFLAGS+=-DBOOT0_KB9202
+OBJS+= ${SRCS:N*.h:R:S/$/.o/g}
+CLEANFILES=${OBJS} ${PROG} ${PROG}.out
+
+all: ${PROG}
+
+${PROG}: ${PROG}.out ${OBJS}
+ objcopy -S -O binary ${PROG}.out ${PROG}
+
+${PROG}.out: ${OBJS}
+ ld ${LDFLAGS} -o ${PROG}.out ${OBJS}
+
+clean:
+ rm -f ${CLEANFILES}
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/debug_io.c#2 (text+ko) ====
@@ -23,23 +23,6 @@
/*
* .KB_C_FN_DEFINITION_START
- * void DebugPutc(char)
- * This global function writes a character to the debug uart port as soon
- * as it is ready to send another character.
- * .KB_C_FN_DEFINITION_END
- */
-void DebugPutc(char cValue) {
-
- AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU;
-
- while (!(pUSART->US_CSR & AT91C_US_TXRDY)) ;
-
- pUSART->US_THR = (cValue & 0x1FF);
-}
-
-
-/*
- * .KB_C_FN_DEFINITION_START
* void DebugPrint(char *)
* This global function writes a string to the debug uart port.
* .KB_C_FN_DEFINITION_END
@@ -48,62 +31,10 @@
if (!buffer) return;
- while(*buffer != '\0') {
- DebugPutc(*buffer++);
- }
+ while(*buffer != '\0')
+ putc(*buffer++);
}
-
-/*
- * .KB_C_FN_DEFINITION_START
- * int DebugGetchar(char *)
- * This global function return true if a character was received from the
- * debug uart port and sets the character in the pointer passed. Otherwise,
- * the function returns 0 if not character was available.
- * .KB_C_FN_DEFINITION_END
- */
-int DebugGetchar(char *retChar) {
-
- AT91PS_USART pUSART = (AT91PS_USART)AT91C_BASE_DBGU;
-
- if ((pUSART->US_CSR & AT91C_US_RXRDY)) {
- *retChar = (char)((pUSART->US_RHR) & 0x1FF);
- return (1);
- }
- return (0);
-}
-
-
-/*
- * .KB_C_FN_DEFINITION_START
- * int WaitForChar(char *, int)
- * This global function waits at least the specified number of seconds for
- * a character and returns non-zero if a character was received and stored in
- * the pointer. Otherwise, the function returns 0.
- * .KB_C_FN_DEFINITION_END
- */
-int WaitForChar(char *cPtr, int seconds) {
-
- unsigned thisSecond;
-
- ++seconds;
- thisSecond = GetSeconds();
-
- while (seconds) {
- if (DebugGetchar(cPtr)) {
- return (1);
- }
-
- if (GetSeconds() != thisSecond) {
- --seconds;
- thisSecond = GetSeconds();
- }
- }
-
- return (0);
-}
-
-
/*
* .KB_C_FN_DEFINITION_START
* void DebugPrintHex(int, int)
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#2 (text+ko) ====
@@ -23,7 +23,7 @@
#include "p_string.h"
#include "debug_io.h"
#include "eeprom.h"
-
+#include "lib.h"
/* ****************************** GLOBALS *************************************/
char boot_commands[MAX_BOOT_COMMANDS][MAX_INPUT_SIZE];
@@ -49,17 +49,17 @@
* terminated. Returns 0 to indicate _wait_ condition.
* .KB_C_FN_DEFINITION_END
*/
-static int ReadCharFromEnvironment(char *cPtr) {
+static int ReadCharFromEnvironment(int timeout)
+{
+ int ch;
if (currentIndex < MAX_BOOT_COMMANDS) {
-
- *cPtr = boot_commands[currentIndex][currentOffset++];
-
- if ((!*cPtr) || (currentOffset >= MAX_INPUT_SIZE)) {
+ ch = boot_commands[currentIndex][currentOffset++];
+ if (ch == '\0' || (currentOffset >= MAX_INPUT_SIZE)) {
currentOffset = 0;
++currentIndex;
}
- return (1);
+ return (ch);
}
return (-1);
@@ -143,7 +143,7 @@
DebugPrintHex(2, i);
DebugPrint(" : ");
for (j = 0; j < MAX_INPUT_SIZE; ++j) {
- DebugPutc(boot_commands[i][j]);
+ putc(boot_commands[i][j]);
if (!(boot_commands[i][j]))
break;
}
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/loader_prompt.c#2 (text+ko) ====
@@ -25,9 +25,12 @@
#include "p_string.h"
#include "xmodem.h"
#include "eeprom.h"
+#ifdef SUPPORT_TAG_LIST
#include "tag_list.h"
+#endif
#include "emac.h"
#include "loader_prompt.h"
+#include "lib.h"
/* ****************************** GLOBALS *************************************/
@@ -317,6 +320,7 @@
}
break;
+#ifdef SUPPORT_TAG_LIST
case COMMAND_TAG:
{
// t <address> <boot command line>
@@ -330,6 +334,7 @@
}
break;
+#endif
case COMMAND_WRITE:
// write the command table to non-volatile
@@ -379,7 +384,7 @@
inputBuffer[buffCount] = p_char;
++buffCount;
- DebugPutc(p_char);
+ putc(p_char);
}
} else if (buffCount) {
@@ -413,21 +418,20 @@
* the loader will parse.
* .KB_C_FN_DEFINITION_END
*/
-void Bootloader(int(*inputFunction)(char*)) {
+void Bootloader(int(*inputFunction)(int)) {
- char l_char;
- int returnValue = 0;
+ int ch = 0;
p_memset((void*)inputBuffer, 0, sizeof(inputBuffer));
buffCount = 0;
if (!inputFunction) {
- inputFunction = DebugGetchar;
+ inputFunction = getc;
}
DebugPrint("\n\r>");
- while (returnValue >= 0)
- if ((returnValue = ((*inputFunction)(&l_char))) > 0)
- ServicePrompt(l_char);
+ while (ch >= 0)
+ if ((ch = ((*inputFunction)(0))) > 0)
+ ServicePrompt(ch);
}
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/loader_prompt.h#2 (text+ko) ====
@@ -47,6 +47,6 @@
char *c_string;
} command_entry_t;
-extern void EnterInteractiveBootloader(int(*inputFunction)(char*));
+extern void EnterInteractiveBootloader(int(*inputFunction)(int));
#endif /* _LOADER_PROMPT_H_ */
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/main.c#2 (text+ko) ====
@@ -47,13 +47,8 @@
DebugPrint("\n\rKB9202(www.kwikbyte.com)\n\r");
DebugPrint("\n\rAuto boot..\n\r");
- /* check for input */
- if (!DebugGetchar(&l_char) &&
- !DebugGetchar(&l_char) &&
- !DebugGetchar(&l_char)) {
-
+ if (getc(1) == -1)
ExecuteEnvironmentFunctions();
- }
Bootloader(0);
More information about the p4-projects
mailing list