add initial support for the crisarchitecture used on foxboards to openwrt
SVN-Revision: 7439
This commit is contained in:
parent
a1ddc8ab7d
commit
e19eb3d828
235 changed files with 223626 additions and 3 deletions
44
target/linux/etrax-2.6/Makefile
Normal file
44
target/linux/etrax-2.6/Makefile
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
ARCH:=cris
|
||||||
|
BOARD:=etrax
|
||||||
|
BOARDNAME:=FOXBOARD (ETRAX 100LX)
|
||||||
|
FEATURES:=squashfs jffs2
|
||||||
|
LINUX_VERSION:=2.6.19.2
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/kernel-build.mk
|
||||||
|
|
||||||
|
define Target/Description
|
||||||
|
Build fimware images for the FOXBOARD made by acmesystems.it
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Kernel/Prepare/Fox
|
||||||
|
bzcat $(DL_DIR)/$(LINUX_SOURCE) | tar -C $(KERNEL_BUILD_DIR) $(TAR_OPTIONS)
|
||||||
|
if [ -d ./files ]; then $(CP) ./files/* $(LINUX_DIR)/; fi
|
||||||
|
if [ -d ./patches/generic_2.6 ]; then $(PATCH) $(LINUX_DIR) ./patches/generic_2.6; fi
|
||||||
|
if [ -d ./patches/cris ]; then $(PATCH) $(LINUX_DIR) ./patches/cris; fi
|
||||||
|
ln -sf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/include/asm-cris/arch-v10 $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/include/asm-cris/arch
|
||||||
|
ln -sf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/arch/cris/arch-v10 $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/arch/cris/arch
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Kernel/Prepare
|
||||||
|
$(call Kernel/Prepare/Fox)
|
||||||
|
endef
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/prereq.mk
|
||||||
|
|
||||||
|
$(eval $(call RequireCommand,/usr/local/cris/gcc-cris, \
|
||||||
|
Please install the binary cris toolchain. \
|
||||||
|
))
|
||||||
|
|
||||||
|
#include the profiles
|
||||||
|
-include profiles/*.mk
|
||||||
|
|
||||||
|
KERNELNAME:="zImage"
|
||||||
|
$(eval $(call BuildKernel))
|
5
target/linux/etrax-2.6/base-files/default/etc/inittab
Normal file
5
target/linux/etrax-2.6/base-files/default/etc/inittab
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
::sysinit:/etc/init.d/rcS S boot
|
||||||
|
::shutdown:/etc/init.d/rcS K stop
|
||||||
|
console::askfirst:/bin/ash --login
|
||||||
|
tts/0::askfirst:/bin/ash --login
|
||||||
|
tty1::askfirst:/bin/ash --login
|
214
target/linux/etrax-2.6/config/default
Normal file
214
target/linux/etrax-2.6/config/default
Normal file
|
@ -0,0 +1,214 @@
|
||||||
|
CONFIG_BASE_SMALL=0
|
||||||
|
# CONFIG_BLK_DEV_INITRD is not set
|
||||||
|
CONFIG_CRIS=y
|
||||||
|
# CONFIG_ETRAX100LX is not set
|
||||||
|
CONFIG_ETRAX100LX_V2=y
|
||||||
|
# CONFIG_ETRAXFS is not set
|
||||||
|
# CONFIG_ETRAXFS_SIM is not set
|
||||||
|
CONFIG_ETRAX_ARCH_V10=y
|
||||||
|
# CONFIG_ETRAX_ARCH_V32 is not set
|
||||||
|
CONFIG_ETRAX_AXISFLASHMAP=y
|
||||||
|
# CONFIG_ETRAX_AXISFLASHMAP_MTD0WHOLE is not set
|
||||||
|
CONFIG_ETRAX_CMDLINE="root=/dev/mtdblock1 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
|
||||||
|
# CONFIG_ETRAX_CSP0_LEDS is not set
|
||||||
|
# CONFIG_ETRAX_DEBUG_PORT0 is not set
|
||||||
|
# CONFIG_ETRAX_DEBUG_PORT1 is not set
|
||||||
|
# CONFIG_ETRAX_DEBUG_PORT2 is not set
|
||||||
|
# CONFIG_ETRAX_DEBUG_PORT3 is not set
|
||||||
|
CONFIG_ETRAX_DEBUG_PORT_NULL=y
|
||||||
|
CONFIG_ETRAX_DEF_R_BUS_CONFIG=0x4
|
||||||
|
# CONFIG_ETRAX_DEF_R_PORT_G_DIR is not set
|
||||||
|
CONFIG_ETRAX_DEF_R_PORT_PA_DATA=0xf0
|
||||||
|
CONFIG_ETRAX_DEF_R_PORT_PA_DIR=0x1c
|
||||||
|
CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG=0x00
|
||||||
|
CONFIG_ETRAX_DEF_R_PORT_PB_DATA=0x03
|
||||||
|
CONFIG_ETRAX_DEF_R_PORT_PB_DIR=0xce
|
||||||
|
CONFIG_ETRAX_DEF_R_SDRAM_CONFIG=0x09603737
|
||||||
|
CONFIG_ETRAX_DEF_R_SDRAM_TIMING=0x80008002
|
||||||
|
CONFIG_ETRAX_DEF_R_WAITSTATES=0x95f8
|
||||||
|
CONFIG_ETRAX_DRAM_SIZE=32
|
||||||
|
CONFIG_ETRAX_DRAM_VIRTUAL_BASE=c0000000
|
||||||
|
CONFIG_ETRAX_DS1302=y
|
||||||
|
CONFIG_ETRAX_DS1302_RSTBIT=2
|
||||||
|
CONFIG_ETRAX_DS1302_RST_ON_GENERIC_PORT=y
|
||||||
|
CONFIG_ETRAX_DS1302_SCLBIT=1
|
||||||
|
CONFIG_ETRAX_DS1302_SDABIT=0
|
||||||
|
CONFIG_ETRAX_DS1302_TRICKLE_CHARGE=0
|
||||||
|
CONFIG_ETRAX_ETHERNET=y
|
||||||
|
CONFIG_ETRAX_FAST_TIMER=y
|
||||||
|
CONFIG_ETRAX_FLASH1_SIZE=0
|
||||||
|
CONFIG_ETRAX_FLASH_BUSWIDTH=2
|
||||||
|
CONFIG_ETRAX_GPIO=y
|
||||||
|
CONFIG_ETRAX_I2C=y
|
||||||
|
CONFIG_ETRAX_I2C_CLK_PORT=1
|
||||||
|
CONFIG_ETRAX_I2C_DATA_PORT=0
|
||||||
|
# CONFIG_ETRAX_I2C_EEPROM is not set
|
||||||
|
CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C=y
|
||||||
|
# CONFIG_ETRAX_IDE is not set
|
||||||
|
CONFIG_ETRAX_LED1G=2
|
||||||
|
CONFIG_ETRAX_LED1R=2
|
||||||
|
CONFIG_ETRAX_LED2G=3
|
||||||
|
CONFIG_ETRAX_LED2R=3
|
||||||
|
CONFIG_ETRAX_LED3G=2
|
||||||
|
CONFIG_ETRAX_LED3R=2
|
||||||
|
CONFIG_ETRAX_NANDFLASH_BUSWIDTH=1
|
||||||
|
CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY=y
|
||||||
|
# CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK is not set
|
||||||
|
# CONFIG_ETRAX_NO_LEDS is not set
|
||||||
|
# CONFIG_ETRAX_NO_PHY is not set
|
||||||
|
CONFIG_ETRAX_PA_CHANGEABLE_BITS=0xFF
|
||||||
|
CONFIG_ETRAX_PA_CHANGEABLE_DIR=0xFF
|
||||||
|
CONFIG_ETRAX_PA_LEDS=y
|
||||||
|
CONFIG_ETRAX_PB_CHANGEABLE_BITS=0xFF
|
||||||
|
CONFIG_ETRAX_PB_CHANGEABLE_DIR=0xFF
|
||||||
|
# CONFIG_ETRAX_PB_LEDS is not set
|
||||||
|
# CONFIG_ETRAX_PCF8563 is not set
|
||||||
|
CONFIG_ETRAX_PTABLE_SECTOR=0
|
||||||
|
CONFIG_ETRAX_RESCUE_SER0=y
|
||||||
|
# CONFIG_ETRAX_RESCUE_SER1 is not set
|
||||||
|
# CONFIG_ETRAX_RESCUE_SER2 is not set
|
||||||
|
# CONFIG_ETRAX_RESCUE_SER3 is not set
|
||||||
|
# CONFIG_ETRAX_RS485 is not set
|
||||||
|
CONFIG_ETRAX_RTC=y
|
||||||
|
CONFIG_ETRAX_SDRAM=y
|
||||||
|
CONFIG_ETRAX_SER0_CD_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_CD_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_DSR_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_DSR_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_DTR_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_DTR_ON_PB_BIT=-1
|
||||||
|
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED is not set
|
||||||
|
CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_NONE=y
|
||||||
|
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PA is not set
|
||||||
|
# CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_ON_PB is not set
|
||||||
|
CONFIG_ETRAX_SER0_RI_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER0_RI_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER2_CD_ON_PA_BIT=7
|
||||||
|
CONFIG_ETRAX_SER2_CD_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER2_DSR_ON_PA_BIT=6
|
||||||
|
CONFIG_ETRAX_SER2_DSR_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER2_DTR_ON_PA_BIT=4
|
||||||
|
CONFIG_ETRAX_SER2_DTR_ON_PB_BIT=-1
|
||||||
|
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED is not set
|
||||||
|
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_NONE is not set
|
||||||
|
CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PA=y
|
||||||
|
# CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_ON_PB is not set
|
||||||
|
CONFIG_ETRAX_SER2_RI_ON_PA_BIT=5
|
||||||
|
CONFIG_ETRAX_SER2_RI_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_CD_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_CD_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_DSR_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_DSR_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_DTR_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_DTR_ON_PB_BIT=-1
|
||||||
|
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED is not set
|
||||||
|
CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_NONE=y
|
||||||
|
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_PA is not set
|
||||||
|
# CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_ON_PB is not set
|
||||||
|
CONFIG_ETRAX_SER3_RI_ON_PA_BIT=-1
|
||||||
|
CONFIG_ETRAX_SER3_RI_ON_PB_BIT=-1
|
||||||
|
CONFIG_ETRAX_SERIAL=y
|
||||||
|
# CONFIG_ETRAX_SERIAL_FAST_TIMER is not set
|
||||||
|
# CONFIG_ETRAX_SERIAL_FLUSH_DMA_FAST is not set
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT0=y
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT is not set
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN is not set
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_IN=y
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT0_NO_DMA_OUT=y
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT1 is not set
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT2=y
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT=y
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN=y
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_IN is not set
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT2_NO_DMA_OUT is not set
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT3=y
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT=y
|
||||||
|
CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN=y
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_IN is not set
|
||||||
|
# CONFIG_ETRAX_SERIAL_PORT3_NO_DMA_OUT is not set
|
||||||
|
CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS=5
|
||||||
|
# CONFIG_ETRAX_SOFT_SHUTDOWN is not set
|
||||||
|
# CONFIG_ETRAX_SYNCHRONOUS_SERIAL is not set
|
||||||
|
CONFIG_ETRAX_SYSFS_NODES=y
|
||||||
|
CONFIG_ETRAX_USB_HOST=y
|
||||||
|
CONFIG_ETRAX_USB_HOST_PORT1=y
|
||||||
|
CONFIG_ETRAX_USB_HOST_PORT2=y
|
||||||
|
# CONFIG_ETRAX_WATCHDOG is not set
|
||||||
|
CONFIG_FS_POSIX_ACL=y
|
||||||
|
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||||
|
CONFIG_GENERIC_IOMAP=y
|
||||||
|
# CONFIG_GEN_RTC is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
|
# CONFIG_IDE is not set
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_IRQ_PER_CPU=y
|
||||||
|
CONFIG_JFFS2_FS_DEBUG=0
|
||||||
|
CONFIG_MTD=y
|
||||||
|
CONFIG_MTDRAM_ABS_POS=0x0
|
||||||
|
CONFIG_MTDRAM_ERASE_SIZE=128
|
||||||
|
CONFIG_MTDRAM_TOTAL_SIZE=0
|
||||||
|
# CONFIG_MTD_ABSENT is not set
|
||||||
|
CONFIG_MTD_BLOCK=y
|
||||||
|
# CONFIG_MTD_BLOCK2MTD is not set
|
||||||
|
CONFIG_MTD_CFI=y
|
||||||
|
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||||
|
CONFIG_MTD_CFI_AMDSTD=y
|
||||||
|
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
|
||||||
|
# CONFIG_MTD_CFI_GEOMETRY is not set
|
||||||
|
CONFIG_MTD_CFI_I1=y
|
||||||
|
CONFIG_MTD_CFI_I2=y
|
||||||
|
# CONFIG_MTD_CFI_I4 is not set
|
||||||
|
# CONFIG_MTD_CFI_I8 is not set
|
||||||
|
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||||
|
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
|
||||||
|
CONFIG_MTD_CFI_NOSWAP=y
|
||||||
|
# CONFIG_MTD_CFI_STAA is not set
|
||||||
|
CONFIG_MTD_CFI_UTIL=y
|
||||||
|
CONFIG_MTD_CHAR=y
|
||||||
|
# CONFIG_MTD_CMDLINE_PARTS is not set
|
||||||
|
CONFIG_MTD_COMPLEX_MAPPINGS=y
|
||||||
|
CONFIG_MTD_CONCAT=y
|
||||||
|
# CONFIG_MTD_DEBUG is not set
|
||||||
|
# CONFIG_MTD_DOC2000 is not set
|
||||||
|
# CONFIG_MTD_DOC2001 is not set
|
||||||
|
# CONFIG_MTD_DOC2001PLUS is not set
|
||||||
|
CONFIG_MTD_GEN_PROBE=y
|
||||||
|
CONFIG_MTD_JEDECPROBE=y
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||||
|
CONFIG_MTD_MTDRAM=y
|
||||||
|
# CONFIG_MTD_OBSOLETE_CHIPS is not set
|
||||||
|
# CONFIG_MTD_ONENAND is not set
|
||||||
|
# CONFIG_MTD_OTP is not set
|
||||||
|
CONFIG_MTD_PARTITIONS=y
|
||||||
|
# CONFIG_MTD_PHRAM is not set
|
||||||
|
# CONFIG_MTD_PHYSMAP is not set
|
||||||
|
# CONFIG_MTD_PLATRAM is not set
|
||||||
|
# CONFIG_MTD_RAM is not set
|
||||||
|
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||||
|
# CONFIG_MTD_ROM is not set
|
||||||
|
# CONFIG_MTD_SLRAM is not set
|
||||||
|
# CONFIG_OOM_REBOOT is not set
|
||||||
|
# CONFIG_OVERRIDE_SCHED_STARVATION_LIMIT is not set
|
||||||
|
# CONFIG_RTC is not set
|
||||||
|
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||||
|
# CONFIG_SERIAL_8250 is not set
|
||||||
|
# CONFIG_SMP is not set
|
||||||
|
# CONFIG_SOFT_WATCHDOG is not set
|
||||||
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
|
# CONFIG_SVINTO_SIM is not set
|
||||||
|
# CONFIG_SYSTEM_PROFILER is not set
|
||||||
|
CONFIG_UID16=y
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
|
# CONFIG_UNWIND_INFO is not set
|
||||||
|
CONFIG_USB=y
|
||||||
|
# CONFIG_USBPCWATCHDOG is not set
|
||||||
|
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||||
|
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||||
|
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||||
|
# CONFIG_USB_SERIAL_IR is not set
|
||||||
|
# CONFIG_BLK_DEV_INITRD is not set
|
262
target/linux/etrax-2.6/files/drivers/spi/spi_crisv32_gpio.c
Normal file
262
target/linux/etrax-2.6/files/drivers/spi/spi_crisv32_gpio.c
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
/*
|
||||||
|
* Simple bitbanged-GPIO SPI driver for ETRAX FS et al.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2007 Axis Communications AB
|
||||||
|
*
|
||||||
|
* Author: Hans-Peter Nilsson, inspired by earlier work by
|
||||||
|
* Andre Spanberg but mostly by copying large parts of
|
||||||
|
* spi_s3c24xx_gpio.c, hence also:
|
||||||
|
* Copyright (c) 2006 Ben Dooks
|
||||||
|
* Copyright (c) 2006 Simtec Electronics
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
#include <linux/device.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/spi/spi_bitbang.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/board.h>
|
||||||
|
|
||||||
|
/* Our main driver state. */
|
||||||
|
|
||||||
|
struct crisv32_spi_hw_info {
|
||||||
|
struct crisv32_iopin sclk;
|
||||||
|
struct crisv32_iopin mosi;
|
||||||
|
struct crisv32_iopin miso;
|
||||||
|
struct crisv32_iopin cs;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The driver state hides behind the spi_bitbang state. We're
|
||||||
|
* responsible for allocating that, so we can get a little something
|
||||||
|
* for ourselves.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct crisv32_spi_gpio_devdata {
|
||||||
|
struct spi_bitbang bitbang;
|
||||||
|
struct crisv32_spi_hw_info pins;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Helper function getting the driver state from a spi_device. */
|
||||||
|
|
||||||
|
static inline struct crisv32_spi_hw_info *spidev_to_hw(struct spi_device *spi)
|
||||||
|
{
|
||||||
|
struct crisv32_spi_gpio_devdata *dd = spi_master_get_devdata(spi->master);
|
||||||
|
return &dd->pins;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The SPI-bitbang functions: see spi_bitbang.h at EXPAND_BITBANG_TXRX. */
|
||||||
|
|
||||||
|
static inline void setsck(struct spi_device *spi, int is_on)
|
||||||
|
{
|
||||||
|
crisv32_io_set(&spidev_to_hw(spi)->sclk, is_on != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void setmosi(struct spi_device *spi, int is_on)
|
||||||
|
{
|
||||||
|
crisv32_io_set(&spidev_to_hw(spi)->mosi, is_on != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline u32 getmiso(struct spi_device *spi)
|
||||||
|
{
|
||||||
|
return crisv32_io_rd(&spidev_to_hw(spi)->miso) != 0 ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define spidelay(x) ndelay(x)
|
||||||
|
|
||||||
|
#define EXPAND_BITBANG_TXRX
|
||||||
|
#include <linux/spi/spi_bitbang.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SPI-bitbang word transmit-functions for the four SPI modes,
|
||||||
|
* dispatching to the inlined functions we just included.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static u32 crisv32_spi_gpio_txrx_mode0(struct spi_device *spi,
|
||||||
|
unsigned nsecs, u32 word, u8 bits)
|
||||||
|
{
|
||||||
|
return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 crisv32_spi_gpio_txrx_mode1(struct spi_device *spi,
|
||||||
|
unsigned nsecs, u32 word, u8 bits)
|
||||||
|
{
|
||||||
|
return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 crisv32_spi_gpio_txrx_mode2(struct spi_device *spi,
|
||||||
|
unsigned nsecs, u32 word, u8 bits)
|
||||||
|
{
|
||||||
|
return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 crisv32_spi_gpio_txrx_mode3(struct spi_device *spi,
|
||||||
|
unsigned nsecs, u32 word, u8 bits)
|
||||||
|
{
|
||||||
|
return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SPI-bitbang chip-select function. */
|
||||||
|
|
||||||
|
static void crisv32_spi_gpio_chipselect(struct spi_device *spi, int value)
|
||||||
|
{
|
||||||
|
if (spi->mode & SPI_CS_HIGH)
|
||||||
|
crisv32_io_set(&spidev_to_hw(spi)->cs,
|
||||||
|
value == BITBANG_CS_ACTIVE ? 1 : 0);
|
||||||
|
else
|
||||||
|
crisv32_io_set(&spidev_to_hw(spi)->cs,
|
||||||
|
value == BITBANG_CS_ACTIVE ? 0 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Platform-device probe function. */
|
||||||
|
|
||||||
|
static int __devinit crisv32_spi_gpio_probe(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
struct spi_master *master;
|
||||||
|
struct crisv32_spi_gpio_devdata *dd;
|
||||||
|
struct resource *res;
|
||||||
|
struct crisv32_spi_gpio_controller_data *gc;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to get the controller data as a hardware resource,
|
||||||
|
* or else it wouldn't be available until *after* the
|
||||||
|
* spi_bitbang_start call!
|
||||||
|
*/
|
||||||
|
res = platform_get_resource_byname(dev, 0, "controller_data_ptr");
|
||||||
|
if (res == NULL) {
|
||||||
|
dev_err(&dev->dev, "can't get controller_data resource\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
gc = (struct crisv32_spi_gpio_controller_data *) res->start;
|
||||||
|
|
||||||
|
master = spi_alloc_master(&dev->dev, sizeof *dd);
|
||||||
|
if (master == NULL) {
|
||||||
|
dev_err(&dev->dev, "failed to allocate spi master\n");
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd = spi_master_get_devdata(master);
|
||||||
|
platform_set_drvdata(dev, dd);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The device data asks for this driver, and holds the id
|
||||||
|
* number, which must be unique among the same-type devices.
|
||||||
|
* We use this as the number of this SPI bus.
|
||||||
|
*/
|
||||||
|
master->bus_num = dev->id;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allocate pins. Note that thus being allocated as GPIO, we
|
||||||
|
* don't have to deconfigure them at the end or if something
|
||||||
|
* fails.
|
||||||
|
*/
|
||||||
|
if ((ret = crisv32_io_get_name(&dd->pins.cs, gc->cs)) != 0
|
||||||
|
|| (ret = crisv32_io_get_name(&dd->pins.miso, gc->miso)) != 0
|
||||||
|
|| (ret = crisv32_io_get_name(&dd->pins.mosi, gc->mosi)) != 0
|
||||||
|
|| (ret = crisv32_io_get_name(&dd->pins.sclk, gc->sclk)) != 0)
|
||||||
|
goto err_no_pins;
|
||||||
|
|
||||||
|
/* Set directions of the SPI pins. */
|
||||||
|
crisv32_io_set_dir(&dd->pins.cs, crisv32_io_dir_out);
|
||||||
|
crisv32_io_set_dir(&dd->pins.sclk, crisv32_io_dir_out);
|
||||||
|
crisv32_io_set_dir(&dd->pins.miso, crisv32_io_dir_in);
|
||||||
|
crisv32_io_set_dir(&dd->pins.mosi, crisv32_io_dir_out);
|
||||||
|
|
||||||
|
/* Set state of the SPI pins. */
|
||||||
|
dev_dbg(&dev->dev, "cs.port 0x%x, pin: %d\n"
|
||||||
|
dd->pins.cs.port, dd->pins.cs.bit);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Can't use crisv32_spi_gpio_chipselect(spi, 1) here; we
|
||||||
|
* don't have a proper "spi" until after spi_bitbang_start.
|
||||||
|
*/
|
||||||
|
crisv32_io_set(&dd->pins.cs, 1);
|
||||||
|
crisv32_io_set(&dd->pins.sclk, 0);
|
||||||
|
crisv32_io_set(&dd->pins.mosi, 0);
|
||||||
|
|
||||||
|
/* Setup SPI bitbang adapter hooks. */
|
||||||
|
dd->bitbang.master = spi_master_get(master);
|
||||||
|
dd->bitbang.chipselect = crisv32_spi_gpio_chipselect;
|
||||||
|
|
||||||
|
dd->bitbang.txrx_word[SPI_MODE_0] = crisv32_spi_gpio_txrx_mode0;
|
||||||
|
dd->bitbang.txrx_word[SPI_MODE_1] = crisv32_spi_gpio_txrx_mode1;
|
||||||
|
dd->bitbang.txrx_word[SPI_MODE_2] = crisv32_spi_gpio_txrx_mode2;
|
||||||
|
dd->bitbang.txrx_word[SPI_MODE_3] = crisv32_spi_gpio_txrx_mode3;
|
||||||
|
|
||||||
|
ret = spi_bitbang_start(&dd->bitbang);
|
||||||
|
if (ret)
|
||||||
|
goto err_no_bitbang;
|
||||||
|
|
||||||
|
printk (KERN_INFO "CRIS v32 SPI driver for GPIO"
|
||||||
|
" (cs: %s, miso: %s, mosi: %s, sclk: %s)\n",
|
||||||
|
gc->cs, gc->miso, gc->mosi, gc->sclk);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_no_bitbang:
|
||||||
|
spi_master_put(dd->bitbang.master);
|
||||||
|
err_no_pins:
|
||||||
|
platform_set_drvdata(dev, NULL);
|
||||||
|
err:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Platform-device remove-function. */
|
||||||
|
|
||||||
|
static int __devexit crisv32_spi_gpio_remove(struct platform_device *dev)
|
||||||
|
{
|
||||||
|
struct crisv32_spi_gpio_devdata *dd = platform_get_drvdata(dev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = spi_bitbang_stop(&dd->bitbang);
|
||||||
|
if (ret != 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
spi_master_put(dd->bitbang.master);
|
||||||
|
platform_set_drvdata(dev, NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For the time being, there's no suspend/resume support to care
|
||||||
|
* about, so we let those handlers default to NULL.
|
||||||
|
*/
|
||||||
|
static struct platform_driver crisv32_spi_gpio_drv = {
|
||||||
|
.probe = crisv32_spi_gpio_probe,
|
||||||
|
.remove = __devexit_p(crisv32_spi_gpio_remove),
|
||||||
|
.driver = {
|
||||||
|
.name = "spi_crisv32_gpio",
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Module init function. */
|
||||||
|
|
||||||
|
static int __devinit crisv32_spi_gpio_init(void)
|
||||||
|
{
|
||||||
|
return platform_driver_register(&crisv32_spi_gpio_drv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Module exit function. */
|
||||||
|
|
||||||
|
static void __devexit crisv32_spi_gpio_exit(void)
|
||||||
|
{
|
||||||
|
platform_driver_unregister(&crisv32_spi_gpio_drv);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(crisv32_spi_gpio_init);
|
||||||
|
module_exit(crisv32_spi_gpio_exit);
|
||||||
|
|
||||||
|
MODULE_DESCRIPTION("CRIS v32 SPI-GPIO Driver");
|
||||||
|
MODULE_AUTHOR("Hans-Peter Nilsson, <hp@axis.com>");
|
||||||
|
MODULE_LICENSE("GPL");
|
1566
target/linux/etrax-2.6/files/drivers/spi/spi_crisv32_sser.c
Normal file
1566
target/linux/etrax-2.6/files/drivers/spi/spi_crisv32_sser.c
Normal file
File diff suppressed because it is too large
Load diff
141
target/linux/etrax-2.6/files/drivers/usb/host/hc-cris-dbg.h
Normal file
141
target/linux/etrax-2.6/files/drivers/usb/host/hc-cris-dbg.h
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
|
||||||
|
/* macros for debug output */
|
||||||
|
|
||||||
|
#define hcd_dbg(hcd, fmt, args...) \
|
||||||
|
dev_info(hcd->self.controller, fmt, ## args)
|
||||||
|
#define hcd_err(hcd, fmt, args...) \
|
||||||
|
dev_err(hcd->self.controller, fmt, ## args)
|
||||||
|
#define hcd_info(hcd, fmt, args...) \
|
||||||
|
dev_info(hcd->self.controller, fmt, ## args)
|
||||||
|
#define hcd_warn(hcd, fmt, args...) \
|
||||||
|
dev_warn(hcd->self.controller, fmt, ## args)
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define devdrv_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "usb_devdrv dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define devdrv_dbg(fmt, args...) {}
|
||||||
|
|
||||||
|
#define devdrv_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "usb_devdrv error: ");printk(fmt, ## args)
|
||||||
|
#define devdrv_info(fmt, args...) \
|
||||||
|
printk(KERN_INFO "usb_devdrv: ");printk(fmt, ## args)
|
||||||
|
|
||||||
|
#define irq_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_irq dbg: ");printk(fmt, ## args)
|
||||||
|
#define irq_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "crisv10_irq error: ");printk(fmt, ## args)
|
||||||
|
#define irq_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_irq warn: ");printk(fmt, ## args)
|
||||||
|
#define irq_info(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_hcd: ");printk(fmt, ## args)
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define rh_dbg(fmt, args...) \
|
||||||
|
printk(KERN_DEBUG "crisv10_rh dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define rh_dbg(fmt, args...) {}
|
||||||
|
|
||||||
|
#define rh_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "crisv10_rh error: ");printk(fmt, ## args)
|
||||||
|
#define rh_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_rh warning: ");printk(fmt, ## args)
|
||||||
|
#define rh_info(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_rh: ");printk(fmt, ## args)
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define tc_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_tc dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define tc_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
#define tc_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "crisv10_tc error: ");printk(fmt, ## args)
|
||||||
|
/*
|
||||||
|
#define tc_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_tc warning: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define tc_warn(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
#define tc_info(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_tc: ");printk(fmt, ## args)
|
||||||
|
|
||||||
|
|
||||||
|
/* Debug print-outs for various traffic types */
|
||||||
|
|
||||||
|
#define intr_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_intr warning: ");printk(fmt, ## args)
|
||||||
|
/*
|
||||||
|
#define intr_dbg(fmt, args...) \
|
||||||
|
printk(KERN_DEBUG "crisv10_intr dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define intr_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
|
||||||
|
#define isoc_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "crisv10_isoc error: ");printk(fmt, ## args)
|
||||||
|
/*
|
||||||
|
#define isoc_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_isoc warning: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define isoc_warn(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define isoc_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_isoc dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define isoc_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define timer_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_timer warning: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define timer_warn(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define timer_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_timer dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define timer_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
|
||||||
|
/* Debug printouts for events related to late finishing of URBs */
|
||||||
|
/*
|
||||||
|
#define late_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_late dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define late_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
#define late_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_late warning: ");printk(fmt, ## args)
|
||||||
|
/*
|
||||||
|
#define errno_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_errno dbg: ");printk(fmt, ## args)
|
||||||
|
*/
|
||||||
|
#define errno_dbg(fmt, args...) {while(0){}}
|
||||||
|
|
||||||
|
|
||||||
|
#define dma_dbg(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_dma dbg: ");printk(fmt, ## args)
|
||||||
|
#define dma_err(fmt, args...) \
|
||||||
|
printk(KERN_ERR "crisv10_dma error: ");printk(fmt, ## args)
|
||||||
|
#define dma_warn(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_dma warning: ");printk(fmt, ## args)
|
||||||
|
#define dma_info(fmt, args...) \
|
||||||
|
printk(KERN_INFO "crisv10_dma: ");printk(fmt, ## args)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define str_dir(pipe) \
|
||||||
|
(usb_pipeout(pipe) ? "out" : "in")
|
||||||
|
#define str_type(pipe) \
|
||||||
|
({ \
|
||||||
|
char *s = "?"; \
|
||||||
|
switch (usb_pipetype(pipe)) { \
|
||||||
|
case PIPE_ISOCHRONOUS: s = "iso"; break; \
|
||||||
|
case PIPE_INTERRUPT: s = "intr"; break; \
|
||||||
|
case PIPE_CONTROL: s = "ctrl"; break; \
|
||||||
|
case PIPE_BULK: s = "bulk"; break; \
|
||||||
|
}; \
|
||||||
|
s; \
|
||||||
|
})
|
10
target/linux/etrax-2.6/files/include/linux/mtd/mtdram.h
Normal file
10
target/linux/etrax-2.6/files/include/linux/mtd/mtdram.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef __MTD_MTDRAM_H__
|
||||||
|
#define __MTD_MTDRAM_H__
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
#include <linux/mtd/mtd.h>
|
||||||
|
int mtdram_init_device(struct mtd_info *mtd, void *mapped_address,
|
||||||
|
unsigned long size, char *name);
|
||||||
|
|
||||||
|
#endif /* __KERNEL__ */
|
||||||
|
#endif /* __MTD_MTDRAM_H__ */
|
5
target/linux/etrax-2.6/image/Config.in
Normal file
5
target/linux/etrax-2.6/image/Config.in
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
config AXIS_FIMAGE
|
||||||
|
bool "Build fimage"
|
||||||
|
depends LINUX_2_6_ETRAX
|
||||||
|
default y
|
||||||
|
|
55
target/linux/etrax-2.6/image/Makefile
Normal file
55
target/linux/etrax-2.6/image/Makefile
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/image.mk
|
||||||
|
|
||||||
|
FOXBOARD:=custom MCM 416 816 832
|
||||||
|
FOXBOARD_4MB:=MCM 416
|
||||||
|
FOXBOARD_8MB:=custom 816 832
|
||||||
|
|
||||||
|
define Image/BuildKernel
|
||||||
|
for f in $(FOXBOARD); do \
|
||||||
|
cp $(KDIR)/vmlinuz_$$$$f $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-zImage_$$$$f; \
|
||||||
|
done
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Prepare
|
||||||
|
for f in $(FOXBOARD); do \
|
||||||
|
cp $(LINUX_DIR)/arch/cris/boot/zImage_$$$$f $(KDIR)/vmlinuz_$$$$f; \
|
||||||
|
done
|
||||||
|
$(MAKE) -C ./e100boot/
|
||||||
|
$(MAKE) -C ./mkfimage/
|
||||||
|
$(INSTALL_BIN) ./boot_linux $(BIN_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/generic
|
||||||
|
for f in $(2); do \
|
||||||
|
mkfimage $(KDIR)/vmlinuz_$$$$f $(KDIR)/vmlinuz_$$$$f.tmp ; \
|
||||||
|
cat $(KDIR)/vmlinuz_$$$$f.tmp $(KDIR)/root.$(1) > $(KDIR)/fimage.$(1)_$$$$f.tmp; \
|
||||||
|
dd if=$(KDIR)/fimage.$(1)_$$$$f.tmp of=$(KDIR)/fimage.$(1)_$$$$f bs=$(3) conv=sync; \
|
||||||
|
cp $(KDIR)/fimage.$(1)_$$$$f $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1)-fimage_$$$$f; \
|
||||||
|
done
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/jffs2-64k
|
||||||
|
$(call prepare_generic_jffs-64k,$(KDIR)/root.jff2-64k)
|
||||||
|
$(call Image/Build/generic,$(1),$(FOXBOARD_4MB),4194304)
|
||||||
|
$(call Image/Build/generic,$(1),$(FOXBOARD_8MB),8388608)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build/squashfs
|
||||||
|
$(call prepare_generic_squashfs,$(KDIR)/root.squashfs)
|
||||||
|
$(call Image/Build/generic,$(1),$(FOXBOARD_4MB),4194304)
|
||||||
|
$(call Image/Build/generic,$(1),$(FOXBOARD_8MB),8388608)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Image/Build
|
||||||
|
$(call Image/Build/$(1),$(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildImage))
|
512
target/linux/etrax-2.6/image/boot_linux
Executable file
512
target/linux/etrax-2.6/image/boot_linux
Executable file
|
@ -0,0 +1,512 @@
|
||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
#!
|
||||||
|
#! FILE NAME : boot_linux
|
||||||
|
#!
|
||||||
|
#! PARAMETERS : -b <bootimage> the name of the boot image to use
|
||||||
|
#! -d <device> the interface to use, e.g., eth1
|
||||||
|
#! (defaults is eth0)
|
||||||
|
#! -f save it in flash memory at address 0x10000
|
||||||
|
#! -F save it in flash memory at address 0
|
||||||
|
#! -h show some help
|
||||||
|
#! -i <image> name of the image to use (default is fimage)
|
||||||
|
#! -o <offset> the offset in the flash where the flashing
|
||||||
|
#! starts
|
||||||
|
#! -O <offset> the offset in the image file where the
|
||||||
|
#! flashing starts from
|
||||||
|
#! -p print the resulting etrax100boot command
|
||||||
|
#! instead of executing it
|
||||||
|
#! -s <size> how much to flash (default is the size of
|
||||||
|
#! the flash minus the offset specified using
|
||||||
|
#! -o or -f)
|
||||||
|
#! -S <size> the size of the flash
|
||||||
|
#!
|
||||||
|
#! All sizes and offsets above can be specified as decimal
|
||||||
|
#! numbers, or as hexadecimal numbers by prefixing them with 0x.
|
||||||
|
#! It is also possible to use the suffixes k and M to specify
|
||||||
|
#! kilo (1024) or mega (1048576).
|
||||||
|
#!
|
||||||
|
#! DESCRIPTION: Extract the start of the image and any registers that should
|
||||||
|
#! be set from the kimage or fimage file, and then boot it.
|
||||||
|
#!
|
||||||
|
#! FUNCTIONS : convert_size
|
||||||
|
#! extract_hw_settings
|
||||||
|
#! get_dword
|
||||||
|
#! calculate_sdram_init
|
||||||
|
#! sdram_command
|
||||||
|
#! print_help
|
||||||
|
#!
|
||||||
|
#!----------------------------------------------------------------------------
|
||||||
|
#! HISTORY
|
||||||
|
#!
|
||||||
|
#! $Log: boot_linux,v $
|
||||||
|
#! Revision 1.16 2004/11/01 16:32:27 starvik
|
||||||
|
#! Corrected help text to avoid confusion
|
||||||
|
#!
|
||||||
|
#! Revision 1.15 2003/01/29 11:48:57 pkj
|
||||||
|
#! Calculate a flash size large enough for the given image if the
|
||||||
|
#! -S option is not specified.
|
||||||
|
#!
|
||||||
|
#! Revision 1.14 2002/11/18 14:40:09 pkj
|
||||||
|
#! Make use of the --loop option to etrax100boot when initialising
|
||||||
|
#! SDRAM memories. This requires a lot fewer options to be passed
|
||||||
|
#! to the boot loader.
|
||||||
|
#!
|
||||||
|
#! Revision 1.13 2002/08/15 16:29:02 pkj
|
||||||
|
#! * The -S option now accepts the size in bytes (just like the -s option).
|
||||||
|
#! For backwards compatibility it still assumes sizes of 16 and less to
|
||||||
|
#! be specified in MB.
|
||||||
|
#! * The suffixes k and M can now be used with all sizes and offsets to
|
||||||
|
#! specify them in kilo or mega.
|
||||||
|
#!
|
||||||
|
#! Revision 1.12 2002/08/15 15:27:34 pkj
|
||||||
|
#! Use $opts{'x'} instead of $opt_x.
|
||||||
|
#!
|
||||||
|
#! Revision 1.11 2002/07/04 17:06:39 pkj
|
||||||
|
#! * No longer specifies a bootfile by default (not needed any longer).
|
||||||
|
#! * Implemented option -b to specify a bootfile.
|
||||||
|
#! * Removed references to option -l (it was never implemented).
|
||||||
|
#!
|
||||||
|
#! Revision 1.10 2002/06/04 11:50:23 starvik
|
||||||
|
#! Check if mrs_data is specified in kernelconfig (necessary for MCM)
|
||||||
|
#!
|
||||||
|
#! Revision 1.9 2002/01/29 10:38:26 pkj
|
||||||
|
#! Change illegal to invalid.
|
||||||
|
#!
|
||||||
|
#! Revision 1.8 2001/09/13 12:32:10 pkj
|
||||||
|
#! * Added option -S to specify the size of the flash (in MB), as -s
|
||||||
|
#! is used to specify how much to flash nowadays.
|
||||||
|
#! * Made the default size of the flash depend on the size of the image
|
||||||
|
#! file. If it is bigger than 0x200100 then the flash is assumed to
|
||||||
|
#! be 4 MB, otherwise it is assumed to be 2 MB.
|
||||||
|
#! * Added verification of various options.
|
||||||
|
#!
|
||||||
|
#! Revision 1.7 2001/09/13 10:25:11 pkj
|
||||||
|
#! Minor clean-up.
|
||||||
|
#!
|
||||||
|
#! Revision 1.6 2001/06/29 10:05:16 pkj
|
||||||
|
#! Corrected check for SDRAM.
|
||||||
|
#!
|
||||||
|
#! Revision 1.5 2001/06/29 09:11:55 pkj
|
||||||
|
#! Synchronised boot_elinux and boot_linux.
|
||||||
|
#!
|
||||||
|
#!----------------------------------------------------------------------------
|
||||||
|
#! (C) Copyright 2001, Axis Communications AB, LUND, SWEDEN
|
||||||
|
#!****************************************************************************
|
||||||
|
# $Id: boot_linux,v 1.16 2004/11/01 16:32:27 starvik Exp $
|
||||||
|
|
||||||
|
#****************** INCLUDE FILES SECTION ************************************
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Getopt::Std;
|
||||||
|
use File::Basename;
|
||||||
|
|
||||||
|
#****************** VARIABLE DECLARATION SECTION *****************************
|
||||||
|
|
||||||
|
use vars qw($my_name %opts);
|
||||||
|
use vars qw($text_start $cmd);
|
||||||
|
use vars qw($image_name $image_size);
|
||||||
|
use vars qw($offset $source_offset $flash_size $flashing_size);
|
||||||
|
use vars qw($sdram_timing_address $sdram_config_address);
|
||||||
|
use vars qw($sdram_precharge $sdram_nop $sdram_refresh $sdram_mrs);
|
||||||
|
|
||||||
|
#****************** CONSTANT SECTION *****************************************
|
||||||
|
|
||||||
|
# Register addresses
|
||||||
|
$sdram_timing_address = "b0000008";
|
||||||
|
$sdram_config_address = "b000000c";
|
||||||
|
|
||||||
|
# SDRAM commands
|
||||||
|
$sdram_precharge = 3;
|
||||||
|
$sdram_nop = 0;
|
||||||
|
$sdram_refresh = 2;
|
||||||
|
$sdram_mrs = 1;
|
||||||
|
|
||||||
|
#****************** MAIN PROGRAM SECTION *************************************
|
||||||
|
|
||||||
|
# The name of this program.
|
||||||
|
$my_name = basename($0);
|
||||||
|
|
||||||
|
# Get options
|
||||||
|
getopts('b:d:fFhi:o:O:ps:S:', \%opts);
|
||||||
|
|
||||||
|
&print_help if ($opts{'h'});
|
||||||
|
|
||||||
|
# Name and existance of the image
|
||||||
|
$image_name = ($opts{'i'} ? $opts{'i'} : 'fimage');
|
||||||
|
die "Could not find the image $image_name!\n" unless (-s $image_name);
|
||||||
|
|
||||||
|
if ($opts{'f'} || $opts{'F'})
|
||||||
|
{
|
||||||
|
$image_size = -s $image_name;
|
||||||
|
|
||||||
|
$offset = ($opts{'f'} ? 0x10000 : 0);
|
||||||
|
|
||||||
|
$offset = &convert_size($opts{'o'}) if (defined($opts{'o'}));
|
||||||
|
|
||||||
|
die("$my_name: Invalid destination offset\n") if ($offset !~ /^\d+$/);
|
||||||
|
|
||||||
|
my $base_name = basename($image_name);
|
||||||
|
if ($base_name eq 'timage' || $base_name eq 'flash1.img')
|
||||||
|
{
|
||||||
|
$source_offset = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$source_offset = $offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
$source_offset = &convert_size($opts{'O'}) if (defined($opts{'O'}));
|
||||||
|
|
||||||
|
die("$my_name: Invalid source offset\n") if ($source_offset !~ /^\d+$/);
|
||||||
|
die("$my_name: Source offset > image size\n") if ($source_offset > $image_size);
|
||||||
|
|
||||||
|
if (defined($opts{'S'}))
|
||||||
|
{
|
||||||
|
# Backwards compatibility to allow specifying the flash size in MB
|
||||||
|
# without using an M suffix
|
||||||
|
$opts{'S'} .= 'M' if ($opts{'S'} =~ /^\d+$/ && $opts{'S'} <= 16);
|
||||||
|
|
||||||
|
$flash_size = &convert_size($opts{'S'});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# Calculate a flash size large enough for the image without the checksum
|
||||||
|
# and HWID.
|
||||||
|
$flash_size = ($image_size - $source_offset + $offset) & 0xFFFF0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
die("$my_name: Invalid flash size\n") if ($flash_size !~ /^\d+$/);
|
||||||
|
die("$my_name: Destination offset > flash size\n") if ($offset > $flash_size);
|
||||||
|
if (defined($opts{'s'}))
|
||||||
|
{
|
||||||
|
$flashing_size = &convert_size($opts{'s'});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$flashing_size = $flash_size - $offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
die("$my_name: Invalid size to flash\n") if ($flashing_size !~ /^\d+$/);
|
||||||
|
|
||||||
|
if ($flashing_size > $flash_size - $offset)
|
||||||
|
{
|
||||||
|
$flashing_size = $flash_size - $offset;
|
||||||
|
printf("Warning: Flashing size limited to 0x%lx due to the offset (0x%lx) and flash size (0x%lx).\n", $flashing_size, $offset, $flash_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($flashing_size > $image_size - $source_offset)
|
||||||
|
{
|
||||||
|
$flashing_size = $image_size - $source_offset;
|
||||||
|
printf("Warning: Flashing size limited to 0x%lx due to the offset (0x%lx) and image size (0x%lx).\n", $flashing_size, $source_offset, $image_size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create the command line to boot the image
|
||||||
|
if (system('./etrax100boot --help > /dev/null') == 0)
|
||||||
|
{
|
||||||
|
$cmd = './etrax100boot';
|
||||||
|
}
|
||||||
|
elsif (system('svinto_boot --help > /dev/null') == 0)
|
||||||
|
{
|
||||||
|
$cmd = 'svinto_boot';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
die("Cannot find e100boot program in your PATH!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
$cmd .= " --device $opts{'d'}" if ($opts{'d'});
|
||||||
|
|
||||||
|
$cmd .= &extract_hw_settings;
|
||||||
|
|
||||||
|
$cmd .= " --bootfile $opts{'b'}" if ($opts{'b'});
|
||||||
|
$cmd .= " --file $image_name $text_start";
|
||||||
|
|
||||||
|
if ($opts{'f'} || $opts{'F'})
|
||||||
|
{
|
||||||
|
$cmd .= sprintf(" --flash %lx %lx %lx --jump 0",
|
||||||
|
hex($text_start) + $source_offset, $offset, $flashing_size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$cmd .= " --jump $text_start";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opts{'p'})
|
||||||
|
{
|
||||||
|
print "Command:\n$cmd\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
system($cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
#****************** FUNCTION DEFINITION SECTION ******************************
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: convert_size
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub convert_size
|
||||||
|
{
|
||||||
|
my($arg) = @_;
|
||||||
|
my $size;
|
||||||
|
|
||||||
|
if ($arg =~ /^0x([\da-fA-F]+)([kM])?$/)
|
||||||
|
{
|
||||||
|
$size = hex($1);
|
||||||
|
}
|
||||||
|
elsif ($arg =~ /^(\d+)([kM])?$/)
|
||||||
|
{
|
||||||
|
$size = $1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!defined($2))
|
||||||
|
{
|
||||||
|
return $size;
|
||||||
|
}
|
||||||
|
elsif ($2 eq 'k')
|
||||||
|
{
|
||||||
|
return $size * 1024;
|
||||||
|
}
|
||||||
|
elsif ($2 eq 'M')
|
||||||
|
{
|
||||||
|
return $size * 1048576;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: extract_hw_settings
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub extract_hw_settings
|
||||||
|
{
|
||||||
|
my $data;
|
||||||
|
my $dbg_port;
|
||||||
|
my $sdram_enabled;
|
||||||
|
my $return_value = "";
|
||||||
|
my $sdram_config;
|
||||||
|
|
||||||
|
# The hw information table has the following format
|
||||||
|
#
|
||||||
|
# "HW_PARAM_MAGIC"
|
||||||
|
# text_start (dword)
|
||||||
|
# serial debg port (dword)
|
||||||
|
# sdram enabled (dword)
|
||||||
|
# register address (dword)
|
||||||
|
# register value (dword)
|
||||||
|
# ...
|
||||||
|
# 0
|
||||||
|
|
||||||
|
open(FILE, "$image_name") || die("Could not open '$image_name'");
|
||||||
|
|
||||||
|
while (<FILE>)
|
||||||
|
{
|
||||||
|
if (m/HW_PARAM_MAGIC/g)
|
||||||
|
{
|
||||||
|
# Seek to first byte after magic
|
||||||
|
seek(FILE, -length($_) + pos($_), 1);
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$text_start = &get_dword;
|
||||||
|
$dbg_port = &get_dword;
|
||||||
|
$sdram_enabled = int(&get_dword);
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
my $register = &get_dword;
|
||||||
|
my $value = &get_dword;
|
||||||
|
|
||||||
|
last if ($register eq "00000000");
|
||||||
|
|
||||||
|
if ($sdram_enabled)
|
||||||
|
{
|
||||||
|
if ($register eq $sdram_config_address)
|
||||||
|
{
|
||||||
|
$sdram_config = $value;
|
||||||
|
}
|
||||||
|
elsif ($register eq $sdram_timing_address)
|
||||||
|
{
|
||||||
|
$return_value .= &calculate_sdram_init($value, $sdram_config);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$return_value .= " --setreg $register $value";
|
||||||
|
}
|
||||||
|
|
||||||
|
close(FILE);
|
||||||
|
|
||||||
|
return $return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: get_dword
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub get_dword
|
||||||
|
{
|
||||||
|
my $data;
|
||||||
|
|
||||||
|
read(FILE, $data, 4);
|
||||||
|
return unpack("H8", pack("V", unpack("N", $data)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: calculate_sdram_init
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub calculate_sdram_init
|
||||||
|
{
|
||||||
|
# Refer to ETRAX 100LX Designers Reference for a description of SDRAM
|
||||||
|
# initialization
|
||||||
|
my $sdram_init_val = hex($_[0]);
|
||||||
|
my $sdram_config_val = hex($_[1]);
|
||||||
|
my $bus_width = $sdram_config_val & 0x00800000;
|
||||||
|
my $speed;
|
||||||
|
my $cas_latency;
|
||||||
|
my $mrs_data;
|
||||||
|
my $temp;
|
||||||
|
my $return_value;
|
||||||
|
my $value;
|
||||||
|
|
||||||
|
$mrs_data = ($sdram_init_val & 0x00ff0000) >> 16;
|
||||||
|
$sdram_init_val &= 0x8000ffff; # Make sure mrs data is 0
|
||||||
|
$sdram_init_val |= 0x80000000; # Make sure sdram is enabled
|
||||||
|
$speed = $sdram_init_val & 0x1000;
|
||||||
|
$cas_latency = $sdram_init_val & 0x3;
|
||||||
|
if ($speed) # 100 MHz
|
||||||
|
{
|
||||||
|
$cas_latency += 2;
|
||||||
|
}
|
||||||
|
else # 50 MHz
|
||||||
|
{
|
||||||
|
$cas_latency += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Calculate value of mrs_data
|
||||||
|
# CAS latency = 2 && bus_width = 32 => 0x40
|
||||||
|
# CAS latency = 3 && bus_width = 32 => 0x60
|
||||||
|
# CAS latency = 2 && bus_width = 16 => 0x20
|
||||||
|
# CAS latency = 3 && bus_width = 16 => 0x30
|
||||||
|
if ($mrs_data == 0)
|
||||||
|
{
|
||||||
|
if ($bus_width == 0) # 16 bits
|
||||||
|
{
|
||||||
|
$mrs_data = $cas_latency == 2 ? 0x20 : 0x30;
|
||||||
|
}
|
||||||
|
else # 32 bits
|
||||||
|
{
|
||||||
|
$mrs_data = $cas_latency == 2 ? 0x40 : 0x60;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$temp = $sdram_init_val | 0x0000c000; # Disable refresh
|
||||||
|
$return_value .= &sdram_command($temp);
|
||||||
|
$return_value .= " --pause 20000";
|
||||||
|
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_precharge);
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_nop);
|
||||||
|
|
||||||
|
$return_value .= " --setreg +0 7";
|
||||||
|
$return_value .= " --label label1";
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_refresh);
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_nop);
|
||||||
|
$return_value .= " --loop +0 label1";
|
||||||
|
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_mrs, $mrs_data);
|
||||||
|
$return_value .= &sdram_command($temp, $sdram_nop);
|
||||||
|
|
||||||
|
$return_value .= &sdram_command($sdram_init_val);
|
||||||
|
|
||||||
|
return $return_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: sdram_command
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub sdram_command
|
||||||
|
{
|
||||||
|
my($temp, $value, $mrs_data) = @_;
|
||||||
|
|
||||||
|
$value ||= 0;
|
||||||
|
if ($value == $sdram_mrs)
|
||||||
|
{
|
||||||
|
$value = sprintf("%lx", $temp | ($value << 9) | ($mrs_data << 16));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$value = sprintf("%lx", $temp | ($value << 9));
|
||||||
|
}
|
||||||
|
|
||||||
|
return " --setreg $sdram_timing_address $value";
|
||||||
|
}
|
||||||
|
|
||||||
|
#*****************************************************************************
|
||||||
|
##
|
||||||
|
## FUNCTION NAME: print_help
|
||||||
|
##
|
||||||
|
##****************************************************************************
|
||||||
|
|
||||||
|
sub print_help
|
||||||
|
{
|
||||||
|
print "\nAXIS $my_name, ", '$Revision: 1.16 $ $Date: 2004/11/01 16:32:27 $ ', "\n";
|
||||||
|
die <<EOT;
|
||||||
|
Copyright (C) 2001-2002 Axis Communications AB
|
||||||
|
|
||||||
|
DESCRIPTION:
|
||||||
|
This program is used to boot (and flash) a linux image to a box.
|
||||||
|
It tries to extract the required ETRAX 100 settings from the image file.
|
||||||
|
|
||||||
|
SYNTAX:
|
||||||
|
$my_name [options]
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-b <bootfile> : The boot image to use.
|
||||||
|
-d <device> : The network interface to use, default is eth0.
|
||||||
|
-f : Save the image in the flash memory starting at
|
||||||
|
address 0x10000.
|
||||||
|
-F : Save the image in the flash memory starting at
|
||||||
|
address 0.
|
||||||
|
-h : Print this help text.
|
||||||
|
-i <image> : The path and name of the image to use, default
|
||||||
|
is fimage.
|
||||||
|
-o <offset> : The offset in the flash where the flashing starts.
|
||||||
|
-O <offset> : The offset in the image file where the flashing
|
||||||
|
starts from.
|
||||||
|
-p : Print the resulting etrax100boot command instead
|
||||||
|
of executing it.
|
||||||
|
-s <size> : How much to flash (default is the size of the
|
||||||
|
flash minus the offset specified using -o or -f).
|
||||||
|
-S <size> : The size of the flash.
|
||||||
|
|
||||||
|
All sizes and offsets above can be specified as decimal numbers, or as
|
||||||
|
hexadecimal numbers by prefixing them with 0x. It is also possible to use
|
||||||
|
the suffixes k and M to specify kilo (1024) or mega (1048576).
|
||||||
|
|
||||||
|
EOT
|
||||||
|
}
|
||||||
|
|
||||||
|
#****************** END OF FILE boot_linux ***********************************
|
32
target/linux/etrax-2.6/image/e100boot/Makefile
Normal file
32
target/linux/etrax-2.6/image/e100boot/Makefile
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
|
PKG_NAME:=e100boot
|
||||||
|
PKG_VERSION:=0.1
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
||||||
|
|
||||||
|
CRLF_WORKAROUND=1
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
|
cp -r ./src/* $(PKG_BUILD_DIR)
|
||||||
|
make -C $(PKG_BUILD_DIR)
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/InstallDev
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/sbl/e100boot $(BIN_DIR)/etrax100boot
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call Build/DefaultTargets))
|
26
target/linux/etrax-2.6/image/e100boot/src/LICENSE
Normal file
26
target/linux/etrax-2.6/image/e100boot/src/LICENSE
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Copyright (c) 2004, 2005 Axis Communications AB. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
3. Neither the name of Axis Communications AB nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY AXIS COMMUNCATIONS AB ``AS IS'' AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
70
target/linux/etrax-2.6/image/e100boot/src/Makefile
Normal file
70
target/linux/etrax-2.6/image/e100boot/src/Makefile
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#
|
||||||
|
# Top Makefile for e100boot
|
||||||
|
# $Id: Makefile,v 1.20 2003/06/04 12:22:23 pkj Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
# Change these paths if necessary. Can also be specified on cmdline as
|
||||||
|
# 'make INSTALL_PATH=/foo/bar/'.
|
||||||
|
|
||||||
|
INSTALL_NAME = e100boot
|
||||||
|
INSTALL_PATH = /usr/local
|
||||||
|
INSTALL_PATH_BIN = $(INSTALL_PATH)/bin
|
||||||
|
INSTALL_PATH_DOC = $(INSTALL_PATH)/man/man1
|
||||||
|
|
||||||
|
DIRS = libpcap-0.4 sbl doc
|
||||||
|
|
||||||
|
-include $(AXIS_TOP_DIR)/tools/build/Rules.axis
|
||||||
|
ifdef prefix
|
||||||
|
INSTALL_PATH = $(prefix)
|
||||||
|
endif
|
||||||
|
|
||||||
|
INSTALL ?= install
|
||||||
|
|
||||||
|
all: conf $(DIRS)
|
||||||
|
@for d in $(DIRS); do \
|
||||||
|
echo -e "\n### Making $$d"; \
|
||||||
|
$(MAKE) -C $$d || exit; \
|
||||||
|
done
|
||||||
|
|
||||||
|
conf: $(DIRS)
|
||||||
|
@for d in $(DIRS); do \
|
||||||
|
if [ -x $$d/configure ] && [ ! -e $$d/Makefile ]; then \
|
||||||
|
echo -e "\n### Configuring $$d"; \
|
||||||
|
cd $$d; ./configure || exit; cd ..; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
tar: clean
|
||||||
|
@echo -e "\n### Making tarball."
|
||||||
|
tar -C ../ -zcf e100boot.tgz --exclude e100boot.tgz --exclude RCS --exclude CVS e100boot
|
||||||
|
|
||||||
|
|
||||||
|
install: all
|
||||||
|
$(INSTALL) -d $(INSTALL_PATH_BIN) $(INSTALL_PATH_DOC)
|
||||||
|
$(INSTALL) sbl/e100boot.stripped $(INSTALL_PATH_BIN)/$(INSTALL_NAME)
|
||||||
|
$(INSTALL) -m 0644 doc/e100boot.1 $(INSTALL_PATH_DOC)/$(INSTALL_NAME).1
|
||||||
|
|
||||||
|
install.setuid:
|
||||||
|
@echo -e "\n### Make install.setuid"; \
|
||||||
|
if ! [ -e $(INSTALL_PATH_BIN)/$(INSTALL_NAME) ]; then \
|
||||||
|
echo -e "\n### Binary $(INSTALL_PATH_BIN)/$(INSTALL_NAME) does not exist! Make install first."; \
|
||||||
|
elif [ `id -u` = 0 ]; then \
|
||||||
|
chown root.root $(INSTALL_PATH_BIN)/$(INSTALL_NAME); \
|
||||||
|
chmod +s $(INSTALL_PATH_BIN)/$(INSTALL_NAME); \
|
||||||
|
else \
|
||||||
|
echo "### You must do this as root!"; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@for d in $(DIRS); do \
|
||||||
|
if [ -e $$d/Makefile ]; then \
|
||||||
|
echo -e "\n### Cleaning $$d"; \
|
||||||
|
$(MAKE) -C $$d clean || exit; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
configsubs: conf configsubs-dirs
|
||||||
|
|
||||||
|
configsubs-dirs:
|
||||||
|
$(MAKE) -C libpcap-0.4 configsubs
|
||||||
|
$(MAKE) -C sbl configsubs
|
25
target/linux/etrax-2.6/image/e100boot/src/cbl/Makefile
Normal file
25
target/linux/etrax-2.6/image/e100boot/src/cbl/Makefile
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#
|
||||||
|
# Makefile to generate .ima files for e100boot
|
||||||
|
#
|
||||||
|
# Hacked by ronny, rehacked by ronny
|
||||||
|
#
|
||||||
|
# $Id: Makefile,v 1.26 2003/03/13 14:18:31 cii Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
DIRS := net net_noleds ser ser_noleds
|
||||||
|
|
||||||
|
all: $(DIRS)
|
||||||
|
@for d in $(DIRS); do \
|
||||||
|
echo -e "\n### Making $$d"; \
|
||||||
|
make -C $$d || exit; \
|
||||||
|
done
|
||||||
|
@echo "***************************************************************"
|
||||||
|
@./free_size
|
||||||
|
@echo "***************************************************************"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.ima
|
||||||
|
@for d in $(DIRS); do \
|
||||||
|
echo -e "\n### Cleaning $$d"; \
|
||||||
|
make -C $$d clean || exit; \
|
||||||
|
done;
|
42
target/linux/etrax-2.6/image/e100boot/src/cbl/free_size
Executable file
42
target/linux/etrax-2.6/image/e100boot/src/cbl/free_size
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Calculates the size left in ETRAX cache when bootloader is loaded.
|
||||||
|
#
|
||||||
|
|
||||||
|
BOOT_FILE=`dirname $0`/net/net.out
|
||||||
|
HEADER_FILE=`dirname $0`/src/e100boot.h
|
||||||
|
|
||||||
|
for FILE in $BOOT_FILE $HEADER_FILE; do
|
||||||
|
if [ ! -f $FILE ]; then
|
||||||
|
echo "Could not find the file \"$FILE\"!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# The cache size is given in hex
|
||||||
|
CACHE_SIZE=2000
|
||||||
|
|
||||||
|
BSS_SIZE=`nm-cris $BOOT_FILE | grep Ebss | cut -d ' ' -f 1 | tr a-f A-F`
|
||||||
|
|
||||||
|
TEXT_SIZE=`nm-cris $BOOT_FILE | grep Stext | cut -d ' ' -f 1 | tr a-f A-F`
|
||||||
|
|
||||||
|
IO_BUF_END=`grep IO_BUF_END $HEADER_FILE | awk '{ print $3 }' | \
|
||||||
|
cut -d x -f 2 | tr a-f A-F`
|
||||||
|
|
||||||
|
IO_BUF_START=`grep IO_BUF_START $HEADER_FILE | awk '{ print $3 }' | \
|
||||||
|
cut -d x -f 2 | tr a-f A-F`
|
||||||
|
|
||||||
|
FREE_SIZE=`echo "ibase=16 ; \
|
||||||
|
$CACHE_SIZE - \
|
||||||
|
($BSS_SIZE - $TEXT_SIZE + $IO_BUF_END - $IO_BUF_START)" | \
|
||||||
|
bc`
|
||||||
|
|
||||||
|
echo "Free cache size when cbl is loaded will be:"
|
||||||
|
echo -e "\t$FREE_SIZE bytes - size of stack"
|
||||||
|
|
||||||
|
if [ $FREE_SIZE -lt 0 ]; then
|
||||||
|
echo "Bootloader is too large! You will have to do some optimizing..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,6 @@
|
||||||
|
#
|
||||||
|
# $Id: Makefile,v 1.1 2002/07/01 14:36:40 pkj Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
IMAGE := net.ima
|
||||||
|
include ../rules.cbl
|
|
@ -0,0 +1,3 @@
|
||||||
|
common.o: ../src/common.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1,3 @@
|
||||||
|
common_init.o: ../src/common_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
1
target/linux/etrax-2.6/image/e100boot/src/cbl/net/crt0.d
Normal file
1
target/linux/etrax-2.6/image/e100boot/src/cbl/net/crt0.d
Normal file
|
@ -0,0 +1 @@
|
||||||
|
crt0.o: ../src/crt0.S
|
|
@ -0,0 +1 @@
|
||||||
|
char e100boot_version[] = "This bootloader was built by root on Wed May 16 21:31:41 CEST 2007.\r\n";
|
|
@ -0,0 +1 @@
|
||||||
|
e100boot_version.o: e100boot_version.c
|
|
@ -0,0 +1 @@
|
||||||
|
flash.o: ../src/flash.c ../src/e100boot.h ../src/compiler.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
hwregs.o: ../src/hwregs.c ../src/compiler.h ../src/hwregs.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
net_init.o: ../src/net_init.c ../src/sv_addr_ag.h ../src/sv_addr.agh \
|
||||||
|
../src/e100boot.h ../src/compiler.h
|
|
@ -0,0 +1,6 @@
|
||||||
|
#
|
||||||
|
# $Id: Makefile,v 1.1 2002/07/01 14:36:51 pkj Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
IMAGE := net_noleds.ima
|
||||||
|
include ../rules.cbl
|
|
@ -0,0 +1,3 @@
|
||||||
|
common.o: ../src/common.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1,3 @@
|
||||||
|
common_init.o: ../src/common_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1 @@
|
||||||
|
crt0.o: ../src/crt0.S
|
|
@ -0,0 +1 @@
|
||||||
|
char e100boot_version[] = "This bootloader was built by root on Wed May 16 21:31:43 CEST 2007.\r\n";
|
|
@ -0,0 +1 @@
|
||||||
|
e100boot_version.o: e100boot_version.c
|
|
@ -0,0 +1 @@
|
||||||
|
flash.o: ../src/flash.c ../src/e100boot.h ../src/compiler.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
hwregs.o: ../src/hwregs.c ../src/compiler.h ../src/hwregs.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
net_init.o: ../src/net_init.c ../src/sv_addr_ag.h ../src/sv_addr.agh \
|
||||||
|
../src/e100boot.h ../src/compiler.h
|
55
target/linux/etrax-2.6/image/e100boot/src/cbl/rules.cbl
Normal file
55
target/linux/etrax-2.6/image/e100boot/src/cbl/rules.cbl
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
#
|
||||||
|
# $Id: rules.cbl,v 1.4 2005/04/20 11:18:54 starvik Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
VPATH := .:../src
|
||||||
|
|
||||||
|
ifeq ($(findstring _noleds,$(IMAGE)),_noleds)
|
||||||
|
USE_LEDS := 0
|
||||||
|
else
|
||||||
|
USE_LEDS := 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
MAKEFLAGS := r
|
||||||
|
INCS := -I.
|
||||||
|
DEFS := -DUSE_LEDS=$(USE_LEDS)
|
||||||
|
CFLAGS := -Os -Wall -Wmissing-prototypes -W -Wa,-N -nostdinc $(INCS) $(DEFS) -MMD
|
||||||
|
ASFLAGS := $(CFLAGS)
|
||||||
|
LNFLAGS := -Wl,--section-start,.startup=0x380000f0 -nostdlib -Os -Wl,-T../src/ldscript
|
||||||
|
CC := cris-axis-elf-gcc
|
||||||
|
|
||||||
|
OUT := $(patsubst %.ima,%.out,$(IMAGE))
|
||||||
|
|
||||||
|
OBJS = crt0.o common_init.o
|
||||||
|
ifeq ($(findstring net,$(IMAGE)),net)
|
||||||
|
OBJS += net_init.o
|
||||||
|
else
|
||||||
|
OBJS += ser_init.o
|
||||||
|
endif
|
||||||
|
OBJS += common.o flash.o hwregs.o e100boot_version.o
|
||||||
|
|
||||||
|
all: ../$(IMAGE)
|
||||||
|
|
||||||
|
$(OUT): $(OBJS) ldscript
|
||||||
|
$(CC) -o $@ $(LNFLAGS) $(OBJS)
|
||||||
|
|
||||||
|
../%.ima: %.out
|
||||||
|
bin-cris -o $@ $<
|
||||||
|
@find $@ -printf '# Size of image $@ is %s bytes.\n\n'
|
||||||
|
|
||||||
|
$(OBJS): ../rules.cbl Makefile
|
||||||
|
|
||||||
|
# We don't want this to be a dummy and be recreated every time we build,
|
||||||
|
# only after a make clean
|
||||||
|
e100boot_version.c:
|
||||||
|
@echo "Generating version file....."
|
||||||
|
@echo 'char e100boot_version[] = "This bootloader was built by '`id -u -n`' on '`date`'.\r\n";' > $@
|
||||||
|
|
||||||
|
dummy:
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf *.o *.d *.out *.ima deps e100boot_version.c
|
||||||
|
|
||||||
|
ifneq ($(MAKECMDGOALS),clean)
|
||||||
|
-include *.d
|
||||||
|
endif
|
BIN
target/linux/etrax-2.6/image/e100boot/src/cbl/ser.ima
Executable file
BIN
target/linux/etrax-2.6/image/e100boot/src/cbl/ser.ima
Executable file
Binary file not shown.
|
@ -0,0 +1,6 @@
|
||||||
|
#
|
||||||
|
# $Id: Makefile,v 1.1 2002/07/01 14:37:01 pkj Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
IMAGE := ser.ima
|
||||||
|
include ../rules.cbl
|
|
@ -0,0 +1,3 @@
|
||||||
|
common.o: ../src/common.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1,3 @@
|
||||||
|
common_init.o: ../src/common_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
1
target/linux/etrax-2.6/image/e100boot/src/cbl/ser/crt0.d
Normal file
1
target/linux/etrax-2.6/image/e100boot/src/cbl/ser/crt0.d
Normal file
|
@ -0,0 +1 @@
|
||||||
|
crt0.o: ../src/crt0.S
|
|
@ -0,0 +1 @@
|
||||||
|
char e100boot_version[] = "This bootloader was built by root on Wed May 16 21:31:44 CEST 2007.\r\n";
|
|
@ -0,0 +1 @@
|
||||||
|
e100boot_version.o: e100boot_version.c
|
|
@ -0,0 +1 @@
|
||||||
|
flash.o: ../src/flash.c ../src/e100boot.h ../src/compiler.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
hwregs.o: ../src/hwregs.c ../src/compiler.h ../src/hwregs.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h
|
BIN
target/linux/etrax-2.6/image/e100boot/src/cbl/ser/ser.out
Executable file
BIN
target/linux/etrax-2.6/image/e100boot/src/cbl/ser/ser.out
Executable file
Binary file not shown.
|
@ -0,0 +1,3 @@
|
||||||
|
ser_init.o: ../src/ser_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/sv_addr_ag.h ../src/sv_addr.agh ../src/e100boot.h
|
|
@ -0,0 +1,6 @@
|
||||||
|
#
|
||||||
|
# $Id: Makefile,v 1.1 2002/07/01 14:37:10 pkj Exp $
|
||||||
|
#
|
||||||
|
|
||||||
|
IMAGE := ser_noleds.ima
|
||||||
|
include ../rules.cbl
|
|
@ -0,0 +1,3 @@
|
||||||
|
common.o: ../src/common.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1,3 @@
|
||||||
|
common_init.o: ../src/common_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/e100boot.h
|
|
@ -0,0 +1 @@
|
||||||
|
crt0.o: ../src/crt0.S
|
|
@ -0,0 +1 @@
|
||||||
|
char e100boot_version[] = "This bootloader was built by root on Wed May 16 21:31:46 CEST 2007.\r\n";
|
|
@ -0,0 +1 @@
|
||||||
|
e100boot_version.o: e100boot_version.c
|
|
@ -0,0 +1 @@
|
||||||
|
flash.o: ../src/flash.c ../src/e100boot.h ../src/compiler.h
|
|
@ -0,0 +1,2 @@
|
||||||
|
hwregs.o: ../src/hwregs.c ../src/compiler.h ../src/hwregs.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h
|
|
@ -0,0 +1,3 @@
|
||||||
|
ser_init.o: ../src/ser_init.c ../src/hwregs.h ../src/compiler.h \
|
||||||
|
../src/debug.h ../src/project.h ../src/hwregs_def.h ../src/hwregs_int.h \
|
||||||
|
../src/sv_addr_ag.h ../src/sv_addr.agh ../src/e100boot.h
|
486
target/linux/etrax-2.6/image/e100boot/src/cbl/src/common.c
Normal file
486
target/linux/etrax-2.6/image/e100boot/src/cbl/src/common.c
Normal file
|
@ -0,0 +1,486 @@
|
||||||
|
#include "hwregs.h"
|
||||||
|
#include "e100boot.h"
|
||||||
|
|
||||||
|
static void toggle_led(void);
|
||||||
|
|
||||||
|
static void read_load_info(void);
|
||||||
|
static void decode_load_info(void);
|
||||||
|
|
||||||
|
static void read_file(byte* addr, udword size);
|
||||||
|
|
||||||
|
#if USE_PRINT_DESCR
|
||||||
|
static void print_descr(dma_descr_T *d);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int memory_test(udword addr, udword size, udword *failed_address);
|
||||||
|
static void memory_dump(udword *from, udword *to);
|
||||||
|
|
||||||
|
extern byte _Stext[];
|
||||||
|
extern byte _Edata[];
|
||||||
|
|
||||||
|
#ifdef USE_BAUDRATE_CHANGING
|
||||||
|
byte change_baudrate;
|
||||||
|
udword new_baudrate;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
level2_boot(void)
|
||||||
|
{
|
||||||
|
#if USE_LEDS
|
||||||
|
REG_SET(R_PORT_PA_DATA, data_out, 0xaa);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
io_buf_next = (byte*)IO_BUF_START;
|
||||||
|
io_buf_cur = (byte*)IO_BUF_START;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
send_string("\r\n\r\nDevice ID = ");
|
||||||
|
send_hex(ntohl(tx_header.id), NL);
|
||||||
|
send_string(e100boot_version);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
{
|
||||||
|
udword sum = 0;
|
||||||
|
byte *b;
|
||||||
|
|
||||||
|
for (b = (byte*)_Stext; b != (byte*)_Edata; b++) {
|
||||||
|
sum += *b;
|
||||||
|
}
|
||||||
|
send_string("Checksum of bootloader is ");
|
||||||
|
send_hex(sum, NL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
read_load_info();
|
||||||
|
|
||||||
|
__asm__ volatile ("jump _start");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
toggle_led(void)
|
||||||
|
{
|
||||||
|
#if USE_LEDS
|
||||||
|
REG_SET(R_PORT_PA_DATA, data_out, 0x55);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
REG_SET(R_PORT_PA_DATA, data_out, ~REG_GET(R_PORT_PA_READ, data_in));
|
||||||
|
{
|
||||||
|
volatile udword i;
|
||||||
|
|
||||||
|
for (i = 0; i != 2000000; i++)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
read_load_info(void)
|
||||||
|
{
|
||||||
|
#ifdef USE_BAUDRATE_CHANGING
|
||||||
|
change_baudrate = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
send_string("Waiting for load info.\r\n");
|
||||||
|
|
||||||
|
send_ack();
|
||||||
|
|
||||||
|
read_file((byte*)IO_BUF_START, IO_BUF_END - IO_BUF_START - CRC_LEN);
|
||||||
|
send_string("Got load info.\r\n");
|
||||||
|
decode_load_info();
|
||||||
|
|
||||||
|
#ifdef USE_BAUDRATE_CHANGING
|
||||||
|
if (change_baudrate) {
|
||||||
|
REG_WR(R_SERIAL0_BAUD, new_baudrate);
|
||||||
|
{
|
||||||
|
udword i = 0;
|
||||||
|
|
||||||
|
while (i++ < 1000000)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
send_ack();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
toggle_led();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
decode_load_info(void)
|
||||||
|
{
|
||||||
|
udword *type_p = (udword*)IO_BUF_START;
|
||||||
|
udword failed_address;
|
||||||
|
udword i;
|
||||||
|
command_T *cmd;
|
||||||
|
|
||||||
|
while (type_p != (udword*)(IO_BUF_END - CRC_LEN)) { /* !!! */
|
||||||
|
// send_hex(type_p, NL);
|
||||||
|
*type_p = ntohl(*type_p);
|
||||||
|
// send_hex(*type_p, NL);
|
||||||
|
type_p++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// memory_dump(IO_BUF_START, IO_BUF_END);
|
||||||
|
|
||||||
|
cmd = (command_T*)IO_BUF_START;
|
||||||
|
while (cmd->type) {
|
||||||
|
switch (cmd->type) {
|
||||||
|
case PACKET_INFO:
|
||||||
|
send_string("PACKET_INFO\r\n");
|
||||||
|
send_hex(cmd->args.packet_info.addr, NL);
|
||||||
|
send_hex(cmd->args.packet_info.size, NL);
|
||||||
|
|
||||||
|
seq--;
|
||||||
|
send_ack();
|
||||||
|
seq++;
|
||||||
|
|
||||||
|
read_file((byte*)cmd->args.packet_info.addr, cmd->args.packet_info.size);
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.packet_info;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SET_REGISTER:
|
||||||
|
send_string("SET_REGISTER\r\n");
|
||||||
|
send_hex(cmd->args.set_register.addr, NL);
|
||||||
|
send_hex(cmd->args.set_register.val, NL);
|
||||||
|
|
||||||
|
*(udword*)cmd->args.set_register.addr = cmd->args.set_register.val;
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.set_register;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GET_REGISTER:
|
||||||
|
send_string("GET_REGISTER\r\n");
|
||||||
|
send_hex(cmd->args.get_register.addr, NL);
|
||||||
|
send_hex(*(udword*)cmd->args.get_register.addr, NL);
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.get_register;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PAUSE_LOOP:
|
||||||
|
send_string("PAUSE_LOOP\r\n");
|
||||||
|
send_hex(cmd->args.pause_loop.pause, NL);
|
||||||
|
|
||||||
|
for (i = cmd->args.pause_loop.pause; i; i--)
|
||||||
|
;
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.pause_loop;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEM_VERIFY:
|
||||||
|
send_string("MEM_VERIFY\r\n");
|
||||||
|
send_hex(cmd->args.mem_verify.addr, NL);
|
||||||
|
send_hex(cmd->args.mem_verify.val, NL);
|
||||||
|
|
||||||
|
if (*(udword*)cmd->args.mem_verify.addr != cmd->args.mem_verify.val) {
|
||||||
|
send_string("verify failed\r\n");
|
||||||
|
goto decode_failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.mem_verify;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEM_TEST:
|
||||||
|
send_string("MEM_TEST\r\n");
|
||||||
|
send_hex(cmd->args.mem_test.from, NL);
|
||||||
|
send_hex(cmd->args.mem_test.to, NL);
|
||||||
|
|
||||||
|
if (!memory_test(cmd->args.mem_test.from,
|
||||||
|
cmd->args.mem_test.to,
|
||||||
|
&failed_address)) {
|
||||||
|
send_string("### Memory test failed at ");
|
||||||
|
send_hex(failed_address, NL);
|
||||||
|
memory_dump((udword*)DWORD_ALIGN(failed_address - 64),
|
||||||
|
(udword*)DWORD_ALIGN(failed_address + 64));
|
||||||
|
goto decode_failed;
|
||||||
|
}
|
||||||
|
send_string("Passed memory test.\r\n");
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.mem_test;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEM_DUMP:
|
||||||
|
send_string("MEM_DUMP\r\n");
|
||||||
|
send_hex(cmd->args.mem_dump.from_addr, NL);
|
||||||
|
send_hex(cmd->args.mem_dump.to_addr, NL);
|
||||||
|
|
||||||
|
memory_dump((udword*)cmd->args.mem_dump.from_addr,
|
||||||
|
(udword*)cmd->args.mem_dump.to_addr);
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.mem_dump;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MEM_CLEAR:
|
||||||
|
send_string("MEM_CLEAR\r\n");
|
||||||
|
send_hex(cmd->args.mem_clear.from_addr, NL);
|
||||||
|
send_hex(cmd->args.mem_clear.to_addr, NL);
|
||||||
|
|
||||||
|
for (i = cmd->args.mem_clear.from_addr;
|
||||||
|
i <= cmd->args.mem_clear.to_addr;
|
||||||
|
i++) {
|
||||||
|
*(byte*)i = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.mem_clear;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FLASH:
|
||||||
|
send_string("FLASH\r\n");
|
||||||
|
send_hex((udword)cmd->args.flash.source, NL);
|
||||||
|
send_hex(cmd->args.flash.offset, NL);
|
||||||
|
send_hex(cmd->args.flash.size, NL);
|
||||||
|
|
||||||
|
if ((i = flash_write(cmd->args.flash.source,
|
||||||
|
cmd->args.flash.offset,
|
||||||
|
cmd->args.flash.size)) != ERR_FLASH_OK) {
|
||||||
|
if (i == ERR_FLASH_VERIFY) {
|
||||||
|
udword size =
|
||||||
|
(cmd->args.flash.size < 65536 ? cmd->args.flash.size : 65536);
|
||||||
|
|
||||||
|
/* Try to erase the first block(s) we tried to flash to prevent a
|
||||||
|
unit which failed to flash correctly from booting */
|
||||||
|
flash_write(NULL, cmd->args.flash.offset, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
goto decode_failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.flash;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case JUMP:
|
||||||
|
#if 1
|
||||||
|
/* for the printf function in our libc */
|
||||||
|
REG_WR(R_DMA_CH8_FIRST, *(udword*)&tx_header.dest[0]);
|
||||||
|
REG_WR(R_DMA_CH9_FIRST, *(uword*)&tx_header.dest[4]);
|
||||||
|
// REG_WR(R_NETWORK_SA_1, &tx_header.dest[4]);
|
||||||
|
// REG_WR(R_NETWORK_SA_2, tx_header.id);
|
||||||
|
#endif
|
||||||
|
send_string("JUMP\r\n");
|
||||||
|
send_hex(cmd->args.jump.addr, NL);
|
||||||
|
send_string("END\r\n");
|
||||||
|
|
||||||
|
__asm__ volatile ("jump %0" :: "r" (cmd->args.jump.addr));
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.jump;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LOOP:
|
||||||
|
send_string("LOOP\r\n");
|
||||||
|
send_hex(cmd->args.bne.addr, NL);
|
||||||
|
send_hex(cmd->args.bne.target, NL);
|
||||||
|
|
||||||
|
if (*(udword*)cmd->args.bne.addr) {
|
||||||
|
(*(udword*)cmd->args.bne.addr)--;
|
||||||
|
(byte*)cmd = cmd->args.bne.target;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.bne;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef USE_BAUDRATE_CHANGING
|
||||||
|
case BAUDRATE:
|
||||||
|
send_string("BAUDRATE\r\n");
|
||||||
|
send_hex(cmd->args.br.baudrate, NL);
|
||||||
|
|
||||||
|
new_baudrate = cmd->args.br.baudrate;
|
||||||
|
|
||||||
|
(byte*)cmd += sizeof cmd->type + sizeof cmd->args.br;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
send_string("### Unknown type: ");
|
||||||
|
send_hex(cmd->type, NL);
|
||||||
|
|
||||||
|
goto decode_failed;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
decode_failed:
|
||||||
|
send_string("END\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
read_file(byte* addr, udword size)
|
||||||
|
{
|
||||||
|
udword nbr_read_last;
|
||||||
|
udword sum;
|
||||||
|
byte *b;
|
||||||
|
byte *from;
|
||||||
|
|
||||||
|
/* send_string(">read_file\r\n"); */
|
||||||
|
|
||||||
|
nbr_read = 0;
|
||||||
|
nbr_read_last = 0;
|
||||||
|
target_address = (udword)addr;
|
||||||
|
|
||||||
|
if (interface == NETWORK) {
|
||||||
|
rx_descr2.buf = (udword)addr;
|
||||||
|
bytes_to_read = size;
|
||||||
|
rx_descr2.sw_len = size + CRC_LEN > 1500 ? 1500 : size + CRC_LEN;
|
||||||
|
/* rx_descr2.sw_len = 1500; */
|
||||||
|
|
||||||
|
REG_SET(R_DMA_CH1_FIRST, first, (udword)&rx_descr);
|
||||||
|
|
||||||
|
/* Restart receiver so descriptor is re-read. */
|
||||||
|
REG_SET(R_DMA_CH1_CMD, cmd, reset);
|
||||||
|
while (REG_EQL(R_DMA_CH1_CMD, cmd, reset)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
REG_SET(R_DMA_CH1_CMD, cmd, start);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
/* send_hex(rx_descr2.hw_len, NL); */
|
||||||
|
from = (byte*)rx_descr2.buf;
|
||||||
|
if (read_data()) {
|
||||||
|
if (nbr_read < size) {
|
||||||
|
REG_SET(R_DMA_CH1_CMD, cmd, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_PRINT_DESCR
|
||||||
|
print_descr(&rx_descr);
|
||||||
|
print_descr(&rx_descr2);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
send_string("Read ");
|
||||||
|
send_hex(rx_descr2.hw_len - CRC_LEN, NO_NL);
|
||||||
|
send_string(" bytes. ");
|
||||||
|
send_hex((udword)from, NO_NL);
|
||||||
|
send_string(" - ");
|
||||||
|
send_hex(rx_descr2.buf-1, NO_NL);
|
||||||
|
send_string(" (");
|
||||||
|
send_hex(nbr_read, NO_NL);
|
||||||
|
send_string("/");
|
||||||
|
send_hex(size, NO_NL);
|
||||||
|
send_string(")\r\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
nbr_read_last = nbr_read;
|
||||||
|
/* from = (byte*)rx_descr2.buf; */
|
||||||
|
|
||||||
|
if (nbr_read >= size) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { /* interface != NETWORK */
|
||||||
|
while (nbr_read < size) {
|
||||||
|
read_data();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sum = 0;
|
||||||
|
for (b = addr; b != (byte*)(addr+size); b++) {
|
||||||
|
sum += *b;
|
||||||
|
}
|
||||||
|
send_string("Checksum of file is ");
|
||||||
|
send_hex(sum, NL);
|
||||||
|
|
||||||
|
/* memory_dump((udword*)addr, (udword*)addr+size); */
|
||||||
|
/* send_string("<read_file\r\n"); */
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_PRINT_DESCR
|
||||||
|
void
|
||||||
|
print_descr(dma_descr_T *d)
|
||||||
|
{
|
||||||
|
send_string("Descriptor at ");
|
||||||
|
send_hex((udword)d, NL);
|
||||||
|
|
||||||
|
send_string("ctrl : ");
|
||||||
|
send_hex(d->ctrl, NL);
|
||||||
|
|
||||||
|
send_string("sw_len : ");
|
||||||
|
send_hex(d->sw_len, NL);
|
||||||
|
|
||||||
|
send_string("next : ");
|
||||||
|
send_hex(d->next, NL);
|
||||||
|
|
||||||
|
send_string("buf : ");
|
||||||
|
send_hex(d->buf, NL);
|
||||||
|
|
||||||
|
send_string("status : ");
|
||||||
|
send_hex(d->status, NL);
|
||||||
|
|
||||||
|
send_string("hw_len : ");
|
||||||
|
send_hex(d->hw_len, NL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
memory_test(udword from, udword to, udword *failed_address)
|
||||||
|
{
|
||||||
|
udword i;
|
||||||
|
udword j;
|
||||||
|
byte b;
|
||||||
|
|
||||||
|
/* At each dword (but bytewise) write the inverse of the adress,
|
||||||
|
check that it worked, then write the inverse of the last byte
|
||||||
|
written. Exit on fail. The memory after a successfull test will
|
||||||
|
be:
|
||||||
|
|
||||||
|
0xC0000000 : 0xC0000000 0xC0000004 0xC0000008 0xC000000C
|
||||||
|
0xC0000010 : 0xC0000010 0xC0000014 0xC0000018 0xC000001C
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (i = from; i < to; i += 4) {
|
||||||
|
for (j = 0; (j != sizeof(udword)) && (i+j < to); j++) {
|
||||||
|
b = ((~i) >> (j*8)) & 0xff;
|
||||||
|
*(volatile byte*)(i+j) = b;
|
||||||
|
if (*(volatile byte*)(i+j) == b) {
|
||||||
|
*(volatile byte*)(i+j) = ~b;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*failed_address = i+j;
|
||||||
|
send_string("### Memory test 1 failed at ");
|
||||||
|
send_hex(*failed_address, NL);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Run through entire region, check bytewise that the dwords contain
|
||||||
|
the address to the dword. Exit on fail. */
|
||||||
|
|
||||||
|
for (i = from; i < to; i += 4) {
|
||||||
|
for (j = 0; (j != sizeof(udword)) && (i+j < to); j++) {
|
||||||
|
b = (i >> (j*8)) & 0xff;
|
||||||
|
if (*(volatile byte*)(i+j) != b) {
|
||||||
|
*failed_address = i+j;
|
||||||
|
send_string("### Memory test 2 failed at ");
|
||||||
|
send_hex(*failed_address, NL);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
memory_dump(udword *from, udword *to)
|
||||||
|
{
|
||||||
|
udword *i = from;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (; i <= to; i += 4) {
|
||||||
|
send_hex((udword)i, NO_NL);
|
||||||
|
send_string(" :");
|
||||||
|
for(j = 0; j != 4 && (i+j <= to); j++) {
|
||||||
|
send_string(" ");
|
||||||
|
send_hex(*(udword*)(i+j), NO_NL);
|
||||||
|
}
|
||||||
|
send_string("\r\n");
|
||||||
|
}
|
||||||
|
}
|
209
target/linux/etrax-2.6/image/e100boot/src/cbl/src/common_init.c
Normal file
209
target/linux/etrax-2.6/image/e100boot/src/cbl/src/common_init.c
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
*!
|
||||||
|
*! FILE NAME : common_init.c
|
||||||
|
*!
|
||||||
|
*! DESCRIPTION: This piece of code is loaded at bootstrap and is put in the
|
||||||
|
*! cache at 0x380000F0. Depending of how R_BUS_STATUS<2:1> is
|
||||||
|
*! set different kinds of bootstrap is performed.
|
||||||
|
*!
|
||||||
|
*! 00 - Normal boot. No bootstrap is performed and this code
|
||||||
|
*! is never loaded.
|
||||||
|
*! 01 - Serial boot. 784 bytes is loaded and execution starts
|
||||||
|
*! at 0x380000F0.
|
||||||
|
*! 11 - Parallel boot. 784 bytes is loaded and execution starts
|
||||||
|
*! at 0x380000F0.
|
||||||
|
*! 10 - Network boot. 1484 bytes is loaded and execution start
|
||||||
|
*! at 0x380000F4.
|
||||||
|
*!
|
||||||
|
*! ---------------------------------------------------------------------------
|
||||||
|
*! HISTORY
|
||||||
|
*!
|
||||||
|
*! DATE NAME CHANGES
|
||||||
|
*! ---- ---- -------
|
||||||
|
*! 980326 Ronny Ranerup Initial version
|
||||||
|
*! Sep 20 1999 Jonas Dellenvall Added port3 debug support
|
||||||
|
*! 20020206 ronny Yeah, and I removed it again...
|
||||||
|
*!
|
||||||
|
*! ---------------------------------------------------------------------------
|
||||||
|
*! (C) Copyright 1998-2002, Axis Communications AB, LUND, SWEDEN
|
||||||
|
*!***************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Misc notes:
|
||||||
|
|
||||||
|
It is very important to keep this file short. This and the boot
|
||||||
|
interface specific parts must fit into the first boot packet.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/****************** INCLUDE FILES SECTION ***********************************/
|
||||||
|
|
||||||
|
#include "hwregs.h"
|
||||||
|
#include "e100boot.h"
|
||||||
|
|
||||||
|
/****************** CONSTANT AND MACRO SECTION ******************************/
|
||||||
|
|
||||||
|
/****************** TYPE DEFINITION SECTION *********************************/
|
||||||
|
|
||||||
|
/****************** LOCAL FUNCTION DECLARATION SECTION **********************/
|
||||||
|
|
||||||
|
static int timeout(void);
|
||||||
|
|
||||||
|
/****************** GLOBAL VARIABLE DECLARATION SECTION *********************/
|
||||||
|
|
||||||
|
udword nbr_read; /* How many bytes has been read from current file */
|
||||||
|
byte interface; /* Which I/O interface is the current one */
|
||||||
|
byte set_dest; /* Have we set the destination address in tx_header */
|
||||||
|
udword last_timeout;
|
||||||
|
|
||||||
|
struct packet_header_T tx_header;
|
||||||
|
dma_descr_T tx_descr; /* For packet header */
|
||||||
|
dma_descr_T tx_descr2; /* packet data */
|
||||||
|
|
||||||
|
struct packet_header_T rx_header;
|
||||||
|
dma_descr_T rx_descr; /* For packet header */
|
||||||
|
dma_descr_T rx_descr2; /* packet data */
|
||||||
|
|
||||||
|
udword seq; /* Sequence number of next wanted packet */
|
||||||
|
byte serial_up;
|
||||||
|
|
||||||
|
/****************** LOCAL VARIABLE DECLARATION SECTION **********************/
|
||||||
|
|
||||||
|
/****************** FUNCTION DEFINITION SECTION *****************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
crt1(void)
|
||||||
|
{
|
||||||
|
/* Do this only once so we don't reset the timers and destroy the 32
|
||||||
|
bit timer-register used as random number generator */
|
||||||
|
|
||||||
|
REG_SET__R_TIMER_CTRL(
|
||||||
|
timerdiv1, 0,
|
||||||
|
timerdiv0, 0,
|
||||||
|
presc_timer1, normal,
|
||||||
|
i1, clr,
|
||||||
|
tm1, run,
|
||||||
|
clksel1, cascade0,
|
||||||
|
presc_ext, prescale,
|
||||||
|
i0, clr,
|
||||||
|
tm0, run,
|
||||||
|
clksel0, c9600Hz);
|
||||||
|
|
||||||
|
REG_SET__R_TIMER_CTRL(
|
||||||
|
timerdiv1, 0,
|
||||||
|
timerdiv0, 0,
|
||||||
|
presc_timer1, normal,
|
||||||
|
i1, nop,
|
||||||
|
tm1, run,
|
||||||
|
clksel1, cascade0,
|
||||||
|
presc_ext, prescale,
|
||||||
|
i0, nop,
|
||||||
|
tm0, run,
|
||||||
|
clksel0, c9600Hz);
|
||||||
|
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
start(void)
|
||||||
|
{
|
||||||
|
#if USE_LEDS
|
||||||
|
REG_SET__R_PORT_PA_DIR(
|
||||||
|
dir7, output,
|
||||||
|
dir6, output,
|
||||||
|
dir5, output,
|
||||||
|
dir4, output,
|
||||||
|
dir3, output,
|
||||||
|
dir2, output,
|
||||||
|
dir1, output,
|
||||||
|
dir0, input); /* not for prodtest */
|
||||||
|
|
||||||
|
REG_SET__R_PORT_PA_DATA(data_out, 0);
|
||||||
|
|
||||||
|
REG_SET__R_PORT_PB_DIR(
|
||||||
|
dir7, output,
|
||||||
|
dir6, output,
|
||||||
|
dir5, output,
|
||||||
|
dir4, output,
|
||||||
|
dir3, output,
|
||||||
|
dir2, output,
|
||||||
|
dir1, output,
|
||||||
|
dir0, output);
|
||||||
|
|
||||||
|
REG_SET__R_PORT_PB_DATA(data_out, 0xff);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We must initialize all (global) variables here, since the .data
|
||||||
|
and .bss area are used before they are loaded. */
|
||||||
|
|
||||||
|
//serial_up = FALSE;
|
||||||
|
nbr_read = 0;
|
||||||
|
|
||||||
|
/* Get a random value to use as id. */
|
||||||
|
tx_header.id = htonl(REG_RD(R_TIMER_DATA));
|
||||||
|
|
||||||
|
/* timer01 is used as timer. */
|
||||||
|
last_timeout = REG_GET(R_TIMER01_DATA, count);
|
||||||
|
|
||||||
|
interface = REG_GET(R_BUS_STATUS, boot) - 1; /* 0,1,2 */
|
||||||
|
rx_descr2.status = 0;
|
||||||
|
|
||||||
|
/* Initialize the boot interface */
|
||||||
|
init_interface();
|
||||||
|
send_ack(); /* Ack the first bootpacket, i.e. this code. seq 0. */
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (read_data()) {
|
||||||
|
if (nbr_read >= (udword)bytes_to_read) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (interface == NETWORK) {
|
||||||
|
REG_SET(R_DMA_CH1_CMD, cmd, start);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if USE_LEDS
|
||||||
|
REG_SET(R_PORT_PA_DATA, data_out, 0x55);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
level2_boot();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
read_data(void)
|
||||||
|
{
|
||||||
|
if (handle_read()) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeout()) {
|
||||||
|
send_ack();
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
timeout(void)
|
||||||
|
{
|
||||||
|
volatile int now = REG_GET(R_TIMER01_DATA, count);
|
||||||
|
int elapsed;
|
||||||
|
int wait_time = 9600;
|
||||||
|
|
||||||
|
elapsed = last_timeout - now;
|
||||||
|
|
||||||
|
if (elapsed < 0) {
|
||||||
|
elapsed = -elapsed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elapsed > wait_time) {
|
||||||
|
last_timeout = now;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************** END OF FILE common_init.c *******************************/
|
10
target/linux/etrax-2.6/image/e100boot/src/cbl/src/compiler.h
Normal file
10
target/linux/etrax-2.6/image/e100boot/src/cbl/src/compiler.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef _COMPILER_H
|
||||||
|
#define _COMPILER_H
|
||||||
|
|
||||||
|
typedef int dword;
|
||||||
|
typedef unsigned int udword;
|
||||||
|
typedef signed short word;
|
||||||
|
typedef unsigned short uword;
|
||||||
|
typedef unsigned char byte;
|
||||||
|
|
||||||
|
#endif
|
17
target/linux/etrax-2.6/image/e100boot/src/cbl/src/crt0.S
Normal file
17
target/linux/etrax-2.6/image/e100boot/src/cbl/src/crt0.S
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
.global crt0 ; Needed because of a bug in binutils
|
||||||
|
.global _target_address
|
||||||
|
.global _bytes_to_read
|
||||||
|
|
||||||
|
.section .startup, "ax"
|
||||||
|
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
|
||||||
|
crt0:
|
||||||
|
move.d 0x38001f00, sp
|
||||||
|
jump _crt1
|
||||||
|
|
||||||
|
_bytes_to_read: .dword 0x12345678
|
||||||
|
_target_address: .dword 0x87654321
|
||||||
|
|
332
target/linux/etrax-2.6/image/e100boot/src/cbl/src/e100boot.h
Normal file
332
target/linux/etrax-2.6/image/e100boot/src/cbl/src/e100boot.h
Normal file
|
@ -0,0 +1,332 @@
|
||||||
|
/* $Id: e100boot.h,v 1.9 2003/12/16 09:04:07 magnusmn Exp $ */
|
||||||
|
|
||||||
|
#include "compiler.h"
|
||||||
|
|
||||||
|
#define DMA_DESCR__out_priority__BITNR 5
|
||||||
|
#define DMA_DESCR__out_priority__WIDTH 1
|
||||||
|
#define DMA_DESCR__out_priority__normal 0
|
||||||
|
#define DMA_DESCR__out_priority__high 1
|
||||||
|
|
||||||
|
#define DMA_DESCR__ecp_cmd__BITNR 4
|
||||||
|
#define DMA_DESCR__ecp_cmd__WIDTH 1
|
||||||
|
#define DMA_DESCR__ecp_cmd__normal 0
|
||||||
|
#define DMA_DESCR__ecp_cmd__high 1
|
||||||
|
|
||||||
|
#define DMA_DESCR__tx_err__BITNR 4
|
||||||
|
#define DMA_DESCR__tx_err__WIDTH 1
|
||||||
|
#define DMA_DESCR__tx_err__enable 1
|
||||||
|
#define DMA_DESCR__tx_err__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__intr__BITNR 3
|
||||||
|
#define DMA_DESCR__intr__WIDTH 1
|
||||||
|
#define DMA_DESCR__intr__enable 1
|
||||||
|
#define DMA_DESCR__intr__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__wait__BITNR 2
|
||||||
|
#define DMA_DESCR__wait__WIDTH 1
|
||||||
|
#define DMA_DESCR__wait__enable 1
|
||||||
|
#define DMA_DESCR__wait__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__eop__BITNR 1
|
||||||
|
#define DMA_DESCR__eop__WIDTH 1
|
||||||
|
#define DMA_DESCR__eop__enable 1
|
||||||
|
#define DMA_DESCR__eop__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__eol__BITNR 0
|
||||||
|
#define DMA_DESCR__eol__WIDTH 1
|
||||||
|
#define DMA_DESCR__eol__enable 1
|
||||||
|
#define DMA_DESCR__eol__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__sw_len__BITNR 0
|
||||||
|
#define DMA_DESCR__sw_len__WIDTH 16
|
||||||
|
|
||||||
|
#define DMA_DESCR__next__BITNR 0
|
||||||
|
#define DMA_DESCR__next__WIDTH 32
|
||||||
|
|
||||||
|
#define DMA_DESCR__buf__BITNR 0
|
||||||
|
#define DMA_DESCR__buf__WIDTH 32
|
||||||
|
|
||||||
|
#define DMA_DESCR__fifo_len__BITNR 8
|
||||||
|
#define DMA_DESCR__fifo_len__WIDTH 7
|
||||||
|
|
||||||
|
#define DMA_DESCR__crc_err__BITNR 7
|
||||||
|
#define DMA_DESCR__crc_err__WIDTH 1
|
||||||
|
#define DMA_DESCR__crc_err__enable 1
|
||||||
|
#define DMA_DESCR__crc_err__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__align_err__BITNR 6
|
||||||
|
#define DMA_DESCR__align_err__WIDTH 1
|
||||||
|
#define DMA_DESCR__align_err__enable 1
|
||||||
|
#define DMA_DESCR__align_err__disable 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__in_priority__BITNR 5
|
||||||
|
#define DMA_DESCR__in_priority__WIDTH 1
|
||||||
|
#define DMA_DESCR__in_priority__high 1
|
||||||
|
#define DMA_DESCR__in_priority__normal 0
|
||||||
|
|
||||||
|
#define DMA_DESCR__stop__BITNR 4
|
||||||
|
#define DMA_DESCR__stop__WIDTH 1
|
||||||
|
|
||||||
|
#define DMA_DESCR__rd_eop__BITNR 1
|
||||||
|
#define DMA_DESCR__rd_eop__WIDTH 1
|
||||||
|
|
||||||
|
#define DMA_DESCR__hw_len__BITNR 0
|
||||||
|
#define DMA_DESCR__hw_len__WIDTH 16
|
||||||
|
|
||||||
|
#define SET_ETHER_ADDR(a0_0,a0_1,a0_2,a0_3,a0_4,a0_5,a1_0,a1_1,a1_2,a1_3,a1_4,a1_5) \
|
||||||
|
*R_NETWORK_SA_0 = a0_0 | (a0_1 << 8) | (a0_2 << 16) | (a0_3 << 24); \
|
||||||
|
*R_NETWORK_SA_1 = a0_4 | (a0_5 << 8) | (a1_0 << 16) | (a1_1 << 24); \
|
||||||
|
*R_NETWORK_SA_2 = a1_2 | (a1_3 << 8) | (a1_4 << 16) | (a1_5 << 24);
|
||||||
|
|
||||||
|
#define DWORD_ALIGN(x) ((x) & 0xfffffffc)
|
||||||
|
|
||||||
|
#define CRC_LEN 4
|
||||||
|
|
||||||
|
#define TRUE 1
|
||||||
|
#define FALSE 0
|
||||||
|
|
||||||
|
#define NL 1
|
||||||
|
#define NO_NL 0
|
||||||
|
|
||||||
|
#define SERIAL 0
|
||||||
|
#define NETWORK 1
|
||||||
|
#define PARALLEL 2
|
||||||
|
|
||||||
|
#define STRING 0
|
||||||
|
#define INT 1
|
||||||
|
#define ACK 2
|
||||||
|
#define BOOT_PACKET 3
|
||||||
|
#define BOOT_CMDS 4
|
||||||
|
#define NET_INT 5
|
||||||
|
#define NET_INT_NL 6
|
||||||
|
|
||||||
|
#define JUMP 1
|
||||||
|
#define MEM_TEST 2
|
||||||
|
#define PACKET_INFO 3
|
||||||
|
#define SET_REGISTER 4
|
||||||
|
#define GET_REGISTER 5
|
||||||
|
#define MEM_DUMP 6
|
||||||
|
#define MEM_CLEAR 7
|
||||||
|
#define MEM_VERIFY 8
|
||||||
|
#define FLASH 9
|
||||||
|
#define PAUSE_LOOP 10
|
||||||
|
#define LOOP 11
|
||||||
|
#define BAUDRATE 12
|
||||||
|
|
||||||
|
#define ERR_FLASH_OK 0
|
||||||
|
#define ERR_FLASH_NONE 1
|
||||||
|
#define ERR_FLASH_TOO_SMALL 2
|
||||||
|
#define ERR_FLASH_VERIFY 3
|
||||||
|
#define ERR_FLASH_ERASE 4
|
||||||
|
|
||||||
|
#define TIMEOUT_LIMIT ( ((6250 * 1000) / 0xffff) / 2)
|
||||||
|
|
||||||
|
#define TX_CTRL_EOP \
|
||||||
|
(IO_STATE(DMA_DESCR, intr, disable) |\
|
||||||
|
IO_STATE(DMA_DESCR, wait, enable) |\
|
||||||
|
IO_STATE(DMA_DESCR, eop, enable) |\
|
||||||
|
IO_STATE(DMA_DESCR, eol, enable))
|
||||||
|
|
||||||
|
#define TX_CTRL \
|
||||||
|
(IO_STATE(DMA_DESCR, intr, disable) |\
|
||||||
|
IO_STATE(DMA_DESCR, wait, disable) |\
|
||||||
|
IO_STATE(DMA_DESCR, eop, disable) |\
|
||||||
|
IO_STATE(DMA_DESCR, eol, disable))
|
||||||
|
|
||||||
|
#define LOAD_ADDRESS 0x38001000
|
||||||
|
#define SIZEOF_BOOT_LEVEL_1 2048
|
||||||
|
|
||||||
|
/* This is where the commands are transfered to. */
|
||||||
|
#define IO_BUF_START 0x38001f00
|
||||||
|
#define IO_BUF_END 0x380020f0 /* bootcode start + cache size */
|
||||||
|
|
||||||
|
/* This should only be used in the cbl, but if we compile the sbl for
|
||||||
|
* elinux then __CRIS__ will be defined, and these are already defined
|
||||||
|
* in uC-libc. Check that __linux__ is not defined as well!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__CRIS__) && !defined(__linux__)
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
|
||||||
|
static inline udword
|
||||||
|
htonl(udword x)
|
||||||
|
{
|
||||||
|
__asm__ ("swapwb %0" : "=r" (x) : "0" (x));
|
||||||
|
|
||||||
|
return(x);
|
||||||
|
}
|
||||||
|
#ifndef ntohl
|
||||||
|
#define ntohl(x) htonl(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline uword
|
||||||
|
htons(uword x)
|
||||||
|
{
|
||||||
|
__asm__ ("swapb %0" : "=r" (x) : "0" (x));
|
||||||
|
|
||||||
|
return(x);
|
||||||
|
}
|
||||||
|
#ifndef ntohs
|
||||||
|
#define ntohs(x) htons(x)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*#define ntohs(x) \*/
|
||||||
|
/*((unsigned short)((((unsigned short)(x) & 0x00ffU) << 8) | \*/
|
||||||
|
/* (((unsigned short)(x) & 0xff00U) >> 8)))*/
|
||||||
|
/* */
|
||||||
|
|
||||||
|
/*#define ntohl(x) \*/
|
||||||
|
/*((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \*/
|
||||||
|
/* (((unsigned long int)(x) & 0x0000ff00U) << 8) | \*/
|
||||||
|
/* (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \*/
|
||||||
|
/* (((unsigned long int)(x) & 0xff000000U) >> 24)))*/
|
||||||
|
|
||||||
|
struct packet_header_T /* Size = 38 */
|
||||||
|
{
|
||||||
|
byte dest[6];
|
||||||
|
byte src[6];
|
||||||
|
uword length;
|
||||||
|
udword snap1;
|
||||||
|
udword snap2;
|
||||||
|
udword tag;
|
||||||
|
udword seq;
|
||||||
|
udword type;
|
||||||
|
udword id;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
typedef struct dma_descr_T {
|
||||||
|
uword sw_len; /* 0-1 */
|
||||||
|
uword ctrl; /* 2-3 */
|
||||||
|
udword next; /* 4-7 */
|
||||||
|
udword buf; /* 8-11 */
|
||||||
|
uword hw_len; /* 12-13 */
|
||||||
|
uword status; /* 14-15 */
|
||||||
|
} dma_descr_T;
|
||||||
|
|
||||||
|
typedef struct packet_info_T {
|
||||||
|
udword addr;
|
||||||
|
udword size;
|
||||||
|
} packet_info_T;
|
||||||
|
|
||||||
|
typedef struct set_register_T {
|
||||||
|
udword addr;
|
||||||
|
udword val;
|
||||||
|
} set_register_T;
|
||||||
|
|
||||||
|
typedef struct get_register_T {
|
||||||
|
udword addr;
|
||||||
|
} get_register_T;
|
||||||
|
|
||||||
|
typedef struct pause_loop_T {
|
||||||
|
udword pause;
|
||||||
|
} pause_loop_T;
|
||||||
|
|
||||||
|
typedef struct mem_verify_T {
|
||||||
|
udword addr;
|
||||||
|
udword val;
|
||||||
|
} mem_verify_T;
|
||||||
|
|
||||||
|
typedef struct mem_test_T {
|
||||||
|
udword from;
|
||||||
|
udword to;
|
||||||
|
} mem_test_T;
|
||||||
|
|
||||||
|
typedef struct mem_dump_T {
|
||||||
|
udword from_addr;
|
||||||
|
udword to_addr;
|
||||||
|
} mem_dump_T;
|
||||||
|
|
||||||
|
typedef struct mem_clear_T {
|
||||||
|
udword from_addr;
|
||||||
|
udword to_addr;
|
||||||
|
} mem_clear_T;
|
||||||
|
|
||||||
|
typedef struct flash_T {
|
||||||
|
unsigned char *source;
|
||||||
|
udword offset;
|
||||||
|
udword size;
|
||||||
|
} flash_T;
|
||||||
|
|
||||||
|
typedef struct jump_T {
|
||||||
|
udword addr;
|
||||||
|
} jump_T;
|
||||||
|
|
||||||
|
typedef struct bne_T {
|
||||||
|
udword addr;
|
||||||
|
udword target;
|
||||||
|
} bne_T;
|
||||||
|
|
||||||
|
typedef struct br_T {
|
||||||
|
udword baudrate;
|
||||||
|
} br_T;
|
||||||
|
|
||||||
|
typedef struct command_T {
|
||||||
|
udword type;
|
||||||
|
union {
|
||||||
|
packet_info_T packet_info;
|
||||||
|
set_register_T set_register;
|
||||||
|
get_register_T get_register;
|
||||||
|
pause_loop_T pause_loop;
|
||||||
|
mem_verify_T mem_verify;
|
||||||
|
mem_test_T mem_test;
|
||||||
|
mem_dump_T mem_dump;
|
||||||
|
mem_clear_T mem_clear;
|
||||||
|
flash_T flash;
|
||||||
|
jump_T jump;
|
||||||
|
bne_T bne;
|
||||||
|
br_T br;
|
||||||
|
} args;
|
||||||
|
} command_T;
|
||||||
|
|
||||||
|
#define NETWORK_HEADER_LENGTH sizeof(struct packet_header_T)
|
||||||
|
|
||||||
|
void crt1(void);
|
||||||
|
void start(void);
|
||||||
|
void level2_boot(void);
|
||||||
|
int read_data(void);
|
||||||
|
int handle_network_read(void);
|
||||||
|
int flash_write(const unsigned char *source, unsigned int offset, unsigned int size);
|
||||||
|
|
||||||
|
void init_interface(void);
|
||||||
|
int handle_read(void);
|
||||||
|
void send_ack(void);
|
||||||
|
void send_string(char *str);
|
||||||
|
void send_hex(udword v, byte nl);
|
||||||
|
|
||||||
|
extern char e100boot_version[];
|
||||||
|
|
||||||
|
extern volatile udword bytes_to_read;
|
||||||
|
extern volatile udword target_address;
|
||||||
|
|
||||||
|
extern udword nbr_read;
|
||||||
|
extern byte interface;
|
||||||
|
extern byte set_dest;
|
||||||
|
extern udword last_timeout;
|
||||||
|
extern byte *io_buf_next;
|
||||||
|
extern byte *io_buf_cur;
|
||||||
|
|
||||||
|
extern struct packet_header_T tx_header;
|
||||||
|
extern dma_descr_T tx_descr;
|
||||||
|
extern dma_descr_T tx_descr2;
|
||||||
|
|
||||||
|
extern struct packet_header_T rx_header;
|
||||||
|
extern dma_descr_T rx_descr;
|
||||||
|
extern dma_descr_T rx_descr2;
|
||||||
|
|
||||||
|
extern uword timeout_limit;
|
||||||
|
extern udword seq;
|
||||||
|
extern byte serial_up;
|
||||||
|
|
||||||
|
enum { /* Available in: */
|
||||||
|
d_eol = (1 << 0), /* flags */
|
||||||
|
d_eop = (1 << 1), /* flags & status */
|
||||||
|
d_wait = (1 << 2), /* flags */
|
||||||
|
d_int = (1 << 3), /* flags */
|
||||||
|
d_txerr = (1 << 4), /* flags */
|
||||||
|
d_stop = (1 << 4), /* status */
|
||||||
|
d_ecp = (1 << 4), /* flags & status */
|
||||||
|
d_pri = (1 << 5), /* flags & status */
|
||||||
|
d_alignerr = (1 << 6), /* status */
|
||||||
|
d_crcerr = (1 << 7) /* status */
|
||||||
|
};
|
1125
target/linux/etrax-2.6/image/e100boot/src/cbl/src/flash.c
Normal file
1125
target/linux/etrax-2.6/image/e100boot/src/cbl/src/flash.c
Normal file
File diff suppressed because it is too large
Load diff
1713
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs.c
Normal file
1713
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs.c
Normal file
File diff suppressed because it is too large
Load diff
44822
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs.h
Normal file
44822
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs.h
Normal file
File diff suppressed because it is too large
Load diff
5435
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs_def.h
Normal file
5435
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs_def.h
Normal file
File diff suppressed because it is too large
Load diff
25386
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs_int.h
Normal file
25386
target/linux/etrax-2.6/image/e100boot/src/cbl/src/hwregs_int.h
Normal file
File diff suppressed because it is too large
Load diff
38
target/linux/etrax-2.6/image/e100boot/src/cbl/src/ldscript
Normal file
38
target/linux/etrax-2.6/image/e100boot/src/cbl/src/ldscript
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x380000f0;
|
||||||
|
__Stext = .;
|
||||||
|
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
KEEP (*(.startup))
|
||||||
|
KEEP (*(.text))
|
||||||
|
*(.text.*)
|
||||||
|
KEEP (*(.rodata))
|
||||||
|
*(.rodata.*)
|
||||||
|
} =0
|
||||||
|
|
||||||
|
__Etext = .;
|
||||||
|
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
__Sdata = .;
|
||||||
|
KEEP (*(.data))
|
||||||
|
*(.data.*)
|
||||||
|
}
|
||||||
|
|
||||||
|
__Edata = .;
|
||||||
|
. = ALIGN (4);
|
||||||
|
__Sbss = .;
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
/* The network crc will land in the first four bytes of the
|
||||||
|
bss. Move the variables out of the way. */
|
||||||
|
. = . + 12;
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
}
|
||||||
|
|
||||||
|
__Ebss = .;
|
||||||
|
|
||||||
|
}
|
218
target/linux/etrax-2.6/image/e100boot/src/cbl/src/net_init.c
Normal file
218
target/linux/etrax-2.6/image/e100boot/src/cbl/src/net_init.c
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
#define net_init init_interface
|
||||||
|
#define handle_network_read handle_read
|
||||||
|
#define send_network_ack send_ack
|
||||||
|
#define send_network_string send_string
|
||||||
|
#define send_network_hex send_hex
|
||||||
|
|
||||||
|
#include "sv_addr_ag.h"
|
||||||
|
#include "e100boot.h"
|
||||||
|
|
||||||
|
static void start_network_trans(void);
|
||||||
|
|
||||||
|
void
|
||||||
|
net_init(void)
|
||||||
|
{
|
||||||
|
*R_NETWORK_GA_1 = *R_NETWORK_GA_0 = 0;
|
||||||
|
|
||||||
|
SET_ETHER_ADDR(0x01,0x40,0x8c,0x00,0x01,0x00,
|
||||||
|
0x01,0x40,0x8c,0x00,0x01,0x00);
|
||||||
|
|
||||||
|
*R_NETWORK_REC_CONFIG =
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, duplex, half) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, bad_crc, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, oversize, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, undersize, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, all_roots, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, broadcast, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, individual, discard) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, ma1, disable) |
|
||||||
|
IO_STATE (R_NETWORK_REC_CONFIG, ma0, enable);
|
||||||
|
|
||||||
|
*R_NETWORK_MGM_CTRL =
|
||||||
|
IO_FIELD(R_NETWORK_MGM_CTRL, txd_pins, 0) |
|
||||||
|
IO_FIELD(R_NETWORK_MGM_CTRL, txer_pin, 0) |
|
||||||
|
IO_FIELD(R_NETWORK_MGM_CTRL, mdck, 0) |
|
||||||
|
IO_STATE(R_NETWORK_MGM_CTRL, mdoe, disable) |
|
||||||
|
IO_FIELD(R_NETWORK_MGM_CTRL, mdio, 0);
|
||||||
|
|
||||||
|
*R_NETWORK_TR_CTRL =
|
||||||
|
(IO_STATE (R_NETWORK_TR_CTRL, clr_error, clr) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, delay, none) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, cancel, dont) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, cd, enable) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, pad, enable) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, crc, enable) |
|
||||||
|
IO_STATE (R_NETWORK_TR_CTRL, retry, enable));
|
||||||
|
|
||||||
|
*R_NETWORK_GEN_CONFIG =
|
||||||
|
IO_STATE (R_NETWORK_GEN_CONFIG, loopback, off) |
|
||||||
|
IO_STATE (R_NETWORK_GEN_CONFIG, frame, ether) |
|
||||||
|
IO_STATE (R_NETWORK_GEN_CONFIG, vg, off) |
|
||||||
|
IO_STATE (R_NETWORK_GEN_CONFIG, phy, mii_clk) |
|
||||||
|
IO_STATE (R_NETWORK_GEN_CONFIG, enable, on);
|
||||||
|
|
||||||
|
*R_DMA_CH0_CMD = IO_STATE(R_DMA_CH0_CMD, cmd, reset);
|
||||||
|
*R_DMA_CH1_CMD = IO_STATE(R_DMA_CH1_CMD, cmd, reset);
|
||||||
|
|
||||||
|
rx_descr.sw_len = NETWORK_HEADER_LENGTH;
|
||||||
|
rx_descr.ctrl = TX_CTRL;
|
||||||
|
rx_descr.next = (udword)&rx_descr2;
|
||||||
|
rx_descr.buf = (udword)&rx_header;
|
||||||
|
|
||||||
|
rx_descr2.sw_len = 1500;
|
||||||
|
rx_descr2.ctrl = TX_CTRL_EOP;
|
||||||
|
rx_descr2.buf = target_address;
|
||||||
|
|
||||||
|
/* Endian dependent, but saves a few bytes... */
|
||||||
|
*(udword*)&tx_header.src[0] = htonl(0x02408c00);
|
||||||
|
*(uword*)&tx_header.src[4] = htons(0x0100);
|
||||||
|
tx_header.length = htons(64);
|
||||||
|
tx_header.snap1 = htonl(0xaaaa0300);
|
||||||
|
tx_header.snap2 = htonl(0x408c8856);
|
||||||
|
tx_header.tag = htonl(0xfffffffe);
|
||||||
|
tx_header.seq = 0;
|
||||||
|
tx_header.type = 0;
|
||||||
|
|
||||||
|
tx_descr.sw_len = NETWORK_HEADER_LENGTH;
|
||||||
|
tx_descr.ctrl = TX_CTRL_EOP;
|
||||||
|
tx_descr.buf = (udword)&tx_header;
|
||||||
|
|
||||||
|
set_dest = FALSE;
|
||||||
|
seq = 0;
|
||||||
|
|
||||||
|
*R_DMA_CH1_FIRST = (udword)&rx_descr;
|
||||||
|
*R_DMA_CH1_CMD = IO_STATE(R_DMA_CH1_CMD, cmd, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
handle_network_read(void)
|
||||||
|
{
|
||||||
|
if (!(rx_descr2.status & d_eop)) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Even if wasn't to us, we must do this... */
|
||||||
|
rx_descr2.status = 0;
|
||||||
|
*R_DMA_CH1_FIRST = (udword)&rx_descr;
|
||||||
|
|
||||||
|
/* Was it to me? */
|
||||||
|
if (ntohl(rx_header.seq) == (seq+1)) {
|
||||||
|
interface = NETWORK;
|
||||||
|
last_timeout = *R_TIMER_DATA >> IO_BITNR(R_TIMER_DATA, timer0);
|
||||||
|
nbr_read += rx_descr2.hw_len - CRC_LEN;
|
||||||
|
rx_descr2.buf += rx_descr2.hw_len - CRC_LEN;
|
||||||
|
rx_descr2.sw_len = bytes_to_read - nbr_read - CRC_LEN < 1500 ?
|
||||||
|
bytes_to_read - nbr_read + CRC_LEN: 1500; /* FIX!!!!! */
|
||||||
|
rx_descr2.sw_len = rx_descr2.sw_len + NETWORK_HEADER_LENGTH < 64
|
||||||
|
? 64 - NETWORK_HEADER_LENGTH : rx_descr2.sw_len; /* Less than minimum eth packet? */
|
||||||
|
|
||||||
|
seq++;
|
||||||
|
send_network_ack();
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_network_ack(void)
|
||||||
|
{
|
||||||
|
/* send_serial_string(">send_network_ack.\r\n"); */
|
||||||
|
|
||||||
|
if (!set_dest) { /* Copy destination address from first received packet */
|
||||||
|
set_dest = TRUE;
|
||||||
|
/* If we have done a bootrom network boot, source address is in a different
|
||||||
|
place... */
|
||||||
|
if (((*R_BUS_STATUS & IO_MASK(R_BUS_STATUS, boot))
|
||||||
|
>> IO_BITNR(R_BUS_STATUS, boot)) - 1 == NETWORK) {
|
||||||
|
*(udword*)&tx_header.dest[0] = *(udword*)0x380000dc;
|
||||||
|
*(uword*)&tx_header.dest[4] = *(uword*)0x380000e0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
*(udword*)&tx_header.dest[0] = *(udword*)&rx_header.src[0];
|
||||||
|
*(uword*)&tx_header.dest[4] = *(uword*)&rx_header.src[4];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
tx_header.seq = htonl(seq);
|
||||||
|
tx_header.type = htonl(ACK);
|
||||||
|
#else
|
||||||
|
tx_header.seq = htonl(seq);
|
||||||
|
tx_header.type = htonl(bytes_to_read);
|
||||||
|
tx_header.id = htonl(target_address);
|
||||||
|
/* tx_header.id already set in start(). */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
tx_descr.ctrl = TX_CTRL_EOP;
|
||||||
|
tx_descr.sw_len = NETWORK_HEADER_LENGTH;
|
||||||
|
|
||||||
|
start_network_trans();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
start_network_trans(void)
|
||||||
|
{
|
||||||
|
/* send_serial_string(">start_network_trans\r\n"); */
|
||||||
|
|
||||||
|
/* Clear possible underrun or excessive retry errors */
|
||||||
|
/* *R_NETWORK_TR_CTRL = */
|
||||||
|
/* (IO_STATE (R_NETWORK_TR_CTRL, clr_error, clr) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, delay, none) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, cancel, dont) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, cd, enable) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, pad, enable) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, crc, enable) | */
|
||||||
|
/* IO_STATE (R_NETWORK_TR_CTRL, retry, enable)); */
|
||||||
|
|
||||||
|
*R_DMA_CH0_FIRST = (udword)&tx_descr;
|
||||||
|
*R_DMA_CH0_CMD = IO_STATE(R_DMA_CH0_CMD, cmd, start);
|
||||||
|
while(*R_DMA_CH0_FIRST)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_network_string(char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
tx_descr.next = (udword)&tx_descr2;
|
||||||
|
tx_descr.ctrl = TX_CTRL;
|
||||||
|
for (i = 0; str[i]; i++) /* strlen */
|
||||||
|
;
|
||||||
|
|
||||||
|
tx_header.type = STRING;
|
||||||
|
|
||||||
|
tx_descr2.ctrl = TX_CTRL_EOP;
|
||||||
|
tx_descr2.buf = (udword)str;
|
||||||
|
tx_descr2.sw_len = i+1;
|
||||||
|
|
||||||
|
start_network_trans();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_network_hex(udword v, byte nl)
|
||||||
|
{
|
||||||
|
tx_descr.next = (udword)&tx_descr2;
|
||||||
|
tx_descr.ctrl = TX_CTRL;
|
||||||
|
|
||||||
|
tx_header.type = nl ? htonl(NET_INT_NL) : htonl(NET_INT);
|
||||||
|
|
||||||
|
/* Pause so we don't saturate network. */
|
||||||
|
/* Hehe, the asm will fool gcc to not remove the loop even though it
|
||||||
|
probably should. If we volatile i the code will be a few bytes
|
||||||
|
longer than this version. Well I really did it like this just
|
||||||
|
because it is possible... */
|
||||||
|
{
|
||||||
|
udword i;
|
||||||
|
|
||||||
|
for(i = 0; i != 16384; i++)
|
||||||
|
__asm__ ("");
|
||||||
|
}
|
||||||
|
|
||||||
|
v = htonl(v);
|
||||||
|
tx_descr2.ctrl = TX_CTRL_EOP;
|
||||||
|
tx_descr2.buf = (udword)&v;
|
||||||
|
tx_descr2.sw_len = (uword)sizeof(udword);
|
||||||
|
|
||||||
|
start_network_trans();
|
||||||
|
}
|
10
target/linux/etrax-2.6/image/e100boot/src/cbl/src/project.h
Normal file
10
target/linux/etrax-2.6/image/e100boot/src/cbl/src/project.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#define REG_NO_SHADOW 1
|
||||||
|
#define REG_NO_INIT_SHADOW 1
|
||||||
|
|
||||||
|
#define USE_GROUP__Serial_port_registers 1
|
||||||
|
#define USE_GROUP__Network_interface_registers 1
|
||||||
|
#define USE_GROUP__Parallel_printer_port_registers 1
|
||||||
|
#define USE_GROUP__Timer_registers 1
|
||||||
|
#define USE_GROUP__General_port_configuration_registers 1
|
||||||
|
#define USE_GROUP__Bus_interface_configuration_registers 1
|
||||||
|
#define USE_GROUP__DMA_registers 1
|
117
target/linux/etrax-2.6/image/e100boot/src/cbl/src/ser_init.c
Normal file
117
target/linux/etrax-2.6/image/e100boot/src/cbl/src/ser_init.c
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
#define ser_init init_interface
|
||||||
|
#define handle_serial_read handle_read
|
||||||
|
#define send_serial_ack send_ack
|
||||||
|
#define send_serial_string send_string
|
||||||
|
#define send_serial_hex send_hex
|
||||||
|
|
||||||
|
#include "hwregs.h"
|
||||||
|
#include "sv_addr_ag.h"
|
||||||
|
#include "e100boot.h"
|
||||||
|
|
||||||
|
void
|
||||||
|
ser_init(void)
|
||||||
|
{
|
||||||
|
REG_SET__R_SERIAL0_XOFF
|
||||||
|
(
|
||||||
|
tx_stop, enable,
|
||||||
|
auto_xoff, disable,
|
||||||
|
xoff_char, 0
|
||||||
|
);
|
||||||
|
|
||||||
|
REG_SET__R_SERIAL0_BAUD
|
||||||
|
(
|
||||||
|
tr_baud, c9600Hz,
|
||||||
|
rec_baud, c9600Hz
|
||||||
|
);
|
||||||
|
|
||||||
|
REG_SET__R_SERIAL0_REC_CTRL
|
||||||
|
(
|
||||||
|
dma_err, stop,
|
||||||
|
rec_enable, enable,
|
||||||
|
rts_, inactive,
|
||||||
|
sampling, middle,
|
||||||
|
rec_stick_par, normal,
|
||||||
|
rec_par, even,
|
||||||
|
rec_par_en, disable,
|
||||||
|
rec_bitnr, rec_8bit
|
||||||
|
);
|
||||||
|
|
||||||
|
REG_SET__R_SERIAL0_TR_CTRL
|
||||||
|
(
|
||||||
|
txd, 0,
|
||||||
|
tr_enable, enable,
|
||||||
|
auto_cts, disabled,
|
||||||
|
stop_bits, one_bit,
|
||||||
|
tr_stick_par, normal,
|
||||||
|
tr_par, even,
|
||||||
|
tr_par_en, disable,
|
||||||
|
tr_bitnr, tr_8bit
|
||||||
|
);
|
||||||
|
|
||||||
|
serial_up = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SER_MASK (IO_MASK(R_SERIAL0_READ, data_avail) | IO_MASK(R_SERIAL0_READ, data_in))
|
||||||
|
|
||||||
|
int
|
||||||
|
handle_serial_read(void)
|
||||||
|
{
|
||||||
|
udword status_and_data_in = *R_SERIAL0_READ & SER_MASK;
|
||||||
|
|
||||||
|
if (status_and_data_in & IO_STATE(R_SERIAL0_READ, data_avail, yes)) {
|
||||||
|
*(char*)(target_address + nbr_read++) = status_and_data_in & 0xff; /* ugly mask */
|
||||||
|
last_timeout = REG_GET(R_TIMER0_DATA, count);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_serial_ack(void)
|
||||||
|
{
|
||||||
|
while (!REG_EQL(R_SERIAL0_STATUS, tr_ready, ready))
|
||||||
|
;
|
||||||
|
|
||||||
|
REG_ISET(0, R_SERIAL0_TR_DATA, data_out, '+');
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_serial_string(char *str)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; str[i];) {
|
||||||
|
if (REG_IEQL(0, R_SERIAL0_STATUS, tr_ready, ready)) {
|
||||||
|
REG_ISET(0, R_SERIAL0_TR_DATA, data_out, str[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
send_serial_hex(udword v, byte nl)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
byte buf[13];
|
||||||
|
byte nybble;
|
||||||
|
|
||||||
|
buf[0] = '0';
|
||||||
|
buf[1] = 'x';
|
||||||
|
buf[10] = '\r';
|
||||||
|
buf[11] = '\n';
|
||||||
|
buf[12] = '\0';
|
||||||
|
|
||||||
|
if (nl == FALSE) {
|
||||||
|
buf[10] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i != 8; i++) {
|
||||||
|
nybble = (v >> (i*4)) & 0xf;
|
||||||
|
if (nybble > 9) {
|
||||||
|
nybble += 7;
|
||||||
|
}
|
||||||
|
buf[7-i+2] = nybble + '0';
|
||||||
|
}
|
||||||
|
send_serial_string(buf);
|
||||||
|
}
|
7323
target/linux/etrax-2.6/image/e100boot/src/cbl/src/sv_addr.agh
Normal file
7323
target/linux/etrax-2.6/image/e100boot/src/cbl/src/sv_addr.agh
Normal file
File diff suppressed because it is too large
Load diff
137
target/linux/etrax-2.6/image/e100boot/src/cbl/src/sv_addr_ag.h
Normal file
137
target/linux/etrax-2.6/image/e100boot/src/cbl/src/sv_addr_ag.h
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
/*!**************************************************************************
|
||||||
|
*!
|
||||||
|
*! MACROS:
|
||||||
|
*! IO_MASK(reg,field)
|
||||||
|
*! IO_STATE(reg,field,state)
|
||||||
|
*! IO_EXTRACT(reg,field,val)
|
||||||
|
*! IO_STATE_VALUE(reg,field,state)
|
||||||
|
*! IO_BITNR(reg,field)
|
||||||
|
*! IO_WIDTH(reg,field)
|
||||||
|
*! IO_FIELD(reg,field,val)
|
||||||
|
*! IO_RD(reg)
|
||||||
|
*! All moderegister addresses and fields of these.
|
||||||
|
*!
|
||||||
|
*!**************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __sv_addr_ag_h__
|
||||||
|
#define __sv_addr_ag_h__
|
||||||
|
|
||||||
|
|
||||||
|
#define __test_sv_addr__ 0
|
||||||
|
|
||||||
|
/*------------------------------------------------------------
|
||||||
|
!* General macros to manipulate moderegisters.
|
||||||
|
!*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* IO_MASK returns a mask for a specified bitfield in a register.
|
||||||
|
Note that this macro doesn't work when field width is 32 bits. */
|
||||||
|
#define IO_MASK(reg, field) IO_MASK_ (reg##_, field##_)
|
||||||
|
#define IO_MASK_(reg_, field_) \
|
||||||
|
( ( ( 1 << reg_##_##field_##_WIDTH ) - 1 ) << reg_##_##field_##_BITNR )
|
||||||
|
|
||||||
|
/* IO_STATE returns a constant corresponding to a one of the symbolic
|
||||||
|
states that the bitfield can have. (Shifted to correct position) */
|
||||||
|
#define IO_STATE(reg, field, state) IO_STATE_ (reg##_, field##_, _##state)
|
||||||
|
#define IO_STATE_(reg_, field_, _state) \
|
||||||
|
( reg_##_##field_##_state << reg_##_##field_##_BITNR )
|
||||||
|
|
||||||
|
/* IO_EXTRACT returns the masked and shifted value corresponding to the
|
||||||
|
bitfield can have. */
|
||||||
|
#define IO_EXTRACT(reg, field, val) IO_EXTRACT_ (reg##_, field##_, val)
|
||||||
|
#define IO_EXTRACT_(reg_, field_, val) ( (( ( ( 1 << reg_##_##field_##_WIDTH ) \
|
||||||
|
- 1 ) << reg_##_##field_##_BITNR ) & (val)) >> reg_##_##field_##_BITNR )
|
||||||
|
|
||||||
|
/* IO_STATE_VALUE returns a constant corresponding to a one of the symbolic
|
||||||
|
states that the bitfield can have. (Not shifted) */
|
||||||
|
#define IO_STATE_VALUE(reg, field, state) \
|
||||||
|
IO_STATE_VALUE_ (reg##_, field##_, _##state)
|
||||||
|
#define IO_STATE_VALUE_(reg_, field_, _state) ( reg_##_##field_##_state )
|
||||||
|
|
||||||
|
/* IO_FIELD shifts the val parameter to be aligned with the bitfield
|
||||||
|
specified. */
|
||||||
|
#define IO_FIELD(reg, field, val) IO_FIELD_ (reg##_, field##_, val)
|
||||||
|
#define IO_FIELD_(reg_, field_, val) ((val) << reg_##_##field_##_BITNR)
|
||||||
|
|
||||||
|
/* IO_BITNR returns the starting bitnumber of a bitfield. Bit 0 is
|
||||||
|
LSB and the returned bitnumber is LSB of the field. */
|
||||||
|
#define IO_BITNR(reg, field) IO_BITNR_ (reg##_, field##_)
|
||||||
|
#define IO_BITNR_(reg_, field_) (reg_##_##field_##_BITNR)
|
||||||
|
|
||||||
|
/* IO_WIDTH returns the width, in bits, of a bitfield. */
|
||||||
|
#define IO_WIDTH(reg, field) IO_WIDTH_ (reg##_, field##_)
|
||||||
|
#define IO_WIDTH_(reg_, field_) (reg_##_##field_##_WIDTH)
|
||||||
|
|
||||||
|
/*--- Obsolete. Kept for backw compatibility. ---*/
|
||||||
|
/* Reads (or writes) a byte/uword/udword from the specified mode
|
||||||
|
register. */
|
||||||
|
#define IO_RD(reg) (*(volatile udword*)(reg))
|
||||||
|
#define IO_RD_B(reg) (*(volatile byte*)(reg))
|
||||||
|
#define IO_RD_W(reg) (*(volatile uword*)(reg))
|
||||||
|
#define IO_RD_D(reg) (*(volatile udword*)(reg))
|
||||||
|
|
||||||
|
/*------------------------------------------------------------
|
||||||
|
!* Start addresses of the different memory areas.
|
||||||
|
!*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#define MEM_CSE0_START (0x00000000)
|
||||||
|
#define MEM_CSE1_START (0x04000000)
|
||||||
|
#define MEM_CSR0_START (0x08000000)
|
||||||
|
#define MEM_CSR1_START (0x0c000000)
|
||||||
|
#define MEM_CSP0_START (0x10000000)
|
||||||
|
#define MEM_CSP1_START (0x14000000)
|
||||||
|
#define MEM_CSP2_START (0x18000000)
|
||||||
|
#define MEM_CSP3_START (0x1c000000)
|
||||||
|
#define MEM_CSP4_START (0x20000000)
|
||||||
|
#define MEM_CSP5_START (0x24000000)
|
||||||
|
#define MEM_CSP6_START (0x28000000)
|
||||||
|
#define MEM_CSP7_START (0x2c000000)
|
||||||
|
#define MEM_DRAM_START (0x40000000)
|
||||||
|
|
||||||
|
#define MEM_NON_CACHEABLE (0x80000000)
|
||||||
|
|
||||||
|
/*------------------------------------------------------------
|
||||||
|
!* Type casts used in mode register macros, making pointer
|
||||||
|
!* dereferencing possible. Empty in assembler.
|
||||||
|
!*-----------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
|
# define IO_TYPECAST_UDWORD (volatile udword*)
|
||||||
|
# define IO_TYPECAST_RO_UDWORD (const volatile udword*)
|
||||||
|
# define IO_TYPECAST_UWORD (volatile uword*)
|
||||||
|
# define IO_TYPECAST_RO_UWORD (const volatile uword*)
|
||||||
|
# define IO_TYPECAST_BYTE (volatile byte*)
|
||||||
|
# define IO_TYPECAST_RO_BYTE (const volatile byte*)
|
||||||
|
#else
|
||||||
|
# define IO_TYPECAST_UDWORD
|
||||||
|
# define IO_TYPECAST_RO_UDWORD
|
||||||
|
# define IO_TYPECAST_UWORD
|
||||||
|
# define IO_TYPECAST_RO_UWORD
|
||||||
|
# define IO_TYPECAST_BYTE
|
||||||
|
# define IO_TYPECAST_RO_BYTE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "sv_addr.agh"
|
||||||
|
|
||||||
|
#if __test_sv_addr__
|
||||||
|
/* IO_MASK( R_BUS_CONFIG , CE ) */
|
||||||
|
IO_MASK( R_WAITSTATES , SRAM_WS )
|
||||||
|
IO_MASK( R_TEST , W32 )
|
||||||
|
|
||||||
|
IO_STATE( R_BUS_CONFIG, CE, DISABLE )
|
||||||
|
IO_STATE( R_BUS_CONFIG, CE, ENABLE )
|
||||||
|
|
||||||
|
IO_STATE( R_DRAM_TIMING, REF, IVAL2 )
|
||||||
|
|
||||||
|
IO_MASK( R_DRAM_TIMING, REF )
|
||||||
|
|
||||||
|
IO_MASK( R_EXT_DMA_0_STAT, TFR_COUNT ) >> IO_BITNR( R_EXT_DMA_0_STAT, TFR_COUNT )
|
||||||
|
|
||||||
|
IO_RD(R_EXT_DMA_0_STAT) & IO_MASK( R_EXT_DMA_0_STAT, S )
|
||||||
|
== IO_STATE( R_EXT_DMA_0_STAT, S, STARTED )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* ifndef __sv_addr_ag_h__ */
|
||||||
|
|
17
target/linux/etrax-2.6/image/e100boot/src/doc/Makefile
Normal file
17
target/linux/etrax-2.6/image/e100boot/src/doc/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
OBJS=e100boot.1 e100boot.html
|
||||||
|
|
||||||
|
all: $(OBJS)
|
||||||
|
|
||||||
|
%.1: %.pod
|
||||||
|
pod2man $< > $@
|
||||||
|
|
||||||
|
%.html: %.pod
|
||||||
|
pod2html $< > $@
|
||||||
|
@rm -f pod2htmd.x~~ pod2htmi.x~~
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *cache *~
|
||||||
|
|
||||||
|
# The 'clean' doesn't remove the generated documentation as we want
|
||||||
|
# them in the distribution.
|
||||||
|
|
401
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.1
Normal file
401
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.1
Normal file
|
@ -0,0 +1,401 @@
|
||||||
|
.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
|
||||||
|
.\"
|
||||||
|
.\" Standard preamble:
|
||||||
|
.\" ========================================================================
|
||||||
|
.de Sh \" Subsection heading
|
||||||
|
.br
|
||||||
|
.if t .Sp
|
||||||
|
.ne 5
|
||||||
|
.PP
|
||||||
|
\fB\\$1\fR
|
||||||
|
.PP
|
||||||
|
..
|
||||||
|
.de Sp \" Vertical space (when we can't use .PP)
|
||||||
|
.if t .sp .5v
|
||||||
|
.if n .sp
|
||||||
|
..
|
||||||
|
.de Vb \" Begin verbatim text
|
||||||
|
.ft CW
|
||||||
|
.nf
|
||||||
|
.ne \\$1
|
||||||
|
..
|
||||||
|
.de Ve \" End verbatim text
|
||||||
|
.ft R
|
||||||
|
.fi
|
||||||
|
..
|
||||||
|
.\" Set up some character translations and predefined strings. \*(-- will
|
||||||
|
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
||||||
|
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
|
||||||
|
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
|
||||||
|
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
|
||||||
|
.\" nothing in troff, for use with C<>.
|
||||||
|
.tr \(*W-
|
||||||
|
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
||||||
|
.ie n \{\
|
||||||
|
. ds -- \(*W-
|
||||||
|
. ds PI pi
|
||||||
|
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
||||||
|
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
||||||
|
. ds L" ""
|
||||||
|
. ds R" ""
|
||||||
|
. ds C` ""
|
||||||
|
. ds C' ""
|
||||||
|
'br\}
|
||||||
|
.el\{\
|
||||||
|
. ds -- \|\(em\|
|
||||||
|
. ds PI \(*p
|
||||||
|
. ds L" ``
|
||||||
|
. ds R" ''
|
||||||
|
'br\}
|
||||||
|
.\"
|
||||||
|
.\" If the F register is turned on, we'll generate index entries on stderr for
|
||||||
|
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
|
||||||
|
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
||||||
|
.\" output yourself in some meaningful fashion.
|
||||||
|
.if \nF \{\
|
||||||
|
. de IX
|
||||||
|
. tm Index:\\$1\t\\n%\t"\\$2"
|
||||||
|
..
|
||||||
|
. nr % 0
|
||||||
|
. rr F
|
||||||
|
.\}
|
||||||
|
.\"
|
||||||
|
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||||
|
.\" way too many mistakes in technical documents.
|
||||||
|
.hy 0
|
||||||
|
.if n .na
|
||||||
|
.\"
|
||||||
|
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
|
||||||
|
.\" Fear. Run. Save yourself. No user-serviceable parts.
|
||||||
|
. \" fudge factors for nroff and troff
|
||||||
|
.if n \{\
|
||||||
|
. ds #H 0
|
||||||
|
. ds #V .8m
|
||||||
|
. ds #F .3m
|
||||||
|
. ds #[ \f1
|
||||||
|
. ds #] \fP
|
||||||
|
.\}
|
||||||
|
.if t \{\
|
||||||
|
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
|
||||||
|
. ds #V .6m
|
||||||
|
. ds #F 0
|
||||||
|
. ds #[ \&
|
||||||
|
. ds #] \&
|
||||||
|
.\}
|
||||||
|
. \" simple accents for nroff and troff
|
||||||
|
.if n \{\
|
||||||
|
. ds ' \&
|
||||||
|
. ds ` \&
|
||||||
|
. ds ^ \&
|
||||||
|
. ds , \&
|
||||||
|
. ds ~ ~
|
||||||
|
. ds /
|
||||||
|
.\}
|
||||||
|
.if t \{\
|
||||||
|
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
|
||||||
|
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
|
||||||
|
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
|
||||||
|
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
|
||||||
|
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
|
||||||
|
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
|
||||||
|
.\}
|
||||||
|
. \" troff and (daisy-wheel) nroff accents
|
||||||
|
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
|
||||||
|
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
|
||||||
|
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
|
||||||
|
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
|
||||||
|
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
|
||||||
|
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
|
||||||
|
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
|
||||||
|
.ds ae a\h'-(\w'a'u*4/10)'e
|
||||||
|
.ds Ae A\h'-(\w'A'u*4/10)'E
|
||||||
|
. \" corrections for vroff
|
||||||
|
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
|
||||||
|
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
|
||||||
|
. \" for low resolution devices (crt and lpr)
|
||||||
|
.if \n(.H>23 .if \n(.V>19 \
|
||||||
|
\{\
|
||||||
|
. ds : e
|
||||||
|
. ds 8 ss
|
||||||
|
. ds o a
|
||||||
|
. ds d- d\h'-1'\(ga
|
||||||
|
. ds D- D\h'-1'\(hy
|
||||||
|
. ds th \o'bp'
|
||||||
|
. ds Th \o'LP'
|
||||||
|
. ds ae ae
|
||||||
|
. ds Ae AE
|
||||||
|
.\}
|
||||||
|
.rm #[ #] #H #V #F C
|
||||||
|
.\" ========================================================================
|
||||||
|
.\"
|
||||||
|
.IX Title "E100BOOT 1"
|
||||||
|
.TH E100BOOT 1 "2003-12-16" "perl v5.8.8" "User Contributed Perl Documentation"
|
||||||
|
.SH "NAME"
|
||||||
|
e100boot \- Network and serial port bootloader for the ETRAX100 CPU.
|
||||||
|
.SH "SYNOPSIS"
|
||||||
|
.IX Header "SYNOPSIS"
|
||||||
|
\&\fBe100boot\fR [\fB\-\-device\fR \fIdevicename\fR]
|
||||||
|
[\fB\-\-file\fR \fIfilename\fR|\- \fIaddr\fR [\fIsize\fR]]
|
||||||
|
[\fB\-\-flash\fR \fIram-source\fR \fIflash-offset\fR \fIsize\fR] [\fB\-\-pause\fR \fIiter\fR]
|
||||||
|
[\fB\-\-memtest\fR \fIaddr\fR \fIaddr\fR] [\fB\-\-memclear\fR \fIaddr\fR \fIaddr\fR]
|
||||||
|
[\fB\-\-memdump\fR \fIaddr\fR \fIaddr\fR] [\fB\-\-setreg\fR \fIaddr\fR|\fIregname\fR \fIval\fR]
|
||||||
|
[\fB\-\-getreg\fR \fIaddr\fR|\fIregname\fR] [\fB\-\-verify\fR \fIaddr\fR \fIval\fR]
|
||||||
|
[\fB\-\-label\fR \fIlabel\fR] [\fB\-\-loop\fR \fIaddr\fR \fIlabel\fR] [\fB\-\-5400\fR] [\fB\-\-5600\fR]
|
||||||
|
[\fB\-\-testcard\fR] [\fB\-\-devboard\fR] [\fB\-\-testcardlx\fR] [\fB\-\-network\fR] [\fB\-\-serial\fR]
|
||||||
|
[\fB\-\-baudrate\fR \fIbaudrate\fR] [\fB\-\-bootfile\fR \fIfile\fR] [\fB\-\-jump\fR \fIaddr\fR]
|
||||||
|
[\fB\-\-tofiles\fR] [\fB\-\-cmdsonly\fR] [\fB\-\-images\fR] [\fB\-\-noleds\fR] [\fB\-\-help\fR]
|
||||||
|
.SH "DESCRIPTION"
|
||||||
|
.IX Header "DESCRIPTION"
|
||||||
|
This boot loader facilitates loading of files over the network or a
|
||||||
|
serial port to an \s-1ETRAX100\s0. It can also be used for fairly extensive
|
||||||
|
hardware debugging as you can read and write to any memory addresses,
|
||||||
|
including the \s-1ETRAX100\s0 registers. You can also perform memory checks
|
||||||
|
and dumps and copy data to flash memories.
|
||||||
|
.PP
|
||||||
|
The first packet (or the first 784 bytes in the case of serial boot)
|
||||||
|
sent to Etrax100 is loaded into the cache. The code in this packet is
|
||||||
|
executed and loads the rest of the boot loader into the cache. The
|
||||||
|
cache is the only thing we can be sure of exists on all \s-1ETRAX100\s0
|
||||||
|
products, so the boot loader is limited to the size of the cache,
|
||||||
|
8KB. If further boot loading code is needed you have to set up
|
||||||
|
external memory and load another boot loader into it, but this is
|
||||||
|
rarely needed.
|
||||||
|
.PP
|
||||||
|
Two programs are involved in this boot loading, one is the program on
|
||||||
|
your workstation that sends the packets to \s-1ETRAX100\s0, this is called
|
||||||
|
the server boot loader or \s-1SBL\s0. The other program is the one in
|
||||||
|
\&\s-1ETRAX100\s0 that receives packets from the \s-1SBL\s0 and acts upon the data
|
||||||
|
therein, this is called the client boot loader or \s-1CBL\s0.
|
||||||
|
.PP
|
||||||
|
We don't want to edit and recompile the \s-1CBL\s0 each time we want to load
|
||||||
|
level two to different parts of memory, like we do on different
|
||||||
|
products. We also want to change things like the setup of external
|
||||||
|
memory before we load data into it. To make the boot loading as
|
||||||
|
flexible as possible and separate the \s-1CBL\s0 from level two we send a
|
||||||
|
configuration packet to it. After this packet we load other files, if
|
||||||
|
we want to.
|
||||||
|
.PP
|
||||||
|
The configuration packet can contain information to the \s-1CBL\s0 which lets
|
||||||
|
you: initialize external memory, read and write to all \s-1ETRAX100\s0
|
||||||
|
registers, read and write to any part of memory, load as many other
|
||||||
|
files as you like to any part of memory you like, etc. The
|
||||||
|
configuration packet is generated on the fly by the \s-1SBL\s0.
|
||||||
|
.PP
|
||||||
|
Since the \s-1CBL\s0 is unaware of which product it will be loaded on, it
|
||||||
|
doesn't do product specific initialization like setting up the
|
||||||
|
memory. This must be done with the configuration packet.
|
||||||
|
.Sh "Debugging printout"
|
||||||
|
.IX Subsection "Debugging printout"
|
||||||
|
When doing network boot the debugging printout from the \s-1CBL\s0 in \s-1ETRAX\s0
|
||||||
|
is transmitted back over the network and printed by e100boot. When
|
||||||
|
doing serial boot that interface will be used. So in either case you
|
||||||
|
will not need any other software or hardware to receive the debugging
|
||||||
|
printout.
|
||||||
|
.Sh "Creating binaries"
|
||||||
|
.IX Subsection "Creating binaries"
|
||||||
|
The files containing code to be loaded on the \s-1ETRAX100\s0 must be
|
||||||
|
stripped using the standard \s-1GCC\s0 binutils.
|
||||||
|
.Sh "How it works, things you don't want to know."
|
||||||
|
.IX Subsection "How it works, things you don't want to know."
|
||||||
|
ack, timeout bla, bla... \s-1RTFS\s0.
|
||||||
|
.Sh "Compilation and code"
|
||||||
|
.IX Subsection "Compilation and code"
|
||||||
|
Noteworthy is that two separate \s-1ETRAX100\s0 binaries are created, one for
|
||||||
|
network boot and one for serial boot. They actually contain exactly
|
||||||
|
the same code, but linked in different order. This is because the code
|
||||||
|
to load the rest of the bootloader over a specific interface must be
|
||||||
|
contained in the first data sent to the \s-1ETRAX100\s0 and it is too
|
||||||
|
difficult to cram the code for both interfaces in the beginning of the
|
||||||
|
same binary. Hence two files.
|
||||||
|
.PP
|
||||||
|
Other stuff you don't want to know is that the cache is mapped from
|
||||||
|
0x380000f0 to 0x380020f0. Code starts at the first address followed by
|
||||||
|
data up to the symbol \fIEbss\fR. At the other end is the buffer for boot
|
||||||
|
commands (addresses defined by \fI\s-1IO_BUF_START\s0\fR and \fI\s-1IO_BUF_END\s0\fR below
|
||||||
|
which the stack lies and hopefully the stack and \fIEbss\fR will never
|
||||||
|
meet...
|
||||||
|
.PP
|
||||||
|
The serial data is loaded from 0x380000f0 to 0x380003ff before
|
||||||
|
execution starts.
|
||||||
|
.SH "OPTIONS"
|
||||||
|
.IX Header "OPTIONS"
|
||||||
|
The options are done in the order specified on the command line, so
|
||||||
|
you probably want to do any memory setup before loading a file to the
|
||||||
|
memory, and you probably do not want to perform a memory test after
|
||||||
|
you have loaded a file to that memory.
|
||||||
|
.PP
|
||||||
|
All addresses and sizes must be in hex with optional '0x' prefix, or a
|
||||||
|
\&\s-1ETRAX100\s0 register name. Since the \fB\-\-setreg\fR and \fB\-\-getreg\fR options
|
||||||
|
only can be performed on dword aligned dwords only the registers that
|
||||||
|
conform to this can be named.
|
||||||
|
.PP
|
||||||
|
Note also that all addresses must be in uncached memory (bit 31 set),
|
||||||
|
as the bootloader lies in the cache. If you access any uncached
|
||||||
|
address during boot, the bootloader will be destroyed without warning.
|
||||||
|
.PP
|
||||||
|
It is also possible to specify an address as \fI+address\fR, in which
|
||||||
|
case it is considered to be relative to \fI\s-1IO_BUF_START\s0\fR. This is
|
||||||
|
especially useful in combination with the \fB\-\-loop\fR option below.
|
||||||
|
.IP "\fB\-\-baudrate\fR \fIbaudrate\fR" 4
|
||||||
|
.IX Item "--baudrate baudrate"
|
||||||
|
Set baudrate for files loaded after the boot loader.
|
||||||
|
.IP "\fB\-\-bootfile\fR \fIfilename\fR" 4
|
||||||
|
.IX Item "--bootfile filename"
|
||||||
|
Which boot image to send to \s-1ETRAX\s0 instead of the default ones.
|
||||||
|
.IP "\fB\-\-cmdsonly\fR" 4
|
||||||
|
.IX Item "--cmdsonly"
|
||||||
|
Write the commands to file e100boot.cmds.
|
||||||
|
.IP "\fB\-\-devboard\fR" 4
|
||||||
|
.IX Item "--devboard"
|
||||||
|
Sets registers for the developer board.
|
||||||
|
.IP "\fB\-\-device\fR \fIdevicename\fR" 4
|
||||||
|
.IX Item "--device devicename"
|
||||||
|
Which device to send packets on. For network boot the default is
|
||||||
|
eth0. For serial boot it is ttyS0.
|
||||||
|
.IP "\fB\-\-file\fR \fIfilename\fR|\- \fIaddress\fR [\fIsize\fR]" 4
|
||||||
|
.IX Item "--file filename|- address [size]"
|
||||||
|
The file to load and the address to load it to. If file is loaded on
|
||||||
|
stdin, specify filename '\-' followed by a size. Size need only be
|
||||||
|
given in this case. You can load as many files as you want, each
|
||||||
|
specified with a \fB\-\-file\fR.
|
||||||
|
.IP "\fB\-\-flash\fR \fIram-source flash-offset size\fR" 4
|
||||||
|
.IX Item "--flash ram-source flash-offset size"
|
||||||
|
Copies the specified \s-1RAM\s0 area to the flash.
|
||||||
|
.IP "\fB\-\-getreg\fR \fIaddress\fR|\fIregname\fR" 4
|
||||||
|
.IX Item "--getreg address|regname"
|
||||||
|
Print value of memory location. Must be uncached address.
|
||||||
|
.IP "\fB\-\-help\fR" 4
|
||||||
|
.IX Item "--help"
|
||||||
|
Print the help information.
|
||||||
|
.IP "\fB\-\-images\fR" 4
|
||||||
|
.IX Item "--images"
|
||||||
|
Print information about the internal boot images, then exit.
|
||||||
|
.IP "\fB\-\-jump\fR \fIaddress\fR" 4
|
||||||
|
.IX Item "--jump address"
|
||||||
|
Jump to specified address.
|
||||||
|
.IP "\fB\-\-label\fR \fIlabel\fR" 4
|
||||||
|
.IX Item "--label label"
|
||||||
|
Define a label to be used as target by the \fB\-\-loop\fR command. This
|
||||||
|
command is only used by the \s-1SBL\s0 to calculate the address for the
|
||||||
|
\&\fB\-\-loop\fR and does not take up any space in the configuration packet.
|
||||||
|
.IP "\fB\-\-loop\fR \fIcheck-address label\fR" 4
|
||||||
|
.IX Item "--loop check-address label"
|
||||||
|
If the contents of check-address is nonzero it is decremented and the
|
||||||
|
command parser continues parsing at the label.
|
||||||
|
.Sp
|
||||||
|
If no external memory is initialized yet it can be convenient to use
|
||||||
|
an address in the area occupied by the configuration packet. Run
|
||||||
|
e100boot with \fB\-\-help\fR to see which addresses the commands are stored
|
||||||
|
at. The size of the commands are four bytes for each command plus four
|
||||||
|
bytes per argument to the command.
|
||||||
|
.IP "\fB\-\-memclear\fR \fIstart-address end-address\fR" 4
|
||||||
|
.IX Item "--memclear start-address end-address"
|
||||||
|
Clears the specified memory area.
|
||||||
|
.IP "\fB\-\-memdump\fR \fIstart-address end-address\fR" 4
|
||||||
|
.IX Item "--memdump start-address end-address"
|
||||||
|
Prints the contents of the specified memory area.
|
||||||
|
.IP "\fB\-\-memtest\fR \fIstart-address end-address\fR" 4
|
||||||
|
.IX Item "--memtest start-address end-address"
|
||||||
|
Does a fairly extensive test of the specified memory area. Not only
|
||||||
|
catches defect memories but also catches things like wrong memory
|
||||||
|
setups where memory addresses are mirrored onto each other.
|
||||||
|
.IP "\fB\-\-network\fR" 4
|
||||||
|
.IX Item "--network"
|
||||||
|
Perform a network boot.
|
||||||
|
.IP "\fB\-\-noleds\fR" 4
|
||||||
|
.IX Item "--noleds"
|
||||||
|
When using the internal images use a version that does not toggle
|
||||||
|
general port \s-1PA\s0 or \s-1PB\s0 in \s-1ETRAX\s0 during the boot procedure.
|
||||||
|
.IP "\fB\-\-pause\fR \fIiterations\fR" 4
|
||||||
|
.IX Item "--pause iterations"
|
||||||
|
How many \fIiterations\fR to do of an empty loop.
|
||||||
|
.IP "\fB\-\-serial\fR" 4
|
||||||
|
.IX Item "--serial"
|
||||||
|
Do a serial boot.
|
||||||
|
.IP "\fB\-\-setreg\fR \fIaddress\fR|\fIregname\fR \fIvalue\fR" 4
|
||||||
|
.IX Item "--setreg address|regname value"
|
||||||
|
Load dword to dword aligned memory location.
|
||||||
|
.IP "\fB\-\-testcard\fR" 4
|
||||||
|
.IX Item "--testcard"
|
||||||
|
Configures the memories for the \s-1ETRAX\s0 100 testcard.
|
||||||
|
.IP "\fB\-\-testcardlx\fR" 4
|
||||||
|
.IX Item "--testcardlx"
|
||||||
|
Configures the memories for the \s-1ETRAX100\s0 \s-1LX\s0 testcard.
|
||||||
|
.IP "\fB\-\-tofiles\fR" 4
|
||||||
|
.IX Item "--tofiles"
|
||||||
|
Write packets to files e100boot.seq[0..]. Does not transmit the data.
|
||||||
|
.IP "\fB\-\-verify\fR \fIaddress value\fR" 4
|
||||||
|
.IX Item "--verify address value"
|
||||||
|
Verify that memory contains dword. If not loader will stop. This is to
|
||||||
|
avoid booting the wrong unit. If you have the units ethernet address
|
||||||
|
in the flash memory you can check for that.
|
||||||
|
.IP "\fB\-\-5400\fR" 4
|
||||||
|
.IX Item "--5400"
|
||||||
|
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5400
|
||||||
|
printserver.
|
||||||
|
.IP "\fB\-\-5600\fR" 4
|
||||||
|
.IX Item "--5600"
|
||||||
|
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5600
|
||||||
|
printserver.
|
||||||
|
.SH "EXAMPLES"
|
||||||
|
.IX Header "EXAMPLES"
|
||||||
|
If you have a stripped binary (file.ima) linked to 0x08000000 that you want
|
||||||
|
to boot via the network, do this:
|
||||||
|
.PP
|
||||||
|
\&\fBe100boot \-\-file file.ima 88000000 \-\-jump 08000000\fR
|
||||||
|
.PP
|
||||||
|
Or something like this. Sets waitstates to zero and loads two files,
|
||||||
|
the first from stdin:
|
||||||
|
.PP
|
||||||
|
\&\fBcat file.ima | e100boot \-\-memtest 88000000 8801ffff \-\-memclear
|
||||||
|
88000000 8801ffff \-\-setreg b0000000 0 \-\-getreg b0000000 \-\-file \-
|
||||||
|
88000000 a000 \-\-file file2.ima 88010000 \-\-memdump 88000000 880000ff
|
||||||
|
\&\-\-jump 08000000\fR
|
||||||
|
.PP
|
||||||
|
Or this, enables 16 bit parallel port and flashes the led on \s-1PA0:\s0
|
||||||
|
.PP
|
||||||
|
\&\fBe100boot \-\-testcardlx \-\-setreg R_PORT_PA_SET 0x00000000 \-\-setreg
|
||||||
|
R_GEN_CONFIG 0x80000004 \-\-setreg R_PAR0_CONFIG 0x00000200 \-\-setreg
|
||||||
|
R_PORT_G_DATA 0x00000000 \-\-pause 0x02000000 \-\-setreg R_PORT_G_DATA
|
||||||
|
0xffffffff \-\-pause 0x02000000 \-\-setreg R_PORT_G_DATA 0x00000000 \-\-loop
|
||||||
|
0x38001e0b 0x38001e60\fR
|
||||||
|
.PP
|
||||||
|
Setup the memory, test the \s-1SRAM\s0, print the contents of the first 256
|
||||||
|
bytes of \s-1SRAM\s0, clear \s-1SRAM\s0, test the \s-1DRAM\s0, print R_DMA_CH0_CMD, load a
|
||||||
|
file to \s-1SRAM\s0, load another file to \s-1SRAM\s0, load file to \s-1DRAM\s0, jump to
|
||||||
|
code in \s-1SRAM\s0.
|
||||||
|
.PP
|
||||||
|
\&\fBe100boot \-\-setreg b0000000 1000 \-\-setreg b0000008 00006543 \-\-setreg
|
||||||
|
b000000c 12966060 \-\-memtest 88000000 80000 \-\-memdump 88000000 880000ff
|
||||||
|
\&\-\-memclear 88000000 80000 \-\-memtest c0000000 400000 \-\-getreg b00001d0
|
||||||
|
\&\-\-file file1.ima 88000000 \-\-file file2.ima 88010000 \-\-file file3.ima
|
||||||
|
c0000000 \-\-jump 88000000\fR
|
||||||
|
.PP
|
||||||
|
Boot Linux on the testcard.
|
||||||
|
.PP
|
||||||
|
\&\fBe100boot \-\-setreg b0000000 1000 \-\-setreg b0000008 6557 \-\-setreg
|
||||||
|
b000000c 1b988080 \-\-file timage c0000500 \-\-jump 40000500\fR
|
||||||
|
.PP
|
||||||
|
Booting over serial port and using labels to flash the leds on port
|
||||||
|
\&\s-1PA\s0.
|
||||||
|
.PP
|
||||||
|
\&\fBe100boot \-\-serial \-\-device /dev/ttyS1 \-\-baudrate 9600 \-\-label first
|
||||||
|
\&\-\-setreg 0x380020e0 00000001 \-\-setreg R_PORT_PA_SET 0x0000ff00 \-\-pause
|
||||||
|
0x02000000 \-\-setreg R_PORT_PA_SET 0x0000ffff \-\-pause 0x02000000 \-\-loop
|
||||||
|
0x380020e0 first\fR
|
||||||
|
.SH "BUGS"
|
||||||
|
.IX Header "BUGS"
|
||||||
|
You're kidding, right? Check \s-1AUTHOR\s0 below. The only thing
|
||||||
|
would be the hubris of the author, but that I consider a feature. If
|
||||||
|
you find any other 'features' report them to
|
||||||
|
technology@axis.com. Don't bother the author directly, he is busy
|
||||||
|
playing PlayStation2.
|
||||||
|
.SH "COPYING"
|
||||||
|
.IX Header "COPYING"
|
||||||
|
Copyright © 1996\-2002 Axis Communications \s-1AB\s0.
|
||||||
|
.SH "AUTHOR"
|
||||||
|
.IX Header "AUTHOR"
|
||||||
|
Written by Ronny Ranerup.
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.IX Header "SEE ALSO"
|
||||||
|
The fine source, which you can get at http://developer.axis.com.
|
395
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.html
Normal file
395
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.html
Normal file
|
@ -0,0 +1,395 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>e100boot - Network and serial port bootloader for the ETRAX100 CPU.</title>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||||
|
<link rev="made" href="mailto:root@localhost" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="background-color: white">
|
||||||
|
|
||||||
|
<p><a name="__index__"></a></p>
|
||||||
|
<!-- INDEX BEGIN -->
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="#name">NAME</a></li>
|
||||||
|
<li><a href="#synopsis">SYNOPSIS</a></li>
|
||||||
|
<li><a href="#description">DESCRIPTION</a></li>
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li><a href="#debugging_printout">Debugging printout</a></li>
|
||||||
|
<li><a href="#creating_binaries">Creating binaries</a></li>
|
||||||
|
<li><a href="#how_it_works__things_you_don_t_want_to_know_">How it works, things you don't want to know.</a></li>
|
||||||
|
<li><a href="#compilation_and_code">Compilation and code</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<li><a href="#options">OPTIONS</a></li>
|
||||||
|
<li><a href="#examples">EXAMPLES</a></li>
|
||||||
|
<li><a href="#bugs">BUGS</a></li>
|
||||||
|
<li><a href="#copying">COPYING</a></li>
|
||||||
|
<li><a href="#author">AUTHOR</a></li>
|
||||||
|
<li><a href="#see_also">SEE ALSO</a></li>
|
||||||
|
</ul>
|
||||||
|
<!-- INDEX END -->
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<h1><a name="name">NAME</a></h1>
|
||||||
|
<p>e100boot - Network and serial port bootloader for the ETRAX100 CPU.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="synopsis">SYNOPSIS</a></h1>
|
||||||
|
<p><strong>e100boot</strong> [<strong>--device</strong> <em>devicename</em>]
|
||||||
|
[<strong>--file</strong> <em>filename</em>|- <em>addr</em> [<em>size</em>]]
|
||||||
|
[<strong>--flash</strong> <em>ram-source</em> <em>flash-offset</em> <em>size</em>] [<strong>--pause</strong> <em>iter</em>]
|
||||||
|
[<strong>--memtest</strong> <em>addr</em> <em>addr</em>] [<strong>--memclear</strong> <em>addr</em> <em>addr</em>]
|
||||||
|
[<strong>--memdump</strong> <em>addr</em> <em>addr</em>] [<strong>--setreg</strong> <em>addr</em>|<em>regname</em> <em>val</em>]
|
||||||
|
[<strong>--getreg</strong> <em>addr</em>|<em>regname</em>] [<strong>--verify</strong> <em>addr</em> <em>val</em>]
|
||||||
|
[<strong>--label</strong> <em>label</em>] [<strong>--loop</strong> <em>addr</em> <em>label</em>] [<strong>--5400</strong>] [<strong>--5600</strong>]
|
||||||
|
[<strong>--testcard</strong>] [<strong>--devboard</strong>] [<strong>--testcardlx</strong>] [<strong>--network</strong>] [<strong>--serial</strong>]
|
||||||
|
[<strong>--baudrate</strong> <em>baudrate</em>] [<strong>--bootfile</strong> <em>file</em>] [<strong>--jump</strong> <em>addr</em>]
|
||||||
|
[<strong>--tofiles</strong>] [<strong>--cmdsonly</strong>] [<strong>--images</strong>] [<strong>--noleds</strong>] [<strong>--help</strong>]</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="description">DESCRIPTION</a></h1>
|
||||||
|
<p>This boot loader facilitates loading of files over the network or a
|
||||||
|
serial port to an ETRAX100. It can also be used for fairly extensive
|
||||||
|
hardware debugging as you can read and write to any memory addresses,
|
||||||
|
including the ETRAX100 registers. You can also perform memory checks
|
||||||
|
and dumps and copy data to flash memories.</p>
|
||||||
|
<p>The first packet (or the first 784 bytes in the case of serial boot)
|
||||||
|
sent to Etrax100 is loaded into the cache. The code in this packet is
|
||||||
|
executed and loads the rest of the boot loader into the cache. The
|
||||||
|
cache is the only thing we can be sure of exists on all ETRAX100
|
||||||
|
products, so the boot loader is limited to the size of the cache,
|
||||||
|
8KB. If further boot loading code is needed you have to set up
|
||||||
|
external memory and load another boot loader into it, but this is
|
||||||
|
rarely needed.</p>
|
||||||
|
<p>Two programs are involved in this boot loading, one is the program on
|
||||||
|
your workstation that sends the packets to ETRAX100, this is called
|
||||||
|
the server boot loader or SBL. The other program is the one in
|
||||||
|
ETRAX100 that receives packets from the SBL and acts upon the data
|
||||||
|
therein, this is called the client boot loader or CBL.</p>
|
||||||
|
<p>We don't want to edit and recompile the CBL each time we want to load
|
||||||
|
level two to different parts of memory, like we do on different
|
||||||
|
products. We also want to change things like the setup of external
|
||||||
|
memory before we load data into it. To make the boot loading as
|
||||||
|
flexible as possible and separate the CBL from level two we send a
|
||||||
|
configuration packet to it. After this packet we load other files, if
|
||||||
|
we want to.</p>
|
||||||
|
<p>The configuration packet can contain information to the CBL which lets
|
||||||
|
you: initialize external memory, read and write to all ETRAX100
|
||||||
|
registers, read and write to any part of memory, load as many other
|
||||||
|
files as you like to any part of memory you like, etc. The
|
||||||
|
configuration packet is generated on the fly by the SBL.</p>
|
||||||
|
<p>Since the CBL is unaware of which product it will be loaded on, it
|
||||||
|
doesn't do product specific initialization like setting up the
|
||||||
|
memory. This must be done with the configuration packet.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<h2><a name="debugging_printout">Debugging printout</a></h2>
|
||||||
|
<p>When doing network boot the debugging printout from the CBL in ETRAX
|
||||||
|
is transmitted back over the network and printed by e100boot. When
|
||||||
|
doing serial boot that interface will be used. So in either case you
|
||||||
|
will not need any other software or hardware to receive the debugging
|
||||||
|
printout.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<h2><a name="creating_binaries">Creating binaries</a></h2>
|
||||||
|
<p>The files containing code to be loaded on the ETRAX100 must be
|
||||||
|
stripped using the standard GCC binutils.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<h2><a name="how_it_works__things_you_don_t_want_to_know_">How it works, things you don't want to know.</a></h2>
|
||||||
|
<p>ack, timeout bla, bla... RTFS.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<h2><a name="compilation_and_code">Compilation and code</a></h2>
|
||||||
|
<p>Noteworthy is that two separate ETRAX100 binaries are created, one for
|
||||||
|
network boot and one for serial boot. They actually contain exactly
|
||||||
|
the same code, but linked in different order. This is because the code
|
||||||
|
to load the rest of the bootloader over a specific interface must be
|
||||||
|
contained in the first data sent to the ETRAX100 and it is too
|
||||||
|
difficult to cram the code for both interfaces in the beginning of the
|
||||||
|
same binary. Hence two files.</p>
|
||||||
|
<p>Other stuff you don't want to know is that the cache is mapped from
|
||||||
|
0x380000f0 to 0x380020f0. Code starts at the first address followed by
|
||||||
|
data up to the symbol <em>Ebss</em>. At the other end is the buffer for boot
|
||||||
|
commands (addresses defined by <em>IO_BUF_START</em> and <em>IO_BUF_END</em> below
|
||||||
|
which the stack lies and hopefully the stack and <em>Ebss</em> will never
|
||||||
|
meet...</p>
|
||||||
|
<p>The serial data is loaded from 0x380000f0 to 0x380003ff before
|
||||||
|
execution starts.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="options">OPTIONS</a></h1>
|
||||||
|
<p>The options are done in the order specified on the command line, so
|
||||||
|
you probably want to do any memory setup before loading a file to the
|
||||||
|
memory, and you probably do not want to perform a memory test after
|
||||||
|
you have loaded a file to that memory.</p>
|
||||||
|
<p>All addresses and sizes must be in hex with optional '0x' prefix, or a
|
||||||
|
ETRAX100 register name. Since the <strong>--setreg</strong> and <strong>--getreg</strong> options
|
||||||
|
only can be performed on dword aligned dwords only the registers that
|
||||||
|
conform to this can be named.</p>
|
||||||
|
<p>Note also that all addresses must be in uncached memory (bit 31 set),
|
||||||
|
as the bootloader lies in the cache. If you access any uncached
|
||||||
|
address during boot, the bootloader will be destroyed without warning.</p>
|
||||||
|
<p>It is also possible to specify an address as <em>+address</em>, in which
|
||||||
|
case it is considered to be relative to <em>IO_BUF_START</em>. This is
|
||||||
|
especially useful in combination with the <strong>--loop</strong> option below.</p>
|
||||||
|
<dl>
|
||||||
|
<dt><strong><a name="item__2d_2dbaudrate_baudrate"><strong>--baudrate</strong> <em>baudrate</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Set baudrate for files loaded after the boot loader.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dbootfile_filename"><strong>--bootfile</strong> <em>filename</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Which boot image to send to ETRAX instead of the default ones.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dcmdsonly"><strong>--cmdsonly</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Write the commands to file e100boot.cmds.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2ddevboard"><strong>--devboard</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Sets registers for the developer board.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2ddevice_devicename"><strong>--device</strong> <em>devicename</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Which device to send packets on. For network boot the default is
|
||||||
|
eth0. For serial boot it is ttyS0.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dfile_filename_7c_2d_address__5bsize_5d"><strong>--file</strong> <em>filename</em>|- <em>address</em> [<em>size</em>]</a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>The file to load and the address to load it to. If file is loaded on
|
||||||
|
stdin, specify filename '-' followed by a size. Size need only be
|
||||||
|
given in this case. You can load as many files as you want, each
|
||||||
|
specified with a <strong>--file</strong>.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dflash_ram_2dsource_flash_2doffset_size"><strong>--flash</strong> <em>ram-source flash-offset size</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Copies the specified RAM area to the flash.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dgetreg_address_7cregname"><strong>--getreg</strong> <em>address</em>|<em>regname</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Print value of memory location. Must be uncached address.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dhelp"><strong>--help</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Print the help information.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dimages"><strong>--images</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Print information about the internal boot images, then exit.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2djump_address"><strong>--jump</strong> <em>address</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Jump to specified address.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dlabel_label"><strong>--label</strong> <em>label</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Define a label to be used as target by the <strong>--loop</strong> command. This
|
||||||
|
command is only used by the SBL to calculate the address for the
|
||||||
|
<strong>--loop</strong> and does not take up any space in the configuration packet.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dloop_check_2daddress_label"><strong>--loop</strong> <em>check-address label</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>If the contents of check-address is nonzero it is decremented and the
|
||||||
|
command parser continues parsing at the label.</p>
|
||||||
|
</dd>
|
||||||
|
<dd>
|
||||||
|
<p>If no external memory is initialized yet it can be convenient to use
|
||||||
|
an address in the area occupied by the configuration packet. Run
|
||||||
|
e100boot with <strong>--help</strong> to see which addresses the commands are stored
|
||||||
|
at. The size of the commands are four bytes for each command plus four
|
||||||
|
bytes per argument to the command.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dmemclear_start_2daddress_end_2daddress"><strong>--memclear</strong> <em>start-address end-address</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Clears the specified memory area.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dmemdump_start_2daddress_end_2daddress"><strong>--memdump</strong> <em>start-address end-address</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Prints the contents of the specified memory area.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dmemtest_start_2daddress_end_2daddress"><strong>--memtest</strong> <em>start-address end-address</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Does a fairly extensive test of the specified memory area. Not only
|
||||||
|
catches defect memories but also catches things like wrong memory
|
||||||
|
setups where memory addresses are mirrored onto each other.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dnetwork"><strong>--network</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Perform a network boot.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dnoleds"><strong>--noleds</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>When using the internal images use a version that does not toggle
|
||||||
|
general port PA or PB in ETRAX during the boot procedure.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dpause_iterations"><strong>--pause</strong> <em>iterations</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>How many <em>iterations</em> to do of an empty loop.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dserial"><strong>--serial</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Do a serial boot.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dsetreg_address_7cregname_value"><strong>--setreg</strong> <em>address</em>|<em>regname</em> <em>value</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Load dword to dword aligned memory location.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dtestcard"><strong>--testcard</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Configures the memories for the ETRAX 100 testcard.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dtestcardlx"><strong>--testcardlx</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Configures the memories for the ETRAX100 LX testcard.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dtofiles"><strong>--tofiles</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Write packets to files e100boot.seq[0..]. Does not transmit the data.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2dverify_address_value"><strong>--verify</strong> <em>address value</em></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Verify that memory contains dword. If not loader will stop. This is to
|
||||||
|
avoid booting the wrong unit. If you have the units ethernet address
|
||||||
|
in the flash memory you can check for that.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2d5400"><strong>--5400</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5400
|
||||||
|
printserver.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
<dt><strong><a name="item__2d_2d5600"><strong>--5600</strong></a></strong>
|
||||||
|
|
||||||
|
<dd>
|
||||||
|
<p>Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5600
|
||||||
|
printserver.</p>
|
||||||
|
</dd>
|
||||||
|
</li>
|
||||||
|
</dl>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="examples">EXAMPLES</a></h1>
|
||||||
|
<p>If you have a stripped binary (file.ima) linked to 0x08000000 that you want
|
||||||
|
to boot via the network, do this:</p>
|
||||||
|
<p><strong>e100boot --file file.ima 88000000 --jump 08000000</strong></p>
|
||||||
|
<p>Or something like this. Sets waitstates to zero and loads two files,
|
||||||
|
the first from stdin:</p>
|
||||||
|
<p><strong>cat file.ima | e100boot --memtest 88000000 8801ffff --memclear
|
||||||
|
88000000 8801ffff --setreg b0000000 0 --getreg b0000000 --file -
|
||||||
|
88000000 a000 --file file2.ima 88010000 --memdump 88000000 880000ff
|
||||||
|
--jump 08000000</strong></p>
|
||||||
|
<p>Or this, enables 16 bit parallel port and flashes the led on PA0:</p>
|
||||||
|
<p><strong>e100boot --testcardlx --setreg R_PORT_PA_SET 0x00000000 --setreg
|
||||||
|
R_GEN_CONFIG 0x80000004 --setreg R_PAR0_CONFIG 0x00000200 --setreg
|
||||||
|
R_PORT_G_DATA 0x00000000 --pause 0x02000000 --setreg R_PORT_G_DATA
|
||||||
|
0xffffffff --pause 0x02000000 --setreg R_PORT_G_DATA 0x00000000 --loop
|
||||||
|
0x38001e0b 0x38001e60</strong></p>
|
||||||
|
<p>Setup the memory, test the SRAM, print the contents of the first 256
|
||||||
|
bytes of SRAM, clear SRAM, test the DRAM, print R_DMA_CH0_CMD, load a
|
||||||
|
file to SRAM, load another file to SRAM, load file to DRAM, jump to
|
||||||
|
code in SRAM.</p>
|
||||||
|
<p><strong>e100boot --setreg b0000000 1000 --setreg b0000008 00006543 --setreg
|
||||||
|
b000000c 12966060 --memtest 88000000 80000 --memdump 88000000 880000ff
|
||||||
|
--memclear 88000000 80000 --memtest c0000000 400000 --getreg b00001d0
|
||||||
|
--file file1.ima 88000000 --file file2.ima 88010000 --file file3.ima
|
||||||
|
c0000000 --jump 88000000</strong></p>
|
||||||
|
<p>Boot Linux on the testcard.</p>
|
||||||
|
<p><strong>e100boot --setreg b0000000 1000 --setreg b0000008 6557 --setreg
|
||||||
|
b000000c 1b988080 --file timage c0000500 --jump 40000500</strong></p>
|
||||||
|
<p>Booting over serial port and using labels to flash the leds on port
|
||||||
|
PA.</p>
|
||||||
|
<p><strong>e100boot --serial --device /dev/ttyS1 --baudrate 9600 --label first
|
||||||
|
--setreg 0x380020e0 00000001 --setreg R_PORT_PA_SET 0x0000ff00 --pause
|
||||||
|
0x02000000 --setreg R_PORT_PA_SET 0x0000ffff --pause 0x02000000 --loop
|
||||||
|
0x380020e0 first</strong></p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="bugs">BUGS</a></h1>
|
||||||
|
<p>You're kidding, right? Check <a href="#author">AUTHOR</a> below. The only thing
|
||||||
|
would be the hubris of the author, but that I consider a feature. If
|
||||||
|
you find any other 'features' report them to
|
||||||
|
<a href="mailto:technology@axis.com.">technology@axis.com.</a> Don't bother the author directly, he is busy
|
||||||
|
playing PlayStation2.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="copying">COPYING</a></h1>
|
||||||
|
<p>Copyright © 1996-2002 Axis Communications AB.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="author">AUTHOR</a></h1>
|
||||||
|
<p>Written by Ronny Ranerup.</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<hr />
|
||||||
|
<h1><a name="see_also">SEE ALSO</a></h1>
|
||||||
|
<p>The fine source, which you can get at <a href="http://developer.axis.com.">http://developer.axis.com.</a></p>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
314
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.pod
Normal file
314
target/linux/etrax-2.6/image/e100boot/src/doc/e100boot.pod
Normal file
|
@ -0,0 +1,314 @@
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
e100boot - Network and serial port bootloader for the ETRAX100 CPU.
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
B<e100boot> [B<--device> I<devicename>]
|
||||||
|
[B<--file> I<filename>|- I<addr> [I<size>]]
|
||||||
|
[B<--flash> I<ram-source> I<flash-offset> I<size>] [B<--pause> I<iter>]
|
||||||
|
[B<--memtest> I<addr> I<addr>] [B<--memclear> I<addr> I<addr>]
|
||||||
|
[B<--memdump> I<addr> I<addr>] [B<--setreg> I<addr>|I<regname> I<val>]
|
||||||
|
[B<--getreg> I<addr>|I<regname>] [B<--verify> I<addr> I<val>]
|
||||||
|
[B<--label> I<label>] [B<--loop> I<addr> I<label>] [B<--5400>] [B<--5600>]
|
||||||
|
[B<--testcard>] [B<--devboard>] [B<--testcardlx>] [B<--network>] [B<--serial>]
|
||||||
|
[B<--baudrate> I<baudrate>] [B<--bootfile> I<file>] [B<--jump> I<addr>]
|
||||||
|
[B<--tofiles>] [B<--cmdsonly>] [B<--images>] [B<--noleds>] [B<--help>]
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
This boot loader facilitates loading of files over the network or a
|
||||||
|
serial port to an ETRAX100. It can also be used for fairly extensive
|
||||||
|
hardware debugging as you can read and write to any memory addresses,
|
||||||
|
including the ETRAX100 registers. You can also perform memory checks
|
||||||
|
and dumps and copy data to flash memories.
|
||||||
|
|
||||||
|
The first packet (or the first 784 bytes in the case of serial boot)
|
||||||
|
sent to Etrax100 is loaded into the cache. The code in this packet is
|
||||||
|
executed and loads the rest of the boot loader into the cache. The
|
||||||
|
cache is the only thing we can be sure of exists on all ETRAX100
|
||||||
|
products, so the boot loader is limited to the size of the cache,
|
||||||
|
8KB. If further boot loading code is needed you have to set up
|
||||||
|
external memory and load another boot loader into it, but this is
|
||||||
|
rarely needed.
|
||||||
|
|
||||||
|
Two programs are involved in this boot loading, one is the program on
|
||||||
|
your workstation that sends the packets to ETRAX100, this is called
|
||||||
|
the server boot loader or SBL. The other program is the one in
|
||||||
|
ETRAX100 that receives packets from the SBL and acts upon the data
|
||||||
|
therein, this is called the client boot loader or CBL.
|
||||||
|
|
||||||
|
We don't want to edit and recompile the CBL each time we want to load
|
||||||
|
level two to different parts of memory, like we do on different
|
||||||
|
products. We also want to change things like the setup of external
|
||||||
|
memory before we load data into it. To make the boot loading as
|
||||||
|
flexible as possible and separate the CBL from level two we send a
|
||||||
|
configuration packet to it. After this packet we load other files, if
|
||||||
|
we want to.
|
||||||
|
|
||||||
|
The configuration packet can contain information to the CBL which lets
|
||||||
|
you: initialize external memory, read and write to all ETRAX100
|
||||||
|
registers, read and write to any part of memory, load as many other
|
||||||
|
files as you like to any part of memory you like, etc. The
|
||||||
|
configuration packet is generated on the fly by the SBL.
|
||||||
|
|
||||||
|
Since the CBL is unaware of which product it will be loaded on, it
|
||||||
|
doesn't do product specific initialization like setting up the
|
||||||
|
memory. This must be done with the configuration packet.
|
||||||
|
|
||||||
|
=head2 Debugging printout
|
||||||
|
|
||||||
|
When doing network boot the debugging printout from the CBL in ETRAX
|
||||||
|
is transmitted back over the network and printed by e100boot. When
|
||||||
|
doing serial boot that interface will be used. So in either case you
|
||||||
|
will not need any other software or hardware to receive the debugging
|
||||||
|
printout.
|
||||||
|
|
||||||
|
=head2 Creating binaries
|
||||||
|
|
||||||
|
The files containing code to be loaded on the ETRAX100 must be
|
||||||
|
stripped using the standard GCC binutils.
|
||||||
|
|
||||||
|
=head2 How it works, things you don't want to know.
|
||||||
|
|
||||||
|
ack, timeout bla, bla... RTFS.
|
||||||
|
|
||||||
|
=head2 Compilation and code
|
||||||
|
|
||||||
|
Noteworthy is that two separate ETRAX100 binaries are created, one for
|
||||||
|
network boot and one for serial boot. They actually contain exactly
|
||||||
|
the same code, but linked in different order. This is because the code
|
||||||
|
to load the rest of the bootloader over a specific interface must be
|
||||||
|
contained in the first data sent to the ETRAX100 and it is too
|
||||||
|
difficult to cram the code for both interfaces in the beginning of the
|
||||||
|
same binary. Hence two files.
|
||||||
|
|
||||||
|
Other stuff you don't want to know is that the cache is mapped from
|
||||||
|
0x380000f0 to 0x380020f0. Code starts at the first address followed by
|
||||||
|
data up to the symbol I<Ebss>. At the other end is the buffer for boot
|
||||||
|
commands (addresses defined by I<IO_BUF_START> and I<IO_BUF_END> below
|
||||||
|
which the stack lies and hopefully the stack and I<Ebss> will never
|
||||||
|
meet...
|
||||||
|
|
||||||
|
The serial data is loaded from 0x380000f0 to 0x380003ff before
|
||||||
|
execution starts.
|
||||||
|
|
||||||
|
=head1 OPTIONS
|
||||||
|
|
||||||
|
The options are done in the order specified on the command line, so
|
||||||
|
you probably want to do any memory setup before loading a file to the
|
||||||
|
memory, and you probably do not want to perform a memory test after
|
||||||
|
you have loaded a file to that memory.
|
||||||
|
|
||||||
|
All addresses and sizes must be in hex with optional '0x' prefix, or a
|
||||||
|
ETRAX100 register name. Since the B<--setreg> and B<--getreg> options
|
||||||
|
only can be performed on dword aligned dwords only the registers that
|
||||||
|
conform to this can be named.
|
||||||
|
|
||||||
|
Note also that all addresses must be in uncached memory (bit 31 set),
|
||||||
|
as the bootloader lies in the cache. If you access any uncached
|
||||||
|
address during boot, the bootloader will be destroyed without warning.
|
||||||
|
|
||||||
|
It is also possible to specify an address as I<+address>, in which
|
||||||
|
case it is considered to be relative to I<IO_BUF_START>. This is
|
||||||
|
especially useful in combination with the B<--loop> option below.
|
||||||
|
|
||||||
|
=over 4
|
||||||
|
|
||||||
|
=item B<--baudrate> I<baudrate>
|
||||||
|
|
||||||
|
Set baudrate for files loaded after the boot loader.
|
||||||
|
|
||||||
|
=item B<--bootfile> I<filename>
|
||||||
|
|
||||||
|
Which boot image to send to ETRAX instead of the default ones.
|
||||||
|
|
||||||
|
=item B<--cmdsonly>
|
||||||
|
|
||||||
|
Write the commands to file e100boot.cmds.
|
||||||
|
|
||||||
|
=item B<--devboard>
|
||||||
|
|
||||||
|
Sets registers for the developer board.
|
||||||
|
|
||||||
|
=item B<--device> I<devicename>
|
||||||
|
|
||||||
|
Which device to send packets on. For network boot the default is
|
||||||
|
eth0. For serial boot it is ttyS0.
|
||||||
|
|
||||||
|
=item B<--file> I<filename>|- I<address> [I<size>]
|
||||||
|
|
||||||
|
The file to load and the address to load it to. If file is loaded on
|
||||||
|
stdin, specify filename '-' followed by a size. Size need only be
|
||||||
|
given in this case. You can load as many files as you want, each
|
||||||
|
specified with a B<--file>.
|
||||||
|
|
||||||
|
=item B<--flash> I<ram-source flash-offset size>
|
||||||
|
|
||||||
|
Copies the specified RAM area to the flash.
|
||||||
|
|
||||||
|
=item B<--getreg> I<address>|I<regname>
|
||||||
|
|
||||||
|
Print value of memory location. Must be uncached address.
|
||||||
|
|
||||||
|
=item B<--help>
|
||||||
|
|
||||||
|
Print the help information.
|
||||||
|
|
||||||
|
=item B<--images>
|
||||||
|
|
||||||
|
Print information about the internal boot images, then exit.
|
||||||
|
|
||||||
|
=item B<--jump> I<address>
|
||||||
|
|
||||||
|
Jump to specified address.
|
||||||
|
|
||||||
|
=item B<--label> I<label>
|
||||||
|
|
||||||
|
Define a label to be used as target by the B<--loop> command. This
|
||||||
|
command is only used by the SBL to calculate the address for the
|
||||||
|
B<--loop> and does not take up any space in the configuration packet.
|
||||||
|
|
||||||
|
=item B<--loop> I<check-address label>
|
||||||
|
|
||||||
|
If the contents of check-address is nonzero it is decremented and the
|
||||||
|
command parser continues parsing at the label.
|
||||||
|
|
||||||
|
If no external memory is initialized yet it can be convenient to use
|
||||||
|
an address in the area occupied by the configuration packet. Run
|
||||||
|
e100boot with B<--help> to see which addresses the commands are stored
|
||||||
|
at. The size of the commands are four bytes for each command plus four
|
||||||
|
bytes per argument to the command.
|
||||||
|
|
||||||
|
=item B<--memclear> I<start-address end-address>
|
||||||
|
|
||||||
|
Clears the specified memory area.
|
||||||
|
|
||||||
|
=item B<--memdump> I<start-address end-address>
|
||||||
|
|
||||||
|
Prints the contents of the specified memory area.
|
||||||
|
|
||||||
|
=item B<--memtest> I<start-address end-address>
|
||||||
|
|
||||||
|
Does a fairly extensive test of the specified memory area. Not only
|
||||||
|
catches defect memories but also catches things like wrong memory
|
||||||
|
setups where memory addresses are mirrored onto each other.
|
||||||
|
|
||||||
|
=item B<--network>
|
||||||
|
|
||||||
|
Perform a network boot.
|
||||||
|
|
||||||
|
=item B<--noleds>
|
||||||
|
|
||||||
|
When using the internal images use a version that does not toggle
|
||||||
|
general port PA or PB in ETRAX during the boot procedure.
|
||||||
|
|
||||||
|
=item B<--pause> I<iterations>
|
||||||
|
|
||||||
|
How many I<iterations> to do of an empty loop.
|
||||||
|
|
||||||
|
=item B<--serial>
|
||||||
|
|
||||||
|
Do a serial boot.
|
||||||
|
|
||||||
|
=item B<--setreg> I<address>|I<regname> I<value>
|
||||||
|
|
||||||
|
Load dword to dword aligned memory location.
|
||||||
|
|
||||||
|
=item B<--testcard>
|
||||||
|
|
||||||
|
Configures the memories for the ETRAX 100 testcard.
|
||||||
|
|
||||||
|
=item B<--testcardlx>
|
||||||
|
|
||||||
|
Configures the memories for the ETRAX100 LX testcard.
|
||||||
|
|
||||||
|
=item B<--tofiles>
|
||||||
|
|
||||||
|
Write packets to files e100boot.seq[0..]. Does not transmit the data.
|
||||||
|
|
||||||
|
=item B<--verify> I<address value>
|
||||||
|
|
||||||
|
Verify that memory contains dword. If not loader will stop. This is to
|
||||||
|
avoid booting the wrong unit. If you have the units ethernet address
|
||||||
|
in the flash memory you can check for that.
|
||||||
|
|
||||||
|
=item B<--5400>
|
||||||
|
|
||||||
|
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5400
|
||||||
|
printserver.
|
||||||
|
|
||||||
|
=item B<--5600>
|
||||||
|
|
||||||
|
Sets R_WAITSTATES, R_DRAM_TIMING and R_DRAM_CONFIG for the 5600
|
||||||
|
printserver.
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 EXAMPLES
|
||||||
|
|
||||||
|
If you have a stripped binary (file.ima) linked to 0x08000000 that you want
|
||||||
|
to boot via the network, do this:
|
||||||
|
|
||||||
|
B<e100boot --file file.ima 88000000 --jump 08000000>
|
||||||
|
|
||||||
|
Or something like this. Sets waitstates to zero and loads two files,
|
||||||
|
the first from stdin:
|
||||||
|
|
||||||
|
B<cat file.ima | e100boot --memtest 88000000 8801ffff --memclear
|
||||||
|
88000000 8801ffff --setreg b0000000 0 --getreg b0000000 --file -
|
||||||
|
88000000 a000 --file file2.ima 88010000 --memdump 88000000 880000ff
|
||||||
|
--jump 08000000>
|
||||||
|
|
||||||
|
Or this, enables 16 bit parallel port and flashes the led on PA0:
|
||||||
|
|
||||||
|
B<e100boot --testcardlx --setreg R_PORT_PA_SET 0x00000000 --setreg
|
||||||
|
R_GEN_CONFIG 0x80000004 --setreg R_PAR0_CONFIG 0x00000200 --setreg
|
||||||
|
R_PORT_G_DATA 0x00000000 --pause 0x02000000 --setreg R_PORT_G_DATA
|
||||||
|
0xffffffff --pause 0x02000000 --setreg R_PORT_G_DATA 0x00000000 --loop
|
||||||
|
0x38001e0b 0x38001e60>
|
||||||
|
|
||||||
|
Setup the memory, test the SRAM, print the contents of the first 256
|
||||||
|
bytes of SRAM, clear SRAM, test the DRAM, print R_DMA_CH0_CMD, load a
|
||||||
|
file to SRAM, load another file to SRAM, load file to DRAM, jump to
|
||||||
|
code in SRAM.
|
||||||
|
|
||||||
|
B<e100boot --setreg b0000000 1000 --setreg b0000008 00006543 --setreg
|
||||||
|
b000000c 12966060 --memtest 88000000 80000 --memdump 88000000 880000ff
|
||||||
|
--memclear 88000000 80000 --memtest c0000000 400000 --getreg b00001d0
|
||||||
|
--file file1.ima 88000000 --file file2.ima 88010000 --file file3.ima
|
||||||
|
c0000000 --jump 88000000>
|
||||||
|
|
||||||
|
Boot Linux on the testcard.
|
||||||
|
|
||||||
|
B<e100boot --setreg b0000000 1000 --setreg b0000008 6557 --setreg
|
||||||
|
b000000c 1b988080 --file timage c0000500 --jump 40000500>
|
||||||
|
|
||||||
|
Booting over serial port and using labels to flash the leds on port
|
||||||
|
PA.
|
||||||
|
|
||||||
|
B<e100boot --serial --device /dev/ttyS1 --baudrate 9600 --label first
|
||||||
|
--setreg 0x380020e0 00000001 --setreg R_PORT_PA_SET 0x0000ff00 --pause
|
||||||
|
0x02000000 --setreg R_PORT_PA_SET 0x0000ffff --pause 0x02000000 --loop
|
||||||
|
0x380020e0 first>
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
You're kidding, right? Check L<AUTHOR|"AUTHOR"> below. The only thing
|
||||||
|
would be the hubris of the author, but that I consider a feature. If
|
||||||
|
you find any other 'features' report them to
|
||||||
|
technology@axis.com. Don't bother the author directly, he is busy
|
||||||
|
playing PlayStation2.
|
||||||
|
|
||||||
|
=head1 COPYING
|
||||||
|
|
||||||
|
Copyright © 1996-2002 Axis Communications AB.
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Written by Ronny Ranerup.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
The fine source, which you can get at http://developer.axis.com.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
.
|
|
@ -0,0 +1,2 @@
|
||||||
|
|
||||||
|
.
|
267
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/CHANGES
Normal file
267
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/CHANGES
Normal file
|
@ -0,0 +1,267 @@
|
||||||
|
@(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/CHANGES,v 1.1 1999/08/26 10:05:17 johana Exp $ (LBL)
|
||||||
|
|
||||||
|
v0.4 Sat Jul 25 12:40:09 PDT 1998
|
||||||
|
|
||||||
|
- Fix endian problem with DLT_NULL devices. From FreeBSD via Bill
|
||||||
|
Fenner (fenner@parc.xerox.com)
|
||||||
|
|
||||||
|
- Fix alignment problem with FDDI under DLPI. This was causing core
|
||||||
|
dumps under Solaris.
|
||||||
|
|
||||||
|
- Added configure options to disable flex and bison. Resulted from a
|
||||||
|
bug report by barnett@grymoire.crd.ge.com (Bruce Barnett). Also added
|
||||||
|
options to disable gcc and to force a particular packet capture type.
|
||||||
|
|
||||||
|
- Added support for Fore ATM interfaces (qaa and fa) under IRIX. Thanks
|
||||||
|
to John Hawkinson (jhawk@mit.edu)
|
||||||
|
|
||||||
|
- Change Linux PPP and SLIP to use DLT_RAW since the kernel does not
|
||||||
|
supply any "link layer" data.
|
||||||
|
|
||||||
|
- Change Linux to use SIOCGIFHWADDR ioctl to determine link layer type.
|
||||||
|
Thanks to Thomas Sailer (sailer@ife.ee.ethz.ch)
|
||||||
|
|
||||||
|
- Change IRIX PPP to use DLT_RAW since the kernel does not supply any
|
||||||
|
"link layer" data.
|
||||||
|
|
||||||
|
- Modified to support the new BSD/OS 2.1 PPP and SLIP link layer header
|
||||||
|
formats.
|
||||||
|
|
||||||
|
- Added some new SGI snoop interface types. Thanks to Steve Alexander
|
||||||
|
(sca@refugee.engr.sgi.com)
|
||||||
|
|
||||||
|
- Fixes for HP-UX 10.20 (which is similar to HP-UX 9). Thanks to
|
||||||
|
Richard Allen (ra@hp.is) and Steinar Haug (sthaug@nethelp.no)
|
||||||
|
|
||||||
|
- Fddi supports broadcast as reported by Jeff Macdonald
|
||||||
|
(jeff@iacnet.com). Also correct ieee802 and arcnet.
|
||||||
|
|
||||||
|
- Determine Linux pcap buffer size at run time or else it might not be
|
||||||
|
big enough for some interface types (e.g. FDDI). Thanks to Jes
|
||||||
|
Sorensen (Jes.Sorensen@cern.ch)
|
||||||
|
|
||||||
|
- Fix some linux alignment problems.
|
||||||
|
|
||||||
|
- Document promisc argument to pcap_open_live(). Reported by Ian Marsh
|
||||||
|
(ianm@sics.se)
|
||||||
|
|
||||||
|
- Support Metricom radio packets under Linux. Thanks to Kevin Lai
|
||||||
|
(laik@gunpowder.stanford.edu)
|
||||||
|
|
||||||
|
- Bind to interface name under Linux to avoid packets from multiple
|
||||||
|
interfaces on multi-homed hosts. Thanks to Kevin Lai
|
||||||
|
(laik@gunpowder.stanford.edu)
|
||||||
|
|
||||||
|
- Change L_SET to SEEK_SET for HP-UX. Thanks to Roland Roberts
|
||||||
|
(rroberts@muller.com)
|
||||||
|
|
||||||
|
- Fixed an uninitialized memory reference found by Kent Vander Velden
|
||||||
|
(graphix@iastate.edu)
|
||||||
|
|
||||||
|
- Fixed lex pattern for IDs to allow leading digits. As reported by
|
||||||
|
Theo de Raadt (deraadt@cvs.openbsd.org)
|
||||||
|
|
||||||
|
- Fixed Linux include file problems when using GNU libc.
|
||||||
|
|
||||||
|
- Ifdef ARPHRD_FDDI since not all versions of the Linux kernel have it.
|
||||||
|
Reported reported by Eric Jacksch (jacksch@tenebris.ca)
|
||||||
|
|
||||||
|
- Fixed bug in pcap_dispatch() that kept it from returning on packet
|
||||||
|
timeouts.
|
||||||
|
|
||||||
|
- Changed ISLOOPBACK() macro when IFF_LOOPBACK isn't available to check
|
||||||
|
for "lo" followed by an eos or digit (newer versions of Linux
|
||||||
|
apparently call the loopback "lo" instead of "lo0").
|
||||||
|
|
||||||
|
- Fixed Linux networking include files to use ints instead of longs to
|
||||||
|
avoid problems with 64 bit longs on the alpha. Thanks to Cristian
|
||||||
|
Gafton (gafton@redhat.com)
|
||||||
|
|
||||||
|
v0.3 Sat Nov 30 20:56:27 PST 1996
|
||||||
|
|
||||||
|
- Added Linux support.
|
||||||
|
|
||||||
|
- Fixed savefile bugs.
|
||||||
|
|
||||||
|
- Solaris x86 fix from Tim Rylance (t.rylance@elsevier.nl)
|
||||||
|
|
||||||
|
- Add support for bpf kernel port filters.
|
||||||
|
|
||||||
|
- Remove duplicate atalk protocol table entry. Thanks to Christian
|
||||||
|
Hopps (chopps@water.emich.edu)
|
||||||
|
|
||||||
|
- Fixed pcap_lookupdev() to ignore nonexistent devices. This was
|
||||||
|
reported to happen under BSD/OS by David Vincenzetti
|
||||||
|
(vince@cryptonet.it)
|
||||||
|
|
||||||
|
- Avoid solaris compiler warnings. Thanks to Bruce Barnett
|
||||||
|
(barnett@grymoire.crd.ge.com)
|
||||||
|
|
||||||
|
v0.2.1 Sun Jul 14 03:02:26 PDT 1996
|
||||||
|
|
||||||
|
- Fixes for HP-UX 10. Thanks in part to to Thomas Wolfram
|
||||||
|
(wolf@prz.tu-berlin.de) and Rick Jones (raj@hpisrdq.cup.hp.com)
|
||||||
|
|
||||||
|
- Added support for SINIX. Thanks to Andrej Borsenkow
|
||||||
|
(borsenkow.msk@sni.de)
|
||||||
|
|
||||||
|
- Fixes for AIX (although this system is not yet supported). Thanks to
|
||||||
|
John Hawkinson (jhawk@mit.edu)
|
||||||
|
|
||||||
|
- Use autoconf's idea of the top level directory in install targets.
|
||||||
|
Thanks to John Hawkinson.
|
||||||
|
|
||||||
|
- Add missing autoconf packet capture result message. Thanks to Bill
|
||||||
|
Fenner (fenner@parc.xerox.com)
|
||||||
|
|
||||||
|
- Fixed padding problems in the pf module.
|
||||||
|
|
||||||
|
- Fixed some more alignment problems on the alpha.
|
||||||
|
|
||||||
|
- Added explicit netmask support. Thanks to Steve Nuchia
|
||||||
|
(steve@research.oknet.com)
|
||||||
|
|
||||||
|
- Fixed to handle raw ip addresses such as 0.0.0.1 without "left
|
||||||
|
justifing"
|
||||||
|
|
||||||
|
- Add "sca" keyword (for DEC cluster services) as suggested by Terry
|
||||||
|
Kennedy (terry@spcvxa.spc.edu)
|
||||||
|
|
||||||
|
- Add "atalk" keyword as suggested by John Hawkinson.
|
||||||
|
|
||||||
|
- Add "igrp" keyword.
|
||||||
|
|
||||||
|
- Fixed HID definition in grammar.y to be a string, not a value.
|
||||||
|
|
||||||
|
- Use $CC when checking gcc version. Thanks to Carl Lindberg
|
||||||
|
(carl_lindberg@blacksmith.com)
|
||||||
|
|
||||||
|
- Removed obsolete reference to pcap_immediate() from the man page.
|
||||||
|
Michael Stolarchuk (mts@terminator.rs.itd.umich.edu)
|
||||||
|
|
||||||
|
- DLT_NULL has a 4 byte family header. Thanks to Jeffrey Honig
|
||||||
|
(jch@bsdi.com)
|
||||||
|
|
||||||
|
v0.2 Sun Jun 23 02:28:42 PDT 1996
|
||||||
|
|
||||||
|
- Add support for HP-UX. Resulted from code contributed by Tom Murray
|
||||||
|
(tmurray@hpindck.cup.hp.com) and Philippe-Andri Prindeville
|
||||||
|
(philipp@res.enst.fr)
|
||||||
|
|
||||||
|
- Update INSTALL with a reminder to install include files. Thanks to
|
||||||
|
Mark Andrews (mandrews@aw.sgi.com)
|
||||||
|
|
||||||
|
- Fix bpf compiler alignment bug on the alpha.
|
||||||
|
|
||||||
|
- Use autoconf to detect architectures that can't handle misaligned
|
||||||
|
accesses.
|
||||||
|
|
||||||
|
- Added loopback support for snoop. Resulted from report Steve
|
||||||
|
Alexander (sca@engr.sgi.com)
|
||||||
|
|
||||||
|
v0.1 Fri Apr 28 18:11:03 PDT 1995
|
||||||
|
|
||||||
|
- Fixed compiler and optimizer bugs. The BPF filter engine uses unsigned
|
||||||
|
comparison operators, while the code generator and optimizer assumed
|
||||||
|
signed semantics in several places. Thanks to Charlie Slater
|
||||||
|
(cslater@imatek.com) for pointing this out.
|
||||||
|
|
||||||
|
- Removed FDDI ifdef's, they aren't really needed. Resulted from report
|
||||||
|
by Gary Veum (veum@boa.gsfc.nasa.gov).
|
||||||
|
|
||||||
|
- Add pcap-null.c which allows offline use of libpcap on systems that
|
||||||
|
don't support live package capture. This feature resulting from a
|
||||||
|
request from Jan van Oorschot (j.p.m.voorschot@et.tudelft.nl).
|
||||||
|
|
||||||
|
- Make bpf_compile() reentrant. Fix thanks to Pascal Hennequin
|
||||||
|
(Pascal.Hennequin@hugo.int-evry.fr).
|
||||||
|
|
||||||
|
- Port to GNU autoconf.
|
||||||
|
|
||||||
|
- Fix pcap-dlpi.c to work with isdn. Resulted from report by Flemming
|
||||||
|
Johansen (fsj@csd.cri.dk).
|
||||||
|
|
||||||
|
- Handle multi-digit interface unit numbers (aka ppa's) under dlpi.
|
||||||
|
Resulted from report by Daniel Ehrlich (ehrlich@cse.psu.edu).
|
||||||
|
|
||||||
|
- Fix pcap-dlpi.c to work in non-promiscuous mode. Resulted from report
|
||||||
|
by Jeff Murphy (jcmurphy@acsu.buffalo.edu).
|
||||||
|
|
||||||
|
- Add support for "long jumps". Thanks to Jeffrey Mogul
|
||||||
|
(mogul@pa.dec.com).
|
||||||
|
|
||||||
|
- Fix minor problems when compiling with BDEBUG as noticed by Scott
|
||||||
|
Bertilson (scott@unet.umn.edu).
|
||||||
|
|
||||||
|
- Declare sys_errlist "const char *const" to avoid problems under
|
||||||
|
FreeBSD. Resulted from report by jher@eden.com.
|
||||||
|
|
||||||
|
v0.0.6 Fri Apr 28 04:07:13 PDT 1995
|
||||||
|
|
||||||
|
- Add missing variable declaration missing from 0.0.6
|
||||||
|
|
||||||
|
v0.0.5 Fri Apr 28 00:22:21 PDT 1995
|
||||||
|
|
||||||
|
- Workaround for problems when pcap_read() returns 0 due to the timeout
|
||||||
|
expiring.
|
||||||
|
|
||||||
|
v0.0.4 Thu Apr 20 20:41:48 PDT 1995
|
||||||
|
|
||||||
|
- Change configuration to not use gcc v2 flags with gcc v1.
|
||||||
|
|
||||||
|
- Fixed a bug in pcap_next(); if pcap_dispatch() returns 0, pcap_next()
|
||||||
|
should also return 0. Thanks to Richard Stevens (rstevens@noao.edu).
|
||||||
|
|
||||||
|
- Fixed configure to test for snoop before dlpi to avoid problems under
|
||||||
|
IRIX 5. Thanks to J. Eric Townsend (jet@abulafia.genmagic.com).
|
||||||
|
|
||||||
|
- Hack around deficiency in Ultrix's make.
|
||||||
|
|
||||||
|
- Fix two bugs related to the Solaris pre-5.3.2 bufmod bug; handle
|
||||||
|
savefiles that have more than snapshot bytes of data in them (so we
|
||||||
|
can read old savefiles) and avoid writing such files.
|
||||||
|
|
||||||
|
- Added checkioctl which is used with gcc to check that the
|
||||||
|
"fixincludes" script has been run.
|
||||||
|
|
||||||
|
v0.0.3 Tue Oct 18 18:13:46 PDT 1994
|
||||||
|
|
||||||
|
- Fixed configure to test for snoop before dlpi to avoid problems under
|
||||||
|
IRIX 5. Thanks to J. Eric Townsend (jet@abulafia.genmagic.com).
|
||||||
|
|
||||||
|
v0.0.2 Wed Oct 12 20:56:37 PDT 1994
|
||||||
|
|
||||||
|
- Implement timeout in the dlpi pcap_open_live(). Thanks to Richard
|
||||||
|
Stevens.
|
||||||
|
|
||||||
|
- Determine pcap link type from dlpi media type. Resulted from report
|
||||||
|
by Mahesh Jethanandani (mahesh@npix.com).
|
||||||
|
|
||||||
|
v0.0.1 Fri Jun 24 14:50:57 PDT 1994
|
||||||
|
|
||||||
|
- Fixed bug in nit_setflags() in pcap-snit.c. The streams ioctl timeout
|
||||||
|
wasn't being initialized sometimes resulting in an "NIOCSFLAGS:
|
||||||
|
Invalid argument" error under OSF/1. Reported by Matt Day
|
||||||
|
(mday@artisoft.com) and Danny Mitzel (dmitzel@whitney.hitc.com).
|
||||||
|
|
||||||
|
- Turn on FDDI support by default.
|
||||||
|
|
||||||
|
v0.0 Mon Jun 20 19:20:16 PDT 1994
|
||||||
|
|
||||||
|
- Initial release.
|
||||||
|
|
||||||
|
- Fixed bug with greater/less keywords, reported by Mark Andrews
|
||||||
|
(mandrews@alias.com).
|
||||||
|
|
||||||
|
- Fix bug where '|' was defined as BPF_AND instead of BPF_OR, reported
|
||||||
|
by Elan Amir (elan@leeb.cs.berkeley.edu).
|
||||||
|
|
||||||
|
- Machines with little-endian byte ordering are supported thanks to
|
||||||
|
Jeff Mogul.
|
||||||
|
|
||||||
|
- Add hack for version 2.3 savefiles which don't have caplen and len
|
||||||
|
swapped thanks to Vern Paxson.
|
||||||
|
|
||||||
|
- Added "&&" and "||" aliases for "and" and "or" thanks to Vern Paxson.
|
||||||
|
|
||||||
|
- Added length, inbound and outbound keywords.
|
50
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/FILES
Normal file
50
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/FILES
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
CHANGES
|
||||||
|
FILES
|
||||||
|
INSTALL
|
||||||
|
Makefile.in
|
||||||
|
README
|
||||||
|
SUNOS4
|
||||||
|
VERSION
|
||||||
|
aclocal.m4
|
||||||
|
bpf/net/bpf.h
|
||||||
|
bpf/net/bpf_filter.c
|
||||||
|
bpf_image.c
|
||||||
|
config.guess
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
configure.in
|
||||||
|
etherent.c
|
||||||
|
ethertype.h
|
||||||
|
gencode.c
|
||||||
|
gencode.h
|
||||||
|
grammar.y
|
||||||
|
inet.c
|
||||||
|
install-sh
|
||||||
|
lbl/gnuc.h
|
||||||
|
lbl/os-solaris2.h
|
||||||
|
lbl/os-sunos4.h
|
||||||
|
lbl/os-ultrix4.h
|
||||||
|
linux-include/netinet/if_ether.h
|
||||||
|
linux-include/netinet/ip_var.h
|
||||||
|
mkdep
|
||||||
|
nametoaddr.c
|
||||||
|
optimize.c
|
||||||
|
pcap-bpf.c
|
||||||
|
pcap-dlpi.c
|
||||||
|
pcap-enet.c
|
||||||
|
pcap-int.h
|
||||||
|
pcap-linux.c
|
||||||
|
pcap-namedb.h
|
||||||
|
pcap-nit.c
|
||||||
|
pcap-nit.h
|
||||||
|
pcap-null.c
|
||||||
|
pcap-pf.c
|
||||||
|
pcap-pf.h
|
||||||
|
pcap-snit.c
|
||||||
|
pcap-snoop.c
|
||||||
|
pcap.3
|
||||||
|
pcap.c
|
||||||
|
pcap.h
|
||||||
|
ppp.h
|
||||||
|
savefile.c
|
||||||
|
scanner.l
|
328
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/INSTALL
Normal file
328
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/INSTALL
Normal file
|
@ -0,0 +1,328 @@
|
||||||
|
@(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/INSTALL,v 1.1 1999/08/26 10:05:18 johana Exp $ (LBL)
|
||||||
|
|
||||||
|
To build libpcap, first customize any paths in Makefile.in, then run
|
||||||
|
"./configure" (a shell script). The configure script will determine
|
||||||
|
your system attributes and generate an appropriate Makefile from
|
||||||
|
Makefile.in. Next run "make". If everything goes well you can su to
|
||||||
|
root and run "make install", "make install-incl" and "make
|
||||||
|
install-man". However, you need not install libpcap if you just want to
|
||||||
|
build tcpdump; just make sure the tcpdump and libpcap directory trees
|
||||||
|
have the same parent directory.
|
||||||
|
|
||||||
|
If configure says:
|
||||||
|
|
||||||
|
configure: warning: cannot determine packet capture interface
|
||||||
|
configure: warning: (see INSTALL for more info)
|
||||||
|
|
||||||
|
then your system either does not support packet capture or your system
|
||||||
|
does support packet capture but libpcap does not support that
|
||||||
|
particular type. (If you have HP-UX, see below.) If your system uses a
|
||||||
|
packet capture not supported by libpcap, please send us patches; don't
|
||||||
|
forget to include an autoconf fragment suitable for use in
|
||||||
|
configure.in.
|
||||||
|
|
||||||
|
It is possible to override the default packet capture type, although
|
||||||
|
the circumstance where this works are limited. For example if you have
|
||||||
|
installed bpf under SunOS 4 and wish to build a snit libpcap:
|
||||||
|
|
||||||
|
./configure --with-pcap=snit
|
||||||
|
|
||||||
|
Another example is to force a supported packet capture type in the case
|
||||||
|
where the configure scripts fails to detect it.
|
||||||
|
|
||||||
|
You will need an ANSI C compiler to build libpcap. The configure script
|
||||||
|
will abort if your compiler is not ANSI compliant. If this happens, use
|
||||||
|
the GNU C compiler, available via anonymous ftp:
|
||||||
|
|
||||||
|
ftp://prep.ai.mit.edu/pub/gnu/gcc-*.tar.gz
|
||||||
|
|
||||||
|
Note well: If you use gcc, you may need to run its "fixincludes"
|
||||||
|
script. Running fixincludes is not required with later versions of gcc
|
||||||
|
and in some cases (e.g. Solaris 2.5) causes problems when run. The
|
||||||
|
configure script will abort with:
|
||||||
|
|
||||||
|
checking for ANSI ioctl definitions... yes
|
||||||
|
configure: error: see the INSTALL for more info
|
||||||
|
|
||||||
|
if it detects if the fixincludes needs to be run. If the fixincludes
|
||||||
|
test in configure passes, you're probably ok.
|
||||||
|
|
||||||
|
If you use flex, you must use version 2.4.6 or higher. The configure
|
||||||
|
script automatically detects the version of flex and will not use it
|
||||||
|
unless it is new enough. You can use "flex -V" to see what version you
|
||||||
|
have (unless it's really old). The current version of flex is available
|
||||||
|
via anonymous ftp:
|
||||||
|
|
||||||
|
ftp://ftp.ee.lbl.gov/flex-*.tar.Z
|
||||||
|
|
||||||
|
As of this writing, the current version is 2.5.4.
|
||||||
|
|
||||||
|
If you use bison, you must use flex (and visa versa). The configure
|
||||||
|
script automatically falls back to lex and yacc if both flex and bison
|
||||||
|
are not found.
|
||||||
|
|
||||||
|
Sometimes the stock C compiler does not interact well with flex and
|
||||||
|
bison. The list of problems includes undefined references for alloca.
|
||||||
|
You can get around this by installing gcc or manually disabling flex
|
||||||
|
and bison with:
|
||||||
|
|
||||||
|
./configure --without-flex --without-bison
|
||||||
|
|
||||||
|
If your system only has AT&T lex, this is okay unless your libpcap
|
||||||
|
program uses other lex/yacc generated code. (Although it's possible to
|
||||||
|
map the yy* identifiers with a script, we use flex and bison so we
|
||||||
|
don't feel this is necessary.)
|
||||||
|
|
||||||
|
Some systems support the Berkeley Packet Filter natively; for example
|
||||||
|
out of the box OSF and BSD/OS have bpf. If your system does not support
|
||||||
|
bpf, you will need to pick up:
|
||||||
|
|
||||||
|
ftp://ftp.ee.lbl.gov/bpf-*.tar.Z
|
||||||
|
|
||||||
|
Note well: you MUST have kernel source for your operating system in
|
||||||
|
order to install bpf. An exception is SunOS 4; the bpf distribution
|
||||||
|
includes replacement kernel objects for some of the standard SunOS 4
|
||||||
|
network device drivers. See the bpf INSTALL document for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
If you use Solaris, there is a bug with bufmod(7) that is fixed in
|
||||||
|
Solaris 2.3.2 (aka SunOS 5.3.2). Setting a snapshot length with the
|
||||||
|
broken bufmod(7) results in data be truncated from the FRONT of the
|
||||||
|
packet instead of the end. The work around is to not set a snapshot
|
||||||
|
length but this results in performance problems since the entire packet
|
||||||
|
is copied to user space. If you must run an older version of Solaris,
|
||||||
|
there is a patch available from Sun; ask for bugid 1149065. After
|
||||||
|
installing the patch, use "setenv BUFMOD_FIXED" to enable use of
|
||||||
|
bufmod(7). However, we recommend you run a more current release of
|
||||||
|
Solaris.
|
||||||
|
|
||||||
|
If you use the SPARCompiler, you must be careful to not use the
|
||||||
|
/usr/ucb/cc interface. If you do, you will get bogus warnings and
|
||||||
|
perhaps errors. Either make sure your path has /opt/SUNWspro/bin
|
||||||
|
before /usr/ucb or else:
|
||||||
|
|
||||||
|
setenv CC /opt/SUNWspro/bin/cc
|
||||||
|
|
||||||
|
before running configure. (You might have to do a "make distclean"
|
||||||
|
if you already ran configure once).
|
||||||
|
|
||||||
|
Also note that "make depend" won't work; while all of the known
|
||||||
|
universe uses -M, the SPARCompiler uses -xM to generate makefile
|
||||||
|
dependencies.
|
||||||
|
|
||||||
|
If you are trying to do packet capture with a FORE ATM card, you may or
|
||||||
|
may not be able to. They usually only release their driver in object
|
||||||
|
code so unless their driver supports packet capture, there's not much
|
||||||
|
libpcap can do.
|
||||||
|
|
||||||
|
If you get an error like:
|
||||||
|
|
||||||
|
tcpdump: recv_ack: bind error 0x???
|
||||||
|
|
||||||
|
when using DLPI, look for the DL_ERROR_ACK error return values, usually
|
||||||
|
in /usr/include/sys/dlpi.h, and find the corresponding value.
|
||||||
|
|
||||||
|
Under OSF, packet capture must be enabled before it can be used. For
|
||||||
|
instructions on how to enable packet filter support, see:
|
||||||
|
|
||||||
|
ftp://ftp.digital.com/pub/Digital/dec-faq/Digital-UNIX
|
||||||
|
|
||||||
|
Once you enable packet filter support, your OSF system will support bpf
|
||||||
|
natively.
|
||||||
|
|
||||||
|
Under Ultrix, packet capture must be enabled before it can be used. For
|
||||||
|
instructions on how to enable packet filter support, see:
|
||||||
|
|
||||||
|
ftp://ftp.digital.com/pub/Digital/dec-faq/ultrix
|
||||||
|
|
||||||
|
If you use HP-UX, you must have at least version 9 and either the
|
||||||
|
version of cc that supports ANSI C (cc -Aa) or else use the GNU C
|
||||||
|
compiler. You must also buy the optional streams package. If you don't
|
||||||
|
have:
|
||||||
|
|
||||||
|
/usr/include/sys/dlpi.h
|
||||||
|
/usr/include/sys/dlpi_ext.h
|
||||||
|
|
||||||
|
then you don't have the streams package. In addition, we believe you
|
||||||
|
need to install the "9.X LAN and DLPI drivers cumulative" patch
|
||||||
|
(PHNE_6855) to make the version 9 DLPI work with libpcap.
|
||||||
|
|
||||||
|
It's been reported that the DLPI streams package is standard starting
|
||||||
|
with HP-UX 10.
|
||||||
|
|
||||||
|
The HP implementation of DLPI is a little bit eccentric. Unlike
|
||||||
|
Solaris, you must attach /dev/dlpi instead of the specific /dev/*
|
||||||
|
network pseudo device entry in order to capture packets. The ppa is
|
||||||
|
based on the ifnet "index" number. Under HP-UX 9, it is necessary to
|
||||||
|
read /dev/kmem and the kernel symbol file (/hp-ux). Under HP-UX 10,
|
||||||
|
dlpi can provide information for determining the ppa. It does not seem
|
||||||
|
to be possible to trace the loopback interface. Unlike other DLPI
|
||||||
|
implementations, PHYS implies MULTI and SAP and you get an error if you
|
||||||
|
try to enable more than one promiscous more than one promiscuous mode
|
||||||
|
at a time. Finally, testing shows that there can't be more than one
|
||||||
|
simultaneous dlpi user per network interface and you cannot capture
|
||||||
|
outbound packets.
|
||||||
|
|
||||||
|
If you use Linux, this version of libpcap is known to compile and run
|
||||||
|
under Red Hat 4.0 with the 2.0.25 kernel. It may work with earlier 2.X
|
||||||
|
versions but is guaranteed not to work with 1.X kernels. Running more
|
||||||
|
than one libpcap program at a time can cause problems since promiscuous
|
||||||
|
mode is implemented by twiddlin the interface flags from the libpcap
|
||||||
|
application. Also, packet timestamps aren't very good. This appears to
|
||||||
|
be due to haphazard handling of the timestamp in the kernel.
|
||||||
|
|
||||||
|
Note well: there is rumoured to be a version of tcpdump floating around
|
||||||
|
called 3.0.3 that includes libpcap and is supposed to support Linux.
|
||||||
|
You should be advised that the Network Research Group at LBNL never
|
||||||
|
generated a release with this version number. We note with interest
|
||||||
|
that a standard cracker trick to get people to install trojans is to
|
||||||
|
distribute bogus packages that have a version number higher than the
|
||||||
|
current release. We also note with annoyance that 90% of the Linux
|
||||||
|
related bug reports we get are due to changes made to unofficial
|
||||||
|
versions of our page. If you are having trouble but aren't using a
|
||||||
|
version that came from ftp.ee.lbl.gov, please try that before
|
||||||
|
submitting a bug report!
|
||||||
|
|
||||||
|
If you use AIX, you may not be able to build libpcap from this release.
|
||||||
|
Although AIX 4 ships with tcpdump, it is an old version that predates
|
||||||
|
libpcap. We do not have an AIX system in house so it's impossible for
|
||||||
|
us to test AIX patches submitted to us. We are told that you must link
|
||||||
|
against /lib/pse.exp, that you must use AIX cc or a GNU C compiler
|
||||||
|
newer than 2.7.2 and that you may need to run strload before running a
|
||||||
|
libpcap application. Also, it may be necessary to run the configure
|
||||||
|
script as root in order for it to detect that bpf is available. Another
|
||||||
|
workaround is to use:
|
||||||
|
|
||||||
|
./configure --with-pcap=bpf
|
||||||
|
|
||||||
|
If you use NeXTSTEP, you will not be able to build libpcap from this
|
||||||
|
release. We hope to support this operating system in some future
|
||||||
|
release of libpcap.
|
||||||
|
|
||||||
|
If you use SINIX, you should be able to build libpcap from this
|
||||||
|
release. It is known to compile and run on SINIX-Y/N 5.42 with the C-DS
|
||||||
|
V1.0 or V1.1 compiler. But note that in some releases of SINIX, yacc
|
||||||
|
emits incorrect code; if grammar.y fails to compile, change every
|
||||||
|
occurence of:
|
||||||
|
|
||||||
|
#ifdef YYDEBUG
|
||||||
|
|
||||||
|
to:
|
||||||
|
#if YYDEBUG
|
||||||
|
|
||||||
|
Another workaround is to use flex and bison.
|
||||||
|
|
||||||
|
If you use SCO, you might have trouble building libpcap from this
|
||||||
|
release. We do not have a machine running SCO and have not had reports
|
||||||
|
of anyone successfully building on it. Since SCO apparently supports
|
||||||
|
dlpi, it's possible the current version works. Meanwhile, sco provides
|
||||||
|
a tcpdump binary as part of their "Network/Security Tools" package:
|
||||||
|
|
||||||
|
http://www.sco.com/technology/internet/goodies/#SECURITY
|
||||||
|
|
||||||
|
There is also a README that explains how to enable packet capture.
|
||||||
|
|
||||||
|
If you use UnixWare, you will not be able to build libpcap from this
|
||||||
|
release. We hope to support this operating system in some future
|
||||||
|
release of libpcap. Meanwhile, there appears to be an UnixWare port of
|
||||||
|
libpcap 0.0 (and tcpdump 3.0) in:
|
||||||
|
|
||||||
|
ftp://ftp1.freebird.org/pub/mirror/freebird/internet/systools/
|
||||||
|
|
||||||
|
UnixWare appears to use a hacked version of DLPI.
|
||||||
|
|
||||||
|
If linking tcpdump fails with "Undefined: _alloca" when using bison on
|
||||||
|
a Sun4, your version of bison is broken. In any case version 1.16 or
|
||||||
|
higher is recommended (1.14 is known to cause problems 1.16 is known to
|
||||||
|
work). Either pick up a current version from:
|
||||||
|
|
||||||
|
ftp://prep.ai.mit.edu/pub/gnu/bison.tar.gz
|
||||||
|
|
||||||
|
or hack around it by inserting the lines:
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define alloca __builtin_alloca
|
||||||
|
#else
|
||||||
|
#ifdef sparc
|
||||||
|
#include <alloca.h>
|
||||||
|
#else
|
||||||
|
char *alloca ();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
right after the (100 line!) GNU license comment in bison.simple, remove
|
||||||
|
grammar.[co] and fire up make again.
|
||||||
|
|
||||||
|
If you use SunOS 4, your kernel must support streams NIT. If you run a
|
||||||
|
libpcap program and it dies with:
|
||||||
|
|
||||||
|
/dev/nit: No such device
|
||||||
|
|
||||||
|
You must add streams NIT support to your kernel configuration, run
|
||||||
|
config and boot the new kernel.
|
||||||
|
|
||||||
|
If you are running a version of SunOS earlier than 4.1, you will need
|
||||||
|
to replace the Sun supplied /sys/sun{3,4,4c}/OBJ/nit_if.o with the
|
||||||
|
appropriate version from this distribution's SUNOS4 subdirectory and
|
||||||
|
build a new kernel:
|
||||||
|
|
||||||
|
nit_if.o.sun3-sunos4 (any flavor of sun3)
|
||||||
|
nit_if.o.sun4c-sunos4.0.3c (SS1, SS1+, IPC, SLC, etc.)
|
||||||
|
nit_if.o.sun4-sunos4 (Sun4's not covered by
|
||||||
|
nit_if.o.sun4c-sunos4.0.3c)
|
||||||
|
|
||||||
|
These nit replacements fix a bug that makes nit essentially unusable in
|
||||||
|
pre-SunOS 4.1. In addition, our sun4c-sunos4.0.3c nit gives you
|
||||||
|
timestamps to the resolution of the SS-1 clock (1 us) rather than the
|
||||||
|
lousy 20ms timestamps Sun gives you (tcpdump will print out the full
|
||||||
|
timestamp resolution if it finds it's running on a SS-1).
|
||||||
|
|
||||||
|
FILES
|
||||||
|
-----
|
||||||
|
CHANGES - description of differences between releases
|
||||||
|
FILES - list of files exported as part of the distribution
|
||||||
|
INSTALL - this file
|
||||||
|
Makefile.in - compilation rules (input to the configure script)
|
||||||
|
README - description of distribution
|
||||||
|
SUNOS4 - pre-SunOS 4.1 replacement kernel nit modules
|
||||||
|
VERSION - version of this release
|
||||||
|
aclocal.m4 - autoconf macros
|
||||||
|
bpf/net - copies of bpf_filter.c and bpf.h
|
||||||
|
bpf_filter.c - symlink to bpf/net/bpf_filter.c
|
||||||
|
bpf_image.c - bpf disassembly routine
|
||||||
|
config.guess - autoconf support
|
||||||
|
config.sub - autoconf support
|
||||||
|
configure - configure script (run this first)
|
||||||
|
configure.in - configure script source
|
||||||
|
etherent.c - /etc/ethers support routines
|
||||||
|
ethertype.h - ethernet protocol types and names definitions
|
||||||
|
gencode.c - bpf code generation routines
|
||||||
|
gencode.h - bpf code generation definitions
|
||||||
|
grammar.y - filter string grammar
|
||||||
|
inet.c - network routines
|
||||||
|
install-sh - BSD style install script
|
||||||
|
lbl/gnuc.h - gcc macros and defines
|
||||||
|
lbl/os-*.h - os dependent defines and prototypes
|
||||||
|
linux-include/* - network include files missing on Linux
|
||||||
|
mkdep - construct Makefile dependency list
|
||||||
|
nametoaddr.c - hostname to address routines
|
||||||
|
net - symlink to bpf/net
|
||||||
|
optimize.c - bpf optimization routines
|
||||||
|
pcap-bpf.c - BSD Packet Filter support
|
||||||
|
pcap-dlpi.c - Data Link Provider Interface support
|
||||||
|
pcap-enet.c - enet support
|
||||||
|
pcap-int.h - internal libpcap definitions
|
||||||
|
pcap-namedb.h - public libpcap name database definitions
|
||||||
|
pcap-nit.c - Network Interface Tap support
|
||||||
|
pcap-nit.h - Network Interface Tap definitions
|
||||||
|
pcap-null.c - dummy monitor support (allows offline use of libpcap)
|
||||||
|
pcap-pf.c - Packet Filter support
|
||||||
|
pcap-pf.h - Packet Filter definitions
|
||||||
|
pcap-snit.c - Streams based Network Interface Tap support
|
||||||
|
pcap-snoop.c - Snoop network monitoring support
|
||||||
|
pcap.3 - manual entry
|
||||||
|
pcap.c - pcap utility routines
|
||||||
|
pcap.h - public libpcap definitions
|
||||||
|
ppp.h - Point to Point Protocol definitions
|
||||||
|
savefile.c - offline support
|
||||||
|
scanner.l - filter string scanner
|
173
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/Makefile
Normal file
173
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/Makefile
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
# Generated automatically from Makefile.in by configure.
|
||||||
|
# $Id: Makefile.in,v 1.7 2002/09/18 15:29:46 pkj Exp $
|
||||||
|
# Copyright (c) 1993, 1994, 1995, 1996
|
||||||
|
# The Regents of the University of California. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that: (1) source code distributions
|
||||||
|
# retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
# distributions including binary code include the above copyright notice and
|
||||||
|
# this paragraph in its entirety in the documentation or other materials
|
||||||
|
# provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
# features or use of this software display the following acknowledgement:
|
||||||
|
# ``This product includes software developed by the University of California,
|
||||||
|
# Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
# the University nor the names of its contributors may be used to endorse
|
||||||
|
# or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# @(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/Makefile.in,v 1.7 2002/09/18 15:29:46 pkj Exp $ (LBL)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Various configurable paths (remember to edit Makefile.in, not Makefile)
|
||||||
|
#
|
||||||
|
|
||||||
|
# Top level hierarchy
|
||||||
|
prefix = /usr/local
|
||||||
|
exec_prefix = ${prefix}
|
||||||
|
# Pathname of directory to install the include files
|
||||||
|
INCLDEST = ${prefix}/include
|
||||||
|
# Pathname of directory to install the library
|
||||||
|
LIBDEST = ${exec_prefix}/lib
|
||||||
|
# Pathname of directory to install the man page
|
||||||
|
MANDEST = ${prefix}/man
|
||||||
|
|
||||||
|
# VPATH
|
||||||
|
srcdir = .
|
||||||
|
|
||||||
|
#
|
||||||
|
# You shouldn't need to edit anything below.
|
||||||
|
#
|
||||||
|
CFLAGS =
|
||||||
|
CC = gcc
|
||||||
|
AR = ar
|
||||||
|
INSTALL = install_elinux -p
|
||||||
|
RANLIB = ranlib
|
||||||
|
|
||||||
|
prefix =
|
||||||
|
AXIS_USABLE_LIBS = UCLIBC GLIBC
|
||||||
|
-include $(AXIS_TOP_DIR)/tools/build/Rules.axis
|
||||||
|
ifndef AXIS_BUILDTYPE
|
||||||
|
prefix = /usr/local
|
||||||
|
endif
|
||||||
|
|
||||||
|
CCOPT = -O2
|
||||||
|
INCLS = -I. -Ilinux-include
|
||||||
|
DEFS = -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1
|
||||||
|
|
||||||
|
# Standard CFLAGS
|
||||||
|
CFLAGS += $(CCOPT) $(INCLS) $(DEFS)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Flex and bison allow you to specify the prefixes of the global symbols
|
||||||
|
# used by the generated parser. This allows programs to use lex/yacc
|
||||||
|
# and link against libpcap. If you don't have flex or bison, get them.
|
||||||
|
#
|
||||||
|
LEX = flex -Ppcap_
|
||||||
|
YACC = bison -y -p pcap_
|
||||||
|
|
||||||
|
# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
|
||||||
|
# Also, gcc does not remove the .o before forking 'as', which can be a
|
||||||
|
# problem if you don't own the file but can write to the directory.
|
||||||
|
.c.o:
|
||||||
|
@rm -f $@
|
||||||
|
$(CC) $(CFLAGS) -c $(srcdir)/$*.c
|
||||||
|
|
||||||
|
PSRC = pcap-linux.c
|
||||||
|
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c \
|
||||||
|
etherent.c savefile.c bpf_filter.c bpf_image.c
|
||||||
|
GENSRC = scanner.c grammar.c version.c
|
||||||
|
|
||||||
|
SRC = $(PSRC) $(CSRC) $(GENSRC)
|
||||||
|
|
||||||
|
# We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
|
||||||
|
# hack the extra indirection
|
||||||
|
OBJ = $(PSRC:.c=.o) $(CSRC:.c=.o) $(GENSRC:.c=.o)
|
||||||
|
HDR = pcap.h pcap-int.h pcap-namedb.h pcap-nit.h pcap-pf.h \
|
||||||
|
ethertype.h gencode.h gnuc.h
|
||||||
|
GENHDR = \
|
||||||
|
tokdefs.h
|
||||||
|
|
||||||
|
TAGHDR = \
|
||||||
|
bpf/net/bpf.h
|
||||||
|
|
||||||
|
TAGFILES = \
|
||||||
|
$(SRC) $(HDR) $(TAGHDR)
|
||||||
|
|
||||||
|
CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
|
||||||
|
|
||||||
|
all: libpcap.a
|
||||||
|
|
||||||
|
libpcap.a: $(OBJ)
|
||||||
|
@rm -f $@
|
||||||
|
$(AR) rc $@ $(OBJ)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
scanner.c: $(srcdir)/scanner.l
|
||||||
|
@rm -f $@
|
||||||
|
$(LEX) -t $< > $$$$.$@; mv $$$$.$@ $@
|
||||||
|
|
||||||
|
scanner.o: scanner.c tokdefs.h
|
||||||
|
tokdefs.h: grammar.c
|
||||||
|
grammar.c: $(srcdir)/grammar.y
|
||||||
|
@rm -f grammar.c tokdefs.h
|
||||||
|
$(YACC) -d $<
|
||||||
|
mv y.tab.c grammar.c
|
||||||
|
mv y.tab.h tokdefs.h
|
||||||
|
|
||||||
|
grammar.o: grammar.c
|
||||||
|
@rm -f $@
|
||||||
|
$(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c
|
||||||
|
|
||||||
|
version.o: version.c
|
||||||
|
version.c: $(srcdir)/VERSION
|
||||||
|
@rm -f $@
|
||||||
|
sed -e 's/.*/char pcap_version[] = "&";/' $(srcdir)/VERSION > $@
|
||||||
|
|
||||||
|
install: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin libpcap.a $(DESTDIR)$(LIBDEST)/libpcap.a
|
||||||
|
$(RANLIB) $(DESTDIR)$(LIBDEST)/libpcap.a
|
||||||
|
|
||||||
|
install-incl: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/pcap.h
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap-namedb.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/pcap-namedb.h
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/net/bpf.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/net/bpf.h
|
||||||
|
|
||||||
|
install-man: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap.3 \
|
||||||
|
$(DESTDIR)$(MANDEST)/man3/pcap.3
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(CLEANFILES)
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
|
||||||
|
gnuc.h os-proto.h bpf_filter.c net
|
||||||
|
|
||||||
|
tags: $(TAGFILES)
|
||||||
|
ctags -wtd $(TAGFILES)
|
||||||
|
|
||||||
|
tar: force
|
||||||
|
@cwd=`pwd` ; dir=`basename $$cwd` ; name=libpcap-`cat VERSION` ; \
|
||||||
|
list="" ; tar="tar chFFf" ; \
|
||||||
|
for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
|
||||||
|
echo \
|
||||||
|
"rm -f ../$$name; ln -s $$dir ../$$name" ; \
|
||||||
|
rm -f ../$$name; ln -s $$dir ../$$name ; \
|
||||||
|
echo \
|
||||||
|
"(cd .. ; $$tar - [lots of files]) | compress > /tmp/$$name.tar.Z" ; \
|
||||||
|
(cd .. ; $$tar - $$list) | compress > /tmp/$$name.tar.Z ; \
|
||||||
|
echo \
|
||||||
|
"rm -f ../$$name" ; \
|
||||||
|
rm -f ../$$name
|
||||||
|
|
||||||
|
force: /tmp
|
||||||
|
depend: $(GENSRC) force
|
||||||
|
./mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
|
|
@ -0,0 +1,2 @@
|
||||||
|
conf:
|
||||||
|
./configure
|
|
@ -0,0 +1,173 @@
|
||||||
|
# $Id: Makefile.in,v 1.7 2002/09/18 15:29:46 pkj Exp $
|
||||||
|
# Copyright (c) 1993, 1994, 1995, 1996
|
||||||
|
# The Regents of the University of California. All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that: (1) source code distributions
|
||||||
|
# retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
# distributions including binary code include the above copyright notice and
|
||||||
|
# this paragraph in its entirety in the documentation or other materials
|
||||||
|
# provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
# features or use of this software display the following acknowledgement:
|
||||||
|
# ``This product includes software developed by the University of California,
|
||||||
|
# Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
# the University nor the names of its contributors may be used to endorse
|
||||||
|
# or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
#
|
||||||
|
# @(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/Makefile.in,v 1.7 2002/09/18 15:29:46 pkj Exp $ (LBL)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Various configurable paths (remember to edit Makefile.in, not Makefile)
|
||||||
|
#
|
||||||
|
|
||||||
|
# Top level hierarchy
|
||||||
|
prefix = @prefix@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
# Pathname of directory to install the include files
|
||||||
|
INCLDEST = @includedir@
|
||||||
|
# Pathname of directory to install the library
|
||||||
|
LIBDEST = @libdir@
|
||||||
|
# Pathname of directory to install the man page
|
||||||
|
MANDEST = @mandir@
|
||||||
|
|
||||||
|
# VPATH
|
||||||
|
srcdir = @srcdir@
|
||||||
|
VPATH = @srcdir@
|
||||||
|
|
||||||
|
#
|
||||||
|
# You shouldn't need to edit anything below.
|
||||||
|
#
|
||||||
|
CFLAGS =
|
||||||
|
CC = @CC@
|
||||||
|
AR = ar
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
RANLIB = @V_RANLIB@
|
||||||
|
|
||||||
|
prefix =
|
||||||
|
AXIS_USABLE_LIBS = UCLIBC GLIBC
|
||||||
|
-include $(AXIS_TOP_DIR)/tools/build/Rules.axis
|
||||||
|
ifndef AXIS_BUILDTYPE
|
||||||
|
prefix = @prefix@
|
||||||
|
endif
|
||||||
|
|
||||||
|
CCOPT = @V_CCOPT@
|
||||||
|
INCLS = -I. @V_INCLS@
|
||||||
|
DEFS = @DEFS@
|
||||||
|
|
||||||
|
# Standard CFLAGS
|
||||||
|
CFLAGS += $(CCOPT) $(INCLS) $(DEFS)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Flex and bison allow you to specify the prefixes of the global symbols
|
||||||
|
# used by the generated parser. This allows programs to use lex/yacc
|
||||||
|
# and link against libpcap. If you don't have flex or bison, get them.
|
||||||
|
#
|
||||||
|
LEX = @V_LEX@
|
||||||
|
YACC = @V_YACC@
|
||||||
|
|
||||||
|
# Explicitly define compilation rule since SunOS 4's make doesn't like gcc.
|
||||||
|
# Also, gcc does not remove the .o before forking 'as', which can be a
|
||||||
|
# problem if you don't own the file but can write to the directory.
|
||||||
|
.c.o:
|
||||||
|
@rm -f $@
|
||||||
|
$(CC) $(CFLAGS) -c $(srcdir)/$*.c
|
||||||
|
|
||||||
|
PSRC = pcap-@V_PCAP@.c
|
||||||
|
CSRC = pcap.c inet.c gencode.c optimize.c nametoaddr.c \
|
||||||
|
etherent.c savefile.c bpf_filter.c bpf_image.c
|
||||||
|
GENSRC = scanner.c grammar.c version.c
|
||||||
|
|
||||||
|
SRC = $(PSRC) $(CSRC) $(GENSRC)
|
||||||
|
|
||||||
|
# We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
|
||||||
|
# hack the extra indirection
|
||||||
|
OBJ = $(PSRC:.c=.o) $(CSRC:.c=.o) $(GENSRC:.c=.o)
|
||||||
|
HDR = pcap.h pcap-int.h pcap-namedb.h pcap-nit.h pcap-pf.h \
|
||||||
|
ethertype.h gencode.h gnuc.h
|
||||||
|
GENHDR = \
|
||||||
|
tokdefs.h
|
||||||
|
|
||||||
|
TAGHDR = \
|
||||||
|
bpf/net/bpf.h
|
||||||
|
|
||||||
|
TAGFILES = \
|
||||||
|
$(SRC) $(HDR) $(TAGHDR)
|
||||||
|
|
||||||
|
CLEANFILES = $(OBJ) libpcap.a $(GENSRC) $(GENHDR) lex.yy.c
|
||||||
|
|
||||||
|
all: libpcap.a
|
||||||
|
|
||||||
|
libpcap.a: $(OBJ)
|
||||||
|
@rm -f $@
|
||||||
|
$(AR) rc $@ $(OBJ)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
scanner.c: $(srcdir)/scanner.l
|
||||||
|
@rm -f $@
|
||||||
|
$(LEX) -t $< > $$$$.$@; mv $$$$.$@ $@
|
||||||
|
|
||||||
|
scanner.o: scanner.c tokdefs.h
|
||||||
|
tokdefs.h: grammar.c
|
||||||
|
grammar.c: $(srcdir)/grammar.y
|
||||||
|
@rm -f grammar.c tokdefs.h
|
||||||
|
$(YACC) -d $<
|
||||||
|
mv y.tab.c grammar.c
|
||||||
|
mv y.tab.h tokdefs.h
|
||||||
|
|
||||||
|
grammar.o: grammar.c
|
||||||
|
@rm -f $@
|
||||||
|
$(CC) $(CFLAGS) -Dyylval=pcap_lval -c grammar.c
|
||||||
|
|
||||||
|
version.o: version.c
|
||||||
|
version.c: $(srcdir)/VERSION
|
||||||
|
@rm -f $@
|
||||||
|
sed -e 's/.*/char pcap_version[] = "&";/' $(srcdir)/VERSION > $@
|
||||||
|
|
||||||
|
install: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin libpcap.a $(DESTDIR)$(LIBDEST)/libpcap.a
|
||||||
|
$(RANLIB) $(DESTDIR)$(LIBDEST)/libpcap.a
|
||||||
|
|
||||||
|
install-incl: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/pcap.h
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap-namedb.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/pcap-namedb.h
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/net/bpf.h \
|
||||||
|
$(DESTDIR)$(INCLDEST)/net/bpf.h
|
||||||
|
|
||||||
|
install-man: force
|
||||||
|
$(INSTALL) -m 444 -o bin -g bin $(srcdir)/pcap.3 \
|
||||||
|
$(DESTDIR)$(MANDEST)/man3/pcap.3
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(CLEANFILES)
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
rm -f $(CLEANFILES) Makefile config.cache config.log config.status \
|
||||||
|
gnuc.h os-proto.h bpf_filter.c net
|
||||||
|
|
||||||
|
tags: $(TAGFILES)
|
||||||
|
ctags -wtd $(TAGFILES)
|
||||||
|
|
||||||
|
tar: force
|
||||||
|
@cwd=`pwd` ; dir=`basename $$cwd` ; name=libpcap-`cat VERSION` ; \
|
||||||
|
list="" ; tar="tar chFFf" ; \
|
||||||
|
for i in `cat FILES` ; do list="$$list $$name/$$i" ; done; \
|
||||||
|
echo \
|
||||||
|
"rm -f ../$$name; ln -s $$dir ../$$name" ; \
|
||||||
|
rm -f ../$$name; ln -s $$dir ../$$name ; \
|
||||||
|
echo \
|
||||||
|
"(cd .. ; $$tar - [lots of files]) | compress > /tmp/$$name.tar.Z" ; \
|
||||||
|
(cd .. ; $$tar - $$list) | compress > /tmp/$$name.tar.Z ; \
|
||||||
|
echo \
|
||||||
|
"rm -f ../$$name" ; \
|
||||||
|
rm -f ../$$name
|
||||||
|
|
||||||
|
force: /tmp
|
||||||
|
depend: $(GENSRC) force
|
||||||
|
./mkdep -c $(CC) $(DEFS) $(INCLS) $(SRC)
|
49
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/README
Normal file
49
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/README
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
@(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/README,v 1.1 1999/08/26 10:05:19 johana Exp $ (LBL)
|
||||||
|
|
||||||
|
LIBPCAP 0.4
|
||||||
|
Lawrence Berkeley National Laboratory
|
||||||
|
Network Research Group
|
||||||
|
libpcap@ee.lbl.gov
|
||||||
|
ftp://ftp.ee.lbl.gov/libpcap.tar.Z
|
||||||
|
|
||||||
|
This directory contains source code for libpcap, a system-independent
|
||||||
|
interface for user-level packet capture. libpcap provides a portable
|
||||||
|
framework for low-level network monitoring. Applications include
|
||||||
|
network statistics collection, security monitoring, network debugging,
|
||||||
|
etc. Since almost every system vendor provides a different interface
|
||||||
|
for packet capture, and since we've developed several tools that
|
||||||
|
require this functionality, we've created this system-independent API
|
||||||
|
to ease in porting and to alleviate the need for several
|
||||||
|
system-dependent packet capture modules in each application.
|
||||||
|
|
||||||
|
Note well: this interface is new and is likely to change.
|
||||||
|
|
||||||
|
The libpcap interface supports a filtering mechanism based on the
|
||||||
|
architecture in the BSD packet filter. BPF is described in the 1993
|
||||||
|
Winter Usenix paper ``The BSD Packet Filter: A New Architecture for
|
||||||
|
User-level Packet Capture''. A compressed postscript version is in:
|
||||||
|
|
||||||
|
ftp://ftp.ee.lbl.gov/papers/bpf-usenix93.ps.Z.
|
||||||
|
|
||||||
|
Although most packet capture interfaces support in-kernel filtering,
|
||||||
|
libpcap utilizes in-kernel filtering only for the BPF interface.
|
||||||
|
On systems that don't have BPF, all packets are read into user-space
|
||||||
|
and the BPF filters are evaluated in the libpcap library, incurring
|
||||||
|
added overhead (especially, for selective filters). Ideally, libpcap
|
||||||
|
would translate BPF filters into a filter program that is compatible
|
||||||
|
with the underlying kernel subsystem, but this is not yet implemented.
|
||||||
|
|
||||||
|
BPF is standard in 4.4BSD, BSD/386, NetBSD, and FreeBSD. DEC OSF/1
|
||||||
|
uses the packetfilter interface but has been extended to accept BPF
|
||||||
|
filters (which libpcap utilizes). Also, you can add BPF filter support
|
||||||
|
to Ultrix using the kernel source and/or object patches available in:
|
||||||
|
|
||||||
|
ftp://gatekeeper.dec.com/pub/DEC/net/bpfext42.tar.Z.
|
||||||
|
|
||||||
|
Problems, bugs, questions, desirable enhancements, source code
|
||||||
|
contributions, etc., should be sent to the email address
|
||||||
|
"libpcap@ee.lbl.gov".
|
||||||
|
|
||||||
|
- Steve McCanne
|
||||||
|
Craig Leres
|
||||||
|
Van Jacobson
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
0.4
|
706
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/aclocal.m4
vendored
Normal file
706
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/aclocal.m4
vendored
Normal file
|
@ -0,0 +1,706 @@
|
||||||
|
dnl @(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/aclocal.m4,v 1.1 1999/08/26 10:05:19 johana Exp $ (LBL)
|
||||||
|
dnl
|
||||||
|
dnl Copyright (c) 1995, 1996, 1997, 1998
|
||||||
|
dnl The Regents of the University of California. All rights reserved.
|
||||||
|
dnl
|
||||||
|
dnl Redistribution and use in source and binary forms, with or without
|
||||||
|
dnl modification, are permitted provided that: (1) source code distributions
|
||||||
|
dnl retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
dnl distributions including binary code include the above copyright notice and
|
||||||
|
dnl this paragraph in its entirety in the documentation or other materials
|
||||||
|
dnl provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
dnl features or use of this software display the following acknowledgement:
|
||||||
|
dnl ``This product includes software developed by the University of California,
|
||||||
|
dnl Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
dnl the University nor the names of its contributors may be used to endorse
|
||||||
|
dnl or promote products derived from this software without specific prior
|
||||||
|
dnl written permission.
|
||||||
|
dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
dnl WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
dnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
dnl
|
||||||
|
dnl LBL autoconf macros
|
||||||
|
dnl
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Determine which compiler we're using (cc or gcc)
|
||||||
|
dnl If using gcc, determine the version number
|
||||||
|
dnl If using cc, require that it support ansi prototypes
|
||||||
|
dnl If using gcc, use -O2 (otherwise use -O)
|
||||||
|
dnl If using cc, explicitly specify /usr/local/include
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_C_INIT(copt, incls)
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl $1 (copt set)
|
||||||
|
dnl $2 (incls set)
|
||||||
|
dnl CC
|
||||||
|
dnl LDFLAGS
|
||||||
|
dnl ac_cv_lbl_gcc_vers
|
||||||
|
dnl LBL_CFLAGS
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_C_INIT,
|
||||||
|
[AC_PREREQ(2.12)
|
||||||
|
AC_BEFORE([$0], [AC_PROG_CC])
|
||||||
|
AC_BEFORE([$0], [AC_LBL_FIXINCLUDES])
|
||||||
|
AC_BEFORE([$0], [AC_LBL_DEVEL])
|
||||||
|
AC_ARG_WITH(gcc, [ --without-gcc don't use gcc])
|
||||||
|
$1="-O"
|
||||||
|
$2=""
|
||||||
|
if test "${srcdir}" != "." ; then
|
||||||
|
$2="-I\$\(srcdir\)"
|
||||||
|
fi
|
||||||
|
if test "${CFLAGS+set}" = set; then
|
||||||
|
LBL_CFLAGS="$CFLAGS"
|
||||||
|
fi
|
||||||
|
if test -z "$CC" ; then
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
bsdi*)
|
||||||
|
AC_CHECK_PROG(SHLICC2, shlicc2, yes, no)
|
||||||
|
if test $SHLICC2 = yes ; then
|
||||||
|
CC=shlicc2
|
||||||
|
export CC
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test -z "$CC" -a "$with_gcc" = no ; then
|
||||||
|
CC=cc
|
||||||
|
export CC
|
||||||
|
fi
|
||||||
|
AC_PROG_CC
|
||||||
|
if test "$GCC" = yes ; then
|
||||||
|
if test "$SHLICC2" = yes ; then
|
||||||
|
ac_cv_lbl_gcc_vers=2
|
||||||
|
$1="-O2"
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING(gcc version)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_gcc_vers,
|
||||||
|
ac_cv_lbl_gcc_vers=`$CC -v 2>&1 | \
|
||||||
|
sed -e '/^gcc version /!d' \
|
||||||
|
-e 's/^gcc version //' \
|
||||||
|
-e 's/ .*//' -e 's/^[[[^0-9]]]*//' \
|
||||||
|
-e 's/\..*//'`)
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_gcc_vers)
|
||||||
|
if test $ac_cv_lbl_gcc_vers -gt 1 ; then
|
||||||
|
$1="-O2"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING(that $CC handles ansi prototypes)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_cc_ansi_prototypes,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>],
|
||||||
|
[int frob(int, char *)],
|
||||||
|
ac_cv_lbl_cc_ansi_prototypes=yes,
|
||||||
|
ac_cv_lbl_cc_ansi_prototypes=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_cc_ansi_prototypes)
|
||||||
|
if test $ac_cv_lbl_cc_ansi_prototypes = no ; then
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
hpux*)
|
||||||
|
AC_MSG_CHECKING(for HP-UX ansi compiler ($CC -Aa -D_HPUX_SOURCE))
|
||||||
|
savedcflags="$CFLAGS"
|
||||||
|
CFLAGS="-Aa -D_HPUX_SOURCE $CFLAGS"
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_cc_hpux_cc_aa,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>],
|
||||||
|
[int frob(int, char *)],
|
||||||
|
ac_cv_lbl_cc_hpux_cc_aa=yes,
|
||||||
|
ac_cv_lbl_cc_hpux_cc_aa=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_cc_hpux_cc_aa)
|
||||||
|
if test $ac_cv_lbl_cc_hpux_cc_aa = no ; then
|
||||||
|
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||||
|
fi
|
||||||
|
CFLAGS="$savedcflags"
|
||||||
|
V_CCOPT="-Aa $V_CCOPT"
|
||||||
|
AC_DEFINE(_HPUX_SOURCE)
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
$2="$$2 -I/usr/local/include"
|
||||||
|
LDFLAGS="$LDFLAGS -L/usr/local/lib"
|
||||||
|
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
irix*)
|
||||||
|
V_CCOPT="$V_CCOPT -xansi -signed -g3"
|
||||||
|
;;
|
||||||
|
|
||||||
|
osf*)
|
||||||
|
V_CCOPT="$V_CCOPT -std1 -g3"
|
||||||
|
;;
|
||||||
|
|
||||||
|
ultrix*)
|
||||||
|
AC_MSG_CHECKING(that Ultrix $CC hacks const in prototypes)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_cc_const_proto,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[#include <sys/types.h>],
|
||||||
|
[struct a { int b; };
|
||||||
|
void c(const struct a *)],
|
||||||
|
ac_cv_lbl_cc_const_proto=yes,
|
||||||
|
ac_cv_lbl_cc_const_proto=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_cc_const_proto)
|
||||||
|
if test $ac_cv_lbl_cc_const_proto = no ; then
|
||||||
|
AC_DEFINE(const,)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Use pfopen.c if available and pfopen() not in standard libraries
|
||||||
|
dnl Require libpcap
|
||||||
|
dnl Look for libpcap in ..
|
||||||
|
dnl Use the installed libpcap if there is no local version
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_LIBPCAP(pcapdep, incls)
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl $1 (pcapdep set)
|
||||||
|
dnl $2 (incls appended)
|
||||||
|
dnl LIBS
|
||||||
|
dnl LBL_LIBS
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_LIBPCAP,
|
||||||
|
[AC_REQUIRE([AC_LBL_LIBRARY_NET])
|
||||||
|
dnl
|
||||||
|
dnl save a copy before locating libpcap.a
|
||||||
|
dnl
|
||||||
|
LBL_LIBS="$LIBS"
|
||||||
|
pfopen=/usr/examples/packetfilter/pfopen.c
|
||||||
|
if test -f $pfopen ; then
|
||||||
|
AC_CHECK_FUNCS(pfopen)
|
||||||
|
if test $ac_cv_func_pfopen = "no" ; then
|
||||||
|
AC_MSG_RESULT(Using $pfopen)
|
||||||
|
LIBS="$LIBS $pfopen"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_MSG_CHECKING(for local pcap library)
|
||||||
|
libpcap=FAIL
|
||||||
|
lastdir=FAIL
|
||||||
|
places=`ls .. | sed -e 's,/$,,' -e 's,^,../,' | \
|
||||||
|
egrep '/libpcap-[[0-9]]*\.[[0-9]]*(\.[[0-9]]*)?([[ab]][[0-9]]*)?$'`
|
||||||
|
for dir in $places ../libpcap libpcap ; do
|
||||||
|
basedir=`echo $dir | sed -e 's/[[ab]][[0-9]]*$//'`
|
||||||
|
if test $lastdir = $basedir ; then
|
||||||
|
dnl skip alphas when an actual release is present
|
||||||
|
continue;
|
||||||
|
fi
|
||||||
|
lastdir=$dir
|
||||||
|
if test -r $dir/pcap.c ; then
|
||||||
|
libpcap=$dir/libpcap.a
|
||||||
|
d=$dir
|
||||||
|
dnl continue and select the last one that exists
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test $libpcap = FAIL ; then
|
||||||
|
AC_MSG_RESULT(not found)
|
||||||
|
AC_CHECK_LIB(pcap, main, libpcap="-lpcap")
|
||||||
|
if test $libpcap = FAIL ; then
|
||||||
|
AC_MSG_ERROR(see the INSTALL doc for more info)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
$1=$libpcap
|
||||||
|
$2="-I$d $$2"
|
||||||
|
AC_MSG_RESULT($libpcap)
|
||||||
|
fi
|
||||||
|
LIBS="$libpcap $LIBS"
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
aix*)
|
||||||
|
pseexe="/lib/pse.exp"
|
||||||
|
AC_MSG_CHECKING(for $pseexe)
|
||||||
|
if test -f $pseexe ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
LIBS="$LIBS -I:$pseexe"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Define RETSIGTYPE and RETSIGVAL
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_TYPE_SIGNAL
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl RETSIGTYPE (defined)
|
||||||
|
dnl RETSIGVAL (defined)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_TYPE_SIGNAL,
|
||||||
|
[AC_BEFORE([$0], [AC_LBL_LIBPCAP])
|
||||||
|
AC_TYPE_SIGNAL
|
||||||
|
if test "$ac_cv_type_signal" = void ; then
|
||||||
|
AC_DEFINE(RETSIGVAL,)
|
||||||
|
else
|
||||||
|
AC_DEFINE(RETSIGVAL,(0))
|
||||||
|
fi
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
irix*)
|
||||||
|
AC_DEFINE(_BSD_SIGNALS)
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
dnl prefer sigset() to sigaction()
|
||||||
|
AC_CHECK_FUNCS(sigset)
|
||||||
|
if test $ac_cv_func_sigset = no ; then
|
||||||
|
AC_CHECK_FUNCS(sigaction)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl If using gcc, make sure we have ANSI ioctl definitions
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_FIXINCLUDES
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_FIXINCLUDES,
|
||||||
|
[if test "$GCC" = yes ; then
|
||||||
|
AC_MSG_CHECKING(for ANSI ioctl definitions)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_gcc_fixincludes,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[/*
|
||||||
|
* This generates a "duplicate case value" when fixincludes
|
||||||
|
* has not be run.
|
||||||
|
*/
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/time.h>
|
||||||
|
# include <sys/ioctl.h>
|
||||||
|
# ifdef HAVE_SYS_IOCCOM_H
|
||||||
|
# include <sys/ioccom.h>
|
||||||
|
# endif],
|
||||||
|
[switch (0) {
|
||||||
|
case _IO('A', 1):;
|
||||||
|
case _IO('B', 1):;
|
||||||
|
}],
|
||||||
|
ac_cv_lbl_gcc_fixincludes=yes,
|
||||||
|
ac_cv_lbl_gcc_fixincludes=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_gcc_fixincludes)
|
||||||
|
if test $ac_cv_lbl_gcc_fixincludes = no ; then
|
||||||
|
# Don't cache failure
|
||||||
|
unset ac_cv_lbl_gcc_fixincludes
|
||||||
|
AC_MSG_ERROR(see the INSTALL for more info)
|
||||||
|
fi
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Check for flex, default to lex
|
||||||
|
dnl Require flex 2.4 or higher
|
||||||
|
dnl Check for bison, default to yacc
|
||||||
|
dnl Default to lex/yacc if both flex and bison are not available
|
||||||
|
dnl Define the yy prefix string if using flex and bison
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_LEX_AND_YACC(lex, yacc, yyprefix)
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl $1 (lex set)
|
||||||
|
dnl $2 (yacc appended)
|
||||||
|
dnl $3 (optional flex and bison -P prefix)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_LEX_AND_YACC,
|
||||||
|
[AC_ARG_WITH(flex, [ --without-flex don't use flex])
|
||||||
|
AC_ARG_WITH(bison, [ --without-bison don't use bison])
|
||||||
|
if test "$with_flex" = no ; then
|
||||||
|
$1=lex
|
||||||
|
else
|
||||||
|
AC_CHECK_PROGS($1, flex, lex)
|
||||||
|
fi
|
||||||
|
if test "$$1" = flex ; then
|
||||||
|
# The -V flag was added in 2.4
|
||||||
|
AC_MSG_CHECKING(for flex 2.4 or higher)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_flex_v24,
|
||||||
|
if flex -V >/dev/null 2>&1; then
|
||||||
|
ac_cv_lbl_flex_v24=yes
|
||||||
|
else
|
||||||
|
ac_cv_lbl_flex_v24=no
|
||||||
|
fi)
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_flex_v24)
|
||||||
|
if test $ac_cv_lbl_flex_v24 = no ; then
|
||||||
|
s="2.4 or higher required"
|
||||||
|
AC_MSG_WARN(ignoring obsolete flex executable ($s))
|
||||||
|
$1=lex
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test "$with_bison" = no ; then
|
||||||
|
$2=yacc
|
||||||
|
else
|
||||||
|
AC_CHECK_PROGS($2, bison, yacc)
|
||||||
|
fi
|
||||||
|
if test "$$2" = bison ; then
|
||||||
|
$2="$$2 -y"
|
||||||
|
fi
|
||||||
|
if test "$$1" != lex -a "$$2" = yacc -o "$$1" = lex -a "$$2" != yacc ; then
|
||||||
|
AC_MSG_WARN(don't have both flex and bison; reverting to lex/yacc)
|
||||||
|
$1=lex
|
||||||
|
$2=yacc
|
||||||
|
fi
|
||||||
|
if test "$$1" = flex -a -n "$3" ; then
|
||||||
|
$1="$$1 -P$3"
|
||||||
|
$2="$$2 -p $3"
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Checks to see if union wait is used with WEXITSTATUS()
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_UNION_WAIT
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl DECLWAITSTATUS (defined)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_UNION_WAIT,
|
||||||
|
[AC_MSG_CHECKING(if union wait is used)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_union_wait,
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/wait.h>],
|
||||||
|
[int status;
|
||||||
|
u_int i = WEXITSTATUS(status);
|
||||||
|
u_int j = waitpid(0, &status, 0);],
|
||||||
|
ac_cv_lbl_union_wait=no,
|
||||||
|
ac_cv_lbl_union_wait=yes))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_union_wait)
|
||||||
|
if test $ac_cv_lbl_union_wait = yes ; then
|
||||||
|
AC_DEFINE(DECLWAITSTATUS,union wait)
|
||||||
|
else
|
||||||
|
AC_DEFINE(DECLWAITSTATUS,int)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Checks to see if the sockaddr struct has the 4.4 BSD sa_len member
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_SOCKADDR_SA_LEN
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl HAVE_SOCKADDR_SA_LEN (defined)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_SOCKADDR_SA_LEN,
|
||||||
|
[AC_MSG_CHECKING(if sockaddr struct has sa_len member)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_sockaddr_has_sa_len,
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/socket.h>],
|
||||||
|
[u_int i = sizeof(((struct sockaddr *)0)->sa_len)],
|
||||||
|
ac_cv_lbl_sockaddr_has_sa_len=yes,
|
||||||
|
ac_cv_lbl_sockaddr_has_sa_len=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_sockaddr_has_sa_len)
|
||||||
|
if test $ac_cv_lbl_sockaddr_has_sa_len = yes ; then
|
||||||
|
AC_DEFINE(HAVE_SOCKADDR_SA_LEN)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Checks to see if -R is used
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_HAVE_RUN_PATH
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl ac_cv_lbl_have_run_path (yes or no)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_HAVE_RUN_PATH,
|
||||||
|
[AC_MSG_CHECKING(for ${CC-cc} -R)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_have_run_path,
|
||||||
|
[echo 'main(){}' > conftest.c
|
||||||
|
${CC-cc} -o conftest conftest.c -R/a1/b2/c3 >conftest.out 2>&1
|
||||||
|
if test ! -s conftest.out ; then
|
||||||
|
ac_cv_lbl_have_run_path=yes
|
||||||
|
else
|
||||||
|
ac_cv_lbl_have_run_path=no
|
||||||
|
fi
|
||||||
|
rm -f conftest*])
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_have_run_path)
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Due to the stupid way it's implemented, AC_CHECK_TYPE is nearly useless.
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_CHECK_TYPE
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl int32_t (defined)
|
||||||
|
dnl u_int32_t (defined)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_CHECK_TYPE,
|
||||||
|
[AC_MSG_CHECKING(for $1 using $CC)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_have_$1,
|
||||||
|
AC_TRY_COMPILE([
|
||||||
|
# include "confdefs.h"
|
||||||
|
# include <sys/types.h>
|
||||||
|
# if STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
|
# include <stddef.h>
|
||||||
|
# endif],
|
||||||
|
[$1 i],
|
||||||
|
ac_cv_lbl_have_$1=yes,
|
||||||
|
ac_cv_lbl_have_$1=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_have_$1)
|
||||||
|
if test $ac_cv_lbl_have_$1 = no ; then
|
||||||
|
AC_DEFINE($1, $2)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Checks to see if unaligned memory accesses fail
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_UNALIGNED_ACCESS
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl LBL_ALIGN (DEFINED)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_UNALIGNED_ACCESS,
|
||||||
|
[AC_MSG_CHECKING(if unaligned accesses fail)
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_unaligned_fail,
|
||||||
|
[case "$target_cpu" in
|
||||||
|
|
||||||
|
alpha|hp*|mips|sparc)
|
||||||
|
ac_cv_lbl_unaligned_fail=yes
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
cat >conftest.c <<EOF
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/wait.h>
|
||||||
|
# include <stdio.h>
|
||||||
|
unsigned char a[[5]] = { 1, 2, 3, 4, 5 };
|
||||||
|
main() {
|
||||||
|
unsigned int i;
|
||||||
|
pid_t pid;
|
||||||
|
int status;
|
||||||
|
/* avoid "core dumped" message */
|
||||||
|
pid = fork();
|
||||||
|
if (pid < 0)
|
||||||
|
exit(2);
|
||||||
|
if (pid > 0) {
|
||||||
|
/* parent */
|
||||||
|
pid = waitpid(pid, &status, 0);
|
||||||
|
if (pid < 0)
|
||||||
|
exit(3);
|
||||||
|
exit(!WIFEXITED(status));
|
||||||
|
}
|
||||||
|
/* child */
|
||||||
|
i = *(unsigned int *)&a[[1]];
|
||||||
|
printf("%d\n", i);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS \
|
||||||
|
conftest.c $LIBS >/dev/null 2>&1
|
||||||
|
if test ! -x conftest ; then
|
||||||
|
dnl failed to compile for some reason
|
||||||
|
ac_cv_lbl_unaligned_fail=yes
|
||||||
|
else
|
||||||
|
./conftest >conftest.out
|
||||||
|
if test ! -s conftest.out ; then
|
||||||
|
ac_cv_lbl_unaligned_fail=yes
|
||||||
|
else
|
||||||
|
ac_cv_lbl_unaligned_fail=no
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f conftest* core core.conftest
|
||||||
|
;;
|
||||||
|
esac])
|
||||||
|
AC_MSG_RESULT($ac_cv_lbl_unaligned_fail)
|
||||||
|
if test $ac_cv_lbl_unaligned_fail = yes ; then
|
||||||
|
AC_DEFINE(LBL_ALIGN)
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl If using gcc and the file .devel exists:
|
||||||
|
dnl Compile with -g (if supported) and -Wall
|
||||||
|
dnl If using gcc 2, do extra prototype checking
|
||||||
|
dnl If an os prototype include exists, symlink os-proto.h to it
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_DEVEL(copt)
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl $1 (copt appended)
|
||||||
|
dnl HAVE_OS_PROTO_H (defined)
|
||||||
|
dnl os-proto.h (symlinked)
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_DEVEL,
|
||||||
|
[rm -f os-proto.h
|
||||||
|
if test "${LBL_CFLAGS+set}" = set; then
|
||||||
|
$1="$$1 ${LBL_CFLAGS}"
|
||||||
|
fi
|
||||||
|
if test -f .devel ; then
|
||||||
|
if test "$GCC" = yes ; then
|
||||||
|
if test "${LBL_CFLAGS+set}" != set; then
|
||||||
|
if test "$ac_cv_prog_cc_g" = yes ; then
|
||||||
|
$1="-g $$1"
|
||||||
|
fi
|
||||||
|
$1="$$1 -Wall"
|
||||||
|
if test $ac_cv_lbl_gcc_vers -gt 1 ; then
|
||||||
|
$1="$$1 -Wmissing-prototypes -Wstrict-prototypes"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
irix6*)
|
||||||
|
V_CCOPT="$V_CCOPT -n32"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
os=`echo $target_os | sed -e 's/\([[0-9]][[0-9]]*\)[[^0-9]].*$/\1/'`
|
||||||
|
name="lbl/os-$os.h"
|
||||||
|
if test -f $name ; then
|
||||||
|
ln -s $name os-proto.h
|
||||||
|
AC_DEFINE(HAVE_OS_PROTO_H)
|
||||||
|
else
|
||||||
|
AC_MSG_WARN(can't find $name)
|
||||||
|
fi
|
||||||
|
fi])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Improved version of AC_CHECK_LIB
|
||||||
|
dnl
|
||||||
|
dnl Thanks to John Hawkinson (jhawk@mit.edu)
|
||||||
|
dnl
|
||||||
|
dnl usage:
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [,
|
||||||
|
dnl ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
|
||||||
|
dnl
|
||||||
|
dnl results:
|
||||||
|
dnl
|
||||||
|
dnl LIBS
|
||||||
|
dnl
|
||||||
|
|
||||||
|
define(AC_LBL_CHECK_LIB,
|
||||||
|
[AC_MSG_CHECKING([for $2 in -l$1])
|
||||||
|
dnl Use a cache variable name containing both the library and function name,
|
||||||
|
dnl because the test really is for library $1 defining function $2, not
|
||||||
|
dnl just for library $1. Separate tests with the same $1 and different $2's
|
||||||
|
dnl may have different results.
|
||||||
|
ac_lib_var=`echo $1['_']$2['_']$5 | sed 'y%./+- %__p__%'`
|
||||||
|
AC_CACHE_VAL(ac_cv_lbl_lib_$ac_lib_var,
|
||||||
|
[ac_save_LIBS="$LIBS"
|
||||||
|
LIBS="-l$1 $5 $LIBS"
|
||||||
|
AC_TRY_LINK(dnl
|
||||||
|
ifelse([$2], [main], , dnl Avoid conflicting decl of main.
|
||||||
|
[/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
])dnl
|
||||||
|
[/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char $2();
|
||||||
|
]),
|
||||||
|
[$2()],
|
||||||
|
eval "ac_cv_lbl_lib_$ac_lib_var=yes",
|
||||||
|
eval "ac_cv_lbl_lib_$ac_lib_var=no")
|
||||||
|
LIBS="$ac_save_LIBS"
|
||||||
|
])dnl
|
||||||
|
if eval "test \"`echo '$ac_cv_lbl_lib_'$ac_lib_var`\" = yes"; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
ifelse([$3], ,
|
||||||
|
[changequote(, )dnl
|
||||||
|
ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
|
||||||
|
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
|
||||||
|
changequote([, ])dnl
|
||||||
|
AC_DEFINE_UNQUOTED($ac_tr_lib)
|
||||||
|
LIBS="-l$1 $LIBS"
|
||||||
|
], [$3])
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
ifelse([$4], , , [$4
|
||||||
|
])dnl
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl AC_LBL_LIBRARY_NET
|
||||||
|
dnl
|
||||||
|
dnl This test is for network applications that need socket() and
|
||||||
|
dnl gethostbyname() -ish functions. Under Solaris, those applications
|
||||||
|
dnl need to link with "-lsocket -lnsl". Under IRIX, they need to link
|
||||||
|
dnl with "-lnsl" but should *not* link with "-lsocket" because
|
||||||
|
dnl libsocket.a breaks a number of things (for instance:
|
||||||
|
dnl gethostbyname() under IRIX 5.2, and snoop sockets under most
|
||||||
|
dnl versions of IRIX).
|
||||||
|
dnl
|
||||||
|
dnl Unfortunately, many application developers are not aware of this,
|
||||||
|
dnl and mistakenly write tests that cause -lsocket to be used under
|
||||||
|
dnl IRIX. It is also easy to write tests that cause -lnsl to be used
|
||||||
|
dnl under operating systems where neither are necessary (or useful),
|
||||||
|
dnl such as SunOS 4.1.4, which uses -lnsl for TLI.
|
||||||
|
dnl
|
||||||
|
dnl This test exists so that every application developer does not test
|
||||||
|
dnl this in a different, and subtly broken fashion.
|
||||||
|
|
||||||
|
dnl It has been argued that this test should be broken up into two
|
||||||
|
dnl seperate tests, one for the resolver libraries, and one for the
|
||||||
|
dnl libraries necessary for using Sockets API. Unfortunately, the two
|
||||||
|
dnl are carefully intertwined and allowing the autoconf user to use
|
||||||
|
dnl them independantly potentially results in unfortunate ordering
|
||||||
|
dnl dependancies -- as such, such component macros would have to
|
||||||
|
dnl carefully use indirection and be aware if the other components were
|
||||||
|
dnl executed. Since other autoconf macros do not go to this trouble,
|
||||||
|
dnl and almost no applications use sockets without the resolver, this
|
||||||
|
dnl complexity has not been implemented.
|
||||||
|
dnl
|
||||||
|
dnl The check for libresolv is in case you are attempting to link
|
||||||
|
dnl statically and happen to have a libresolv.a lying around (and no
|
||||||
|
dnl libnsl.a).
|
||||||
|
dnl
|
||||||
|
AC_DEFUN(AC_LBL_LIBRARY_NET, [
|
||||||
|
# Most operating systems have gethostbyname() in the default searched
|
||||||
|
# libraries (i.e. libc):
|
||||||
|
AC_CHECK_FUNC(gethostbyname, ,
|
||||||
|
# Some OSes (eg. Solaris) place it in libnsl:
|
||||||
|
AC_LBL_CHECK_LIB(nsl, gethostbyname, ,
|
||||||
|
# Some strange OSes (SINIX) have it in libsocket:
|
||||||
|
AC_LBL_CHECK_LIB(socket, gethostbyname, ,
|
||||||
|
# Unfortunately libsocket sometimes depends on libnsl.
|
||||||
|
# AC_CHECK_LIB's API is essentially broken so the
|
||||||
|
# following ugliness is necessary:
|
||||||
|
AC_LBL_CHECK_LIB(socket, gethostbyname,
|
||||||
|
LIBS="-lsocket -lnsl $LIBS",
|
||||||
|
AC_CHECK_LIB(resolv, gethostbyname),
|
||||||
|
-lnsl))))
|
||||||
|
AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, ,
|
||||||
|
AC_LBL_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", ,
|
||||||
|
-lnsl)))
|
||||||
|
# DLPI needs putmsg under HPUX so test for -lstr while we're at it
|
||||||
|
AC_CHECK_LIB(str, putmsg)
|
||||||
|
])
|
|
@ -0,0 +1,264 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from the Stanford/CMU enet packet filter,
|
||||||
|
* (net/enet.c) distributed as part of 4.3BSD, and code contributed
|
||||||
|
* to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
|
||||||
|
* Berkeley Laboratory.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)bpf.h 7.1 (Berkeley) 5/7/91
|
||||||
|
*
|
||||||
|
* @(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/bpf/net/bpf.h,v 1.1 1999/08/26 10:07:57 johana Exp $ (LBL)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BPF_MAJOR_VERSION
|
||||||
|
|
||||||
|
/* BSD style release date */
|
||||||
|
#define BPF_RELEASE 199606
|
||||||
|
|
||||||
|
typedef int bpf_int32;
|
||||||
|
typedef u_int bpf_u_int32;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Alignment macros. BPF_WORDALIGN rounds up to the next
|
||||||
|
* even multiple of BPF_ALIGNMENT.
|
||||||
|
*/
|
||||||
|
#define BPF_ALIGNMENT sizeof(bpf_int32)
|
||||||
|
#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1))
|
||||||
|
|
||||||
|
#define BPF_MAXINSNS 512
|
||||||
|
#define BPF_MAXBUFSIZE 0x8000
|
||||||
|
#define BPF_MINBUFSIZE 32
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure for BIOCSETF.
|
||||||
|
*/
|
||||||
|
struct bpf_program {
|
||||||
|
u_int bf_len;
|
||||||
|
struct bpf_insn *bf_insns;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Struct returned by BIOCGSTATS.
|
||||||
|
*/
|
||||||
|
struct bpf_stat {
|
||||||
|
u_int bs_recv; /* number of packets received */
|
||||||
|
u_int bs_drop; /* number of packets dropped */
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Struct return by BIOCVERSION. This represents the version number of
|
||||||
|
* the filter language described by the instruction encodings below.
|
||||||
|
* bpf understands a program iff kernel_major == filter_major &&
|
||||||
|
* kernel_minor >= filter_minor, that is, if the value returned by the
|
||||||
|
* running kernel has the same major number and a minor number equal
|
||||||
|
* equal to or less than the filter being downloaded. Otherwise, the
|
||||||
|
* results are undefined, meaning an error may be returned or packets
|
||||||
|
* may be accepted haphazardly.
|
||||||
|
* It has nothing to do with the source code version.
|
||||||
|
*/
|
||||||
|
struct bpf_version {
|
||||||
|
u_short bv_major;
|
||||||
|
u_short bv_minor;
|
||||||
|
};
|
||||||
|
/* Current version number of filter architecture. */
|
||||||
|
#define BPF_MAJOR_VERSION 1
|
||||||
|
#define BPF_MINOR_VERSION 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BPF ioctls
|
||||||
|
*
|
||||||
|
* The first set is for compatibility with Sun's pcc style
|
||||||
|
* header files. If your using gcc, we assume that you
|
||||||
|
* have run fixincludes so the latter set should work.
|
||||||
|
*/
|
||||||
|
#if (defined(sun) || defined(ibm032)) && !defined(__GNUC__)
|
||||||
|
#define BIOCGBLEN _IOR(B,102, u_int)
|
||||||
|
#define BIOCSBLEN _IOWR(B,102, u_int)
|
||||||
|
#define BIOCSETF _IOW(B,103, struct bpf_program)
|
||||||
|
#define BIOCFLUSH _IO(B,104)
|
||||||
|
#define BIOCPROMISC _IO(B,105)
|
||||||
|
#define BIOCGDLT _IOR(B,106, u_int)
|
||||||
|
#define BIOCGETIF _IOR(B,107, struct ifreq)
|
||||||
|
#define BIOCSETIF _IOW(B,108, struct ifreq)
|
||||||
|
#define BIOCSRTIMEOUT _IOW(B,109, struct timeval)
|
||||||
|
#define BIOCGRTIMEOUT _IOR(B,110, struct timeval)
|
||||||
|
#define BIOCGSTATS _IOR(B,111, struct bpf_stat)
|
||||||
|
#define BIOCIMMEDIATE _IOW(B,112, u_int)
|
||||||
|
#define BIOCVERSION _IOR(B,113, struct bpf_version)
|
||||||
|
#define BIOCSTCPF _IOW(B,114, struct bpf_program)
|
||||||
|
#define BIOCSUDPF _IOW(B,115, struct bpf_program)
|
||||||
|
#else
|
||||||
|
#define BIOCGBLEN _IOR('B',102, u_int)
|
||||||
|
#define BIOCSBLEN _IOWR('B',102, u_int)
|
||||||
|
#define BIOCSETF _IOW('B',103, struct bpf_program)
|
||||||
|
#define BIOCFLUSH _IO('B',104)
|
||||||
|
#define BIOCPROMISC _IO('B',105)
|
||||||
|
#define BIOCGDLT _IOR('B',106, u_int)
|
||||||
|
#define BIOCGETIF _IOR('B',107, struct ifreq)
|
||||||
|
#define BIOCSETIF _IOW('B',108, struct ifreq)
|
||||||
|
#define BIOCSRTIMEOUT _IOW('B',109, struct timeval)
|
||||||
|
#define BIOCGRTIMEOUT _IOR('B',110, struct timeval)
|
||||||
|
#define BIOCGSTATS _IOR('B',111, struct bpf_stat)
|
||||||
|
#define BIOCIMMEDIATE _IOW('B',112, u_int)
|
||||||
|
#define BIOCVERSION _IOR('B',113, struct bpf_version)
|
||||||
|
#define BIOCSTCPF _IOW('B',114, struct bpf_program)
|
||||||
|
#define BIOCSUDPF _IOW('B',115, struct bpf_program)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure prepended to each packet.
|
||||||
|
*/
|
||||||
|
struct bpf_hdr {
|
||||||
|
struct timeval bh_tstamp; /* time stamp */
|
||||||
|
bpf_u_int32 bh_caplen; /* length of captured portion */
|
||||||
|
bpf_u_int32 bh_datalen; /* original length of packet */
|
||||||
|
u_short bh_hdrlen; /* length of bpf header (this struct
|
||||||
|
plus alignment padding) */
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* Because the structure above is not a multiple of 4 bytes, some compilers
|
||||||
|
* will insist on inserting padding; hence, sizeof(struct bpf_hdr) won't work.
|
||||||
|
* Only the kernel needs to know about it; applications use bh_hdrlen.
|
||||||
|
*/
|
||||||
|
#ifdef KERNEL
|
||||||
|
#define SIZEOF_BPF_HDR 18
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Data-link level type codes.
|
||||||
|
*/
|
||||||
|
#define DLT_NULL 0 /* no link-layer encapsulation */
|
||||||
|
#define DLT_EN10MB 1 /* Ethernet (10Mb) */
|
||||||
|
#define DLT_EN3MB 2 /* Experimental Ethernet (3Mb) */
|
||||||
|
#define DLT_AX25 3 /* Amateur Radio AX.25 */
|
||||||
|
#define DLT_PRONET 4 /* Proteon ProNET Token Ring */
|
||||||
|
#define DLT_CHAOS 5 /* Chaos */
|
||||||
|
#define DLT_IEEE802 6 /* IEEE 802 Networks */
|
||||||
|
#define DLT_ARCNET 7 /* ARCNET */
|
||||||
|
#define DLT_SLIP 8 /* Serial Line IP */
|
||||||
|
#define DLT_PPP 9 /* Point-to-point Protocol */
|
||||||
|
#define DLT_FDDI 10 /* FDDI */
|
||||||
|
#define DLT_ATM_RFC1483 11 /* LLC/SNAP encapsulated atm */
|
||||||
|
#define DLT_RAW 12 /* raw IP */
|
||||||
|
#define DLT_SLIP_BSDOS 13 /* BSD/OS Serial Line IP */
|
||||||
|
#define DLT_PPP_BSDOS 14 /* BSD/OS Point-to-point Protocol */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The instruction encondings.
|
||||||
|
*/
|
||||||
|
/* instruction classes */
|
||||||
|
#define BPF_CLASS(code) ((code) & 0x07)
|
||||||
|
#define BPF_LD 0x00
|
||||||
|
#define BPF_LDX 0x01
|
||||||
|
#define BPF_ST 0x02
|
||||||
|
#define BPF_STX 0x03
|
||||||
|
#define BPF_ALU 0x04
|
||||||
|
#define BPF_JMP 0x05
|
||||||
|
#define BPF_RET 0x06
|
||||||
|
#define BPF_MISC 0x07
|
||||||
|
|
||||||
|
/* ld/ldx fields */
|
||||||
|
#define BPF_SIZE(code) ((code) & 0x18)
|
||||||
|
#define BPF_W 0x00
|
||||||
|
#define BPF_H 0x08
|
||||||
|
#define BPF_B 0x10
|
||||||
|
#define BPF_MODE(code) ((code) & 0xe0)
|
||||||
|
#define BPF_IMM 0x00
|
||||||
|
#define BPF_ABS 0x20
|
||||||
|
#define BPF_IND 0x40
|
||||||
|
#define BPF_MEM 0x60
|
||||||
|
#define BPF_LEN 0x80
|
||||||
|
#define BPF_MSH 0xa0
|
||||||
|
|
||||||
|
/* alu/jmp fields */
|
||||||
|
#define BPF_OP(code) ((code) & 0xf0)
|
||||||
|
#define BPF_ADD 0x00
|
||||||
|
#define BPF_SUB 0x10
|
||||||
|
#define BPF_MUL 0x20
|
||||||
|
#define BPF_DIV 0x30
|
||||||
|
#define BPF_OR 0x40
|
||||||
|
#define BPF_AND 0x50
|
||||||
|
#define BPF_LSH 0x60
|
||||||
|
#define BPF_RSH 0x70
|
||||||
|
#define BPF_NEG 0x80
|
||||||
|
#define BPF_JA 0x00
|
||||||
|
#define BPF_JEQ 0x10
|
||||||
|
#define BPF_JGT 0x20
|
||||||
|
#define BPF_JGE 0x30
|
||||||
|
#define BPF_JSET 0x40
|
||||||
|
#define BPF_SRC(code) ((code) & 0x08)
|
||||||
|
#define BPF_K 0x00
|
||||||
|
#define BPF_X 0x08
|
||||||
|
|
||||||
|
/* ret - BPF_K and BPF_X also apply */
|
||||||
|
#define BPF_RVAL(code) ((code) & 0x18)
|
||||||
|
#define BPF_A 0x10
|
||||||
|
|
||||||
|
/* misc */
|
||||||
|
#define BPF_MISCOP(code) ((code) & 0xf8)
|
||||||
|
#define BPF_TAX 0x00
|
||||||
|
#define BPF_TXA 0x80
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The instruction data structure.
|
||||||
|
*/
|
||||||
|
struct bpf_insn {
|
||||||
|
u_short code;
|
||||||
|
u_char jt;
|
||||||
|
u_char jf;
|
||||||
|
bpf_int32 k;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Macros for insn array initializers.
|
||||||
|
*/
|
||||||
|
#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k }
|
||||||
|
#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k }
|
||||||
|
|
||||||
|
#ifdef KERNEL
|
||||||
|
extern u_int bpf_filter();
|
||||||
|
extern void bpfattach();
|
||||||
|
extern void bpf_tap();
|
||||||
|
extern void bpf_mtap();
|
||||||
|
#else
|
||||||
|
#if __STDC__
|
||||||
|
extern u_int bpf_filter(struct bpf_insn *, u_char *, u_int, u_int);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST).
|
||||||
|
*/
|
||||||
|
#define BPF_MEMWORDS 16
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,532 @@
|
||||||
|
/*-
|
||||||
|
* Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* This code is derived from the Stanford/CMU enet packet filter,
|
||||||
|
* (net/enet.c) distributed as part of 4.3BSD, and code contributed
|
||||||
|
* to Berkeley by Steven McCanne and Van Jacobson both of Lawrence
|
||||||
|
* Berkeley Laboratory.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)bpf.c 7.5 (Berkeley) 7/15/91
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !(defined(lint) || defined(KERNEL))
|
||||||
|
static const char rcsid[] =
|
||||||
|
"@(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/bpf/net/bpf_filter.c,v 1.1 1999/08/26 10:07:57 johana Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <net/bpf.h>
|
||||||
|
|
||||||
|
#ifndef KERNEL
|
||||||
|
#include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define int32 bpf_int32
|
||||||
|
#define u_int32 bpf_u_int32
|
||||||
|
|
||||||
|
#ifndef LBL_ALIGN
|
||||||
|
#if defined(sparc) || defined(mips) || defined(ibm032) || \
|
||||||
|
defined(__alpha) || defined(__hpux)
|
||||||
|
#define LBL_ALIGN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef LBL_ALIGN
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
#define EXTRACT_SHORT(p) ((u_short)ntohs(*(u_short *)p))
|
||||||
|
#define EXTRACT_LONG(p) (ntohl(*(u_int32 *)p))
|
||||||
|
#else
|
||||||
|
#define EXTRACT_SHORT(p)\
|
||||||
|
((u_short)\
|
||||||
|
((u_short)*((u_char *)p+0)<<8|\
|
||||||
|
(u_short)*((u_char *)p+1)<<0))
|
||||||
|
#define EXTRACT_LONG(p)\
|
||||||
|
((u_int32)*((u_char *)p+0)<<24|\
|
||||||
|
(u_int32)*((u_char *)p+1)<<16|\
|
||||||
|
(u_int32)*((u_char *)p+2)<<8|\
|
||||||
|
(u_int32)*((u_char *)p+3)<<0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef KERNEL
|
||||||
|
#include <sys/mbuf.h>
|
||||||
|
#define MINDEX(len, m, k) \
|
||||||
|
{ \
|
||||||
|
len = m->m_len; \
|
||||||
|
while (k >= len) { \
|
||||||
|
k -= len; \
|
||||||
|
m = m->m_next; \
|
||||||
|
if (m == 0) \
|
||||||
|
return 0; \
|
||||||
|
len = m->m_len; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
m_xword(m, k, err)
|
||||||
|
register struct mbuf *m;
|
||||||
|
register int k, *err;
|
||||||
|
{
|
||||||
|
register int len;
|
||||||
|
register u_char *cp, *np;
|
||||||
|
register struct mbuf *m0;
|
||||||
|
|
||||||
|
MINDEX(len, m, k);
|
||||||
|
cp = mtod(m, u_char *) + k;
|
||||||
|
if (len - k >= 4) {
|
||||||
|
*err = 0;
|
||||||
|
return EXTRACT_LONG(cp);
|
||||||
|
}
|
||||||
|
m0 = m->m_next;
|
||||||
|
if (m0 == 0 || m0->m_len + len - k < 4)
|
||||||
|
goto bad;
|
||||||
|
*err = 0;
|
||||||
|
np = mtod(m0, u_char *);
|
||||||
|
switch (len - k) {
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return (cp[0] << 24) | (np[0] << 16) | (np[1] << 8) | np[2];
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return (cp[0] << 24) | (cp[1] << 16) | (np[0] << 8) | np[1];
|
||||||
|
|
||||||
|
default:
|
||||||
|
return (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | np[0];
|
||||||
|
}
|
||||||
|
bad:
|
||||||
|
*err = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
m_xhalf(m, k, err)
|
||||||
|
register struct mbuf *m;
|
||||||
|
register int k, *err;
|
||||||
|
{
|
||||||
|
register int len;
|
||||||
|
register u_char *cp;
|
||||||
|
register struct mbuf *m0;
|
||||||
|
|
||||||
|
MINDEX(len, m, k);
|
||||||
|
cp = mtod(m, u_char *) + k;
|
||||||
|
if (len - k >= 2) {
|
||||||
|
*err = 0;
|
||||||
|
return EXTRACT_SHORT(cp);
|
||||||
|
}
|
||||||
|
m0 = m->m_next;
|
||||||
|
if (m0 == 0)
|
||||||
|
goto bad;
|
||||||
|
*err = 0;
|
||||||
|
return (cp[0] << 8) | mtod(m0, u_char *)[0];
|
||||||
|
bad:
|
||||||
|
*err = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Execute the filter program starting at pc on the packet p
|
||||||
|
* wirelen is the length of the original packet
|
||||||
|
* buflen is the amount of data present
|
||||||
|
*/
|
||||||
|
u_int
|
||||||
|
bpf_filter(pc, p, wirelen, buflen)
|
||||||
|
register struct bpf_insn *pc;
|
||||||
|
register u_char *p;
|
||||||
|
u_int wirelen;
|
||||||
|
register u_int buflen;
|
||||||
|
{
|
||||||
|
register u_int32 A, X;
|
||||||
|
register int k;
|
||||||
|
int32 mem[BPF_MEMWORDS];
|
||||||
|
|
||||||
|
if (pc == 0)
|
||||||
|
/*
|
||||||
|
* No filter means accept all.
|
||||||
|
*/
|
||||||
|
return (u_int)-1;
|
||||||
|
A = 0;
|
||||||
|
X = 0;
|
||||||
|
--pc;
|
||||||
|
while (1) {
|
||||||
|
++pc;
|
||||||
|
switch (pc->code) {
|
||||||
|
|
||||||
|
default:
|
||||||
|
#ifdef KERNEL
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
abort();
|
||||||
|
#endif
|
||||||
|
case BPF_RET|BPF_K:
|
||||||
|
return (u_int)pc->k;
|
||||||
|
|
||||||
|
case BPF_RET|BPF_A:
|
||||||
|
return (u_int)A;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_ABS:
|
||||||
|
k = pc->k;
|
||||||
|
if (k + sizeof(int32) > buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
int merr;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
A = m_xword((struct mbuf *)p, k, &merr);
|
||||||
|
if (merr != 0)
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = EXTRACT_LONG(&p[k]);
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_H|BPF_ABS:
|
||||||
|
k = pc->k;
|
||||||
|
if (k + sizeof(short) > buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
int merr;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
A = m_xhalf((struct mbuf *)p, k, &merr);
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = EXTRACT_SHORT(&p[k]);
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_B|BPF_ABS:
|
||||||
|
k = pc->k;
|
||||||
|
if (k >= buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
register struct mbuf *m;
|
||||||
|
register int len;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
m = (struct mbuf *)p;
|
||||||
|
MINDEX(len, m, k);
|
||||||
|
A = mtod(m, u_char *)[k];
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = p[k];
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_LEN:
|
||||||
|
A = wirelen;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_W|BPF_LEN:
|
||||||
|
X = wirelen;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_IND:
|
||||||
|
k = X + pc->k;
|
||||||
|
if (k + sizeof(int32) > buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
int merr;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
A = m_xword((struct mbuf *)p, k, &merr);
|
||||||
|
if (merr != 0)
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = EXTRACT_LONG(&p[k]);
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_H|BPF_IND:
|
||||||
|
k = X + pc->k;
|
||||||
|
if (k + sizeof(short) > buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
int merr;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
A = m_xhalf((struct mbuf *)p, k, &merr);
|
||||||
|
if (merr != 0)
|
||||||
|
return 0;
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = EXTRACT_SHORT(&p[k]);
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_B|BPF_IND:
|
||||||
|
k = X + pc->k;
|
||||||
|
if (k >= buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
register struct mbuf *m;
|
||||||
|
register int len;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
m = (struct mbuf *)p;
|
||||||
|
MINDEX(len, m, k);
|
||||||
|
A = mtod(m, u_char *)[k];
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
A = p[k];
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_MSH|BPF_B:
|
||||||
|
k = pc->k;
|
||||||
|
if (k >= buflen) {
|
||||||
|
#ifdef KERNEL
|
||||||
|
register struct mbuf *m;
|
||||||
|
register int len;
|
||||||
|
|
||||||
|
if (buflen != 0)
|
||||||
|
return 0;
|
||||||
|
m = (struct mbuf *)p;
|
||||||
|
MINDEX(len, m, k);
|
||||||
|
X = (mtod(m, char *)[k] & 0xf) << 2;
|
||||||
|
continue;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
X = (p[pc->k] & 0xf) << 2;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_IMM:
|
||||||
|
A = pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_IMM:
|
||||||
|
X = pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_MEM:
|
||||||
|
A = mem[pc->k];
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_MEM:
|
||||||
|
X = mem[pc->k];
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ST:
|
||||||
|
mem[pc->k] = A;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_STX:
|
||||||
|
mem[pc->k] = X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JA:
|
||||||
|
pc += pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGT|BPF_K:
|
||||||
|
pc += (A > pc->k) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGE|BPF_K:
|
||||||
|
pc += (A >= pc->k) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JEQ|BPF_K:
|
||||||
|
pc += (A == pc->k) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JSET|BPF_K:
|
||||||
|
pc += (A & pc->k) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGT|BPF_X:
|
||||||
|
pc += (A > X) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGE|BPF_X:
|
||||||
|
pc += (A >= X) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JEQ|BPF_X:
|
||||||
|
pc += (A == X) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JSET|BPF_X:
|
||||||
|
pc += (A & X) ? pc->jt : pc->jf;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_ADD|BPF_X:
|
||||||
|
A += X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_SUB|BPF_X:
|
||||||
|
A -= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_MUL|BPF_X:
|
||||||
|
A *= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_DIV|BPF_X:
|
||||||
|
if (X == 0)
|
||||||
|
return 0;
|
||||||
|
A /= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_AND|BPF_X:
|
||||||
|
A &= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_OR|BPF_X:
|
||||||
|
A |= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_LSH|BPF_X:
|
||||||
|
A <<= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_RSH|BPF_X:
|
||||||
|
A >>= X;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_ADD|BPF_K:
|
||||||
|
A += pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_SUB|BPF_K:
|
||||||
|
A -= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_MUL|BPF_K:
|
||||||
|
A *= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_DIV|BPF_K:
|
||||||
|
A /= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_AND|BPF_K:
|
||||||
|
A &= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_OR|BPF_K:
|
||||||
|
A |= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_LSH|BPF_K:
|
||||||
|
A <<= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_RSH|BPF_K:
|
||||||
|
A >>= pc->k;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_NEG:
|
||||||
|
A = -A;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_MISC|BPF_TAX:
|
||||||
|
X = A;
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case BPF_MISC|BPF_TXA:
|
||||||
|
A = X;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef KERNEL
|
||||||
|
/*
|
||||||
|
* Return true if the 'fcode' is a valid filter program.
|
||||||
|
* The constraints are that each jump be forward and to a valid
|
||||||
|
* code. The code must terminate with either an accept or reject.
|
||||||
|
* 'valid' is an array for use by the routine (it must be at least
|
||||||
|
* 'len' bytes long).
|
||||||
|
*
|
||||||
|
* The kernel needs to be able to verify an application's filter code.
|
||||||
|
* Otherwise, a bogus program could easily crash the system.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
bpf_validate(f, len)
|
||||||
|
struct bpf_insn *f;
|
||||||
|
int len;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register struct bpf_insn *p;
|
||||||
|
|
||||||
|
for (i = 0; i < len; ++i) {
|
||||||
|
/*
|
||||||
|
* Check that that jumps are forward, and within
|
||||||
|
* the code block.
|
||||||
|
*/
|
||||||
|
p = &f[i];
|
||||||
|
if (BPF_CLASS(p->code) == BPF_JMP) {
|
||||||
|
register int from = i + 1;
|
||||||
|
|
||||||
|
if (BPF_OP(p->code) == BPF_JA) {
|
||||||
|
if (from + p->k >= (unsigned)len)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if (from + p->jt >= len || from + p->jf >= len)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Check that memory operations use valid addresses.
|
||||||
|
*/
|
||||||
|
if ((BPF_CLASS(p->code) == BPF_ST ||
|
||||||
|
(BPF_CLASS(p->code) == BPF_LD &&
|
||||||
|
(p->code & 0xe0) == BPF_MEM)) &&
|
||||||
|
(p->k >= BPF_MEMWORDS || p->k < 0))
|
||||||
|
return 0;
|
||||||
|
/*
|
||||||
|
* Check for constant division by 0.
|
||||||
|
*/
|
||||||
|
if (p->code == (BPF_ALU|BPF_DIV|BPF_K) && p->k == 0)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return BPF_CLASS(f[len - 1].code) == BPF_RET;
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -0,0 +1 @@
|
||||||
|
bpf/net/bpf_filter.c
|
|
@ -0,0 +1,288 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1990, 1991, 1992, 1994, 1995, 1996
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that: (1) source code distributions
|
||||||
|
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
* distributions including binary code include the above copyright notice and
|
||||||
|
* this paragraph in its entirety in the documentation or other materials
|
||||||
|
* provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
* features or use of this software display the following acknowledgement:
|
||||||
|
* ``This product includes software developed by the University of California,
|
||||||
|
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
* the University nor the names of its contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef lint
|
||||||
|
static const char rcsid[] =
|
||||||
|
"@(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/bpf_image.c,v 1.1 1999/08/26 10:05:20 johana Exp $ (LBL)";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "pcap-int.h"
|
||||||
|
|
||||||
|
#include "gnuc.h"
|
||||||
|
#ifdef HAVE_OS_PROTO_H
|
||||||
|
#include "os-proto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char *
|
||||||
|
bpf_image(p, n)
|
||||||
|
struct bpf_insn *p;
|
||||||
|
int n;
|
||||||
|
{
|
||||||
|
int v;
|
||||||
|
char *fmt, *op;
|
||||||
|
static char image[256];
|
||||||
|
char operand[64];
|
||||||
|
|
||||||
|
v = p->k;
|
||||||
|
switch (p->code) {
|
||||||
|
|
||||||
|
default:
|
||||||
|
op = "unimp";
|
||||||
|
fmt = "0x%x";
|
||||||
|
v = p->code;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_RET|BPF_K:
|
||||||
|
op = "ret";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_RET|BPF_A:
|
||||||
|
op = "ret";
|
||||||
|
fmt = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_ABS:
|
||||||
|
op = "ld";
|
||||||
|
fmt = "[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_H|BPF_ABS:
|
||||||
|
op = "ldh";
|
||||||
|
fmt = "[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_B|BPF_ABS:
|
||||||
|
op = "ldb";
|
||||||
|
fmt = "[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_LEN:
|
||||||
|
op = "ld";
|
||||||
|
fmt = "#pktlen";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_W|BPF_IND:
|
||||||
|
op = "ld";
|
||||||
|
fmt = "[x + %d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_H|BPF_IND:
|
||||||
|
op = "ldh";
|
||||||
|
fmt = "[x + %d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_B|BPF_IND:
|
||||||
|
op = "ldb";
|
||||||
|
fmt = "[x + %d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_IMM:
|
||||||
|
op = "ld";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_IMM:
|
||||||
|
op = "ldx";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_MSH|BPF_B:
|
||||||
|
op = "ldxb";
|
||||||
|
fmt = "4*([%d]&0xf)";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LD|BPF_MEM:
|
||||||
|
op = "ld";
|
||||||
|
fmt = "M[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_LDX|BPF_MEM:
|
||||||
|
op = "ldx";
|
||||||
|
fmt = "M[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ST:
|
||||||
|
op = "st";
|
||||||
|
fmt = "M[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_STX:
|
||||||
|
op = "stx";
|
||||||
|
fmt = "M[%d]";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JA:
|
||||||
|
op = "ja";
|
||||||
|
fmt = "%d";
|
||||||
|
v = n + 1 + p->k;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGT|BPF_K:
|
||||||
|
op = "jgt";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGE|BPF_K:
|
||||||
|
op = "jge";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JEQ|BPF_K:
|
||||||
|
op = "jeq";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JSET|BPF_K:
|
||||||
|
op = "jset";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGT|BPF_X:
|
||||||
|
op = "jgt";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JGE|BPF_X:
|
||||||
|
op = "jge";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JEQ|BPF_X:
|
||||||
|
op = "jeq";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_JMP|BPF_JSET|BPF_X:
|
||||||
|
op = "jset";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_ADD|BPF_X:
|
||||||
|
op = "add";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_SUB|BPF_X:
|
||||||
|
op = "sub";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_MUL|BPF_X:
|
||||||
|
op = "mul";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_DIV|BPF_X:
|
||||||
|
op = "div";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_AND|BPF_X:
|
||||||
|
op = "and";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_OR|BPF_X:
|
||||||
|
op = "or";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_LSH|BPF_X:
|
||||||
|
op = "lsh";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_RSH|BPF_X:
|
||||||
|
op = "rsh";
|
||||||
|
fmt = "x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_ADD|BPF_K:
|
||||||
|
op = "add";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_SUB|BPF_K:
|
||||||
|
op = "sub";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_MUL|BPF_K:
|
||||||
|
op = "mul";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_DIV|BPF_K:
|
||||||
|
op = "div";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_AND|BPF_K:
|
||||||
|
op = "and";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_OR|BPF_K:
|
||||||
|
op = "or";
|
||||||
|
fmt = "#0x%x";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_LSH|BPF_K:
|
||||||
|
op = "lsh";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_RSH|BPF_K:
|
||||||
|
op = "rsh";
|
||||||
|
fmt = "#%d";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_ALU|BPF_NEG:
|
||||||
|
op = "neg";
|
||||||
|
fmt = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_MISC|BPF_TAX:
|
||||||
|
op = "tax";
|
||||||
|
fmt = "";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BPF_MISC|BPF_TXA:
|
||||||
|
op = "txa";
|
||||||
|
fmt = "";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
(void)sprintf(operand, fmt, v);
|
||||||
|
(void)sprintf(image,
|
||||||
|
(BPF_CLASS(p->code) == BPF_JMP &&
|
||||||
|
BPF_OP(p->code) != BPF_JA) ?
|
||||||
|
"(%03d) %-8s %-16s jt %d\tjf %d"
|
||||||
|
: "(%03d) %-8s %s",
|
||||||
|
n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
|
||||||
|
return image;
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
# This file is a shell script that caches the results of configure
|
||||||
|
# tests run on this system so they can be shared between configure
|
||||||
|
# scripts and configure runs. It is not useful on other systems.
|
||||||
|
# If it contains results you don't want to keep, you may remove or edit it.
|
||||||
|
#
|
||||||
|
# By default, configure uses ./config.cache as the cache file,
|
||||||
|
# creating it if it does not exist already. You can give configure
|
||||||
|
# the --cache-file=FILE option to use a different cache file; that is
|
||||||
|
# what configure does when it calls configure scripts in
|
||||||
|
# subdirectories, so they share the cache.
|
||||||
|
# Giving --cache-file=/dev/null disables caching, for debugging configure.
|
||||||
|
# config.status only pays attention to the cache file if you give it the
|
||||||
|
# --recheck option to rerun configure.
|
||||||
|
#
|
||||||
|
ac_cv_func_ether_hostton=${ac_cv_func_ether_hostton=yes}
|
||||||
|
ac_cv_func_strerror=${ac_cv_func_strerror=yes}
|
||||||
|
ac_cv_header_malloc_h=${ac_cv_header_malloc_h=yes}
|
||||||
|
ac_cv_header_net_if_arp_h=${ac_cv_header_net_if_arp_h=yes}
|
||||||
|
ac_cv_header_sys_ioccom_h=${ac_cv_header_sys_ioccom_h=no}
|
||||||
|
ac_cv_header_sys_sockio_h=${ac_cv_header_sys_sockio_h=no}
|
||||||
|
ac_cv_lbl_flex_v24=${ac_cv_lbl_flex_v24=yes}
|
||||||
|
ac_cv_lbl_gcc_fixincludes=${ac_cv_lbl_gcc_fixincludes=yes}
|
||||||
|
ac_cv_lbl_gcc_vers=${ac_cv_lbl_gcc_vers=4}
|
||||||
|
ac_cv_lbl_sockaddr_has_sa_len=${ac_cv_lbl_sockaddr_has_sa_len=no}
|
||||||
|
ac_cv_lbl_unaligned_fail=${ac_cv_lbl_unaligned_fail=no}
|
||||||
|
ac_cv_linux_vers=${ac_cv_linux_vers=2}
|
||||||
|
ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
|
||||||
|
ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
|
||||||
|
ac_cv_prog_V_LEX=${ac_cv_prog_V_LEX=flex}
|
||||||
|
ac_cv_prog_V_RANLIB=${ac_cv_prog_V_RANLIB=ranlib}
|
||||||
|
ac_cv_prog_V_YACC=${ac_cv_prog_V_YACC=bison}
|
||||||
|
ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross=no}
|
||||||
|
ac_cv_prog_cc_g=${ac_cv_prog_cc_g=yes}
|
||||||
|
ac_cv_prog_cc_works=${ac_cv_prog_cc_works=yes}
|
||||||
|
ac_cv_prog_gcc=${ac_cv_prog_gcc=yes}
|
693
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.guess
vendored
Executable file
693
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.guess
vendored
Executable file
|
@ -0,0 +1,693 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Attempt to guess a canonical system name.
|
||||||
|
# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but
|
||||||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Written by Per Bothner <bothner@cygnus.com>.
|
||||||
|
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||||
|
#
|
||||||
|
# This script attempts to guess a canonical system name similar to
|
||||||
|
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||||
|
# exits with 0. Otherwise, it exits with 1.
|
||||||
|
#
|
||||||
|
# The plan is that this can be called by configure scripts if you
|
||||||
|
# don't specify an explicit system type (host/target name).
|
||||||
|
#
|
||||||
|
# Only a few systems have been added to this list; please add others
|
||||||
|
# (but try to keep the structure clean).
|
||||||
|
#
|
||||||
|
|
||||||
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
|
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||||
|
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||||
|
PATH=$PATH:/.attbin ; export PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
||||||
|
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||||
|
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||||
|
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||||
|
|
||||||
|
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||||
|
|
||||||
|
# Note: order is significant - the case branches are not exclusive.
|
||||||
|
|
||||||
|
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||||
|
alpha:OSF1:*:*)
|
||||||
|
# A Vn.n version is a released version.
|
||||||
|
# A Tn.n version is a released field test version.
|
||||||
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
|
# 1.2 uses "1.2" for uname -r.
|
||||||
|
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
|
||||||
|
exit 0 ;;
|
||||||
|
21064:Windows_NT:50:3)
|
||||||
|
echo alpha-dec-winnt3.5
|
||||||
|
exit 0 ;;
|
||||||
|
Amiga*:UNIX_System_V:4.0:*)
|
||||||
|
echo m68k-cbm-sysv4
|
||||||
|
exit 0;;
|
||||||
|
amiga:NetBSD:*:*)
|
||||||
|
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
amiga:OpenBSD:*:*)
|
||||||
|
echo m68k-cbm-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
|
exit 0;;
|
||||||
|
Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
|
||||||
|
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
|
||||||
|
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||||
|
echo pyramid-pyramid-sysv3
|
||||||
|
else
|
||||||
|
echo pyramid-pyramid-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
NILE:*:*:dcosx)
|
||||||
|
echo pyramid-pyramid-svr4
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
|
||||||
|
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
i86pc:SunOS:5.*:*)
|
||||||
|
echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:6*:*)
|
||||||
|
# According to config.sub, this is the proper way to canonicalize
|
||||||
|
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
||||||
|
# it's likely to be more like Solaris than SunOS4.
|
||||||
|
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun4*:SunOS:*:*)
|
||||||
|
case "`/usr/bin/arch -k`" in
|
||||||
|
Series*|S4*)
|
||||||
|
UNAME_RELEASE=`uname -v`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||||
|
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:SunOS:*:*)
|
||||||
|
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
aushp:SunOS:*:*)
|
||||||
|
echo sparc-auspex-sunos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:NetBSD:*:*)
|
||||||
|
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
atari*:OpenBSD:*:*)
|
||||||
|
echo m68k-atari-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:NetBSD:*:*)
|
||||||
|
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
sun3*:OpenBSD:*:*)
|
||||||
|
echo m68k-sun-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:NetBSD:*:*)
|
||||||
|
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mac68k:OpenBSD:*:*)
|
||||||
|
echo m68k-apple-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
powerpc:machten:*:*)
|
||||||
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
RISC*:Mach:*:*)
|
||||||
|
echo mips-dec-mach_bsd4.3
|
||||||
|
exit 0 ;;
|
||||||
|
RISC*:ULTRIX:*:*)
|
||||||
|
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
VAX*:ULTRIX*:*:*)
|
||||||
|
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mips:*:*:UMIPS | mips:*:*:RISCos)
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
int main (argc, argv) int argc; char **argv; {
|
||||||
|
#if defined (host_mips) && defined (MIPSEB)
|
||||||
|
#if defined (SYSTYPE_SYSV)
|
||||||
|
printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (SYSTYPE_SVR4)
|
||||||
|
printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
|
||||||
|
printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
exit (-1);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy \
|
||||||
|
&& ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
|
&& rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
|
echo powerpc-harris-powerunix
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:CX/UX:7*:*)
|
||||||
|
echo m88k-harris-cxux7
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:*:4*:R4*)
|
||||||
|
echo m88k-motorola-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
m88k:*:3*:R3*)
|
||||||
|
echo m88k-motorola-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
AViiON:dgux:*:*)
|
||||||
|
# DG/UX returns AViiON for all architectures
|
||||||
|
UNAME_PROCESSOR=`/usr/bin/uname -p`
|
||||||
|
if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
|
||||||
|
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||||
|
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||||
|
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
else echo i586-dg-dgux${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||||
|
echo m88k-dolphin-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
M88*:*:R3*:*)
|
||||||
|
# Delta 88k system running SVR3
|
||||||
|
echo m88k-motorola-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
||||||
|
echo m88k-tektronix-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||||
|
echo m68k-tektronix-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
*:IRIX*:*:*)
|
||||||
|
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||||
|
exit 0 ;;
|
||||||
|
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||||
|
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||||
|
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||||
|
i?86:AIX:*:*)
|
||||||
|
echo i386-ibm-aix
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:2:3)
|
||||||
|
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
#include <sys/systemcfg.h>
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
if (!__power_pc())
|
||||||
|
exit(1);
|
||||||
|
puts("powerpc-ibm-aix3.2.5");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo rs6000-ibm-aix3.2.5
|
||||||
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
|
echo rs6000-ibm-aix3.2.4
|
||||||
|
else
|
||||||
|
echo rs6000-ibm-aix3.2
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:*:4)
|
||||||
|
if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
|
||||||
|
IBM_ARCH=rs6000
|
||||||
|
else
|
||||||
|
IBM_ARCH=powerpc
|
||||||
|
fi
|
||||||
|
if [ -x /usr/bin/oslevel ] ; then
|
||||||
|
IBM_REV=`/usr/bin/oslevel`
|
||||||
|
else
|
||||||
|
IBM_REV=4.${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||||
|
exit 0 ;;
|
||||||
|
*:AIX:*:*)
|
||||||
|
echo rs6000-ibm-aix
|
||||||
|
exit 0 ;;
|
||||||
|
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||||
|
echo romp-ibm-bsd4.4
|
||||||
|
exit 0 ;;
|
||||||
|
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||||
|
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||||
|
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||||
|
*:BOSX:*:*)
|
||||||
|
echo rs6000-bull-bosx
|
||||||
|
exit 0 ;;
|
||||||
|
DPX/2?00:B.O.S.:*:*)
|
||||||
|
echo m68k-bull-sysv3
|
||||||
|
exit 0 ;;
|
||||||
|
9000/[34]??:4.3bsd:1.*:*)
|
||||||
|
echo m68k-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
||||||
|
echo m68k-hp-bsd4.4
|
||||||
|
exit 0 ;;
|
||||||
|
9000/[3478]??:HP-UX:*:*)
|
||||||
|
case "${UNAME_MACHINE}" in
|
||||||
|
9000/31? ) HP_ARCH=m68000 ;;
|
||||||
|
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||||
|
9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
|
||||||
|
9000/8?? ) HP_ARCH=hppa1.0 ;;
|
||||||
|
esac
|
||||||
|
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||||
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
|
exit 0 ;;
|
||||||
|
3050*:HI-UX:*:*)
|
||||||
|
sed 's/^ //' << EOF >dummy.c
|
||||||
|
#include <unistd.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
long cpu = sysconf (_SC_CPU_VERSION);
|
||||||
|
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
||||||
|
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
||||||
|
results, however. */
|
||||||
|
if (CPU_IS_PA_RISC (cpu))
|
||||||
|
{
|
||||||
|
switch (cpu)
|
||||||
|
{
|
||||||
|
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
||||||
|
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
||||||
|
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
||||||
|
default: puts ("hppa-hitachi-hiuxwe2"); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (CPU_IS_HP_MC68K (cpu))
|
||||||
|
puts ("m68k-hitachi-hiuxwe2");
|
||||||
|
else puts ("unknown-hitachi-hiuxwe2");
|
||||||
|
exit (0);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
echo unknown-hitachi-hiuxwe2
|
||||||
|
exit 0 ;;
|
||||||
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
|
echo hppa1.1-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
9000/8??:4.3bsd:*:*)
|
||||||
|
echo hppa1.0-hp-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||||
|
echo hppa1.1-hp-osf
|
||||||
|
exit 0 ;;
|
||||||
|
hp8??:OSF1:*:*)
|
||||||
|
echo hppa1.0-hp-osf
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:OSF1:*:*)
|
||||||
|
if [ -x /usr/sbin/sysversion ] ; then
|
||||||
|
echo ${UNAME_MACHINE}-unknown-osf1mk
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-unknown-osf1
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
parisc*:Lites*:*:*)
|
||||||
|
echo hppa1.1-hp-lites
|
||||||
|
exit 0 ;;
|
||||||
|
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||||
|
echo c1-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
||||||
|
if getsysinfo -f scalar_acc
|
||||||
|
then echo c32-convex-bsd
|
||||||
|
else echo c2-convex-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
||||||
|
echo c34-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
||||||
|
echo c38-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||||
|
echo c4-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*X-MP:*:*:*)
|
||||||
|
echo xmp-cray-unicos
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*Y-MP:*:*:*)
|
||||||
|
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*[A-Z]90:*:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
|
||||||
|
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
|
||||||
|
-e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY*TS:*:*:*)
|
||||||
|
echo t90-cray-unicos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
CRAY-2:*:*:*)
|
||||||
|
echo cray2-cray-unicos
|
||||||
|
exit 0 ;;
|
||||||
|
F300:UNIX_System_V:*:*)
|
||||||
|
FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
|
||||||
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
|
echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
|
exit 0 ;;
|
||||||
|
F301:UNIX_System_V:*:*)
|
||||||
|
echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
hp3[0-9][05]:NetBSD:*:*)
|
||||||
|
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
hp3[0-9][05]:OpenBSD:*:*)
|
||||||
|
echo m68k-hp-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:FreeBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:NetBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:OpenBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
exit 0 ;;
|
||||||
|
i*:CYGWIN*:*)
|
||||||
|
echo i386-pc-cygwin32
|
||||||
|
exit 0 ;;
|
||||||
|
p*:CYGWIN*:*)
|
||||||
|
echo powerpcle-unknown-cygwin32
|
||||||
|
exit 0 ;;
|
||||||
|
prep*:SunOS:5.*:*)
|
||||||
|
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:GNU:*:*)
|
||||||
|
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:Linux:*:*)
|
||||||
|
# The BFD linker knows what the default object file format is, so
|
||||||
|
# first see if it will tell us.
|
||||||
|
ld_help_string=`ld --help 2>&1`
|
||||||
|
if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
|
||||||
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
|
||||||
|
echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
|
||||||
|
elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
|
||||||
|
echo "powerpc-unknown-linux-gnu" ; exit 0
|
||||||
|
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||||
|
echo alpha-unknown-linux-gnu ; exit 0
|
||||||
|
elif test "${UNAME_MACHINE}" = "sparc" ; then
|
||||||
|
echo sparc-unknown-linux-gnu ; exit 0
|
||||||
|
else
|
||||||
|
# Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
|
||||||
|
# useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
|
||||||
|
test ! -d /usr/lib/ldscripts/. \
|
||||||
|
&& echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
|
||||||
|
# Determine whether the default compiler is a.out or elf
|
||||||
|
cat >dummy.c <<EOF
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
#ifdef __ELF__
|
||||||
|
printf ("%s-pc-linux-gnu\n", argv[1]);
|
||||||
|
#else
|
||||||
|
printf ("%s-pc-linux-gnuaout\n", argv[1]);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
fi ;;
|
||||||
|
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||||
|
# are messed up and put the nodename in both sysname and nodename.
|
||||||
|
i?86:DYNIX/ptx:4*:*)
|
||||||
|
echo i386-sequent-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||||
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
|
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:*:3.2:*)
|
||||||
|
if test -f /usr/options/cb.name; then
|
||||||
|
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||||
|
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
|
||||||
|
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||||
|
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||||
|
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||||
|
(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
|
||||||
|
&& UNAME_MACHINE=i586
|
||||||
|
echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
|
||||||
|
else
|
||||||
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
Intel:Mach:3*:*)
|
||||||
|
echo i386-pc-mach3
|
||||||
|
exit 0 ;;
|
||||||
|
paragon:*:*:*)
|
||||||
|
echo i860-intel-osf1
|
||||||
|
exit 0 ;;
|
||||||
|
i860:*:4.*:*) # i860-SVR4
|
||||||
|
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
||||||
|
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
||||||
|
else # Add other i860-SVR4 vendors below as they are discovered.
|
||||||
|
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
mini*:CTIX:SYS*5:*)
|
||||||
|
# "miniframe"
|
||||||
|
echo m68010-convergent-sysv
|
||||||
|
exit 0 ;;
|
||||||
|
M68*:*:R3V[567]*:*)
|
||||||
|
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||||
|
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
|
||||||
|
OS_REL=''
|
||||||
|
test -r /etc/.relid \
|
||||||
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
|
&& echo i486-ncr-sysv4.3${OS_REL} && exit 0
|
||||||
|
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
|
||||||
|
&& echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
|
||||||
|
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||||
|
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||||
|
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||||
|
m68*:LynxOS:2.*:*)
|
||||||
|
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
mc68030:UNIX_System_V:4.*:*)
|
||||||
|
echo m68k-atari-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
i?86:LynxOS:2.*:*)
|
||||||
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
|
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
|
||||||
|
echo rs6000-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
SM[BE]S:UNIX_SV:*:*)
|
||||||
|
echo mips-dde-sysv${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
RM*:SINIX-*:*:*)
|
||||||
|
echo mips-sni-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
*:SINIX-*:*:*)
|
||||||
|
if uname -p 2>/dev/null >/dev/null ; then
|
||||||
|
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||||
|
echo ${UNAME_MACHINE}-sni-sysv4
|
||||||
|
else
|
||||||
|
echo ns32k-sni-sysv
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
*:UNIX_System_V:4*:FTX*)
|
||||||
|
# From Gerald Hewes <hewes@openmarket.com>.
|
||||||
|
# How about differentiating between stratus architectures? -djm
|
||||||
|
echo hppa1.1-stratus-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
*:*:*:FTX*)
|
||||||
|
# From seanf@swdc.stratus.com.
|
||||||
|
echo i860-stratus-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
mc68*:A/UX:*:*)
|
||||||
|
echo m68k-apple-aux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
|
||||||
|
if [ -d /usr/nec ]; then
|
||||||
|
echo mips-nec-sysv${UNAME_RELEASE}
|
||||||
|
else
|
||||||
|
echo mips-unknown-sysv${UNAME_RELEASE}
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
|
||||||
|
# says <Richard.M.Bartel@ccMail.Census.GOV>
|
||||||
|
echo i586-unisys-sysv4
|
||||||
|
exit 0 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||||
|
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||||
|
|
||||||
|
cat >dummy.c <<EOF
|
||||||
|
#ifdef _SEQUENT_
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/utsname.h>
|
||||||
|
#endif
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
#if defined (sony)
|
||||||
|
#if defined (MIPSEB)
|
||||||
|
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||||
|
I don't know.... */
|
||||||
|
printf ("mips-sony-bsd\n"); exit (0);
|
||||||
|
#else
|
||||||
|
#include <sys/param.h>
|
||||||
|
printf ("m68k-sony-newsos%s\n",
|
||||||
|
#ifdef NEWSOS4
|
||||||
|
"4"
|
||||||
|
#else
|
||||||
|
""
|
||||||
|
#endif
|
||||||
|
); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||||
|
printf ("arm-acorn-riscix"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (hp300) && !defined (hpux)
|
||||||
|
printf ("m68k-hp-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (NeXT)
|
||||||
|
#if !defined (__ARCHITECTURE__)
|
||||||
|
#define __ARCHITECTURE__ "m68k"
|
||||||
|
#endif
|
||||||
|
int version;
|
||||||
|
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||||
|
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
|
||||||
|
exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (MULTIMAX) || defined (n16)
|
||||||
|
#if defined (UMAXV)
|
||||||
|
printf ("ns32k-encore-sysv\n"); exit (0);
|
||||||
|
#else
|
||||||
|
#if defined (CMU)
|
||||||
|
printf ("ns32k-encore-mach\n"); exit (0);
|
||||||
|
#else
|
||||||
|
printf ("ns32k-encore-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (__386BSD__)
|
||||||
|
printf ("i386-pc-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (sequent)
|
||||||
|
#if defined (i386)
|
||||||
|
printf ("i386-sequent-dynix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#if defined (ns32000)
|
||||||
|
printf ("ns32k-sequent-dynix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (_SEQUENT_)
|
||||||
|
struct utsname un;
|
||||||
|
|
||||||
|
uname(&un);
|
||||||
|
|
||||||
|
if (strncmp(un.version, "V2", 2) == 0) {
|
||||||
|
printf ("i386-sequent-ptx2\n"); exit (0);
|
||||||
|
}
|
||||||
|
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
||||||
|
printf ("i386-sequent-ptx1\n"); exit (0);
|
||||||
|
}
|
||||||
|
printf ("i386-sequent-ptx\n"); exit (0);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (vax)
|
||||||
|
#if !defined (ultrix)
|
||||||
|
printf ("vax-dec-bsd\n"); exit (0);
|
||||||
|
#else
|
||||||
|
printf ("vax-dec-ultrix\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (alliant) && defined (i860)
|
||||||
|
printf ("i860-alliant-bsd\n"); exit (0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
|
||||||
|
rm -f dummy.c dummy
|
||||||
|
|
||||||
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
|
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
|
||||||
|
|
||||||
|
# Convex versions that predate uname can use getsysinfo(1)
|
||||||
|
|
||||||
|
if [ -x /usr/convex/getsysinfo ]
|
||||||
|
then
|
||||||
|
case `getsysinfo -f cpu_type` in
|
||||||
|
c1*)
|
||||||
|
echo c1-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c2*)
|
||||||
|
if getsysinfo -f scalar_acc
|
||||||
|
then echo c32-convex-bsd
|
||||||
|
else echo c2-convex-bsd
|
||||||
|
fi
|
||||||
|
exit 0 ;;
|
||||||
|
c34*)
|
||||||
|
echo c34-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c38*)
|
||||||
|
echo c38-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
c4*)
|
||||||
|
echo c4-convex-bsd
|
||||||
|
exit 0 ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo '(Unable to guess system type)' 1>&2
|
||||||
|
|
||||||
|
exit 1
|
|
@ -0,0 +1,61 @@
|
||||||
|
This file contains any messages produced by compilers while
|
||||||
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
|
configure:578: checking host system type
|
||||||
|
configure:599: checking target system type
|
||||||
|
configure:617: checking build system type
|
||||||
|
configure:711: checking for gcc
|
||||||
|
configure:788: checking whether the C compiler (gcc ) works
|
||||||
|
configure:802: gcc -o conftest conftest.c 1>&5
|
||||||
|
configure:822: checking whether the C compiler (gcc ) is a cross-compiler
|
||||||
|
configure:827: checking whether we are using GNU C
|
||||||
|
configure:836: gcc -E conftest.c
|
||||||
|
configure:851: checking whether gcc accepts -g
|
||||||
|
configure:884: checking gcc version
|
||||||
|
configure:1028: checking how to run the C preprocessor
|
||||||
|
configure:1049: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||||
|
configure:1092: checking for malloc.h
|
||||||
|
configure:1102: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||||
|
configure:1092: checking for sys/ioccom.h
|
||||||
|
configure:1102: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||||
|
configure:1098:24: error: sys/ioccom.h: No such file or directory
|
||||||
|
configure: failed program was:
|
||||||
|
#line 1097 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
#include <sys/ioccom.h>
|
||||||
|
configure:1092: checking for sys/sockio.h
|
||||||
|
configure:1102: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||||
|
configure:1098:24: error: sys/sockio.h: No such file or directory
|
||||||
|
configure: failed program was:
|
||||||
|
#line 1097 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
#include <sys/sockio.h>
|
||||||
|
configure:1131: checking for ANSI ioctl definitions
|
||||||
|
configure:1155: gcc -c -g -O2 conftest.c 1>&5
|
||||||
|
configure:1178: checking for ether_hostton
|
||||||
|
configure:1206: gcc -o conftest -g -O2 conftest.c 1>&5
|
||||||
|
configure:1178: checking for strerror
|
||||||
|
configure:1206: gcc -o conftest -g -O2 conftest.c 1>&5
|
||||||
|
configure:1238: checking packet capture type
|
||||||
|
configure:1341: checking for net/if_arp.h
|
||||||
|
configure:1351: gcc -E conftest.c >/dev/null 2>conftest.out
|
||||||
|
configure:1378: checking Linux kernel version
|
||||||
|
configure:1419: checking for flex
|
||||||
|
configure:1452: checking for flex 2.4 or higher
|
||||||
|
configure:1478: checking for bison
|
||||||
|
configure:1602: checking for ranlib
|
||||||
|
configure:1672: checking if sockaddr struct has sa_len member
|
||||||
|
configure:1686: gcc -c -g -O2 conftest.c 1>&5
|
||||||
|
configure: In function 'main':
|
||||||
|
configure:1682: error: 'struct sockaddr' has no member named 'sa_len'
|
||||||
|
configure: failed program was:
|
||||||
|
#line 1677 "configure"
|
||||||
|
#include "confdefs.h"
|
||||||
|
|
||||||
|
# include <sys/types.h>
|
||||||
|
# include <sys/socket.h>
|
||||||
|
int main() {
|
||||||
|
u_int i = sizeof(((struct sockaddr *)0)->sa_len)
|
||||||
|
; return 0; }
|
||||||
|
configure:1707: checking if unaligned accesses fail
|
||||||
|
configure:1803: checking for a BSD compatible install
|
179
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.status
Executable file
179
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.status
Executable file
|
@ -0,0 +1,179 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Generated automatically by configure.
|
||||||
|
# Run this file to recreate the current configuration.
|
||||||
|
# This directory was configured as follows,
|
||||||
|
# on host bertha:
|
||||||
|
#
|
||||||
|
# ./configure
|
||||||
|
#
|
||||||
|
# Compiler output produced by configure, useful for debugging
|
||||||
|
# configure, is in ./config.log if it exists.
|
||||||
|
|
||||||
|
ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
|
||||||
|
for ac_option
|
||||||
|
do
|
||||||
|
case "$ac_option" in
|
||||||
|
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||||
|
echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion"
|
||||||
|
exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;;
|
||||||
|
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
|
||||||
|
echo "./config.status generated by autoconf version 2.12"
|
||||||
|
exit 0 ;;
|
||||||
|
-help | --help | --hel | --he | --h)
|
||||||
|
echo "$ac_cs_usage"; exit 0 ;;
|
||||||
|
*) echo "$ac_cs_usage"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
ac_given_srcdir=.
|
||||||
|
ac_given_INSTALL=" install_elinux -p"
|
||||||
|
|
||||||
|
trap 'rm -fr Makefile conftest*; exit 1' 1 2 15
|
||||||
|
|
||||||
|
# Protect against being on the right side of a sed subst in config.status.
|
||||||
|
sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
|
||||||
|
s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
|
||||||
|
/^[ ]*VPATH[ ]*=[^:]*$/d
|
||||||
|
|
||||||
|
s%@CFLAGS@%-g -O2%g
|
||||||
|
s%@CPPFLAGS@%%g
|
||||||
|
s%@CXXFLAGS@%%g
|
||||||
|
s%@DEFS@% -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1 %g
|
||||||
|
s%@LDFLAGS@%%g
|
||||||
|
s%@LIBS@%%g
|
||||||
|
s%@exec_prefix@%${prefix}%g
|
||||||
|
s%@prefix@%/usr/local%g
|
||||||
|
s%@program_transform_name@%s,x,x,%g
|
||||||
|
s%@bindir@%${exec_prefix}/bin%g
|
||||||
|
s%@sbindir@%${exec_prefix}/sbin%g
|
||||||
|
s%@libexecdir@%${exec_prefix}/libexec%g
|
||||||
|
s%@datadir@%${prefix}/share%g
|
||||||
|
s%@sysconfdir@%${prefix}/etc%g
|
||||||
|
s%@sharedstatedir@%${prefix}/com%g
|
||||||
|
s%@localstatedir@%${prefix}/var%g
|
||||||
|
s%@libdir@%${exec_prefix}/lib%g
|
||||||
|
s%@includedir@%${prefix}/include%g
|
||||||
|
s%@oldincludedir@%/usr/include%g
|
||||||
|
s%@infodir@%${prefix}/info%g
|
||||||
|
s%@mandir@%${prefix}/man%g
|
||||||
|
s%@host@%i686-pc-linux-gnu%g
|
||||||
|
s%@host_alias@%i686-pc-linux-gnu%g
|
||||||
|
s%@host_cpu@%i686%g
|
||||||
|
s%@host_vendor@%pc%g
|
||||||
|
s%@host_os@%linux-gnu%g
|
||||||
|
s%@target@%i686-pc-linux-gnu%g
|
||||||
|
s%@target_alias@%i686-pc-linux-gnu%g
|
||||||
|
s%@target_cpu@%i686%g
|
||||||
|
s%@target_vendor@%pc%g
|
||||||
|
s%@target_os@%linux-gnu%g
|
||||||
|
s%@build@%i686-pc-linux-gnu%g
|
||||||
|
s%@build_alias@%i686-pc-linux-gnu%g
|
||||||
|
s%@build_cpu@%i686%g
|
||||||
|
s%@build_vendor@%pc%g
|
||||||
|
s%@build_os@%linux-gnu%g
|
||||||
|
s%@SHLICC2@%%g
|
||||||
|
s%@CC@%gcc%g
|
||||||
|
s%@CPP@%gcc -E%g
|
||||||
|
s%@V_LEX@%flex -Ppcap_%g
|
||||||
|
s%@V_YACC@%bison -y -p pcap_%g
|
||||||
|
s%@V_RANLIB@%ranlib%g
|
||||||
|
s%@V_CCOPT@%-O2%g
|
||||||
|
s%@V_INCLS@% -Ilinux-include%g
|
||||||
|
s%@V_PCAP@%linux%g
|
||||||
|
s%@INSTALL_PROGRAM@%${INSTALL}%g
|
||||||
|
s%@INSTALL_DATA@%${INSTALL} -m 644%g
|
||||||
|
|
||||||
|
CEOF
|
||||||
|
|
||||||
|
# Split the substitutions into bite-sized pieces for seds with
|
||||||
|
# small command number limits, like on Digital OSF/1 and HP-UX.
|
||||||
|
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
|
||||||
|
ac_file=1 # Number of current file.
|
||||||
|
ac_beg=1 # First line for current file.
|
||||||
|
ac_end=$ac_max_sed_cmds # Line after last line for current file.
|
||||||
|
ac_more_lines=:
|
||||||
|
ac_sed_cmds=""
|
||||||
|
while $ac_more_lines; do
|
||||||
|
if test $ac_beg -gt 1; then
|
||||||
|
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||||
|
else
|
||||||
|
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
|
||||||
|
fi
|
||||||
|
if test ! -s conftest.s$ac_file; then
|
||||||
|
ac_more_lines=false
|
||||||
|
rm -f conftest.s$ac_file
|
||||||
|
else
|
||||||
|
if test -z "$ac_sed_cmds"; then
|
||||||
|
ac_sed_cmds="sed -f conftest.s$ac_file"
|
||||||
|
else
|
||||||
|
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
|
||||||
|
fi
|
||||||
|
ac_file=`expr $ac_file + 1`
|
||||||
|
ac_beg=$ac_end
|
||||||
|
ac_end=`expr $ac_end + $ac_max_sed_cmds`
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if test -z "$ac_sed_cmds"; then
|
||||||
|
ac_sed_cmds=cat
|
||||||
|
fi
|
||||||
|
|
||||||
|
CONFIG_FILES=${CONFIG_FILES-"Makefile"}
|
||||||
|
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
|
||||||
|
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
|
||||||
|
case "$ac_file" in
|
||||||
|
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
|
||||||
|
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||||
|
*) ac_file_in="${ac_file}.in" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
|
||||||
|
|
||||||
|
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||||
|
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||||
|
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||||
|
# The file is in a subdirectory.
|
||||||
|
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||||
|
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
|
||||||
|
# A "../" for each directory in $ac_dir_suffix.
|
||||||
|
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
|
||||||
|
else
|
||||||
|
ac_dir_suffix= ac_dots=
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$ac_given_srcdir" in
|
||||||
|
.) srcdir=.
|
||||||
|
if test -z "$ac_dots"; then top_srcdir=.
|
||||||
|
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
|
||||||
|
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
|
||||||
|
*) # Relative path.
|
||||||
|
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
|
||||||
|
top_srcdir="$ac_dots$ac_given_srcdir" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$ac_given_INSTALL" in
|
||||||
|
[/$]*) INSTALL="$ac_given_INSTALL" ;;
|
||||||
|
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo creating "$ac_file"
|
||||||
|
rm -f "$ac_file"
|
||||||
|
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
|
||||||
|
case "$ac_file" in
|
||||||
|
*Makefile*) ac_comsub="1i\\
|
||||||
|
# $configure_input" ;;
|
||||||
|
*) ac_comsub= ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
|
||||||
|
sed -e "$ac_comsub
|
||||||
|
s%@configure_input@%$configure_input%g
|
||||||
|
s%@srcdir@%$srcdir%g
|
||||||
|
s%@top_srcdir@%$top_srcdir%g
|
||||||
|
s%@INSTALL@%$INSTALL%g
|
||||||
|
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
|
||||||
|
fi; done
|
||||||
|
rm -f conftest.s*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exit 0
|
927
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.sub
vendored
Executable file
927
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/config.sub
vendored
Executable file
|
@ -0,0 +1,927 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Configuration validation subroutine script, version 1.1.
|
||||||
|
# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
|
# This file is (in principle) common to ALL GNU software.
|
||||||
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
|
# can handle that machine. It does not imply ALL GNU software can.
|
||||||
|
#
|
||||||
|
# This file is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
# Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||||
|
# Supply the specified configuration type as an argument.
|
||||||
|
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||||
|
# Otherwise, we print the canonical config type on stdout and succeed.
|
||||||
|
|
||||||
|
# This file is supposed to be the same for all GNU packages
|
||||||
|
# and recognize all the CPU types, system types and aliases
|
||||||
|
# that are meaningful with *any* GNU software.
|
||||||
|
# Each package is responsible for reporting which valid configurations
|
||||||
|
# it does not support. The user should be able to distinguish
|
||||||
|
# a failure to support a valid configuration from a meaningless
|
||||||
|
# configuration.
|
||||||
|
|
||||||
|
# The goal of this file is to map all the various variations of a given
|
||||||
|
# machine specification into a single specification in the form:
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or in some cases, the newer four-part form:
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# It is wrong to echo any other type of specification.
|
||||||
|
|
||||||
|
if [ x$1 = x ]
|
||||||
|
then
|
||||||
|
echo Configuration name missing. 1>&2
|
||||||
|
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||||
|
echo "or $0 ALIAS" 1>&2
|
||||||
|
echo where ALIAS is a recognized configuration type. 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# First pass through any local machine types.
|
||||||
|
case $1 in
|
||||||
|
*local*)
|
||||||
|
echo $1
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
|
||||||
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
|
case $maybe_os in
|
||||||
|
linux-gnu*)
|
||||||
|
os=-$maybe_os
|
||||||
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||||
|
if [ $basic_machine != $1 ]
|
||||||
|
then os=`echo $1 | sed 's/.*-/-/'`
|
||||||
|
else os=; fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
### Let's recognize common machines as not being operating systems so
|
||||||
|
### that things like config.sub decstation-3100 work. We also
|
||||||
|
### recognize some manufacturers as not being operating systems, so we
|
||||||
|
### can provide default operating systems below.
|
||||||
|
case $os in
|
||||||
|
-sun*os*)
|
||||||
|
# Prevent following clause from handling this invalid input.
|
||||||
|
;;
|
||||||
|
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
||||||
|
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
||||||
|
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
||||||
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
|
-apple)
|
||||||
|
os=
|
||||||
|
basic_machine=$1
|
||||||
|
;;
|
||||||
|
-hiux*)
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
-sco5)
|
||||||
|
os=sco3.2v5
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco4)
|
||||||
|
os=-sco3.2v4
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco3.2.[4-9]*)
|
||||||
|
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco3.2v[4-9]*)
|
||||||
|
# Don't forget version if it is 3.2v4 or newer.
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-sco*)
|
||||||
|
os=-sco3.2v2
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-isc)
|
||||||
|
os=-isc2.2
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-clix*)
|
||||||
|
basic_machine=clipper-intergraph
|
||||||
|
;;
|
||||||
|
-isc*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
|
||||||
|
;;
|
||||||
|
-lynx*)
|
||||||
|
os=-lynxos
|
||||||
|
;;
|
||||||
|
-ptx*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
||||||
|
;;
|
||||||
|
-windowsnt*)
|
||||||
|
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||||
|
;;
|
||||||
|
-psos*)
|
||||||
|
os=-psos
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Decode aliases for certain CPU-COMPANY combinations.
|
||||||
|
case $basic_machine in
|
||||||
|
# Recognize the basic CPU types without company name.
|
||||||
|
# Some are omitted here because they have special meanings below.
|
||||||
|
tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||||
|
| arme[lb] | pyramid \
|
||||||
|
| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
|
||||||
|
| alpha | we32k | ns16k | clipper | i370 | sh \
|
||||||
|
| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
|
||||||
|
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||||
|
| sparc | sparclet | sparclite | sparc64)
|
||||||
|
basic_machine=$basic_machine-unknown
|
||||||
|
;;
|
||||||
|
# We use `pc' rather than `unknown'
|
||||||
|
# because (1) that's what they normally are, and
|
||||||
|
# (2) the word "unknown" tends to confuse beginning users.
|
||||||
|
i[3456]86)
|
||||||
|
basic_machine=$basic_machine-pc
|
||||||
|
;;
|
||||||
|
# Object if more than one company name word.
|
||||||
|
*-*-*)
|
||||||
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
# Recognize the basic CPU types with company name.
|
||||||
|
vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
||||||
|
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
||||||
|
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
||||||
|
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
||||||
|
| hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
|
||||||
|
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
||||||
|
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
||||||
|
| mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
|
||||||
|
;;
|
||||||
|
# Recognize the various machine names and aliases which stand
|
||||||
|
# for a CPU type and a company and sometimes even an OS.
|
||||||
|
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||||
|
basic_machine=m68000-att
|
||||||
|
;;
|
||||||
|
3b*)
|
||||||
|
basic_machine=we32k-att
|
||||||
|
;;
|
||||||
|
alliant | fx80)
|
||||||
|
basic_machine=fx80-alliant
|
||||||
|
;;
|
||||||
|
altos | altos3068)
|
||||||
|
basic_machine=m68k-altos
|
||||||
|
;;
|
||||||
|
am29k)
|
||||||
|
basic_machine=a29k-none
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
amdahl)
|
||||||
|
basic_machine=580-amdahl
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
amiga | amiga-*)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
;;
|
||||||
|
amigados)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
os=-amigados
|
||||||
|
;;
|
||||||
|
amigaunix | amix)
|
||||||
|
basic_machine=m68k-cbm
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
apollo68)
|
||||||
|
basic_machine=m68k-apollo
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
aux)
|
||||||
|
basic_machine=m68k-apple
|
||||||
|
os=-aux
|
||||||
|
;;
|
||||||
|
balance)
|
||||||
|
basic_machine=ns32k-sequent
|
||||||
|
os=-dynix
|
||||||
|
;;
|
||||||
|
convex-c1)
|
||||||
|
basic_machine=c1-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c2)
|
||||||
|
basic_machine=c2-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c32)
|
||||||
|
basic_machine=c32-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c34)
|
||||||
|
basic_machine=c34-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
convex-c38)
|
||||||
|
basic_machine=c38-convex
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
cray | ymp)
|
||||||
|
basic_machine=ymp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
cray2)
|
||||||
|
basic_machine=cray2-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
[ctj]90-cray)
|
||||||
|
basic_machine=c90-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
crds | unos)
|
||||||
|
basic_machine=m68k-crds
|
||||||
|
;;
|
||||||
|
da30 | da30-*)
|
||||||
|
basic_machine=m68k-da30
|
||||||
|
;;
|
||||||
|
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||||
|
basic_machine=mips-dec
|
||||||
|
;;
|
||||||
|
delta | 3300 | motorola-3300 | motorola-delta \
|
||||||
|
| 3300-motorola | delta-motorola)
|
||||||
|
basic_machine=m68k-motorola
|
||||||
|
;;
|
||||||
|
delta88)
|
||||||
|
basic_machine=m88k-motorola
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
dpx20 | dpx20-*)
|
||||||
|
basic_machine=rs6000-bull
|
||||||
|
os=-bosx
|
||||||
|
;;
|
||||||
|
dpx2* | dpx2*-bull)
|
||||||
|
basic_machine=m68k-bull
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
ebmon29k)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-ebmon
|
||||||
|
;;
|
||||||
|
elxsi)
|
||||||
|
basic_machine=elxsi-elxsi
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
encore | umax | mmax)
|
||||||
|
basic_machine=ns32k-encore
|
||||||
|
;;
|
||||||
|
fx2800)
|
||||||
|
basic_machine=i860-alliant
|
||||||
|
;;
|
||||||
|
genix)
|
||||||
|
basic_machine=ns32k-ns
|
||||||
|
;;
|
||||||
|
gmicro)
|
||||||
|
basic_machine=tron-gmicro
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
h3050r* | hiux*)
|
||||||
|
basic_machine=hppa1.1-hitachi
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
h8300hms)
|
||||||
|
basic_machine=h8300-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
|
harris)
|
||||||
|
basic_machine=m88k-harris
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
hp300-*)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
;;
|
||||||
|
hp300bsd)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
hp300hpux)
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
os=-hpux
|
||||||
|
;;
|
||||||
|
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||||
|
basic_machine=m68000-hp
|
||||||
|
;;
|
||||||
|
hp9k3[2-9][0-9])
|
||||||
|
basic_machine=m68k-hp
|
||||||
|
;;
|
||||||
|
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
||||||
|
basic_machine=hppa1.1-hp
|
||||||
|
;;
|
||||||
|
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||||
|
basic_machine=hppa1.0-hp
|
||||||
|
;;
|
||||||
|
hppa-next)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
i370-ibm* | ibm*)
|
||||||
|
basic_machine=i370-ibm
|
||||||
|
os=-mvs
|
||||||
|
;;
|
||||||
|
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||||
|
i[3456]86v32)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv32
|
||||||
|
;;
|
||||||
|
i[3456]86v4*)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
i[3456]86v)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
i[3456]86sol2)
|
||||||
|
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
iris | iris4d)
|
||||||
|
basic_machine=mips-sgi
|
||||||
|
case $os in
|
||||||
|
-irix*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-irix4
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
isi68 | isi)
|
||||||
|
basic_machine=m68k-isi
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
m88k-omron*)
|
||||||
|
basic_machine=m88k-omron
|
||||||
|
;;
|
||||||
|
magnum | m3230)
|
||||||
|
basic_machine=mips-mips
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
merlin)
|
||||||
|
basic_machine=ns32k-utek
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
miniframe)
|
||||||
|
basic_machine=m68000-convergent
|
||||||
|
;;
|
||||||
|
mips3*-*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
|
;;
|
||||||
|
mips3*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
|
;;
|
||||||
|
ncr3000)
|
||||||
|
basic_machine=i486-ncr
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
news | news700 | news800 | news900)
|
||||||
|
basic_machine=m68k-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
news1000)
|
||||||
|
basic_machine=m68030-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
news-3600 | risc-news)
|
||||||
|
basic_machine=mips-sony
|
||||||
|
os=-newsos
|
||||||
|
;;
|
||||||
|
next | m*-next )
|
||||||
|
basic_machine=m68k-next
|
||||||
|
case $os in
|
||||||
|
-nextstep* )
|
||||||
|
;;
|
||||||
|
-ns2*)
|
||||||
|
os=-nextstep2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
nh3000)
|
||||||
|
basic_machine=m68k-harris
|
||||||
|
os=-cxux
|
||||||
|
;;
|
||||||
|
nh[45]000)
|
||||||
|
basic_machine=m88k-harris
|
||||||
|
os=-cxux
|
||||||
|
;;
|
||||||
|
nindy960)
|
||||||
|
basic_machine=i960-intel
|
||||||
|
os=-nindy
|
||||||
|
;;
|
||||||
|
np1)
|
||||||
|
basic_machine=np1-gould
|
||||||
|
;;
|
||||||
|
pa-hitachi)
|
||||||
|
basic_machine=hppa1.1-hitachi
|
||||||
|
os=-hiuxwe2
|
||||||
|
;;
|
||||||
|
paragon)
|
||||||
|
basic_machine=i860-intel
|
||||||
|
os=-osf
|
||||||
|
;;
|
||||||
|
pbd)
|
||||||
|
basic_machine=sparc-tti
|
||||||
|
;;
|
||||||
|
pbb)
|
||||||
|
basic_machine=m68k-tti
|
||||||
|
;;
|
||||||
|
pc532 | pc532-*)
|
||||||
|
basic_machine=ns32k-pc532
|
||||||
|
;;
|
||||||
|
pentium | p5)
|
||||||
|
basic_machine=i586-intel
|
||||||
|
;;
|
||||||
|
pentiumpro | p6)
|
||||||
|
basic_machine=i686-intel
|
||||||
|
;;
|
||||||
|
pentium-* | p5-*)
|
||||||
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
pentiumpro-* | p6-*)
|
||||||
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
k5)
|
||||||
|
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||||
|
basic_machine=i586-amd
|
||||||
|
;;
|
||||||
|
nexen)
|
||||||
|
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
||||||
|
basic_machine=i586-nexgen
|
||||||
|
;;
|
||||||
|
pn)
|
||||||
|
basic_machine=pn-gould
|
||||||
|
;;
|
||||||
|
power) basic_machine=rs6000-ibm
|
||||||
|
;;
|
||||||
|
ppc) basic_machine=powerpc-unknown
|
||||||
|
;;
|
||||||
|
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||||
|
basic_machine=powerpcle-unknown
|
||||||
|
;;
|
||||||
|
ppcle-* | powerpclittle-*)
|
||||||
|
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
|
ps2)
|
||||||
|
basic_machine=i386-ibm
|
||||||
|
;;
|
||||||
|
rm[46]00)
|
||||||
|
basic_machine=mips-siemens
|
||||||
|
;;
|
||||||
|
rtpc | rtpc-*)
|
||||||
|
basic_machine=romp-ibm
|
||||||
|
;;
|
||||||
|
sequent)
|
||||||
|
basic_machine=i386-sequent
|
||||||
|
;;
|
||||||
|
sh)
|
||||||
|
basic_machine=sh-hitachi
|
||||||
|
os=-hms
|
||||||
|
;;
|
||||||
|
sps7)
|
||||||
|
basic_machine=m68k-bull
|
||||||
|
os=-sysv2
|
||||||
|
;;
|
||||||
|
spur)
|
||||||
|
basic_machine=spur-unknown
|
||||||
|
;;
|
||||||
|
sun2)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
;;
|
||||||
|
sun2os3)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun2os4)
|
||||||
|
basic_machine=m68000-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun3os3)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun3os4)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun4os3)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-sunos3
|
||||||
|
;;
|
||||||
|
sun4os4)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-sunos4
|
||||||
|
;;
|
||||||
|
sun4sol2)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
sun3 | sun3-*)
|
||||||
|
basic_machine=m68k-sun
|
||||||
|
;;
|
||||||
|
sun4)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
;;
|
||||||
|
sun386 | sun386i | roadrunner)
|
||||||
|
basic_machine=i386-sun
|
||||||
|
;;
|
||||||
|
symmetry)
|
||||||
|
basic_machine=i386-sequent
|
||||||
|
os=-dynix
|
||||||
|
;;
|
||||||
|
tower | tower-32)
|
||||||
|
basic_machine=m68k-ncr
|
||||||
|
;;
|
||||||
|
udi29k)
|
||||||
|
basic_machine=a29k-amd
|
||||||
|
os=-udi
|
||||||
|
;;
|
||||||
|
ultra3)
|
||||||
|
basic_machine=a29k-nyu
|
||||||
|
os=-sym1
|
||||||
|
;;
|
||||||
|
vaxv)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
vms)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
os=-vms
|
||||||
|
;;
|
||||||
|
vpp*|vx|vx-*)
|
||||||
|
basic_machine=f301-fujitsu
|
||||||
|
;;
|
||||||
|
vxworks960)
|
||||||
|
basic_machine=i960-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
vxworks68)
|
||||||
|
basic_machine=m68k-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
vxworks29k)
|
||||||
|
basic_machine=a29k-wrs
|
||||||
|
os=-vxworks
|
||||||
|
;;
|
||||||
|
xmp)
|
||||||
|
basic_machine=xmp-cray
|
||||||
|
os=-unicos
|
||||||
|
;;
|
||||||
|
xps | xps100)
|
||||||
|
basic_machine=xps100-honeywell
|
||||||
|
;;
|
||||||
|
none)
|
||||||
|
basic_machine=none-none
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||||
|
# some cases the only manufacturer, in others, it is the most popular.
|
||||||
|
mips)
|
||||||
|
basic_machine=mips-mips
|
||||||
|
;;
|
||||||
|
romp)
|
||||||
|
basic_machine=romp-ibm
|
||||||
|
;;
|
||||||
|
rs6000)
|
||||||
|
basic_machine=rs6000-ibm
|
||||||
|
;;
|
||||||
|
vax)
|
||||||
|
basic_machine=vax-dec
|
||||||
|
;;
|
||||||
|
pdp11)
|
||||||
|
basic_machine=pdp11-dec
|
||||||
|
;;
|
||||||
|
we32k)
|
||||||
|
basic_machine=we32k-att
|
||||||
|
;;
|
||||||
|
sparc)
|
||||||
|
basic_machine=sparc-sun
|
||||||
|
;;
|
||||||
|
cydra)
|
||||||
|
basic_machine=cydra-cydrome
|
||||||
|
;;
|
||||||
|
orion)
|
||||||
|
basic_machine=orion-highlevel
|
||||||
|
;;
|
||||||
|
orion105)
|
||||||
|
basic_machine=clipper-highlevel
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Here we canonicalize certain aliases for manufacturers.
|
||||||
|
case $basic_machine in
|
||||||
|
*-digital*)
|
||||||
|
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
||||||
|
;;
|
||||||
|
*-commodore*)
|
||||||
|
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Decode manufacturer-specific aliases for certain operating systems.
|
||||||
|
|
||||||
|
if [ x"$os" != x"" ]
|
||||||
|
then
|
||||||
|
case $os in
|
||||||
|
# First match some system type aliases
|
||||||
|
# that might get confused with valid system types.
|
||||||
|
# -solaris* is a basic system type, with this one exception.
|
||||||
|
-solaris1 | -solaris1.*)
|
||||||
|
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||||
|
;;
|
||||||
|
-solaris)
|
||||||
|
os=-solaris2
|
||||||
|
;;
|
||||||
|
-unixware* | svr4*)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-gnu/linux*)
|
||||||
|
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
|
||||||
|
;;
|
||||||
|
# First accept the basic system types.
|
||||||
|
# The portable systems comes first.
|
||||||
|
# Each alternative MUST END IN A *, to match a version number.
|
||||||
|
# -sysv* is not here because it comes later, after sysvr4.
|
||||||
|
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||||
|
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
|
||||||
|
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||||
|
| -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
|
||||||
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
|
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||||
|
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||||
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
|
| -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
|
| -linux-gnu* | -uxpv*)
|
||||||
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
|
;;
|
||||||
|
-linux*)
|
||||||
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
|
;;
|
||||||
|
-sunos5*)
|
||||||
|
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||||
|
;;
|
||||||
|
-sunos6*)
|
||||||
|
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||||
|
;;
|
||||||
|
-osfrose*)
|
||||||
|
os=-osfrose
|
||||||
|
;;
|
||||||
|
-osf*)
|
||||||
|
os=-osf
|
||||||
|
;;
|
||||||
|
-utek*)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
-dynix*)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
-acis*)
|
||||||
|
os=-aos
|
||||||
|
;;
|
||||||
|
-ctix* | -uts*)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
-ns2 )
|
||||||
|
os=-nextstep2
|
||||||
|
;;
|
||||||
|
# Preserve the version number of sinix5.
|
||||||
|
-sinix5.*)
|
||||||
|
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||||
|
;;
|
||||||
|
-sinix*)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-triton*)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-oss*)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-svr4)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
-svr3)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
-sysvr4)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
# This must come after -sysvr4.
|
||||||
|
-sysv*)
|
||||||
|
;;
|
||||||
|
-xenix)
|
||||||
|
os=-xenix
|
||||||
|
;;
|
||||||
|
-none)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Get rid of the `-' at the beginning of $os.
|
||||||
|
os=`echo $os | sed 's/[^-]*-//'`
|
||||||
|
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
|
||||||
|
# Here we handle the default operating systems that come with various machines.
|
||||||
|
# The value should be what the vendor currently ships out the door with their
|
||||||
|
# machine or put another way, the most popular os provided with the machine.
|
||||||
|
|
||||||
|
# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
||||||
|
# "-sun"), then you have to tell the case statement up towards the top
|
||||||
|
# that MANUFACTURER isn't an operating system. Otherwise, code above
|
||||||
|
# will signal an error saying that MANUFACTURER isn't an operating
|
||||||
|
# system, and we'll never get to this point.
|
||||||
|
|
||||||
|
case $basic_machine in
|
||||||
|
*-acorn)
|
||||||
|
os=-riscix1.2
|
||||||
|
;;
|
||||||
|
arm*-semi)
|
||||||
|
os=-aout
|
||||||
|
;;
|
||||||
|
pdp11-*)
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
*-dec | vax-*)
|
||||||
|
os=-ultrix4.2
|
||||||
|
;;
|
||||||
|
m68*-apollo)
|
||||||
|
os=-domain
|
||||||
|
;;
|
||||||
|
i386-sun)
|
||||||
|
os=-sunos4.0.2
|
||||||
|
;;
|
||||||
|
m68000-sun)
|
||||||
|
os=-sunos3
|
||||||
|
# This also exists in the configure program, but was not the
|
||||||
|
# default.
|
||||||
|
# os=-sunos4
|
||||||
|
;;
|
||||||
|
*-tti) # must be before sparc entry or we get the wrong os.
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
sparc-* | *-sun)
|
||||||
|
os=-sunos4.1.1
|
||||||
|
;;
|
||||||
|
*-ibm)
|
||||||
|
os=-aix
|
||||||
|
;;
|
||||||
|
*-hp)
|
||||||
|
os=-hpux
|
||||||
|
;;
|
||||||
|
*-hitachi)
|
||||||
|
os=-hiux
|
||||||
|
;;
|
||||||
|
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
*-cbm)
|
||||||
|
os=-amigados
|
||||||
|
;;
|
||||||
|
*-dg)
|
||||||
|
os=-dgux
|
||||||
|
;;
|
||||||
|
*-dolphin)
|
||||||
|
os=-sysv3
|
||||||
|
;;
|
||||||
|
m68k-ccur)
|
||||||
|
os=-rtu
|
||||||
|
;;
|
||||||
|
m88k-omron*)
|
||||||
|
os=-luna
|
||||||
|
;;
|
||||||
|
*-next )
|
||||||
|
os=-nextstep
|
||||||
|
;;
|
||||||
|
*-sequent)
|
||||||
|
os=-ptx
|
||||||
|
;;
|
||||||
|
*-crds)
|
||||||
|
os=-unos
|
||||||
|
;;
|
||||||
|
*-ns)
|
||||||
|
os=-genix
|
||||||
|
;;
|
||||||
|
i370-*)
|
||||||
|
os=-mvs
|
||||||
|
;;
|
||||||
|
*-next)
|
||||||
|
os=-nextstep3
|
||||||
|
;;
|
||||||
|
*-gould)
|
||||||
|
os=-sysv
|
||||||
|
;;
|
||||||
|
*-highlevel)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
*-encore)
|
||||||
|
os=-bsd
|
||||||
|
;;
|
||||||
|
*-sgi)
|
||||||
|
os=-irix
|
||||||
|
;;
|
||||||
|
*-siemens)
|
||||||
|
os=-sysv4
|
||||||
|
;;
|
||||||
|
*-masscomp)
|
||||||
|
os=-rtu
|
||||||
|
;;
|
||||||
|
f301-fujitsu)
|
||||||
|
os=-uxpv
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
os=-none
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Here we handle the case where we know the os, and the CPU type, but not the
|
||||||
|
# manufacturer. We pick the logical manufacturer.
|
||||||
|
vendor=unknown
|
||||||
|
case $basic_machine in
|
||||||
|
*-unknown)
|
||||||
|
case $os in
|
||||||
|
-riscix*)
|
||||||
|
vendor=acorn
|
||||||
|
;;
|
||||||
|
-sunos*)
|
||||||
|
vendor=sun
|
||||||
|
;;
|
||||||
|
-aix*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
|
-hpux*)
|
||||||
|
vendor=hp
|
||||||
|
;;
|
||||||
|
-hiux*)
|
||||||
|
vendor=hitachi
|
||||||
|
;;
|
||||||
|
-unos*)
|
||||||
|
vendor=crds
|
||||||
|
;;
|
||||||
|
-dgux*)
|
||||||
|
vendor=dg
|
||||||
|
;;
|
||||||
|
-luna*)
|
||||||
|
vendor=omron
|
||||||
|
;;
|
||||||
|
-genix*)
|
||||||
|
vendor=ns
|
||||||
|
;;
|
||||||
|
-mvs*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
|
-ptx*)
|
||||||
|
vendor=sequent
|
||||||
|
;;
|
||||||
|
-vxsim* | -vxworks*)
|
||||||
|
vendor=wrs
|
||||||
|
;;
|
||||||
|
-aux*)
|
||||||
|
vendor=apple
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $basic_machine$os
|
2137
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/configure
vendored
Executable file
2137
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/configure
vendored
Executable file
File diff suppressed because it is too large
Load diff
189
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/configure.in
Executable file
189
target/linux/etrax-2.6/image/e100boot/src/libpcap-0.4/configure.in
Executable file
|
@ -0,0 +1,189 @@
|
||||||
|
dnl @(#) $Header: /usr/local/cvs/linux/tools/build/e100boot/libpcap-0.4/configure.in,v 1.1 1999/08/26 10:05:21 johana Exp $ (LBL)
|
||||||
|
dnl
|
||||||
|
dnl Copyright (c) 1994, 1995, 1996, 1997
|
||||||
|
dnl The Regents of the University of California. All rights reserved.
|
||||||
|
dnl
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
dnl
|
||||||
|
|
||||||
|
AC_INIT(pcap.c)
|
||||||
|
|
||||||
|
AC_CANONICAL_SYSTEM
|
||||||
|
|
||||||
|
umask 002
|
||||||
|
|
||||||
|
if test -z "$PWD" ; then
|
||||||
|
PWD=`pwd`
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS(malloc.h sys/ioccom.h sys/sockio.h)
|
||||||
|
|
||||||
|
AC_LBL_FIXINCLUDES
|
||||||
|
|
||||||
|
AC_CHECK_FUNCS(ether_hostton strerror)
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Not all versions of test support -c (character special) but it's a
|
||||||
|
dnl better way of testing since the device might be protected. So we
|
||||||
|
dnl check in our normal order using -r and then check the for the /dev
|
||||||
|
dnl guys again using -c.
|
||||||
|
dnl
|
||||||
|
AC_ARG_WITH(pcap, [ --with-pcap=TYPE use packet capture TYPE])
|
||||||
|
AC_MSG_CHECKING(packet capture type)
|
||||||
|
if test ! -z "$with_pcap" ; then
|
||||||
|
V_PCAP="$withval"
|
||||||
|
elif test -r /dev/bpf0 ; then
|
||||||
|
V_PCAP=bpf
|
||||||
|
elif test -r /usr/include/net/pfilt.h ; then
|
||||||
|
V_PCAP=pf
|
||||||
|
elif test -r /dev/enet ; then
|
||||||
|
V_PCAP=enet
|
||||||
|
elif test -r /dev/nit ; then
|
||||||
|
V_PCAP=snit
|
||||||
|
elif test -r /usr/include/sys/net/nit.h ; then
|
||||||
|
V_PCAP=nit
|
||||||
|
elif test -r /usr/include/net/raw.h ; then
|
||||||
|
V_PCAP=snoop
|
||||||
|
elif test -r /usr/include/sys/dlpi.h ; then
|
||||||
|
V_PCAP=dlpi
|
||||||
|
elif test -r /usr/include/linux/socket.h ; then
|
||||||
|
V_PCAP=linux
|
||||||
|
elif test -c /dev/bpf0 ; then # check again in case not readable
|
||||||
|
V_PCAP=bpf
|
||||||
|
elif test -c /dev/enet ; then # check again in case not readable
|
||||||
|
V_PCAP=enet
|
||||||
|
elif test -c /dev/nit ; then # check again in case not readable
|
||||||
|
V_PCAP=snit
|
||||||
|
else
|
||||||
|
V_PCAP=null
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT($V_PCAP)
|
||||||
|
|
||||||
|
case "$V_PCAP" in
|
||||||
|
|
||||||
|
dlpi)
|
||||||
|
AC_CHECK_HEADERS(sys/bufmod.h sys/dlpi_ext.h)
|
||||||
|
AC_MSG_CHECKING(for /dev/dlpi device)
|
||||||
|
if test -c /dev/dlpi ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(HAVE_DEV_DLPI)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
dir="/dev/dlpi"
|
||||||
|
AC_MSG_CHECKING(for $dir directory)
|
||||||
|
if test -d $dir ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE_UNQUOTED(PCAP_DEV_PREFIX, "$dir")
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
linux)
|
||||||
|
AC_CHECK_HEADERS(net/if_arp.h)
|
||||||
|
AC_MSG_CHECKING(Linux kernel version)
|
||||||
|
AC_CACHE_VAL(ac_cv_linux_vers,
|
||||||
|
ac_cv_linux_vers=`uname -r 2>&1 | \
|
||||||
|
sed -n -e '$s/.* //' -e '$s/\..*//p'`)
|
||||||
|
AC_MSG_RESULT($ac_cv_linux_vers)
|
||||||
|
if test $ac_cv_linux_vers -lt 2 ; then
|
||||||
|
AC_MSG_ERROR(version 2 or higher required; see the INSTALL doc for more info)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
null)
|
||||||
|
AC_MSG_WARN(cannot determine packet capture interface)
|
||||||
|
AC_MSG_WARN((see the INSTALL doc for more info))
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_LBL_LEX_AND_YACC(V_LEX, V_YACC, pcap_)
|
||||||
|
|
||||||
|
case "$target_os" in
|
||||||
|
|
||||||
|
aix*)
|
||||||
|
dnl Workaround to enable certain features
|
||||||
|
AC_DEFINE(_SUN)
|
||||||
|
;;
|
||||||
|
|
||||||
|
hpux9*)
|
||||||
|
AC_DEFINE(HAVE_HPUX9)
|
||||||
|
;;
|
||||||
|
|
||||||
|
hpux10.0*)
|
||||||
|
;;
|
||||||
|
|
||||||
|
hpux10.1*)
|
||||||
|
;;
|
||||||
|
|
||||||
|
hpux*)
|
||||||
|
dnl HPUX 10.20 and above is similar to HPUX 9...
|
||||||
|
AC_DEFINE(HAVE_HPUX10_20)
|
||||||
|
;;
|
||||||
|
|
||||||
|
sinix*)
|
||||||
|
AC_MSG_CHECKING(if SINIX compiler defines sinix)
|
||||||
|
AC_CACHE_VAL(ac_cv_cc_sinix_defined,
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[],
|
||||||
|
[int i = sinix;],
|
||||||
|
ac_cv_cc_sinix_defined=yes,
|
||||||
|
ac_cv_cc_sinix_defined=no))
|
||||||
|
AC_MSG_RESULT($ac_cv_cc_sinix_defined)
|
||||||
|
if test $ac_cv_cc_sinix_defined = no ; then
|
||||||
|
AC_DEFINE(sinix)
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
solaris*)
|
||||||
|
AC_DEFINE(HAVE_SOLARIS)
|
||||||
|
;;
|
||||||
|
|
||||||
|
linux*)
|
||||||
|
V_INCLS="$V_INCLS -Ilinux-include"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_CHECK_PROGS(V_RANLIB, ranlib, @true)
|
||||||
|
|
||||||
|
AC_LBL_DEVEL(V_CCOPT)
|
||||||
|
|
||||||
|
AC_LBL_SOCKADDR_SA_LEN
|
||||||
|
|
||||||
|
AC_LBL_UNALIGNED_ACCESS
|
||||||
|
|
||||||
|
if test "${srcdir}" = "." ; then
|
||||||
|
srcdirprefix=""
|
||||||
|
else
|
||||||
|
srcdirprefix="./"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -r ${srcdirprefix}lbl/gnuc.h ; then
|
||||||
|
rm -f gnuc.h
|
||||||
|
ln -s ${srcdirprefix}lbl/gnuc.h gnuc.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f bpf_filter.c
|
||||||
|
ln -s ${srcdirprefix}bpf/net/bpf_filter.c bpf_filter.c
|
||||||
|
rm -f net
|
||||||
|
ln -s ${srcdirprefix}bpf/net net
|
||||||
|
|
||||||
|
AC_SUBST(V_CCOPT)
|
||||||
|
AC_SUBST(V_INCLS)
|
||||||
|
AC_SUBST(V_LEX)
|
||||||
|
AC_SUBST(V_PCAP)
|
||||||
|
AC_SUBST(V_RANLIB)
|
||||||
|
AC_SUBST(V_YACC)
|
||||||
|
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
AC_OUTPUT(Makefile)
|
||||||
|
|
||||||
|
if test -f .devel ; then
|
||||||
|
make depend
|
||||||
|
fi
|
||||||
|
exit 0
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue