##############################################################################
##############################################################################
#
# IMPORTANT!
# 
# The use of this file to set options that affect only single object
# files is deprecated, because changing anything in this file results
# in a complete rebuild, which is slow.  All options are gradually
# being migrated to config.h, which does not suffer from this problem.
# 
# Only options that affect the entire build (e.g. overriding the $(CC)
# Makefile variable) should be placed in here.
#
##############################################################################
##############################################################################


#
# Config for Etherboot/32
#
#
# Do not delete the tag OptionDescription and /OptionDescription
# It is used to automatically generate the documentation.
#
# @OptionDescription@
#	User interaction options:
#
#	-DASK_BOOT=n
#			Ask "Boot from (N)etwork ... or (Q)uit? " 
#			at startup, timeout after n seconds (0 = no timeout).
#			If unset or negative, don't ask and boot immediately
#			using the default.
#	-DBOOT_FIRST
#	-DBOOT_SECOND
#	-DBOOT_THIRD
#			On timeout or Return key from previous
#			question, selects the order to try to boot from
#			various devices.
#			(alternatives: BOOT_NIC, BOOT_DISK,
#			 BOOT_FLOPPY, BOOT_NOTHING)
#			See etherboot.h for prompt and answer strings.
#			BOOT_DISK and BOOT_FLOPPY work only where a driver
#			exists, e.g. in LinuxBIOS.
#			They have no effect on PCBIOS.
#	-DBOOT_INDEX	The device to boot from 0 == any device.
#			1 == The first nic found.
#			2 == The second nic found
#			...
#			BOOT_INDEX only applies to the BOOT_FIRST.  BOOT_SECOND 
#			and BOOT_THIRD search through all of the boot devices.
#	-DBAR_PROGRESS
#			Use rotating bar instead of sequential dots
#			to indicate an IP packet transmitted.
#
#	Boot order options:
#
#	-DBOOT_CLASS_FIRST
#	-DBOOT_CLASS_SECOND
#	-DBOOT_CLASS_THIRD
#			Select the priority of the boot classes
#			Valid values are:
#				BOOT_NIC
#				BOOT_DISK
#				BOOT_FLOPPY
#	BOOT_DISK and BOOT_FLOPPY work only where a driver exists,
#	e.g. in LinuxBIOS.  They have no effect on PCBIOS.
#
#	Boot autoconfiguration protocol options:
#
#	-DALTERNATE_DHCP_PORTS_1067_1068
#			Use ports 1067 and 1068 for DHCP instead of 67 and 68.
#			As these ports are non-standard, you need to configure
#			your DHCP server to use them. This option gets around
#			existing DHCP servers which cannot be touched, for
#			one reason or another, at the cost of non-standard
#			boot images.
#	-DNO_DHCP_SUPPORT
#			Use BOOTP instead of DHCP.
#	-DRARP_NOT_BOOTP
#			Use RARP instead of BOOTP/DHCP.
#	-DREQUIRE_VCI_ETHERBOOT
#			Require an encapsulated Vendor Class Identifier
#			of "Etherboot" in the DHCP reply
#			Requires DHCP support.
#	-DDHCP_CLIENT_ID=\"Identifier\"
#	-DDHCP_CLIENT_ID_LEN=<Client ID length in octets>
#	-DDHCP_CLIENT_ID_TYPE=<Client ID type>
#			Specify a RFC2132 Client Identifier option, length and type.
#			Requires DHCP support.
#	-DDHCP_USER_CLASS=\"UserClass\"
#	-DDHCP_USER_CLASS_LEN=<User Class length in octets>
# 			Specify a RFC3004 User Class option and length. Use this
#			option to set a UC (or multiple UCs) rather than munge the
#			client Vendor Class ID.
#			Requires DHCP support.
#	-DALLOW_ONLY_ENCAPSULATED
#			Ignore Etherboot-specific options that are not within
#			the Etherboot encapsulated options field.  This option
#			should be enabled unless you have a legacy DHCP server
#			configuration from the bad old days before the use of
#			encapsulated Etherboot options.
#	-DDEFAULT_BOOTFILE=\"default_bootfile_name\"
#			Define a default bootfile for the case where your DHCP
#			server does not provide the information.  Example:
#			  -DDEFAULT_BOOTFILE="tftp:///tftpboot/kernel"
#			If you do not specify this option, then DHCP offers that
#			do not specify bootfiles will be ignored.
#
#	NIC tuning parameters:
#
#	-DALLMULTI
#			Turns on multicast reception in the NICs.
#
#	Boot tuning parameters:
#
#	-DCONGESTED
#			Turns on packet retransmission.	 Use it on a
#			congested network, where the normal operation
#			can't boot the image.
#	-DBACKOFF_LIMIT
#			Sets the maximum RFC951 backoff exponent to n.
#			Do not set this unreasonably low, because on networks
#			with many machines they can saturate the link
#			(the delay corresponding to the exponent is a random
#			time in the range 0..3.5*2^n seconds).	Use 5 for a
#			VERY small network (max. 2 minutes delay), 7 for a
#			medium sized network (max. 7.5 minutes delay) or 10
#			for a really huge network with many clients, frequent
#			congestions (max. 1  hour delay).  On average the
#			delay time will be half the maximum value.  If in
#			doubt about the consequences, use a larger value.
#			Also keep in mind that the number of retransmissions
#			is not changed by this setting, so the default of 20
#			may no longer be appropriate.  You might need to set
#			MAX_ARP_RETRIES, MAX_BOOTP_RETRIES, MAX_TFTP_RETRIES
#			and MAX_RPC_RETRIES to a larger value.
#	-DTIMEOUT=n
#			Use with care!! See above.
#			Sets the base of RFC2131 sleep interval to n.
#			This can be used with -DBACKOFF_LIMIT=0 to get a small
#			and constant (predictable) retry interval for embedded
#			devices. This is to achieve short boot delays if both
#			the DHCP Server and the embedded device will be powered
#			on the same time. Otherwise if the DHCP server is ready
#			the client could sleep the next exponentially timeout,
#			e.g. 70 seconds or more. This is not what you want.
#			n should be a multiple of TICKS_PER_SEC (18).
#
#	Boot device options:
#
#	-DTRY_FLOPPY_FIRST
#			If > 0, tries that many times to read the boot
#			sector from a floppy drive before booting from
#			ROM. If successful, does a local boot.
#			It assumes the floppy is bootable.
#	-DEXIT_IF_NO_OFFER
#			If no IP offer is obtained, exit and
#			let the BIOS continue.
#			The accessibility of the TFTP server has no effect,
#			so configure your DHCP/BOOTP server properly.
#			You should probably reduce MAX_BOOTP_RETRIES
#			to a small number like 3.
#
#	Boot image options:
#
#	-DFREEBSD_KERNEL_ENV
#			Pass in FreeBSD kernel environment
#	-DAOUT_LYNX_KDI
#			Add Lynx a.out KDI support
#	-DMULTICAST_LEVEL1
#			Support for sending multicast packets
#	-DMULTICAST_LEVEL2
#			Support for receiving multicast packets
#
#	Interface export options:
#
#	-DPXE_EXPORT
#			Export a PXE API interface.  This is work in
#			progress.  Note that you won't be able to load
#			PXE NBPs unless you also use -DPXE_IMAGE.
#	-DPXE_STRICT
#			Strict(er) compliance with the PXE
#			specification as published by Intel.  This may
#                       or may not be a good thing depending on your
#			view of the spec...
#	-DPXE_DHCP_STRICT
#			Strict compliance of the DHCP request packets
#			with the PXE specification as published by
#			Intel.  This may or may not be a good thing
#			depending on your view of whether requesting
#			vendor options which don't actually exist is
#			pointless or not. You probably want this
#			option if you intend to use Windows RIS or
#			similar.
#
#	Obscure options you probably don't need to touch:
#
#	-DZPXE_SUFFIX_STRIP
#			If the last 5 characters of the filename passed to Etherboot is
#			".zpxe" then strip it off. This is useful in cases where a DHCP server
#			is not able to be configured to support conditionals. The way it works
#			is that the DHCP server is configured with a filename like
#			"foo.nbi.zpxe" so that when PXE asks for a filename it gets that, and
#			loads Etherboot from that file. Etherboot then starts up and once
#			again asks the DHCP server for a filename and once again gets
#			foo.nbi.zpxe, but with this option turned on loads "foo.nbi" instead.
#			This allows people to use Etherboot who might not otherwise be able to
#			because their DHCP servers won't let them.
#
#	-DPOWERSAVE
#			Halt the processor when waiting for keyboard input
#			which saves power while waiting for user interaction.
#			Good for compute clusters and VMware emulation.
#			But may not work for all CPUs.
#
# @/OptionDescription@

