From a8bf95d0249565f4210ccab5c13232d501ce0c2d Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Wed, 22 Apr 2009 22:06:58 +0000 Subject: - importing updated version from SLAC as of 20090422 --- bsd_eth_drivers/libbsdport/Makefile | 116 ++++++++++++++++++++++++++++ bsd_eth_drivers/libbsdport/Makefile.am | 3 - bsd_eth_drivers/libbsdport/alldrv.c | 1 - bsd_eth_drivers/libbsdport/bus.h | 40 +--------- bsd_eth_drivers/libbsdport/devicet.c | 2 +- bsd_eth_drivers/libbsdport/libbsdport.h | 7 -- bsd_eth_drivers/libbsdport/libbsdport_api.h | 2 - bsd_eth_drivers/libbsdport/modini.c | 100 ++++++++++++++++++++++++ bsd_eth_drivers/libbsdport/sysbus.c | 12 +-- bsd_eth_drivers/libbsdport/taskqueue.h | 2 - 10 files changed, 222 insertions(+), 63 deletions(-) create mode 100644 bsd_eth_drivers/libbsdport/Makefile create mode 100644 bsd_eth_drivers/libbsdport/modini.c (limited to 'bsd_eth_drivers/libbsdport') diff --git a/bsd_eth_drivers/libbsdport/Makefile b/bsd_eth_drivers/libbsdport/Makefile new file mode 100644 index 0000000..fbf9f35 --- /dev/null +++ b/bsd_eth_drivers/libbsdport/Makefile @@ -0,0 +1,116 @@ +# +# Makefile.lib,v 1.5 2000/06/12 15:00:14 joel Exp +# +# Templates/Makefile.lib +# Template library Makefile +# + +LIBNAME=libbsdport.a +LIB=${ARCH}/${LIBNAME} + +# C and C++ source names, if any, go here -- minus the .c or .cc +C_PIECES=rtems_callout rtems_taskqueue rtems_udelay ifstuff devicet alldrv +C_PIECES+=contigmalloc sysbus malloc ifmedia +C_FILES=$(C_PIECES:%=%.c) +C_O_FILES=$(C_PIECES:%=${ARCH}/%.o) + +CC_PIECES= +CC_FILES=$(CC_PIECES:%=%.cc) +CC_O_FILES=$(CC_PIECES:%=${ARCH}/%.o) + +H_FILES=libbsdport_api.h rtems_verscheck.h + +LINKS+=sys/taskqueue.h +LINKS+=sys/bus.h +LINKS+=sys/mutex.h +LINKS+=bsp/rtems_verscheck.h + +DUMMYHEADERS+=dummyheaders/machine/bus.h +DUMMYHEADERS+=dummyheaders/machine/resource.h +DUMMYHEADERS+=dummyheaders/dev/pci/pcivar.h +DUMMYHEADERS+=dummyheaders/dev/pci/pcireg.h +DUMMYHEADERS+=dummyheaders/dev/mii/miivar.h +DUMMYHEADERS+=dummyheaders/sys/module.h +DUMMYHEADERS+=dummyheaders/sys/rman.h +DUMMYHEADERS+=dummyheaders/sys/kthread.h +DUMMYHEADERS+=dummyheaders/sys/endian.h +DUMMYHEADERS+=dummyheaders/net/if_vlan_var.h +DUMMYHEADERS+=dummyheaders/netinet/ip6.h +DUMMYHEADERS+=dummyheaders/vm/pmap.h +DUMMYHEADERS+=dummyheaders/miibus_if.h + +# Assembly source names, if any, go here -- minus the .S +S_PIECES= +S_FILES=$(S_PIECES:%=%.S) +S_O_FILES=$(S_FILES:%.S=${ARCH}/%.o) + +SRCS=$(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES) +OBJS=$(C_O_FILES) $(CC_O_FILES) $(S_O_FILES) + +all: + +depend: ${LINKS} + +include $(RTEMS_MAKEFILE_PATH)/Makefile.inc + +include $(RTEMS_CUSTOM) +include $(RTEMS_ROOT)/make/lib.cfg + +# +# Add local stuff here using += +# + +DEFINES += +CPPFLAGS += -I. +CFLAGS += + +# +# Add your list of files to delete here. The config files +# already know how to delete some stuff, so you may want +# to just run 'make clean' first to see what gets missed. +# 'make clobber' already includes 'make clean' +# + +CLEAN_ADDITIONS += +CLOBBER_ADDITIONS += dummyheaders +CLOBBER_ADDITIONS += $(sort $(foreach n,$(LINKS),$(firstword $(subst /, ,$(n))))) + +all: ${DUMMYHEADERS} ${LINKS} ${ARCH} $(SRCS) $(LIB) + +$(LIB): ${OBJS} + $(make-library) + +dummyheaders/%: + @if [ ! -d `dirname $@` ] ; then mkdir -p `dirname $@`; fi + @touch $@ + +# for each name listed in LINKS, create parent directories (if needed) +# and a symlink to file in . +# E.g., LINKS=a/b/c.h +# creates a/b/c.h -> ../../c.h +$(LINKS): + @if [ ! -d $(dir $@) ] ; then mkdir -p $(dir $@); fi + @ln -s `echo $@ | sed -e 's%[^/]\+[/]\+%../%g'` $@ + +ifndef RTEMS_SITE_INSTALLDIR +RTEMS_SITE_INSTALLDIR = $(PROJECT_RELEASE) +endif + +ifndef RTEMS_SITE_BSP_INSTALLDIR +RTEMS_SITE_BSP_INSTALLDIR = $(RTEMS_SITE_INSTALLDIR) +endif + +${RTEMS_SITE_INSTALLDIR}/include/bsp \ +${RTEMS_SITE_INSTALLDIR}/lib \ +${RTEMS_SITE_INSTALLDIR}/bin: + test -d $@ || mkdir -p $@ + +# Install the program(s), appending _g or _p as appropriate. +# for include files, just use $(INSTALL_CHANGE) +# + +install: all $(RTEMS_SITE_INSTALLDIR)/lib $(RTEMS_SITE_INSTALLDIR)/include/bsp + $(INSTALL_VARIANT) -m 644 ${LIB} ${RTEMS_SITE_INSTALLDIR}/lib + $(INSTALL_CHANGE) -m 644 ${H_FILES} ${RTEMS_SITE_INSTALLDIR}/include/bsp + + diff --git a/bsd_eth_drivers/libbsdport/Makefile.am b/bsd_eth_drivers/libbsdport/Makefile.am index 44096b5..e6e31cd 100644 --- a/bsd_eth_drivers/libbsdport/Makefile.am +++ b/bsd_eth_drivers/libbsdport/Makefile.am @@ -38,9 +38,6 @@ DUMMYHEADERS+=dummyheaders/netinet/ip6.h DUMMYHEADERS+=dummyheaders/vm/pmap.h DUMMYHEADERS+=dummyheaders/miibus_if.h -DUMMYHEADERS+=dummyheaders/miidevs.h -DUMMYHEADERS+=dummyheaders/dev/mii/brgphyreg.h - BUILT_SOURCES= include ../links.am diff --git a/bsd_eth_drivers/libbsdport/alldrv.c b/bsd_eth_drivers/libbsdport/alldrv.c index 0738179..f81b95a 100644 --- a/bsd_eth_drivers/libbsdport/alldrv.c +++ b/bsd_eth_drivers/libbsdport/alldrv.c @@ -5,7 +5,6 @@ driver_t *libbsdport_netdriver_table_all[] = { &libbsdport_em_driver, &libbsdport_pcn_driver, &libbsdport_le_pci_driver, - &libbsdport_re_driver, 0 }; diff --git a/bsd_eth_drivers/libbsdport/bus.h b/bsd_eth_drivers/libbsdport/bus.h index 76d78a8..19cb24f 100644 --- a/bsd_eth_drivers/libbsdport/bus.h +++ b/bsd_eth_drivers/libbsdport/bus.h @@ -156,10 +156,6 @@ bus_setup_intr(device_t dev, struct resource *r, int flags, driver_filter_t filt /* Flags currently ignored... */ #define INTR_MPSAFE 0 #define INTR_TYPE_NET 0 -/* INTR_FAST indicates that a 'handler' is actually - * a 'fast' handler which already uses taskqueues - */ -#define INTR_FAST 1 int bus_teardown_intr(device_t dev, struct resource *r, void *cookiep); @@ -196,16 +192,6 @@ rman_get_bustag(struct resource *r); #define BUS_DMA_COHERENT 0 #endif -#ifndef BUS_DMA_ZERO -/* ignored anyways */ -#define BUS_DMA_ZERO 0 -#endif - -#ifndef BUS_DMA_ALLOCNOW -/* ignored anyways */ -#define BUS_DMA_ALLOCNOW 0 -#endif - /* unused */ #ifndef BUS_SPACE_MAXADDR #define BUS_SPACE_MAXADDR 0xdeadbeef @@ -279,10 +265,10 @@ bus_get_dma_tag(device_t dev) return 0; } -typedef void bus_dmamap_callback_t (void *arg, bus_dma_segment_t *segs, int nseg, int error); +typedef void bus_dmamap_callback_t (void *, bus_dma_segment_t *, int, int); static inline int -bus_dmamap_load(bus_dma_tag_t tag, bus_dmamap_t map, caddr_t vaddr, bus_size_t size, bus_dmamap_callback_t cb, void *arg, unsigned flags) +bus_dmamap_load(bus_dma_tag_t tag, bus_dmamap_t map, caddr_t vaddr, bus_size_t size, void (*cb)(void *arg, bus_dma_segment_t *segs, int nseg, int error), void *arg, unsigned flags) { bus_dma_segment_t segs[1]; segs[0].ds_addr = CPU2BUSADDR(vaddr); @@ -291,28 +277,6 @@ bus_dma_segment_t segs[1]; return 0; } -typedef void bus_dmamap_callback2_t (void *arg, bus_dma_segment_t *segs, int nsegs, bus_size_t mapsize, int error); - -static inline int -bus_dmamap_load_mbuf(bus_dma_tag_t tag, bus_dmamap_t map, struct mbuf *m_head, bus_dmamap_callback2_t cb, void *arg, unsigned flags) -{ -/* hopefully there's enough stack ... */ -bus_dma_segment_t segs[tag->maxsegs]; -struct mbuf *m; -int n; -bus_size_t sz; - for ( m=m_head, sz=0, n=0; m; m=m->m_next, n++ ) { - if ( n >= tag->maxsegs ) { - cb(arg, segs, n, sz, EFBIG); - return EFBIG; - } - segs[n].ds_addr = CPU2BUSADDR(mtod(m, unsigned)); - sz += (segs[n].ds_len = m->m_len); - } - cb(arg, segs, n, sz, 0); - return 0; -} - #define bus_dmamap_unload(tag, map) do {} while (0) /* should we do something if we have no HW snooping ? */ diff --git a/bsd_eth_drivers/libbsdport/devicet.c b/bsd_eth_drivers/libbsdport/devicet.c index 48ddd9a..f197da4 100644 --- a/bsd_eth_drivers/libbsdport/devicet.c +++ b/bsd_eth_drivers/libbsdport/devicet.c @@ -12,7 +12,7 @@ #include #include "libbsdport_api.h" -#define DEBUG +#undef DEBUG extern void real_libc_free(void*); diff --git a/bsd_eth_drivers/libbsdport/libbsdport.h b/bsd_eth_drivers/libbsdport/libbsdport.h index 8b88784..0fdd4a4 100644 --- a/bsd_eth_drivers/libbsdport/libbsdport.h +++ b/bsd_eth_drivers/libbsdport/libbsdport.h @@ -31,10 +31,6 @@ #include -#ifndef bswap32 -#define bswap32(_x) CPU_swap_u32(_x) -#endif - #if defined(__LITTLE_ENDIAN__) || defined(__i386__) static inline uint16_t htole16(uint16_t v) { return v; } static inline uint32_t htole32(uint32_t v) { return v; } @@ -191,9 +187,6 @@ static inline void membarrier_w() { asm volatile("eieio":::"memory"); } #define PCIY_PMG 0x01 #endif -#ifndef PCI_RF_DENSE -#define PCI_RF_DENSE 0 -#endif static inline uint32_t pci_read_config(device_t dev, unsigned reg, int width) diff --git a/bsd_eth_drivers/libbsdport/libbsdport_api.h b/bsd_eth_drivers/libbsdport/libbsdport_api.h index ba3e54e..73b54b0 100644 --- a/bsd_eth_drivers/libbsdport/libbsdport_api.h +++ b/bsd_eth_drivers/libbsdport/libbsdport_api.h @@ -24,8 +24,6 @@ extern driver_t *libbsdport_netdriver_table[]; extern driver_t libbsdport_em_driver; /* AMD 79C971..976 pcnet PCI */ extern driver_t libbsdport_pcn_driver; -/* RealTek RTL8139, 8168, 8169, 8169S, 8110, 8101E, and 8111 PCI */ -extern driver_t libbsdport_re_driver; /* AMD/Lance older (and later) chips; this driver also supports what 'pcn' * does but might not be as efficient. * NOTE: The 'le_pci' driver works with the pcnet32 (79C970A) emulation diff --git a/bsd_eth_drivers/libbsdport/modini.c b/bsd_eth_drivers/libbsdport/modini.c new file mode 100644 index 0000000..3156c16 --- /dev/null +++ b/bsd_eth_drivers/libbsdport/modini.c @@ -0,0 +1,100 @@ +#include "devicet.h" +#include + +struct { + struct device dev; + struct { + char space[4096]; + } softc; +} thele = { + { + bushdr: { +/* mvme5500 { x, x, x } */ +/* qemu */ { 0, 3, 0 } + }, + type: DEV_TYPE_PCI, + name: "le", + nameunit: { 'l', 'e', '1', 0}, + unit: 1, + }, + { + { 0, } + } +}; + +void *thelesoftc = &thele.softc; + + +struct { + struct device dev; + struct { + char space[4096]; + } softc; +} theem = { + { + bushdr: { +/* mvme5500 { 2, 0xa, 0 } */ +/* cpci */ { 7, 0, 0 } + }, + type: DEV_TYPE_PCI, + name: "em", + nameunit: { 'e', 'm', '1', 0}, + unit: 1, + }, + { + { 0, } + } +}; + +void *theemsoftc = &theem.softc; + +struct { + struct device dev; + struct { + char space[4096]; + } softc; +} thepcn = { + { + bushdr: { +/* mvme5500 { x, 0xx, x } */ +/* cpci */ { 4, 6, 0 } + }, + type: DEV_TYPE_PCI, + name: "pcn", + nameunit: { 'p', 'c', 'n', '1', 0}, + unit: 1, + }, + { + { 0, } + } +}; + +void *thepcnsoftc = &thepcn.softc; + +extern driver_t rtems_em_driver; +extern driver_t rtems_le_pci_driver; +extern driver_t rtems_pcn_driver; + +driver_t *rtems_netdriver_table[] = { + &rtems_em_driver, + &rtems_le_pci_driver, + &rtems_pcn_driver, + 0 +}; + +struct rtems_bsdnet_ifconfig pcncfg = { + name: "pcn", + rbuf_count:20, + xbuf_count:3, +}; + +#ifdef DEBUG_MODULAR +void +_cexpModuleInitialize(void *unused) +{ +extern void * rtems_callout_initialize(); +extern void * rtems_taskqueue_initialize(); + rtems_callout_initialize(); + rtems_taskqueue_initialize(); +} +#endif diff --git a/bsd_eth_drivers/libbsdport/sysbus.c b/bsd_eth_drivers/libbsdport/sysbus.c index fc0ae0b..fcd3aac 100644 --- a/bsd_eth_drivers/libbsdport/sysbus.c +++ b/bsd_eth_drivers/libbsdport/sysbus.c @@ -143,17 +143,12 @@ bus_setup_intr(device_t dev, struct resource *r, int flags, driver_filter_t filt int rval; struct irq_cookie *info = 0; + + if ( filter && handler ) { rtems_panic("bus_setup_intr for both: filter & handler not implemented\n"); } - if ( (flags & INTR_FAST) && filter ) { - rtems_panic("bus_setup_intr for both: filter & INTR_FAST not implemented\n"); - /* handler is a fast handler already */ - filter = (driver_filter_t) handler; - handler = 0; - } - if ( handler ) { if ( !dev->drv ) { device_printf(dev, "bus_setup_intr: device has no driver attached\n"); @@ -192,8 +187,7 @@ struct irq_cookie *info = 0; return rval; } - if ( cookiep ) - *cookiep = info; + *cookiep = info; return rval; } diff --git a/bsd_eth_drivers/libbsdport/taskqueue.h b/bsd_eth_drivers/libbsdport/taskqueue.h index d700edf..a341ec1 100644 --- a/bsd_eth_drivers/libbsdport/taskqueue.h +++ b/bsd_eth_drivers/libbsdport/taskqueue.h @@ -31,8 +31,6 @@ taskqueue_create_fast(const char *name, int mflags, tq_enq_fn, void *ctxt); int taskqueue_enqueue(struct taskqueue *tq, struct task *ta); -#define taskqueue_enqueue_fast(_q,_t) taskqueue_enqueue(_q,_t) - void taskqueue_thread_enqueue(void *ctxt); -- cgit v1.2.3