diff options
author | dfr <dfr@FreeBSD.org> | 1998-10-31 17:12:32 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 1998-10-31 17:12:32 +0000 |
commit | 29a470890d941fb3684c87bc547351fad2ba4d44 (patch) | |
tree | b5dea2cf9f55e398ae5a1d6c40fd5b7cf6a1f892 /sys/boot | |
parent | 052ed056ae42a100f0a42e542cc07049bba598ae (diff) | |
download | FreeBSD-src-29a470890d941fb3684c87bc547351fad2ba4d44.zip FreeBSD-src-29a470890d941fb3684c87bc547351fad2ba4d44.tar.gz |
* Extend the memory available for the heap from 256k to 512k.
* Embed the stack into the bss section for loader and netboot. This
is required for netboot since otherwise the stack would be inside our
heap.
* Install loader and netboot in /boot by default.
* Fix getbootfile so that it searches for a ',' instead of a ';'
when terminating the filename.
Diffstat (limited to 'sys/boot')
-rw-r--r-- | sys/boot/alpha/Makefile.inc | 2 | ||||
-rw-r--r-- | sys/boot/alpha/boot1/Makefile | 4 | ||||
-rw-r--r-- | sys/boot/alpha/boot2/Makefile | 3 | ||||
-rw-r--r-- | sys/boot/alpha/common/main.c | 52 | ||||
-rw-r--r-- | sys/boot/alpha/libalpha/srmdisk.c | 23 | ||||
-rw-r--r-- | sys/boot/alpha/libalpha/start.S | 15 | ||||
-rw-r--r-- | sys/boot/alpha/netboot/Makefile | 3 | ||||
-rw-r--r-- | sys/boot/common/boot.c | 4 |
8 files changed, 86 insertions, 20 deletions
diff --git a/sys/boot/alpha/Makefile.inc b/sys/boot/alpha/Makefile.inc index b8f2470..abb4f65 100644 --- a/sys/boot/alpha/Makefile.inc +++ b/sys/boot/alpha/Makefile.inc @@ -6,5 +6,3 @@ DPADD+= ${DESTDIR}/${LIBDIR}/libstand.a LIBSTANDDIR= ${.CURDIR}/../../../../lib/libstand LIBSTAND= -lstand LIBALPHA= ${.OBJDIR}/../libalpha/libalpha.a - -BINDIR= /usr/mdec diff --git a/sys/boot/alpha/boot1/Makefile b/sys/boot/alpha/boot1/Makefile index 98f6c9d..3edaf04 100644 --- a/sys/boot/alpha/boot1/Makefile +++ b/sys/boot/alpha/boot1/Makefile @@ -15,6 +15,7 @@ CFLAGS+= -I${.CURDIR}/.. CFLAGS+= -DSECONDARY_LOAD_ADDRESS=${SECONDARY_LOAD_ADDRESS} -DMINIMAL NOMAN=1 STRIP= +BINDIR?= /usr/mdec BOOT_RELOC = ${PRIMARY_LOAD_ADDRESS} @@ -36,10 +37,9 @@ ${PROG}: ${PROG}.nosym .include <bsd.prog.mk> start.o: ${.CURDIR}/../libalpha/start.S - ${CC} -c -DPRIMARY_BOOTBLOCK $< + ${CC} -c ${CFLAGS} $< ${PROG}.sym: ${OBJS} ${LIBKERN} ${LD} -M -Ttext ${BOOT_RELOC} -N -e start -o ${PROG}.sym ${OBJS} \ ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} > ${.OBJDIR}/${PROG}.list size ${PROG}.sym - diff --git a/sys/boot/alpha/boot2/Makefile b/sys/boot/alpha/boot2/Makefile index 5b58e49..5ee39b9 100644 --- a/sys/boot/alpha/boot2/Makefile +++ b/sys/boot/alpha/boot2/Makefile @@ -30,6 +30,7 @@ CFLAGS+= -I${LIBSTANDDIR} CFLAGS+= -I${.CURDIR}/.. CRT= start.o STRIP= +BINDIR?= /boot all: ${BASE} @@ -47,7 +48,7 @@ ${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBALPHA} ${CRT} vers.o setdef0.o setdef1.o # Other fragments still to be brought in from ../Makfile.booters? start.o: ${.CURDIR}/../libalpha/start.S - ${CC} -c $< + ${CC} -c ${CFLAGS} $< setdef0.o: setdefs.h diff --git a/sys/boot/alpha/common/main.c b/sys/boot/alpha/common/main.c index 44847cd..2776b08 100644 --- a/sys/boot/alpha/common/main.c +++ b/sys/boot/alpha/common/main.c @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: main.c,v 1.6 1998/10/19 09:12:41 dfr Exp $ + * $Id: main.c,v 1.7 1998/10/24 00:31:21 msmith Exp $ */ @@ -63,6 +63,50 @@ memsize() return total; } +static void +extend_heap() +{ + struct rpb *hwrpb = (struct rpb *)HWRPB_ADDR; + struct mddt *mddtp; + struct mddt_cluster *memc; + int i; + unsigned long total = 0; + unsigned long startpfn; + vm_offset_t startva; + vm_offset_t startpte; + + /* + * Find the last usable memory cluster and add some of its pages + * to our address space. The 256k allowed by the firmware isn't quite + * adequate for our needs. + */ + mddtp = (struct mddt *)(((caddr_t)hwrpb) + hwrpb->rpb_memdat_off); + for (i = mddtp->mddt_cluster_cnt - 1; i >= 0; i--) { + memc = &mddtp->mddt_clusters[i]; + if (!(memc->mddt_usage & (MDDT_NONVOLATILE | MDDT_PALCODE))) + break; + } + + /* + * We want to extend the heap from 256k to 512k. With 8k pages + * (assumed), we need 32 pages. We take pages from the end of the + * last usable memory region, taking care to avoid the memory used + * by the kernel's message buffer. We allow 4 pages for the + * message buffer. + */ + startpfn = memc->mddt_pfn + memc->mddt_pg_cnt - 4 - 32; + startva = 0x20040000; + startpte = 0x40000000 + + (((startva >> 23) & 0x3ff) << PAGE_SHIFT) + + (((startva >> 13) & 0x3ff) << 3); + + for (i = 0; i < 32; i++) { + u_int64_t pte; + pte = ((startpfn + i) << 32) | 0x1101; + *(u_int64_t *) (startpte + 8 * i) = pte; + } +} + void main(void) { @@ -74,16 +118,16 @@ main(void) * alloc() is usable. The stack is buried inside us, so this is * safe. */ - setheap((void *)end, (void *)0x20040000); + extend_heap(); + setheap((void *)end, (void *)0x20080000); #ifdef LOADER /* * If this is the two stage disk loader, add the memory used by * the first stage to the heap. */ -#define STACK_SIZE 16384 free_region((void *)PRIMARY_LOAD_ADDRESS, - (void *)SECONDARY_LOAD_ADDRESS - STACK_SIZE); + (void *)SECONDARY_LOAD_ADDRESS); #endif /* diff --git a/sys/boot/alpha/libalpha/srmdisk.c b/sys/boot/alpha/libalpha/srmdisk.c index f7427bd..bd74ba7 100644 --- a/sys/boot/alpha/libalpha/srmdisk.c +++ b/sys/boot/alpha/libalpha/srmdisk.c @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: srmdisk.c,v 1.1.1.1 1998/08/21 03:17:42 msmith Exp $ */ /* @@ -63,6 +63,7 @@ static int bd_init(void); static int bd_strategy(void *devdata, int flag, daddr_t dblk, size_t size, void *buf, size_t *rsize); static int bd_open(struct open_file *f, void *vdev); static int bd_close(struct open_file *f); +static void bd_print(int verbose); struct open_disk { int od_fd; @@ -84,7 +85,8 @@ struct devsw srmdisk = { bd_strategy, bd_open, bd_close, - noioctl + noioctl, + bd_print }; /* @@ -120,6 +122,23 @@ bd_init(void) } /* + * Print information about disks + */ +static void +bd_print(int verbose) +{ + int i; + char line[80]; + + for (i = 0; i < nbdinfo; i++) { + sprintf(line, " disk%d: SRM drive %s", i, bdinfo[i].bd_name); + pager_output(line); + /* XXX more detail? */ + pager_output("\n"); + } +} + +/* * Attempt to open the disk described by (dev) for use by (f). * * Note that the philosophy here is "give them exactly what diff --git a/sys/boot/alpha/libalpha/start.S b/sys/boot/alpha/libalpha/start.S index 53063ab..39c3e48 100644 --- a/sys/boot/alpha/libalpha/start.S +++ b/sys/boot/alpha/libalpha/start.S @@ -1,5 +1,5 @@ /* - * $Id$ + * $Id: start.S,v 1.1.1.1 1998/08/21 03:17:42 msmith Exp $ * From: $NetBSD: start.S,v 1.4 1998/03/28 00:54:15 cgd Exp $ */ @@ -51,16 +51,15 @@ NESTED(start, 1, ENTRY_FRAME, ra, 0, 0) Lstartgp: LDGP(pv) -#ifndef PRIMARY_BOOTBLOCK - lda sp,start /* start stack below text */ - lda sp,-ENTRY_FRAME(sp) -#endif - lda a0,_edata lda a1,_end subq a1,a0,a1 CALL(bzero) +#if defined(NETBOOT) || defined(LOADER) + lda sp,stack + 8192 - ENTRY_FRAME +#endif + CALL(main) /* transfer to C */ XLEAF(_rtt, 0) @@ -83,3 +82,7 @@ LEAF(cpu_number, 0) call_pal PAL_VMS_mfpr_whami RET END(cpu_number) + +#if defined(NETBOOT) || defined(LOADER) +BSS(stack, 8192) +#endif diff --git a/sys/boot/alpha/netboot/Makefile b/sys/boot/alpha/netboot/Makefile index 92e1839..927522c 100644 --- a/sys/boot/alpha/netboot/Makefile +++ b/sys/boot/alpha/netboot/Makefile @@ -28,6 +28,7 @@ CFLAGS+= -I${LIBSTANDDIR} CFLAGS+= -I${.CURDIR}/.. CRT= start.o STRIP= +BINDIR?= /boot all: ${BASE} @@ -48,7 +49,7 @@ ${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBALPHA} ${CRT} vers.o setdef0.o setdef1.o vers.o ${LIBSTAND} ${LIBALPHA} ${LIBSTAND} >${.OBJDIR}/${BASE}.list start.o: ${.CURDIR}/../libalpha/start.S - ${CC} -c -DPRIMARY_BOOTBLOCK $< + ${CC} -c ${CFLAGS} $< setdef0.o: setdefs.h diff --git a/sys/boot/common/boot.c b/sys/boot/common/boot.c index 872840b..346cbef 100644 --- a/sys/boot/common/boot.c +++ b/sys/boot/common/boot.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: boot.c,v 1.7 1998/10/14 00:41:17 peter Exp $ + * $Id: boot.c,v 1.8 1998/10/31 02:53:09 msmith Exp $ */ /* @@ -247,7 +247,7 @@ getbootfile(int try) try--; } if (spec != NULL) { - if ((ep = strchr(spec, ';')) != NULL) { + if ((ep = strchr(spec, ',')) != NULL) { len = ep - spec; } else { len = strlen(spec); |