# These default settings compile Etherboot with a small number of options.
# You may wish to enable more of the features if the size of your ROM allows.


# For prompting and default on timeout
CFLAGS+=	-DASK_BOOT=3 -DBOOT_FIRST=BOOT_NIC
# If you would like to attempt to boot from other devices as well as the network.
# CFLAGS+=	-DBOOT_SECOND=BOOT_FLOPPY
# CFLAGS+=	-DBOOT_THIRD=BOOT_DISK
# CFLAGS+=	-DBOOT_INDEX=0

# If you prefer the old style rotating bar progress display
# CFLAGS+=	-DBAR_PROGRESS

# Show size indicator
# CFLAGS+=	-DSIZEINDICATOR

# Enabling this creates non-standard images which use ports 1067 and 1068
# for DHCP/BOOTP
# CFLAGS+=	-DALTERNATE_DHCP_PORTS_1067_1068

# Enabling this makes the boot ROM require a Vendor Class Identifier
# of "Etherboot" in the Vendor Encapsulated Options
# This can be used to reject replies from servers other than the one
# we want to give out addresses to us, but it will prevent Etherboot
# from getting an IP lease until you have configured DHCPD correctly
# CFLAGS+=	-DREQUIRE_VCI_ETHERBOOT

# EXPERIMENTAL! Set DHCP_CLIENT_ID to create a Client Identifier (DHCP
# option 61, see RFC2132 section 9.14) when Etherboot sends the DHCP
# DISCOVER and REQUEST packets.  This ID must UNIQUELY identify each
# client on your local network.  Set DHCP_CLIENT_ID_TYPE to the
# appropriate hardware type as described in RFC2132 / RFC1700; this
# almost certainly means using '1' if the Client ID is an Ethernet MAC
# address and '0' otherwise. Set DHCP_CLIENT_ID_LEN to the length of
# the Client ID in octets (this is not a null terminated C string, do
# NOT add 1 for a terminator and do NOT add an extra 1 for the
# hardware type octet).  Note that to identify your client using the
# normal default MAC address of your NIC, you do NOT need to set this
# option, as the MAC address is automatically used in the
# hwtype/chaddr field; note also that this field only sets the DHCP
# option: it does NOT change the MAC address used by the client.

