diff options
author | Eric L. Hernes <erich@FreeBSD.org> | 1999-04-16 21:44:23 +0000 |
---|---|---|
committer | Eric L. Hernes <erich@FreeBSD.org> | 1999-04-16 21:44:23 +0000 |
commit | 8caddd382bc85a5ad56959802961db45164837f5 (patch) | |
tree | a61ce03c22d45b82e46eeb49c9825fec415b01d4 /net/etherboot | |
parent | 832a2d614fd953d9db722b82458f32ab259b7265 (diff) | |
download | ports-8caddd382bc85a5ad56959802961db45164837f5.tar.gz ports-8caddd382bc85a5ad56959802961db45164837f5.zip |
Notes
Diffstat (limited to 'net/etherboot')
-rw-r--r-- | net/etherboot/Makefile | 20 | ||||
-rw-r--r-- | net/etherboot/distinfo | 1 | ||||
-rw-r--r-- | net/etherboot/files/patch-aa | 384 | ||||
-rw-r--r-- | net/etherboot/pkg-comment | 2 | ||||
-rw-r--r-- | net/etherboot/pkg-descr | 46 | ||||
-rw-r--r-- | net/etherboot/pkg-plist | 0 |
6 files changed, 453 insertions, 0 deletions
diff --git a/net/etherboot/Makefile b/net/etherboot/Makefile new file mode 100644 index 000000000000..e8dddd286ecc --- /dev/null +++ b/net/etherboot/Makefile @@ -0,0 +1,20 @@ + +DISTNAME= etherboot-4.1 +PKGNAME= etherboot-4.1 +CATEGORIES= net +DISTFILES= etherboot-4.1pre9.tar.bz2 +MASTER_SITES= http://www.slug.org.au/etherboot/ + +MAINTAINER= ambrisko@whistle.com + +BUILD_DEPENDS= bzip2:${PORTSDIR}/archivers/bzip2 \ + ${PREFIX}/bin/as86:${PORTSDIR}/devel/bcc + +EXTRACT_CMD= bzip2 -d < +EXTRACT_BEFORE_ARGS= +EXTRACT_AFTER_ARGS= | tar xf - + +USE_GMAKE=1 # note uses is from emulation package +WRKSRC= ${WRKDIR}/${DISTNAME}/src-32 + +.include <bsd.port.mk> diff --git a/net/etherboot/distinfo b/net/etherboot/distinfo new file mode 100644 index 000000000000..32fbe5b47cce --- /dev/null +++ b/net/etherboot/distinfo @@ -0,0 +1 @@ +MD5 (etherboot-4.1pre9.tar.bz2) = a15aeeecc4ab5fff98e253598ccc71f9 diff --git a/net/etherboot/files/patch-aa b/net/etherboot/files/patch-aa new file mode 100644 index 000000000000..01f32ea233ce --- /dev/null +++ b/net/etherboot/files/patch-aa @@ -0,0 +1,384 @@ +# +# patch to fix compile/build time problems with FreeBSD +# patches to actually make the thing boot a FreeBSD kernel +# are separate... +# +diff -rNu ../../../virgin/etherboot-4.1/src-32/3c905b.c ./3c905b.c +--- ../../../virgin/etherboot-4.1/src-32/3c905b.c Fri Mar 5 08:00:48 1999 ++++ ./3c905b.c Tue Apr 13 16:31:18 1999 +@@ -31,7 +31,7 @@ + + #include "etherboot.h" + #include "nic.h" +-#include <linux/pci.h> ++/*#include <linux/pci.h>*/ + + #define TIME_OUT 100 + #define XCVR_MAGIC (0x5A00) +diff -rNu ../../../virgin/etherboot-4.1/src-32/config.c ./config.c +--- ../../../virgin/etherboot-4.1/src-32/config.c Wed Mar 31 23:27:42 1999 ++++ ./config.c Tue Apr 13 16:31:19 1999 +@@ -10,7 +10,7 @@ + /* || others later */ + #if defined(ETHERBOOT32) /* only for 32 bit machines */ + #define INCLUDE_PCI +-#include <linux/pci.h> ++/*#include <linux/pci.h>*/ + #include "pci.h" + static unsigned short pci_ioaddrs[16]; + +diff -rNu ../../../virgin/etherboot-4.1/src-32/eepro100.c ./eepro100.c +--- ../../../virgin/etherboot-4.1/src-32/eepro100.c Thu Jan 14 06:18:20 1999 ++++ ./eepro100.c Tue Apr 13 16:31:19 1999 +@@ -103,7 +103,7 @@ + + #include "etherboot.h" + #include "nic.h" +-#include <linux/pci.h> ++/*#include <linux/pci.h>*/ + + #undef virt_to_bus + #define virt_to_bus(x) ((unsigned long)x) +diff -rNu ../../../virgin/etherboot-4.1/src-32/epic100.c ./epic100.c +--- ../../../virgin/etherboot-4.1/src-32/epic100.c Thu Jan 14 06:19:05 1999 ++++ ./epic100.c Tue Apr 13 16:31:19 1999 +@@ -4,7 +4,7 @@ + + #include "etherboot.h" + #include "nic.h" +-#include <linux/pci.h> ++/*#include <linux/pci.h>*/ + #include "epic100.h" + + #undef virt_to_bus +diff -rNu ../../../virgin/etherboot-4.1/src-32/linux-asm-io.h ./linux-asm-io.h +--- ../../../virgin/etherboot-4.1/src-32/linux-asm-io.h Wed Dec 31 18:00:00 1969 ++++ ./linux-asm-io.h Tue Apr 13 16:31:19 1999 +@@ -0,0 +1,213 @@ ++#ifndef _ASM_IO_H ++#define _ASM_IO_H ++ ++/* ++ * This file contains the definitions for the x86 IO instructions ++ * inb/inw/inl/outb/outw/outl and the "string versions" of the same ++ * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing" ++ * versions of the single-IO instructions (inb_p/inw_p/..). ++ * ++ * This file is not meant to be obfuscating: it's just complicated ++ * to (a) handle it all in a way that makes gcc able to optimize it ++ * as well as possible and (b) trying to avoid writing the same thing ++ * over and over again with slight variations and possibly making a ++ * mistake somewhere. ++ */ ++ ++/* ++ * Thanks to James van Artsdalen for a better timing-fix than ++ * the two short jumps: using outb's to a nonexistent port seems ++ * to guarantee better timings even on fast machines. ++ * ++ * On the other hand, I'd like to be sure of a non-existent port: ++ * I feel a bit unsafe about using 0x80 (should be safe, though) ++ * ++ * Linus ++ */ ++ ++#ifdef SLOW_IO_BY_JUMPING ++#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:") ++#else ++#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80") ++#endif ++ ++#ifdef REALLY_SLOW_IO ++#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; } ++#else ++#define SLOW_DOWN_IO __SLOW_DOWN_IO ++#endif ++ ++/* ++ * Change virtual addresses to physical addresses and vv. ++ * These are trivial on the 1:1 Linux/i386 mapping (but if we ever ++ * make the kernel segment mapped at 0, we need to do translation ++ * on the i386 as well) ++ */ ++extern inline unsigned long virt_to_phys(volatile void * address) ++{ ++ return (unsigned long) address; ++} ++ ++extern inline void * phys_to_virt(unsigned long address) ++{ ++ return (void *) address; ++} ++ ++/* ++ * IO bus memory addresses are also 1:1 with the physical address ++ */ ++#define virt_to_bus virt_to_phys ++#define bus_to_virt phys_to_virt ++ ++/* ++ * readX/writeX() are used to access memory mapped devices. On some ++ * architectures the memory mapped IO stuff needs to be accessed ++ * differently. On the x86 architecture, we just read/write the ++ * memory location directly. ++ */ ++#define readb(addr) (*(volatile unsigned char *) (addr)) ++#define readw(addr) (*(volatile unsigned short *) (addr)) ++#define readl(addr) (*(volatile unsigned int *) (addr)) ++ ++#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b)) ++#define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b)) ++#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b)) ++ ++#define memset_io(a,b,c) memset((void *)(a),(b),(c)) ++#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) ++#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) ++ ++/* ++ * Again, i386 does not require mem IO specific function. ++ */ ++ ++#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) ++ ++/* ++ * Talk about misusing macros.. ++ */ ++ ++#define __OUT1(s,x) \ ++extern inline void __out##s(unsigned x value, unsigned short port) { ++ ++#define __OUT2(s,s1,s2) \ ++__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1" ++ ++#define __OUT(s,s1,x) \ ++__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); } \ ++__OUT1(s##c,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); } \ ++__OUT1(s##_p,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); SLOW_DOWN_IO; } \ ++__OUT1(s##c_p,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); SLOW_DOWN_IO; } ++ ++#define __IN1(s) \ ++extern inline RETURN_TYPE __in##s(unsigned short port) { RETURN_TYPE _v; ++ ++#define __IN2(s,s1,s2) \ ++__asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0" ++ ++#define __IN(s,s1,i...) \ ++__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); return _v; } \ ++__IN1(s##c) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); return _v; } \ ++__IN1(s##_p) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); SLOW_DOWN_IO; return _v; } \ ++__IN1(s##c_p) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); SLOW_DOWN_IO; return _v; } ++ ++#define __INS(s) \ ++extern inline void ins##s(unsigned short port, void * addr, unsigned long count) \ ++{ __asm__ __volatile__ ("cld ; rep ; ins" #s \ ++: "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } ++ ++#define __OUTS(s) \ ++extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \ ++{ __asm__ __volatile__ ("cld ; rep ; outs" #s \ ++: "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } ++ ++#define RETURN_TYPE unsigned char ++/* __IN(b,"b","0" (0)) */ ++__IN(b,"") ++#undef RETURN_TYPE ++#define RETURN_TYPE unsigned short ++/* __IN(w,"w","0" (0)) */ ++__IN(w,"") ++#undef RETURN_TYPE ++#define RETURN_TYPE unsigned int ++__IN(l,"") ++#undef RETURN_TYPE ++ ++__OUT(b,"b",char) ++__OUT(w,"w",short) ++__OUT(l,,int) ++ ++__INS(b) ++__INS(w) ++__INS(l) ++ ++__OUTS(b) ++__OUTS(w) ++__OUTS(l) ++ ++/* ++ * Note that due to the way __builtin_constant_p() works, you ++ * - can't use it inside a inline function (it will never be true) ++ * - you don't have to worry about side effects within the __builtin.. ++ */ ++#define outb(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outbc((val),(port)) : \ ++ __outb((val),(port))) ++ ++#define inb(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inbc(port) : \ ++ __inb(port)) ++ ++#define outb_p(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outbc_p((val),(port)) : \ ++ __outb_p((val),(port))) ++ ++#define inb_p(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inbc_p(port) : \ ++ __inb_p(port)) ++ ++#define outw(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outwc((val),(port)) : \ ++ __outw((val),(port))) ++ ++#define inw(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inwc(port) : \ ++ __inw(port)) ++ ++#define outw_p(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outwc_p((val),(port)) : \ ++ __outw_p((val),(port))) ++ ++#define inw_p(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inwc_p(port) : \ ++ __inw_p(port)) ++ ++#define outl(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outlc((val),(port)) : \ ++ __outl((val),(port))) ++ ++#define inl(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inlc(port) : \ ++ __inl(port)) ++ ++#define outl_p(val,port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __outlc_p((val),(port)) : \ ++ __outl_p((val),(port))) ++ ++#define inl_p(port) \ ++((__builtin_constant_p((port)) && (port) < 256) ? \ ++ __inlc_p(port) : \ ++ __inl_p(port)) ++ ++#endif +diff -rNu ../../../virgin/etherboot-4.1/src-32/linuxdef.h ./linuxdef.h +--- ../../../virgin/etherboot-4.1/src-32/linuxdef.h Fri Nov 6 04:53:58 1998 ++++ ./linuxdef.h Tue Apr 13 16:31:19 1999 +@@ -1,7 +1,7 @@ + #ifndef __LINUXDEF_H__ + #define __LINUXDEF_H__ + +-#ifdef __linux ++#if defined(__linux) + #define ETHERBOOT32 + #include <asm/byteorder.h> + #include <asm/io.h> +@@ -9,6 +9,10 @@ + Someday I'll fix all the files. */ + #define _edata edata /* ELF does not prepend a _ */ + #define _end end ++#else ++#define ETHERBOOT32 ++#include <sys/types.h> ++#include "linux-asm-io.h" + #endif + + #ifdef __BCC__ +diff -rNu ../../../virgin/etherboot-4.1/src-32/makerom.c ./makerom.c +--- ../../../virgin/etherboot-4.1/src-32/makerom.c Sat Sep 19 07:54:00 1998 ++++ ./makerom.c Tue Apr 13 16:31:19 1999 +@@ -79,6 +79,7 @@ + memcpy(&rom[romsize-len-2], identstring, len); + } + ++ + /* Accepts a spec of the form vendorid,deviceid where the ids are + numeric strings accepted by strtoul */ + void getpciids(char *spec) +@@ -155,13 +156,14 @@ + /* If that is 0, choose the right size */ + if (romsize == 0) + romsize = MAXROMSIZE; +- if ((rom = malloc(romsize)) == 0) { ++ if ((rom = malloc(romsize+1)) == 0) { + fprintf(stderr, "Cannot malloc memory for ROM buffer\n"); + exit(1); + } + /* fill with FFs, slightly less work for PROM burner + and allows limited patching */ + memset(rom, 0xFF, romsize); ++ rom[romsize]=0; + if ((fs = fread(rom, sizeof(char), romsize, fd)) < 0) { + perror("fread"); + exit(1); +diff -rNu ../../../virgin/etherboot-4.1/src-32/objdump86.c ./objdump86.c +--- ../../../virgin/etherboot-4.1/src-32/objdump86.c Sun Feb 22 04:39:10 1998 ++++ ./objdump86.c Tue Apr 13 16:31:19 1999 +@@ -1,5 +1,10 @@ + #include <stdio.h> ++#ifdef __FreeBSD__ ++#include <a.out.h> ++#define A_HEADERSIZ (sizeof(struct exec)) ++#else + #include "a.out.h" ++#endif + + /* Fix to work when running on big-endian systems - */ + /* jim.hague@acm.org, 1998-02-06. */ +@@ -33,19 +38,22 @@ + if ((f = fopen(filename, "r")) == NULL) + { + perror(filename); +- return; ++ exit(1); + } + if (fread(&ex, sizeof(ex), 1, f) != 1) + { + fprintf(stderr, "%s: Cannot read header\n", filename); + fclose(f); +- return; ++ exit(1); + } +- if (BADMAG(ex)) ++ if (N_BADMAG(ex)) + { + fprintf(stderr, "%s: Not an a.out file\n", filename); ++ fprintf(stderr, "bad magic (%#x %#x)", ++ ex.a_midmag & 0xff, ++ ex.a_midmag & 0xff00 >>8); + fclose(f); +- return; ++ exit(1) ; + } + if (fseek(f, (long)A_HEADERSIZ, SEEK_SET) < 0) + { +diff -rNu ../../../virgin/etherboot-4.1/src-32/pci.h ./pci.h +--- ../../../virgin/etherboot-4.1/src-32/pci.h Wed Mar 31 23:15:37 1999 ++++ ./pci.h Tue Apr 13 16:37:44 1999 +@@ -87,8 +87,18 @@ + #define PCI_DEVICE_ID_KTI_ET32P2 0x3000 + #define PCI_VENDOR_ID_NETVIN 0x4a14 + #define PCI_DEVICE_ID_NETVIN_NV5000SC 0x5000 ++#define PCI_VENDOR_ID_3COM 0x10b7 ++#define PCI_DEVICE_ID_3COM_3C905B_TX 0x9055 ++#define PCI_VENDOR_ID_INTEL 0x8086 ++#define PCI_DEVICE_ID_INTEL_82557 0x1229 ++#define PCI_VENDOR_ID_AMD 0x1022 ++#define PCI_DEVICE_ID_AMD_LANCE 0x2000 ++#define PCI_VENDOR_ID_DEC 0x1011 ++#define PCI_DEVICE_ID_DEC_TULIP 0x0002 ++#define PCI_DEVICE_ID_DEC_TULIP_FAST 0x0009 ++#define PCI_DEVICE_ID_DEC_TULIP_PLUS 0x0014 + +-/*#define PCI_VENDOR_ID_SMC 0x10B8*/ ++#define PCI_VENDOR_ID_SMC 0x10B8 + #ifndef PCI_DEVICE_ID_SMC_EPIC100 + # define PCI_DEVICE_ID_SMC_EPIC100 0x0005 + #endif diff --git a/net/etherboot/pkg-comment b/net/etherboot/pkg-comment new file mode 100644 index 000000000000..929557386106 --- /dev/null +++ b/net/etherboot/pkg-comment @@ -0,0 +1,2 @@ +Netboot FreeBSD a.out or ELF kernels. Has menu support and several device +drivers. diff --git a/net/etherboot/pkg-descr b/net/etherboot/pkg-descr new file mode 100644 index 000000000000..e313d5752cd8 --- /dev/null +++ b/net/etherboot/pkg-descr @@ -0,0 +1,46 @@ +This code was originaly from FreeBSD and then the Linux folks greatly +enhanced its functionality and capabilities. It tftp's the kernel +and boots it. It also has a menu capability. The only bad part is +that it needs to be built in an Linux environment and needs my patch +to linux_devel to run "brandelf" on static executables. Without this +patch the intermediate static files will not run. + +.rom & .com images are built in work/etherboot/src-32. Edit "Config" +in that directory for more features. + +Note this is a memory corruption issue when I pre-populate the bootinfo +structure I need to look at it more. + +Here is a sample dhcpd.conf entry for isc-dhcp. + +server-identifier 192.168.1.31; + +group { + subnet 192.168.1.0 netmask 255.255.255.0 { + range dynamic-bootp 192.168.1.10 192.168.1.19; + dynamic-bootp-lease-length 3600; + option subnet-mask 255.255.255.0; + option broadcast-address 192.168.1.255; + option routers 192.168.1.30; + option root-path "/crab/home1/usr/upgrade"; + + + host current3 { + hardware ethernet 0:a0:c9:c7:e1:6f; + fixed-address 192.168.1.25; + option subnet-mask 255.255.255.0; + option broadcast-address 192.168.1.255; + option routers 192.168.1.30; + option root-path "192.168.1.31:/crab/home1/usr/current"; + option option-128 "192.168.1.31:/crab/home1/usr/current"; +# option option-132 00:00:90:40; + option option-132 00:00:90:00; # howto boot flags + option option-176 3; + option option-160 "timeout=30:default=206:"; + option option-192 "BSD:::/tftpboot/kernel"; + option option-193 "Load:::/tftpboot/kernel.load"; + option option-195 "MiniDOS:::/tftpboot/pcdr"; + option option-206 "ELF:::tftpboot/kernel.elf"; + } + } +} diff --git a/net/etherboot/pkg-plist b/net/etherboot/pkg-plist new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/net/etherboot/pkg-plist |