summaryrefslogtreecommitdiffstats
path: root/net/etherboot
diff options
context:
space:
mode:
authorerich <erich@FreeBSD.org>1999-04-16 21:44:23 +0000
committererich <erich@FreeBSD.org>1999-04-16 21:44:23 +0000
commit88df0dddd411925f09117f5cb0f155cf211e6aec (patch)
tree4693f6fe4a5b406776d0ee03c37e2afb073e8706 /net/etherboot
parent299e45203c31bf88ab672f2a093fcaa569fa2357 (diff)
downloadFreeBSD-ports-88df0dddd411925f09117f5cb0f155cf211e6aec.zip
FreeBSD-ports-88df0dddd411925f09117f5cb0f155cf211e6aec.tar.gz
add etherboot
PR: ports/9480 Submitted by: Doug Ambrisko (ambrisko@whistle.com) with a little tuning by me
Diffstat (limited to 'net/etherboot')
-rw-r--r--net/etherboot/Makefile20
-rw-r--r--net/etherboot/distinfo1
-rw-r--r--net/etherboot/files/patch-aa384
-rw-r--r--net/etherboot/pkg-comment2
-rw-r--r--net/etherboot/pkg-descr46
-rw-r--r--net/etherboot/pkg-plist0
6 files changed, 453 insertions, 0 deletions
diff --git a/net/etherboot/Makefile b/net/etherboot/Makefile
new file mode 100644
index 0000000..e8dddd2
--- /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 0000000..32fbe5b
--- /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 0000000..01f32ea
--- /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 0000000..9295573
--- /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 0000000..e313d57
--- /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 0000000..e69de29
--- /dev/null
+++ b/net/etherboot/pkg-plist
OpenPOWER on IntegriCloud