# CFLAGS+=	-DDHCP_CLIENT_ID="'C','L','I','E','N','T','0','0','1'" \
#		-DDHCP_CLIENT_ID_LEN=9 -DDHCP_CLIENT_ID_TYPE=0

# CFLAGS+=	-DDHCP_CLIENT_ID="0xDE,0xAD,0xBE,0xEF,0xDE,0xAD" \
#		-DDHCP_CLIENT_ID_LEN=6 -DDHCP_CLIENT_ID_TYPE=1

# EXPERIMENTAL! Set DHCP_USER_CLASS to create a User Class option (see
# RFC3004) when Etherboot sends the DHCP DISCOVER and REQUEST packets.
# This can be used for classification of clients, typically so that a
# DHCP server can send an appropriately tailored reply.  Normally, a
# string identifies a class of to which this client instance belongs
# which is useful in your network, such as a department ('FINANCE' or
# 'MARKETING') or hardware type ('THINCLIENT' or 'KIOSK').  Set
# DHCP_USER_CLASS_LEN to the length of DHCP_USER_CLASS in octets.
# This is NOT a null terminated C string, do NOT add 1 for a
# terminator.  RFC3004 advises how to lay out multiple User Class
# options by using an octet for the length of each string, as in this
# example.  It is, of course, up to the server to parse this.

# CFLAGS+=	-DDHCP_USER_CLASS="'T','E','S','T','C','L','A','S','S'"	\
#		-DDHCP_USER_CLASS_LEN=9

# CFLAGS+=	-DDHCP_USER_CLASS="5,'A','L','P','H','A',4,'B','E','T','A'" \
#		-DDHCP_USER_CLASS_LEN=11

# Set to enable FILO support
# for FILO support it will make main call pci_init
# INCLUDE_FILO=y
ifdef	INCLUDE_FILO
CFLAGS+=	-DCONFIG_FILO
endif

# Enabling this causes Etherboot to ignore Etherboot-specific options
# that are not within an Etherboot encapsulated options field.
# This option should be enabled unless you have a legacy DHCP server
# configuration from the bad old days before the use of
# encapsulated Etherboot options.
CFLAGS+=	-DALLOW_ONLY_ENCAPSULATED

