diff options
-rw-r--r-- | sys/arch/amd64/stand/libsa/exec_i386.c | 7 | ||||
-rw-r--r-- | sys/arch/amd64/stand/libsa/pxe.c | 6 | ||||
-rw-r--r-- | sys/arch/amd64/stand/pxeboot/conf.c | 4 | ||||
-rw-r--r-- | sys/arch/amd64/stand/pxeboot/devopen.c | 14 |
4 files changed, 25 insertions, 6 deletions
diff --git a/sys/arch/amd64/stand/libsa/exec_i386.c b/sys/arch/amd64/stand/libsa/exec_i386.c index f5559048a01..d05fb66b3db 100644 --- a/sys/arch/amd64/stand/libsa/exec_i386.c +++ b/sys/arch/amd64/stand/libsa/exec_i386.c @@ -1,4 +1,4 @@ -/* $OpenBSD: exec_i386.c,v 1.4 2004/03/21 21:37:41 tom Exp $ */ +/* $OpenBSD: exec_i386.c,v 1.5 2007/07/27 17:48:01 tom Exp $ */ /* * Copyright (c) 1997-1998 Michael Shalayeff @@ -40,6 +40,8 @@ typedef void (*startfuncp)(int, int, int, int, int, int, int, int) __attribute__ ((noreturn)); +char *bootmac = NULL; + void run_loadfile(u_long *marks, int howto) { @@ -60,6 +62,9 @@ run_loadfile(u_long *marks, int howto) cd.conspeed = com_speed; addbootarg(BOOTARG_CONSDEV, sizeof(cd), &cd); + if (bootmac != NULL) + addbootarg(BOOTARG_BOOTMAC, sizeof(bios_bootmac_t), bootmac); + /* Pass memory map to the kernel */ mem_pass(); diff --git a/sys/arch/amd64/stand/libsa/pxe.c b/sys/arch/amd64/stand/libsa/pxe.c index 58de9a8d305..a71e37f1b95 100644 --- a/sys/arch/amd64/stand/libsa/pxe.c +++ b/sys/arch/amd64/stand/libsa/pxe.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pxe.c,v 1.4 2006/05/20 22:37:43 deraadt Exp $ */ +/* $OpenBSD: pxe.c,v 1.5 2007/07/27 17:48:01 tom Exp $ */ /* $NetBSD: pxe.c,v 1.5 2003/03/11 18:29:00 drochner Exp $ */ /* @@ -115,6 +115,8 @@ BOOTPLAYER bootplayer; struct in_addr servip; /* for tftp */ /* XXX init this */ +extern char *bootmac; /* To pass to kernel */ + /* static struct btinfo_netif bi_netif; */ /***************************************************************************** @@ -230,7 +232,7 @@ pxe_netif_open() } bcopy(bootplayer.CAddr, desc.myea, ETHER_ADDR_LEN); - addbootarg(BOOTARG_BOOTMAC, sizeof(bios_bootmac_t), bootplayer.CAddr); + bootmac = bootplayer.CAddr; /* * Since the PXE BIOS has already done DHCP, make sure we diff --git a/sys/arch/amd64/stand/pxeboot/conf.c b/sys/arch/amd64/stand/pxeboot/conf.c index 78f17a4ef37..8c90c92c7d1 100644 --- a/sys/arch/amd64/stand/pxeboot/conf.c +++ b/sys/arch/amd64/stand/pxeboot/conf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: conf.c,v 1.15 2007/05/30 01:25:43 tom Exp $ */ +/* $OpenBSD: conf.c,v 1.16 2007/07/27 17:48:01 tom Exp $ */ /* * Copyright (c) 2004 Tom Cosgrove @@ -44,7 +44,7 @@ #include "pxeboot.h" #include "pxe_net.h" -const char version[] = "2.00"; +const char version[] = "2.01"; int debug = 0; #undef _TEST diff --git a/sys/arch/amd64/stand/pxeboot/devopen.c b/sys/arch/amd64/stand/pxeboot/devopen.c index ac30c953c30..f6ba14639ac 100644 --- a/sys/arch/amd64/stand/pxeboot/devopen.c +++ b/sys/arch/amd64/stand/pxeboot/devopen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: devopen.c,v 1.3 2007/06/27 20:29:37 mk Exp $ */ +/* $OpenBSD: devopen.c,v 1.4 2007/07/27 17:48:01 tom Exp $ */ /* * Copyright (c) 2004 Tom Cosgrove @@ -38,6 +38,8 @@ extern char *fs_name[]; extern int nfsname; extern struct devsw netsw[]; +extern char *bootmac; /* Gets passed to kernel for network boot */ + /* XXX use slot for 'rd' for 'hd' pseudo-device */ const char bdevs[][4] = { "wd", "", "fd", "", "sd", "st", "cd", "mcd", @@ -96,6 +98,16 @@ devopen(struct open_file *f, const char *fname, char **file) } } + /* + * Assume that any network filesystems would be caught by the + * code above, so that the next phase of devopen() is only for + * local devices. + * + * Clear bootmac, to signal that we loaded this file from a + * non-network device. + */ + bootmac = NULL; + for (i = 0; i < ndevs && rc != 0; dp++, i++) { #ifdef DEBUG if (debug) |