# Disable DHCP support
# CFLAGS+=	-DNO_DHCP_SUPPORT

# Specify a default bootfile to be used if the DHCP server does not
# provide the information.  If you do not specify this option, then
# DHCP offers that do not contain bootfiles will be ignored.
# CFLAGS+=	-DDEFAULT_BOOTFILE=\"tftp:///tftpboot/kernel\"

# Limit the delay on packet loss/congestion to a more bearable value. See
# description above.  If unset, do not limit the delay between resend.
CFLAGS+=	-DBACKOFF_LIMIT=5 -DCONGESTED

# More optional features
# CFLAGS+=	-DTRY_FLOPPY_FIRST=4
# CFLAGS+=	-DEXIT_IF_NO_OFFER


# Multicast Support
# CFLAGS+=	-DALLMULTI -DMULTICAST_LEVEL1 -DMULTICAST_LEVEL2

# Etherboot as a PXE network protocol ROM
CFLAGS+=	-DPXE_IMAGE -DPXE_EXPORT
# Etherboot stricter as a PXE network protocol ROM
# CFLAGS+=	-DPXE_DHCP_STRICT

# Support for PXE emulation. Works only with FreeBSD to load the kernel
# via pxeboot, use only with DOWNLOAD_PROTO_NFS
# CFLAGS+=	-DFREEBSD_PXEEMU



# Garbage from Makefile.main temporarily placed here until a home can
# be found for it.

# NS8390 options:
#	-DINCLUDE_NE	- Include NE1000/NE2000 support
#	-DNE_SCAN=list	- Probe for NE base address using list of
#			  comma separated hex addresses
#	-DINCLUDE_3C503 - Include 3c503 support
#	  -DT503_SHMEM	- Use 3c503 shared memory mode (off by default)
#	-DINCLUDE_WD	- Include Western Digital/SMC support
#	-DWD_DEFAULT_MEM- Default memory location for WD/SMC cards
#	-DWD_790_PIO    - Read/write to WD/SMC 790 cards in PIO mode (default
#			  is to use shared memory) Try this if you get "Bogus
#			  packet, ignoring" messages, common on ISA/PCI hybrid
#			  systems.
#	-DCOMPEX_RL2000_FIX
#
#	If you have a Compex RL2000 PCI 32-bit (11F6:1401),
#	and the bootrom hangs in "Probing...[NE*000/PCI]",
#	try enabling this fix... it worked for me :).
#	In the first packet write somehow it somehow doesn't
#	get back the expected data so it is stuck in a loop.
#	I didn't bother to investigate what or why because it works
#	when I interrupt the loop if it takes more then COMPEX_RL2000_TRIES.
#	The code will notify if it does a abort.
#	SomniOne - somnione@gmx.net
#
# 3C90X options:
#	Warning Warning Warning
#	If you use any of the XCVR options below, please do not complain about
#	the behaviour with Linux drivers to the kernel developers. You are
#	on your own if you do this. Please read 3c90x.txt to understand
#	what they do. If you don't understand them, ask for help on the
#	Etherboot mailing list. And please document what you did to the NIC
#	on the NIC so that people after you won't get nasty surprises.
#
#	-DCFG_3C90X_PRESERVE_XCVR - Reset the transceiver type to the value it
#			  had initially just before the loaded code is started.
#	-DCFG_3C90X_XCVR - Hardcode the tranceiver type Etherboot uses.
#	-DCFG_3C90X_BOOTROM_FIX - If you have a 3c905B with buggy ROM
#			  interface, setting this option might "fix" it.  Use
#			  with caution and read the docs in 3c90x.txt!
#
#	See the documentation file 3c90x.txt for more details.
#
# CS89X0 (optional) options:
#	-DISA_PROBE_ADDRS=list	
#			  Probe for CS89x0 base address using list of
#			  comma separated hex addresses; increasing the
#			  address by one (0x300 -> 0x301) will force a
#			  more aggressive probing algorithm. This might
#			  be neccessary after a soft-reset of the NIC.


CFLAGS_3c503	= -DINCLUDE_3C503 # -DT503_SHMEM
CFLAGS_ne	= -DINCLUDE_NE -DNE_SCAN=0x300,0x280,0x320,0x340,0x380
CFLAGS_ns8390	= -DINCLUDE_NS8390	# NE2000/PCI!
CFLAGS_wd	= -DINCLUDE_WD -DWD_DEFAULT_MEM=0xCC000
