diff options
Diffstat (limited to 'bsps/powerpc/beatnik/net/porting')
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/LICENSE | 51 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/Makefile.template | 84 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/README | 104 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/if_xxx.modini.c | 34 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/if_xxx_rtems.c | 500 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/pcireg.h | 405 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/rtemscompat.h | 454 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/rtemscompat1.h | 219 | ||||
-rw-r--r-- | bsps/powerpc/beatnik/net/porting/rtemscompat_defs.h.template | 97 |
9 files changed, 0 insertions, 1948 deletions
diff --git a/bsps/powerpc/beatnik/net/porting/LICENSE b/bsps/powerpc/beatnik/net/porting/LICENSE deleted file mode 100644 index 62b91ab03d..0000000000 --- a/bsps/powerpc/beatnik/net/porting/LICENSE +++ /dev/null @@ -1,51 +0,0 @@ -/* NOTE: The terms described in this LICENSE file apply only to the - * files created by the author (see below). Consult individual - * file headers for more details. Some files were ported from - * netbsd and/or freebsd and are covered by the respective - * file header copyright notices. - */ - -/* - * Authorship - * ---------- - * This software ('RTEMS-portability wrappers for BSD network drivers') was - * created by Till Straumann <strauman@slac.stanford.edu>, 2005-2007, - * Stanford Linear Accelerator Center, Stanford University. - * - * Acknowledgement of sponsorship - * ------------------------------ - * The 'RTEMS-portability wrappers for BSD network drivers' software was produced by - * the Stanford Linear Accelerator Center, Stanford University, - * under Contract DE-AC03-76SFO0515 with the Department of Energy. - * - * Government disclaimer of liability - * ---------------------------------- - * Neither the United States nor the United States Department of Energy, - * nor any of their employees, makes any warranty, express or implied, or - * assumes any legal liability or responsibility for the accuracy, - * completeness, or usefulness of any data, apparatus, product, or process - * disclosed, or represents that its use would not infringe privately owned - * rights. - * - * Stanford disclaimer of liability - * -------------------------------- - * Stanford University makes no representations or warranties, express or - * implied, nor assumes any liability for the use of this software. - * - * Stanford disclaimer of copyright - * -------------------------------- - * Stanford University, owner of the copyright, hereby disclaims its - * copyright and all other rights in this software. Hence, anyone may - * freely use it for any purpose without restriction. - * - * Maintenance of notices - * ---------------------- - * In the interest of clarity regarding the origin and status of this - * SLAC software, this and all the preceding Stanford University notices - * are to remain affixed to any copy or derivative of this software made - * or distributed by the recipient and are to be affixed to any copy of - * software made or distributed by the recipient that contains a copy or - * derivative of this software. - * - * ------------------ SLAC Software Notices, Set 4 OTT.002a, 2004 FEB 03 - */ diff --git a/bsps/powerpc/beatnik/net/porting/Makefile.template b/bsps/powerpc/beatnik/net/porting/Makefile.template deleted file mode 100644 index 3c5d6e3e33..0000000000 --- a/bsps/powerpc/beatnik/net/porting/Makefile.template +++ /dev/null @@ -1,84 +0,0 @@ -# -# Makefile.lib,v 1.5 2000/06/12 15:00:14 joel Exp -# -# Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; -# License: see LICENSE file. -# -# Templates/Makefile.lib -# Template library Makefile -# - -LIBNAME=libif_XXX.a # XXX- your library names goes here -LIB=${ARCH}/${LIBNAME} - -# C and C++ source names, if any, go here -- minus the .c or .cc -C_PIECES=if_XXX if_XXX_rtems -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= - -# 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) - -include $(RTEMS_MAKEFILE_PATH)/Makefile.inc - -include $(RTEMS_CUSTOM) -include $(RTEMS_ROOT)/make/lib.cfg - -# -# Add local stuff here using += -# - -#DEFINES += -DHAVE_LIBBSPEXT -DDEBUG_MODULAR -CPPFLAGS += -I. -Ilibchip -Iporting -# bsdnet newproc generated daemon is non-FP; -# prevent optimizer from generating FP instructions -CFLAGS += -Wno-unused-variable -msoft-float - -# -# 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 += - -all: ${ARCH} $(SRCS) $(LIB) - -$(LIB): ${OBJS} - $(make-library) - -ifndef RTEMS_SITE_INSTALLDIR -RTEMS_SITE_INSTALLDIR = $(PROJECT_RELEASE) -endif - -${RTEMS_SITE_INSTALLDIR}/include \ -${RTEMS_SITE_INSTALLDIR}/lib \ -${RTEMS_SITE_INSTALLDIR}/bin \ -${RTEMS_SITE_INSTALLDIR}/$(RTEMS_BSP)/include \ -${RTEMS_SITE_INSTALLDIR}/$(RTEMS_BSP)/lib \ -${RTEMS_SITE_INSTALLDIR}/$(RTEMS_BSP)/bin : - test -d $@ || mkdir -p $@ - -# Install the library, appending _g or _p as appropriate. -# for include files, just use $(INSTALL_CHANGE) -# -# NOTES: -# - BSP specific libraries, headers etc. should be installed to -# $RTEMS_SITE_INSTALLDIR)/$(RTEMS_BSP)/lib -# - -install: all $(RTEMS_SITE_INSTALLDIR)/lib - $(INSTALL_VARIANT) -m 644 ${LIB} ${RTEMS_SITE_INSTALLDIR}/lib diff --git a/bsps/powerpc/beatnik/net/porting/README b/bsps/powerpc/beatnik/net/porting/README deleted file mode 100644 index b262d7797c..0000000000 --- a/bsps/powerpc/beatnik/net/porting/README +++ /dev/null @@ -1,104 +0,0 @@ -Templates to help porting freebsd networking drivers -to rtems (focus on i386 and powerpc) using a 'quick and dirty' -approach. -This is not an elegant piece of software -- be warned. - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -Usage: - - A obtain the freebsd driver source. It usually is made - up of a - if_XXX.c -- core driver - if_XXXreg.h -- core header - if_XXXvar.h -- some have it, some don't - if_XXX_<bus>.c -- glue to integrate the core - driver with different environments - (such as pccard, pci, ...). There - are several of these. - - Note that you might have to get an older version - as some structures and interfaces may have undergone - significant changes since the bsd/networking version that - was ported to rtems. - - B Copy the Makefile and rtemscompat_defs.h templates to the - driver source dir and edit them. - - C Edit if_XXXreg.h and comment all unneeded fields from the - 'softc' structure declaration with - - #ifndef __rtems__ - #endif - - In particular, the bushandle field (as defined in rtemscompat_defs.h) - above, see comments in the template) must be re-declared: - - #ifndef __rtems__ - bus_space_handle_t XXX_bhandle; - #else - unsigned XXX_bhandle; - unsigned char irq_no; - unsigned char b,d,f; /* PCI tuple; needed for PCI only */ - rtems_id tid; /* driver task id */ - #endif - - Later, the compilation attempts will help identifying - fields that need to be removed. - - I like the #ifdef __rtems__ construct as it minimizes changes - to the source thus making merging updated driver versions easier. - - D Edit if_XXX.c; at the very top, include the lines - - #ifdef __rtems__ - #include <rtemscompat.h> - #endif - - use the #ifndef __rtems__ #endif construct to comment - unneeded / unsupported inclusion of headers and code pieces. - - - inclusion of net/if_media.h must usually be mapped to - libchip/if_media.h - - comment all vm, machine, bus, mii etc. related headers. - - - replace inclusion of if_XXXreg.h by - - #include "if_XXXreg.h" - #include <rtemscompat1.h> - - - work through the if_XXX.c and if_XXXreg.h files commenting - stuff until if_XXX.c compiles. This might involve hacking - the helper headers. - - - pay attention to endian issues; things may need to be fixed! - - - at the top where the freebsd 'methods' and the like are - commented, add a definition of the driver methods for RTEMS: - - #ifdef __rtems__ - net_drv_tbl_t METHODS = { - n_probe : XXX_probe, - n_attach : XXX_attach, - n_detach : XXX_detach, /* optional; */ - n_intr : XXX_intr, /* freebsd ISR; executed from daemon under RTEMS */ - }; - #endif - - - make sure all the if_xxx methods are set; in particular, - set - sc->if_output = ether_output; - - - on input: - you can use DO_ETHER_INPUT_SKIPPING_ETHER_HEADER() macro - -- if you don't MAKE SURE THE RECEIVING INTERFACE IS SET - in the mbuf packet header!!! - - E create 'rtems_<chip>_setup()' to probe for devices and - set the softc struct's base address, interrupt line and - bus/dev/fun triple (PCI only). - For PCI devices, a generic setup routine already comes with - porting/if_xxx_rtems.c -> nothing needs to be written! diff --git a/bsps/powerpc/beatnik/net/porting/if_xxx.modini.c b/bsps/powerpc/beatnik/net/porting/if_xxx.modini.c deleted file mode 100644 index 1abad7dc22..0000000000 --- a/bsps/powerpc/beatnik/net/porting/if_xxx.modini.c +++ /dev/null @@ -1,34 +0,0 @@ -#include <rtems.h> -#include <porting/rtemscompat.h> - -/* CEXP module initialization/finalization */ - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -void -_cexpModuleInitialize(void *unused) -{ -extern void NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringup)(char *); - METHODSPTR = &METHODS; -/* -#ifdef DEBUG - NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringup)("192.168.2.13/255.255.255.0"); -#endif -*/ -} - -int -_cexpModuleFinalize(void *unused) -{ -#ifdef DEBUG -extern int NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringdown)(); - if (NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringdown)()) - return -1; - METHODSPTR = 0; - return 0; -#else - return -1; -#endif -} diff --git a/bsps/powerpc/beatnik/net/porting/if_xxx_rtems.c b/bsps/powerpc/beatnik/net/porting/if_xxx_rtems.c deleted file mode 100644 index a0d459ff47..0000000000 --- a/bsps/powerpc/beatnik/net/porting/if_xxx_rtems.c +++ /dev/null @@ -1,500 +0,0 @@ -#include "rtemscompat.h" - -/* Template for driver task, setup and attach routines. To be instantiated - * by defining the relevant symbols in header files. - */ - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -#include <rtems/irq.h> - -#include <stdio.h> -#include <string.h> -#include <inttypes.h> - -#include <sys/cdefs.h> - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/socket.h> -#include <sys/sockio.h> - -#include <net/if.h> -#include <net/if_arp.h> - -#include <netinet/in.h> -#include <netinet/if_ether.h> - -#include <net/if_media.h> - -#ifdef IF_REG_HEADER -#include IF_REG_HEADER -#endif -#ifdef IF_VAR_HEADER -#include IF_VAR_HEADER -#endif - -#include "rtemscompat1.h" - -#define EX_EVENT RTEMS_EVENT_1 -#undef IRQ_AT_8259 - -NETDEV_DECL = { /*[0]:*/{ /* softc: */ { /* arpcom: */{ /* ac_if: */ { 0 }}}}}; - -static void net_daemon(void *arg); - -#ifdef HAVE_LIBBSPEXT -#include <bsp/bspExt.h> -static void the_net_isr(void *); -#else -static void noop(const rtems_irq_connect_data *unused) {} -static int noop1(const rtems_irq_connect_data *unused) { return 0;} -#if ISMINVERSION(4,6,99) -static void the_net_isr(rtems_irq_hdl_param); -#else -static void the_net_isr(); -#if NETDRIVER_SLOTS > 1 -#error only one instance supported (stupid IRQ API) -#else -static struct NET_SOFTC *thesc; -#endif -#endif -#endif - -#if defined(NETDRIVER_PCI) -/* Public setup routine for PCI devices; - * TODO: currently doesn't work for subsystem vendor/id , i.e. - * devices behind a standard PCI interface... - */ -int -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_pci_setup)(int inst); -#endif - -static unsigned -NET_EMBEMB(,NETDRIVER_PREFIX,_net_driver_ticks_per_sec) = 0; - -/* other drivers may already have this created */ -extern unsigned net_driver_ticks_per_sec -__attribute__((weak, alias(NET_STRSTR(NETDRIVER_PREFIX)"_net_driver_ticks_per_sec") )); - -#ifdef DEBUG_MODULAR -net_drv_tbl_t * volatile METHODSPTR = 0; -#endif - - -int -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_attach) - (struct rtems_bsdnet_ifconfig *config, int attaching) -{ - int error = 0; - device_t dev = net_dev_get(config); - struct NET_SOFTC *sc; - struct ifnet *ifp; -#ifndef HAVE_LIBBSPEXT - rtems_irq_connect_data irq_data = { - 0, - the_net_isr, -#if ISMINVERSION(4,6,99) - 0, -#endif - noop, - noop, - noop1 }; -#endif - - if ( !dev ) - return 1; - - if ( !dev->d_softc.NET_SOFTC_BHANDLE_FIELD ) { -#if defined(NETDRIVER_PCI) - device_printf(dev,NETDRIVER" unit not configured; executing setup..."); - /* setup should really be performed prior to attaching. - * Wipe the device; setup and re-obtain the device... - */ - memset(dev,0,sizeof(*dev)); - error = NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_pci_setup)(-1); - /* re-obtain the device */ - dev = net_dev_get(config); - if ( !dev ) { - printk("Unable to re-assign device structure???\n"); - return 1; - } - if (error <= 0) { - device_printf(dev,NETDRIVER" FAILED; unable to attach interface, sorry\n"); - return 1; - } - device_printf(dev,"success\n"); -#else - device_printf(dev,NETDRIVER" unit not configured; use 'rtems_"NETDRIVER"_setup()'\n"); - return 1; -#endif - } - - if ( !net_driver_ticks_per_sec ) - net_driver_ticks_per_sec = rtems_clock_get_ticks_per_second(); - - sc = device_get_softc( dev ); - ifp = &sc->arpcom.ac_if; - -#ifdef DEBUG_MODULAR - if (!METHODSPTR) { - device_printf(dev,NETDRIVER": method pointer not set\n"); - return -1; - } -#endif - - if ( attaching ) { - if ( ifp->if_init ) { - device_printf(dev,NETDRIVER" Driver already attached.\n"); - return -1; - } - if ( config->hardware_address ) { - /* use configured MAC address */ - memcpy(sc->arpcom.ac_enaddr, config->hardware_address, ETHER_ADDR_LEN); - } else { -#ifdef NET_READ_MAC_ADDR - NET_READ_MAC_ADDR(sc); -#endif - } - if ( METHODSPTR->n_attach(dev) ) { - device_printf(dev,NETDRIVER"_attach() failed\n"); - return -1; - } - } else { - if ( !ifp->if_init ) { - device_printf(dev,NETDRIVER" Driver not attached.\n"); - return -1; - } - if ( METHODSPTR->n_detach ) { - if ( METHODSPTR->n_detach(dev) ) { - device_printf(dev,NETDRIVER"_detach() failed\n"); - return -1; - } - } else { - device_printf(dev,NETDRIVER"_detach() not implemented\n"); - return -1; - } - } - - - if ( !sc->tid ) - sc->tid = rtems_bsdnet_newproc(NETDRIVER"d", 4096, net_daemon, sc); - - if (attaching) { -#ifdef DEBUG - printf("Installing IRQ # %i\n",sc->irq_no); -#endif -#ifdef HAVE_LIBBSPEXT - if ( bspExtInstallSharedISR(sc->irq_no, the_net_isr, sc, 0) ) -#else - /* BSP dependent :-( */ - irq_data.name = sc->irq_no; -#if ISMINVERSION(4,6,99) - irq_data.handle = (rtems_irq_hdl_param)sc; -#else - thesc = sc; -#endif - if ( ! BSP_install_rtems_irq_handler( &irq_data ) ) -#endif - { - fprintf(stderr,NETDRIVER": unable to install ISR\n"); - error = -1; - } - } else { - if ( sc->irq_no ) { -#ifdef DEBUG - printf("Removing IRQ # %i\n",sc->irq_no); -#endif -#ifdef HAVE_LIBBSPEXT - if (bspExtRemoveSharedISR(sc->irq_no, the_net_isr, sc)) -#else - /* BSP dependent :-( */ - irq_data.name = sc->irq_no; -#if ISMINVERSION(4,6,99) - irq_data.handle = (rtems_irq_hdl_param)sc; -#endif - if ( ! BSP_remove_rtems_irq_handler( &irq_data ) ) -#endif - { - fprintf(stderr,NETDRIVER": unable to uninstall ISR\n"); - error = -1; - } - } - } - return error; -} - -static void -the_net_isr( -#ifdef HAVE_LIBBSPEXT -void *thesc -#elif ISMINVERSION(4,6,99) -rtems_irq_hdl_param thesc -#endif -) -{ -struct NET_SOFTC *sc = thesc; - - /* disable interrupts */ - NET_DISABLE_IRQS(sc); - - rtems_bsdnet_event_send( sc->tid, EX_EVENT ); -} - -static void net_daemon(void *arg) -{ -struct NET_SOFTC *sc = arg; -rtems_event_set evs; - - for (;;) { - rtems_bsdnet_event_receive( - EX_EVENT, - RTEMS_WAIT | RTEMS_EVENT_ANY, - RTEMS_NO_TIMEOUT, - &evs); - - METHODSPTR->n_intr(sc); - - /* re-enable interrupts */ - NET_ENABLE_IRQS(sc); - } -} - -static struct NET_SOFTC * -net_drv_check_unit(int unit) -{ - unit--; - if ( unit < 0 || unit >= NETDRIVER_SLOTS ) { - fprintf(stderr,"Invalid unit # %i (not in %i..%i)\n", unit+1, 1, NETDRIVER_SLOTS); - return 0; - } - - if ( THEDEVS[unit].d_name ) { - fprintf(stderr,"Unit %i already set up\n", unit+1); - return 0; - } - - memset( &THEDEVS[unit], 0, sizeof(THEDEVS[0]) ); - - return &THEDEVS[unit].d_softc; -} - -struct rtems_bsdnet_ifconfig NET_EMBEMB(NETDRIVER_PREFIX,_dbg,_config) = { - NETDRIVER"1", - NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_attach), - 0 -}; - -#ifdef DEBUG -void -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringup)(char *ipaddr) -{ -short flags; -struct sockaddr_in addr; -char *mask; - - - if (!ipaddr) { - printf("Need an ip[/mask] argument (dot notation)\n"); - return; - } - - ipaddr = strdup(ipaddr); - - if ( (mask = strchr(ipaddr,'/')) ) { - *mask++=0; - } else { - mask = "255.255.255.0"; - } - -#if defined(NETDRIVER_PCI) - /* this fails if already setup */ - NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_pci_setup)(-1); -#endif - rtems_bsdnet_attach(&NET_EMBEMB(NETDRIVER_PREFIX,_dbg,_config)); - - flags = IFF_UP /*| IFF_PROMISC*/; - if ( rtems_bsdnet_ifconfig(NETDRIVER"1",SIOCSIFFLAGS,&flags) < 0 ) { - printf("Can't bring '"NETDRIVER"1' up\n"); - goto cleanup; - } - memset(&addr,0,sizeof(addr)); - addr.sin_len = sizeof(addr); - addr.sin_family = AF_INET; - addr.sin_addr.s_addr = inet_addr(mask); - if ( rtems_bsdnet_ifconfig(NETDRIVER"1",SIOCSIFNETMASK,&addr) < 0 ) { - printf("Unable to set netmask on '"NETDRIVER"1'\n"); - goto cleanup; - } - addr.sin_addr.s_addr = inet_addr(ipaddr); - if ( rtems_bsdnet_ifconfig(NETDRIVER"1",SIOCSIFADDR,&addr) < 0 ) { - printf("Unable to set address on '"NETDRIVER"1'\n"); - goto cleanup; - } -cleanup: - the_real_free (ipaddr); -} - -int -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_bringdown)() -{ -short flags; - flags = 0; - if ( rtems_bsdnet_ifconfig(NETDRIVER"1",SIOCSIFFLAGS,&flags) < 0 ) { - printf("Can't bring '"NETDRIVER"1' down\n"); - return -1; - } - - rtems_bsdnet_detach(&NET_EMBEMB(NETDRIVER_PREFIX,_dbg,_config)); - return 0; -} -#endif - - -#if defined(NETDRIVER_PCI) && !defined(NETDRIVER_OWN_SETUP) -/* Public setup routine for PCI devices; - * TODO: currently doesn't work for subsystem vendor/id , i.e. - * devices behind a standard PCI interface... - * passing 'inst' > only sets-up the 'inst'th card; passing - * 'inst' == 0 sets-up all matching cards. - */ -int -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_pci_setup)(int inst) -{ -unsigned b,d,f,i,isio,unit; -rtemscompat_32_t base; -unsigned short cmd,id; -unsigned char h; -struct NET_SOFTC *sc; -unsigned try[] = { PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, 0 }; - -#ifdef DEBUG_MODULAR - if ( !METHODSPTR ) { - fprintf(stderr,NETDRIVER": Methods pointer not set\n"); - return -1; - } -#endif - - /* 0 can be reached when looking for the desired instance */ - if ( 0 == inst ) - inst = -1; - -#ifdef HAVE_LIBBSPEXT - /* make sure it's initialized */ - bspExtInit(); -#endif - - /* scan PCI for supported devices */ - for ( b=0, sc=0, unit=0; b<pci_bus_count(); b++ ) { - for ( d=0; d<PCI_MAX_DEVICES; d++ ) { - pci_read_config_word(b,d,0,PCI_VENDOR_ID,&id); - if ( 0xffff == id ) - continue; /* empty slot */ - - pci_read_config_byte(b,d,0,PCI_HEADER_TYPE,&h); - h = h&0x80 ? PCI_MAX_FUNCTIONS : 1; /* multifunction device ? */ - - for ( f=0; f<h; f++ ) { - if ( !sc && !(sc=net_drv_check_unit(unit+1))) { - fprintf(stderr,"Not enough driver slots; stop looking for more devices...\n"); - return unit; - } - pci_read_config_word(b,d,f,PCI_VENDOR_ID,&id); - if ( 0xffff == id ) - continue; /* empty slot */ - - pci_read_config_word(b,d,f,PCI_CLASS_DEVICE,&id); - if ( PCI_CLASS_NETWORK_ETHERNET != id ) - continue; /* only look at ethernet devices */ - - sc->b = b; - sc->d = d; - sc->f = f; - - for ( i=0, base=0, isio=0; try[i]; i++ ) { - pci_read_config_dword(b,d,f,try[i],&base); - if ( base ) { - if ( (isio = (PCI_BASE_ADDRESS_SPACE_IO == (base & PCI_BASE_ADDRESS_SPACE )) ) ) { -#ifdef NET_CHIP_PORT_IO - base &= PCI_BASE_ADDRESS_IO_MASK; - sc->NET_SOFTC_BHANDLE_FIELD = PCI_IO_2LOCAL(base,b); -#ifdef DEBUG - printf("Found PCI I/O Base 0x%08x\n", (unsigned)base); -#endif -#else - base = 0; - continue; -#endif - } else { -#ifdef NET_CHIP_MEM_IO - base &= PCI_BASE_ADDRESS_MEM_MASK; - sc->NET_SOFTC_BHANDLE_FIELD = PCI2LOCAL(base,b); -#ifdef DEBUG - printf("Found PCI MEM Base 0x%08x\n", (unsigned)base); -#endif -#else - base = 0; - continue; -#endif - } - break; - } - } - if ( !base ) { -#ifdef DEBUG - fprintf(stderr, NETDRIVER": (warning) Neither PCI base address 0 nor 1 are configured; skipping bus %i, slot %i, fn %i...\n",b,d,f); -#endif - continue; - } - - if ( 0 == METHODSPTR->n_probe(&THEDEVS[unit]) && (inst < 0 || !--inst) ) { - pci_read_config_word(b,d,f,PCI_COMMAND,&cmd); - pci_write_config_word(b,d,f,PCI_COMMAND, - cmd | (isio ? PCI_COMMAND_IO : PCI_COMMAND_MEMORY) | PCI_COMMAND_MASTER ); - pci_read_config_byte(b,d,f,PCI_INTERRUPT_LINE,&sc->irq_no); - printf(NETDRIVER": card found @PCI[%s] 0x%08x (local 0x%08x), IRQ %i\n", - (isio ? "io" : "mem"), (unsigned)base, sc->NET_SOFTC_BHANDLE_FIELD, sc->irq_no); - - sc = 0; /* need to allocate a new slot */ - unit++; - - if ( 0 == inst ) { - /* found desired instance */ - goto terminated; - } - } - } - } - } - -terminated: - return unit; -} -#else - -/* simple skeleton -int -NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_setup)( - int unit, - void *base_addr, - int irq_no) -{ -struct NET_SOFTC *sc; - if ( !(sc=net_drv_check_unit(unit)) ) { - fprintf(stderr,"Bad unit number -- (not enought driver slots?)\n"); - return 0; - } - sc->NET_SOFTC_BHANDLE_FIELD = base_addr; - if ( 0 == METHODSPTR->n_probe(&THEDEVS[unit-1]) ) { - sc->irq_no = irq_no; - printf(NETDRIVER": Unit %i set up\n", unit); - return unit; - } - return 0; -} -*/ - -#endif diff --git a/bsps/powerpc/beatnik/net/porting/pcireg.h b/bsps/powerpc/beatnik/net/porting/pcireg.h deleted file mode 100644 index 8487f5b8f6..0000000000 --- a/bsps/powerpc/beatnik/net/porting/pcireg.h +++ /dev/null @@ -1,405 +0,0 @@ -/*- - * Copyright (c) 1997, Stefan Esser <se@freebsd.org> - * 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 unmodified, 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - * - * $FreeBSD: /repoman/r/ncvs/src/sys/dev/pci/pcireg.h,v 1.39.4.3 2005/04/02 05:03:34 jmg Exp $ - * - */ - -/* - * PCIM_xxx: mask to locate subfield in register - * PCIR_xxx: config register offset - * PCIC_xxx: device class - * PCIS_xxx: device subclass - * PCIP_xxx: device programming interface - * PCIV_xxx: PCI vendor ID (only required to fixup ancient devices) - * PCID_xxx: device ID - * PCIY_xxx: capability identification number - */ - -/* some PCI bus constants */ - -#define PCI_BUSMAX 255 -#define PCI_SLOTMAX 31 -#define PCI_FUNCMAX 7 -#define PCI_REGMAX 255 -#define PCI_MAXHDRTYPE 2 - -/* PCI config header registers for all devices */ - -#define PCIR_DEVVENDOR 0x00 -#define PCIR_VENDOR 0x00 -#define PCIR_DEVICE 0x02 -#define PCIR_COMMAND 0x04 -#define PCIM_CMD_PORTEN 0x0001 -#define PCIM_CMD_MEMEN 0x0002 -#define PCIM_CMD_BUSMASTEREN 0x0004 -#define PCIM_CMD_SPECIALEN 0x0008 -#define PCIM_CMD_MWRICEN 0x0010 -#define PCIM_CMD_PERRESPEN 0x0040 -#define PCIM_CMD_SERRESPEN 0x0100 -#define PCIM_CMD_BACKTOBACK 0x0200 -#define PCIR_STATUS 0x06 -#define PCIM_STATUS_CAPPRESENT 0x0010 -#define PCIM_STATUS_66CAPABLE 0x0020 -#define PCIM_STATUS_BACKTOBACK 0x0080 -#define PCIM_STATUS_PERRREPORT 0x0100 -#define PCIM_STATUS_SEL_FAST 0x0000 -#define PCIM_STATUS_SEL_MEDIMUM 0x0200 -#define PCIM_STATUS_SEL_SLOW 0x0400 -#define PCIM_STATUS_SEL_MASK 0x0600 -#define PCIM_STATUS_STABORT 0x0800 -#define PCIM_STATUS_RTABORT 0x1000 -#define PCIM_STATUS_RMABORT 0x2000 -#define PCIM_STATUS_SERR 0x4000 -#define PCIM_STATUS_PERR 0x8000 -#define PCIR_REVID 0x08 -#define PCIR_PROGIF 0x09 -#define PCIR_SUBCLASS 0x0a -#define PCIR_CLASS 0x0b -#define PCIR_CACHELNSZ 0x0c -#define PCIR_LATTIMER 0x0d -#define PCIR_HDRTYPE 0x0e -#ifndef BURN_BRIDGES -#define PCIR_HEADERTYPE PCIR_HDRTYPE -#endif -#define PCIM_HDRTYPE 0x7f -#define PCIM_HDRTYPE_NORMAL 0x00 -#define PCIM_HDRTYPE_BRIDGE 0x01 -#define PCIM_HDRTYPE_CARDBUS 0x02 -#define PCIM_MFDEV 0x80 -#define PCIR_BIST 0x0f - -/* Capability Identification Numbers */ - -#define PCIY_PMG 0x01 /* PCI Power Management */ -#define PCIY_AGP 0x02 /* AGP */ -#define PCIY_VPD 0x03 /* Vital Product Data */ -#define PCIY_SLOTID 0x04 /* Slot Identification */ -#define PCIY_MSI 0x05 /* Message Signaled Interrupts */ -#define PCIY_CHSWP 0x06 /* CompactPCI Hot Swap */ -#define PCIY_PCIX 0x07 /* PCI-X */ -#define PCIY_HT 0x08 /* HyperTransport */ -#define PCIY_VENDOR 0x09 /* Vendor Unique */ -#define PCIY_DEBUG 0x0a /* Debug port */ -#define PCIY_CRES 0x0b /* CompactPCI central resource control */ -#define PCIY_HOTPLUG 0x0c /* PCI Hot-Plug */ -#define PCIY_AGP8X 0x0e /* AGP 8x */ -#define PCIY_SECDEV 0x0f /* Secure Device */ -#define PCIY_EXPRESS 0x10 /* PCI Express */ -#define PCIY_MSIX 0x11 /* MSI-X */ - -/* config registers for header type 0 devices */ - -#define PCIR_BARS 0x10 -#define PCIR_BAR(x) (PCIR_BARS + (x) * 4) -#ifndef BURN_BRIDGES -#define PCIR_MAPS PCIR_BARS -#endif -#define PCIR_CARDBUSCIS 0x28 -#define PCIR_SUBVEND_0 0x2c -#define PCIR_SUBDEV_0 0x2e -#define PCIR_BIOS 0x30 -#define PCIM_BIOS_ENABLE 0x01 -#define PCIR_CAP_PTR 0x34 -#define PCIR_INTLINE 0x3c -#define PCIR_INTPIN 0x3d -#define PCIR_MINGNT 0x3e -#define PCIR_MAXLAT 0x3f - -/* config registers for header type 1 (PCI-to-PCI bridge) devices */ - -#define PCIR_SECSTAT_1 0x1e - -#define PCIR_PRIBUS_1 0x18 -#define PCIR_SECBUS_1 0x19 -#define PCIR_SUBBUS_1 0x1a -#define PCIR_SECLAT_1 0x1b - -#define PCIR_IOBASEL_1 0x1c -#define PCIR_IOLIMITL_1 0x1d -#define PCIR_IOBASEH_1 0x30 -#define PCIR_IOLIMITH_1 0x32 -#define PCIM_BRIO_16 0x0 -#define PCIM_BRIO_32 0x1 -#define PCIM_BRIO_MASK 0xf - -#define PCIR_MEMBASE_1 0x20 -#define PCIR_MEMLIMIT_1 0x22 - -#define PCIR_PMBASEL_1 0x24 -#define PCIR_PMLIMITL_1 0x26 -#define PCIR_PMBASEH_1 0x28 -#define PCIR_PMLIMITH_1 0x2c - -#define PCIR_BRIDGECTL_1 0x3e - -#define PCIR_SUBVEND_1 0x34 -#define PCIR_SUBDEV_1 0x36 - -/* config registers for header type 2 (CardBus) devices */ - -#define PCIR_SECSTAT_2 0x16 - -#define PCIR_PRIBUS_2 0x18 -#define PCIR_SECBUS_2 0x19 -#define PCIR_SUBBUS_2 0x1a -#define PCIR_SECLAT_2 0x1b - -#define PCIR_MEMBASE0_2 0x1c -#define PCIR_MEMLIMIT0_2 0x20 -#define PCIR_MEMBASE1_2 0x24 -#define PCIR_MEMLIMIT1_2 0x28 -#define PCIR_IOBASE0_2 0x2c -#define PCIR_IOLIMIT0_2 0x30 -#define PCIR_IOBASE1_2 0x34 -#define PCIR_IOLIMIT1_2 0x38 - -#define PCIR_BRIDGECTL_2 0x3e - -#define PCIR_SUBVEND_2 0x40 -#define PCIR_SUBDEV_2 0x42 - -#define PCIR_PCCARDIF_2 0x44 - -/* PCI device class, subclass and programming interface definitions */ - -#define PCIC_OLD 0x00 -#define PCIS_OLD_NONVGA 0x00 -#define PCIS_OLD_VGA 0x01 - -#define PCIC_STORAGE 0x01 -#define PCIS_STORAGE_SCSI 0x00 -#define PCIS_STORAGE_IDE 0x01 -#define PCIP_STORAGE_IDE_MODEPRIM 0x01 -#define PCIP_STORAGE_IDE_PROGINDPRIM 0x02 -#define PCIP_STORAGE_IDE_MODESEC 0x04 -#define PCIP_STORAGE_IDE_PROGINDSEC 0x08 -#define PCIP_STORAGE_IDE_MASTERDEV 0x80 -#define PCIS_STORAGE_FLOPPY 0x02 -#define PCIS_STORAGE_IPI 0x03 -#define PCIS_STORAGE_RAID 0x04 -#define PCIS_STORAGE_OTHER 0x80 - -#define PCIC_NETWORK 0x02 -#define PCIS_NETWORK_ETHERNET 0x00 -#define PCIS_NETWORK_TOKENRING 0x01 -#define PCIS_NETWORK_FDDI 0x02 -#define PCIS_NETWORK_ATM 0x03 -#define PCIS_NETWORK_ISDN 0x04 -#define PCIS_NETWORK_OTHER 0x80 - -#define PCIC_DISPLAY 0x03 -#define PCIS_DISPLAY_VGA 0x00 -#define PCIS_DISPLAY_XGA 0x01 -#define PCIS_DISPLAY_3D 0x02 -#define PCIS_DISPLAY_OTHER 0x80 - -#define PCIC_MULTIMEDIA 0x04 -#define PCIS_MULTIMEDIA_VIDEO 0x00 -#define PCIS_MULTIMEDIA_AUDIO 0x01 -#define PCIS_MULTIMEDIA_TELE 0x02 -#define PCIS_MULTIMEDIA_OTHER 0x80 - -#define PCIC_MEMORY 0x05 -#define PCIS_MEMORY_RAM 0x00 -#define PCIS_MEMORY_FLASH 0x01 -#define PCIS_MEMORY_OTHER 0x80 - -#define PCIC_BRIDGE 0x06 -#define PCIS_BRIDGE_HOST 0x00 -#define PCIS_BRIDGE_ISA 0x01 -#define PCIS_BRIDGE_EISA 0x02 -#define PCIS_BRIDGE_MCA 0x03 -#define PCIS_BRIDGE_PCI 0x04 -#define PCIS_BRIDGE_PCMCIA 0x05 -#define PCIS_BRIDGE_NUBUS 0x06 -#define PCIS_BRIDGE_CARDBUS 0x07 -#define PCIS_BRIDGE_RACEWAY 0x08 -#define PCIS_BRIDGE_OTHER 0x80 - -#define PCIC_SIMPLECOMM 0x07 -#define PCIS_SIMPLECOMM_UART 0x00 -#define PCIP_SIMPLECOMM_UART_16550A 0x02 -#define PCIS_SIMPLECOMM_PAR 0x01 -#define PCIS_SIMPLECOMM_MULSER 0x02 -#define PCIS_SIMPLECOMM_MODEM 0x03 -#define PCIS_SIMPLECOMM_OTHER 0x80 - -#define PCIC_BASEPERIPH 0x08 -#define PCIS_BASEPERIPH_PIC 0x00 -#define PCIS_BASEPERIPH_DMA 0x01 -#define PCIS_BASEPERIPH_TIMER 0x02 -#define PCIS_BASEPERIPH_RTC 0x03 -#define PCIS_BASEPERIPH_PCIHOT 0x04 -#define PCIS_BASEPERIPH_OTHER 0x80 - -#define PCIC_INPUTDEV 0x09 -#define PCIS_INPUTDEV_KEYBOARD 0x00 -#define PCIS_INPUTDEV_DIGITIZER 0x01 -#define PCIS_INPUTDEV_MOUSE 0x02 -#define PCIS_INPUTDEV_SCANNER 0x03 -#define PCIS_INPUTDEV_GAMEPORT 0x04 -#define PCIS_INPUTDEV_OTHER 0x80 - -#define PCIC_DOCKING 0x0a -#define PCIS_DOCKING_GENERIC 0x00 -#define PCIS_DOCKING_OTHER 0x80 - -#define PCIC_PROCESSOR 0x0b -#define PCIS_PROCESSOR_386 0x00 -#define PCIS_PROCESSOR_486 0x01 -#define PCIS_PROCESSOR_PENTIUM 0x02 -#define PCIS_PROCESSOR_ALPHA 0x10 -#define PCIS_PROCESSOR_POWERPC 0x20 -#define PCIS_PROCESSOR_MIPS 0x30 -#define PCIS_PROCESSOR_COPROC 0x40 - -#define PCIC_SERIALBUS 0x0c -#define PCIS_SERIALBUS_FW 0x00 -#define PCIS_SERIALBUS_ACCESS 0x01 -#define PCIS_SERIALBUS_SSA 0x02 -#define PCIS_SERIALBUS_USB 0x03 -#define PCIP_SERIALBUS_USB_UHCI 0x00 -#define PCIP_SERIALBUS_USB_OHCI 0x10 -#define PCIP_SERIALBUS_USB_EHCI 0x20 -#define PCIS_SERIALBUS_FC 0x04 -#define PCIS_SERIALBUS_SMBUS 0x05 - -#define PCIC_WIRELESS 0x0d -#define PCIS_WIRELESS_IRDA 0x00 -#define PCIS_WIRELESS_IR 0x01 -#define PCIS_WIRELESS_RF 0x10 -#define PCIS_WIRELESS_OTHER 0x80 - -#define PCIC_INTELLIIO 0x0e -#define PCIS_INTELLIIO_I2O 0x00 - -#define PCIC_SATCOM 0x0f -#define PCIS_SATCOM_TV 0x01 -#define PCIS_SATCOM_AUDIO 0x02 -#define PCIS_SATCOM_VOICE 0x03 -#define PCIS_SATCOM_DATA 0x04 - -#define PCIC_CRYPTO 0x10 -#define PCIS_CRYPTO_NETCOMP 0x00 -#define PCIS_CRYPTO_ENTERTAIN 0x10 -#define PCIS_CRYPTO_OTHER 0x80 - -#define PCIC_DASP 0x11 -#define PCIS_DASP_DPIO 0x00 -#define PCIS_DASP_OTHER 0x80 - -#define PCIC_OTHER 0xff - -/* PCI power manangement */ - -#define PCIR_POWER_CAP 0x2 -#define PCIM_PCAP_SPEC 0x0007 -#define PCIM_PCAP_PMEREQCLK 0x0008 -#define PCIM_PCAP_PMEREQPWR 0x0010 -#define PCIM_PCAP_DEVSPECINIT 0x0020 -#define PCIM_PCAP_DYNCLOCK 0x0040 -#define PCIM_PCAP_SECCLOCK 0x00c0 -#define PCIM_PCAP_CLOCKMASK 0x00c0 -#define PCIM_PCAP_REQFULLCLOCK 0x0100 -#define PCIM_PCAP_D1SUPP 0x0200 -#define PCIM_PCAP_D2SUPP 0x0400 -#define PCIM_PCAP_D0PME 0x1000 -#define PCIM_PCAP_D1PME 0x2000 -#define PCIM_PCAP_D2PME 0x4000 - -#define PCIR_POWER_STATUS 0x4 -#define PCIM_PSTAT_D0 0x0000 -#define PCIM_PSTAT_D1 0x0001 -#define PCIM_PSTAT_D2 0x0002 -#define PCIM_PSTAT_D3 0x0003 -#define PCIM_PSTAT_DMASK 0x0003 -#define PCIM_PSTAT_REPENABLE 0x0010 -#define PCIM_PSTAT_PMEENABLE 0x0100 -#define PCIM_PSTAT_D0POWER 0x0000 -#define PCIM_PSTAT_D1POWER 0x0200 -#define PCIM_PSTAT_D2POWER 0x0400 -#define PCIM_PSTAT_D3POWER 0x0600 -#define PCIM_PSTAT_D0HEAT 0x0800 -#define PCIM_PSTAT_D1HEAT 0x1000 -#define PCIM_PSTAT_D2HEAT 0x1200 -#define PCIM_PSTAT_D3HEAT 0x1400 -#define PCIM_PSTAT_DATAUNKN 0x0000 -#define PCIM_PSTAT_DATADIV10 0x2000 -#define PCIM_PSTAT_DATADIV100 0x4000 -#define PCIM_PSTAT_DATADIV1000 0x6000 -#define PCIM_PSTAT_DATADIVMASK 0x6000 -#define PCIM_PSTAT_PME 0x8000 - -#define PCIR_POWER_PMCSR 0x6 -#define PCIM_PMCSR_DCLOCK 0x10 -#define PCIM_PMCSR_B2SUPP 0x20 -#define PCIM_BMCSR_B3SUPP 0x40 -#define PCIM_BMCSR_BPCE 0x80 - -#define PCIR_POWER_DATA 0x7 - -/* PCI Message Signalled Interrupts (MSI) */ -#define PCIR_MSI_CTRL 0x2 -#define PCIM_MSICTRL_VECTOR 0x0100 -#define PCIM_MSICTRL_64BIT 0x0080 -#define PCIM_MSICTRL_MME_MASK 0x0070 -#define PCIM_MSICTRL_MME_1 0x0000 -#define PCIM_MSICTRL_MME_2 0x0010 -#define PCIM_MSICTRL_MME_4 0x0020 -#define PCIM_MSICTRL_MME_8 0x0030 -#define PCIM_MSICTRL_MME_16 0x0040 -#define PCIM_MSICTRL_MME_32 0x0050 -#define PCIM_MSICTRL_MMC_MASK 0x000E -#define PCIM_MSICTRL_MMC_1 0x0000 -#define PCIM_MSICTRL_MMC_2 0x0002 -#define PCIM_MSICTRL_MMC_4 0x0004 -#define PCIM_MSICTRL_MMC_8 0x0006 -#define PCIM_MSICTRL_MMC_16 0x0008 -#define PCIM_MSICTRL_MMC_32 0x000A -#define PCIM_MSICTRL_MSI_ENABLE 0x0001 -#define PCIR_MSI_ADDR 0x4 -#define PCIR_MSI_ADDR_HIGH 0x8 -#define PCIR_MSI_DATA 0x8 -#define PCIR_MSI_DATA_64BIT 0xc -#define PCIR_MSI_MASK 0x10 -#define PCIR_MSI_PENDING 0x14 - -/* PCI-X definitions */ -#define PCIXR_COMMAND 0x96 -#define PCIXR_DEVADDR 0x98 -#define PCIXM_DEVADDR_FNUM 0x0003 /* Function Number */ -#define PCIXM_DEVADDR_DNUM 0x00F8 /* Device Number */ -#define PCIXM_DEVADDR_BNUM 0xFF00 /* Bus Number */ -#define PCIXR_STATUS 0x9A -#define PCIXM_STATUS_64BIT 0x0001 /* Active 64bit connection to device. */ -#define PCIXM_STATUS_133CAP 0x0002 /* Device is 133MHz capable */ -#define PCIXM_STATUS_SCDISC 0x0004 /* Split Completion Discarded */ -#define PCIXM_STATUS_UNEXPSC 0x0008 /* Unexpected Split Completion */ -#define PCIXM_STATUS_CMPLEXDEV 0x0010 /* Device Complexity (set == bridge) */ -#define PCIXM_STATUS_MAXMRDBC 0x0060 /* Maximum Burst Read Count */ -#define PCIXM_STATUS_MAXSPLITS 0x0380 /* Maximum Split Transactions */ -#define PCIXM_STATUS_MAXCRDS 0x1C00 /* Maximum Cumulative Read Size */ -#define PCIXM_STATUS_RCVDSCEM 0x2000 /* Received a Split Comp w/Error msg */ diff --git a/bsps/powerpc/beatnik/net/porting/rtemscompat.h b/bsps/powerpc/beatnik/net/porting/rtemscompat.h deleted file mode 100644 index 5a4bb6bea2..0000000000 --- a/bsps/powerpc/beatnik/net/porting/rtemscompat.h +++ /dev/null @@ -1,454 +0,0 @@ -#ifndef RTEMS_COMPAT_BSD_NET_H -#define RTEMS_COMPAT_BSD_NET_H - -/* BSD -> rtems wrappers; stuff that must be defined - * prior to including most BSD headers - */ - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -#include <rtems.h> -#include <sys/errno.h> -#include <sys/types.h> - -#include <stdlib.h> - -/* Check for RTEMS version; true if >= ma.mi.re */ -#define ISMINVERSION(ma,mi,re) \ - ( __RTEMS_MAJOR__ > (ma) \ - || (__RTEMS_MAJOR__ == (ma) && __RTEMS_MINOR__ > (mi)) \ - || (__RTEMS_MAJOR__ == (ma) && __RTEMS_MINOR__ == (mi) && __RTEMS_REVISION__ >= (re)) \ - ) - -/* 'align' ARG is evaluated more than once */ -#define _DO_ALIGN(addr, align) (((uint32_t)(addr) + (align) - 1) & ~((align)-1)) - - -/* malloc/free are redefined :-( */ -static inline void *the_real_malloc(size_t n) -{ - return malloc(n); -} - -static inline void the_real_free(void *p) -{ - return free(p); -} - -#include <machine/rtems-bsd-kernel-space.h> -#include <rtems/rtems_bsdnet.h> -#include <rtems/rtems_bsdnet_internal.h> -#ifdef __i386__ -#include <libcpu/cpu.h> -#elif defined(__PPC__) -#include <libcpu/io.h> -#else -#error "dunno what IO ops to use on this architecture" -#endif -#include <rtems/bspIo.h> - -#define NET_EMB(x,y,z) x ## y ## z -#define NET_EMBEMB(x,y,z) NET_EMB(x,y,z) - -#define NET_STR(arg) #arg -#define NET_STRSTR(arg) NET_STR(arg) - -#define NET_SOFTC NET_EMBEMB(,NETDRIVER_PREFIX,_softc) - -#define METHODS NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_methods) -extern struct _net_drv_tbl METHODS; - -#ifdef DEBUG_MODULAR -#define METHODSPTR NET_EMBEMB(rtems_,NETDRIVER_PREFIX,_methods_p) -extern struct _net_drv_tbl *volatile METHODSPTR; -#else -#define METHODSPTR (&METHODS) -#endif - -#if defined(__LITTLE_ENDIAN__) || (__i386__) -static inline uint16_t htole16(uint16_t v) { return v; } -static inline uint32_t htole32(uint32_t v) { return v; } -static inline uint64_t htole64(uint64_t v) { return v; } -static inline uint16_t le16toh(uint16_t v) { return v; } -static inline uint32_t le32toh(uint32_t v) { return v; } -static inline uint64_t le64toh(uint64_t v) { return v; } -#elif defined(__BIG_ENDIAN__) -#ifdef __PPC__ -#include <libcpu/byteorder.h> - -/* Different RTEMS versions use different types - * for 32-bit (unsigned vs. unsigned long which - * always cause gcc warnings and possible alias - * violations, sigh). - */ - -#if ISMINVERSION(4,8,0) -typedef uint32_t rtemscompat_32_t; -#else -typedef unsigned rtemscompat_32_t; -#endif - -static inline uint16_t -htole16(uint16_t v) -{ -uint16_t rval; - st_le16(&rval,v); - return rval; -} - -static inline uint16_t -le16toh(uint16_t v) -{ - return ld_le16((unsigned short*)&v); -} - -static inline uint32_t -htole32(uint32_t v) -{ -rtemscompat_32_t rval; - st_le32(&rval,v); - return rval; -} - -static inline uint32_t -le32toh(uint32_t v) -{ -rtemscompat_32_t vv = v; - return ld_le32(&vv); -} - -/* Compiler generated floating point instructions for this - * and rtems_bsdnet_newproc()-generated tasks are non-FP - * :-( - */ -static inline uint64_t -htole64(uint64_t v) -{ -union { - rtemscompat_32_t tmp[2]; - uint64_t rval; -} u; - - st_le32( &u.tmp[0], (unsigned)(v&0xffffffff) ); - st_le32( &u.tmp[1], (unsigned)((v>>32)&0xffffffff) ); - - return u.rval; -} - -#else -#error "need htoleXX() implementation for this CPU arch" -#endif - -#else -#error "Unknown CPU endianness" -#endif - - - -#ifdef __PPC__ -#define _out_byte(a,v) out_8((volatile uint8_t*)(a),(v)) -#define _inp_byte(a) in_8((volatile uint8_t*)(a)) -#ifdef NET_CHIP_LE -#define _out_word(a,v) out_le16((volatile uint16_t*)(a),(v)) -#define _out_long(a,v) out_le32((volatile uint32_t *)(a),(v)) -#define _inp_word(a) in_le16((volatile uint16_t*)(a)) -#define _inp_long(a) in_le32((volatile uint32_t *)(a)) -#elif defined(NET_CHIP_BE) -#define _out_word(a,v) out_be16((volatile uint16_t*)(a),(v)) -#define _out_long(a,v) out_be32((volatile uint32_t *)(a),(v)) -#define _inp_word(a) in_be16((volatile uint16_t*)(a)) -#define _inp_long(a) in_be32((volatile uint32_t *)(a)) -#else -#error rtemscompat_defs.h must define either NET_CHIP_LE or NET_CHIP_BE -#endif -static inline void wrle32(unsigned *a, unsigned v) -{ - asm volatile("stwbrx %1,0,%2":"=m"(*a):"r"(v),"r"(a)); -} -static inline unsigned rdle32(unsigned *a) -{ - asm volatile("lwbrx %0,0,%0":"=r"(a):"0"(a),"m"(*a)); - return (unsigned)a; -} -static inline void orle32(unsigned *a,unsigned v) { wrle32(a, rdle32(a) | v); } -static inline void anle32(unsigned *a,unsigned v) { wrle32(a, rdle32(a) & v); } - -static inline void wrle16(unsigned short *a, unsigned short v) -{ - asm volatile("sthbrx %1,0,%2":"=m"(*a):"r"(v),"r"(a)); -} -static inline unsigned short rdle16(unsigned short *a) -{ - asm volatile("lhbrx %0,0,%0":"=r"(a):"0"(a),"m"(*a)); - return (unsigned short)(unsigned)a; -} -static inline void orle16(unsigned short *a,unsigned short v) { wrle16(a, rdle16(a) | v); } -static inline void anle16(unsigned short *a,unsigned short v) { wrle16(a, rdle16(a) & v); } -#endif - -#ifdef __i386__ -#ifdef NET_CHIP_BE -#error dunno how to output BE data -#endif - -static inline void wrle32(volatile unsigned *p, unsigned v) { *p = v; } -static inline void orle32(volatile unsigned *p, unsigned v) { *p |= v; } -static inline void anle32(volatile unsigned *p, unsigned v) { *p &= v; } -static inline unsigned rdle32(volatile unsigned *p) { return *p; } - -static inline void wrle16(volatile unsigned short *p, unsigned short v) { *p = v; } -static inline void orle16(volatile unsigned short *p, unsigned short v) { *p |= v; } -static inline void anle16(volatile unsigned short *p, unsigned short v) { *p &= v; } -static inline unsigned short rdle16(volatile unsigned short *p) { return *p; } - -#ifdef NET_CHIP_MEM_IO - -#ifdef __i386__ -static inline void _out_byte(unsigned a, unsigned char v) { *(volatile unsigned char*)a = v; } -static inline unsigned char _inp_byte(unsigned a) { return *(volatile unsigned char*)a; } -#ifdef NET_CHIP_LE -static inline void _out_word(unsigned a, unsigned short v) { *(volatile unsigned short*)a = v; } -static inline unsigned short _inp_word(unsigned a) { return *(volatile unsigned short*)a; } -static inline void _out_long(unsigned a, unsigned v) { *(volatile unsigned *)a = v; } -static inline unsigned _inp_long(unsigned a) { return *(volatile unsigned *)a; } -#elif defined(NET_CHIP_BE) -#error "BE memory IO not implemented for i386 yet" -#else -#error rtemscompat_defs.h must define either NET_CHIP_LE or NET_CHIP_BE -#endif -#else - -#error "Memory IO not implemented for this CPU architecture yet" - -#endif -#elif defined(NET_CHIP_PORT_IO) -#define _out_byte(addr,val) outport_byte((addr),(val)) -#define _out_word(addr,val) outport_word((addr),(val)) -#define _out_long(addr,val) outport_long((addr),(val)) - -static inline u_int8_t _inp_byte(volatile unsigned char *a) -{ -register u_int8_t rval; - inport_byte((unsigned short)(unsigned)a,rval); - return rval; -} -static inline u_int16_t _inp_word(volatile unsigned short *a) -{ -register u_int16_t rval; - inport_word((unsigned short)(unsigned)a,rval); - return rval; -} -static inline u_int32_t _inp_long(volatile unsigned *a) -{ -register u_int32_t rval; - inport_long((unsigned short)(unsigned)a,rval); - return rval; -} -#else -#error either NET_CHIP_MEM_IO or NET_CHIP_PORT_IO must be defined -#endif -#endif - -#ifndef __FBSDID -#define __FBSDID(arg) -#endif - -#define device_printf(device,format,args...) printk(format,## args) - -static inline u_int8_t bus_space_do_read_1(u_long handle, unsigned reg) -{ - return _inp_byte((volatile unsigned char*)((handle)+(reg))); -} - -static inline u_int16_t bus_space_do_read_2(u_long handle, unsigned reg) -{ - return _inp_word((volatile unsigned short*)((handle)+(reg))); -} - -static inline u_int32_t bus_space_do_read_4(u_long handle, unsigned reg) -{ - return _inp_long((volatile unsigned *)((handle)+(reg))); -} - -#define bus_space_read_1(tag,handle,reg) bus_space_do_read_1((handle),(reg)) -#define bus_space_read_2(tag,handle,reg) bus_space_do_read_2((handle),(reg)) -#define bus_space_read_4(tag,handle,reg) bus_space_do_read_4((handle),(reg)) - -static inline void bus_space_do_write_multi_1(u_long handle, unsigned reg, unsigned char *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) _out_byte( (handle) + (reg), (addr)[i]); -} - -static inline void bus_space_do_write_multi_2(u_long handle, unsigned reg, unsigned short *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) _out_word( (handle) + (reg), (addr)[i]); -} - -static inline void bus_space_do_write_multi_4(u_long handle, unsigned reg, unsigned long *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) _out_long( (handle) + (reg), (addr)[i]); -} - - -#define bus_space_write_multi_1(tag, handle, reg, addr, cnt) \ - bus_space_do_write_multi_1(handle, reg, addr, cnt) -#define bus_space_write_multi_2(tag, handle, reg, addr, cnt) \ - bus_space_do_write_multi_2(handle, reg, addr, cnt) -#define bus_space_write_multi_4(tag, handle, reg, addr, cnt) \ - bus_space_do_write_multi_4(handle, reg, addr, cnt) - -static inline void bus_space_do_read_multi_1(u_long handle, unsigned reg, unsigned char *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) - (addr)[i] = _inp_byte((volatile unsigned char*)((handle)+(reg))); -} - -static inline void bus_space_do_read_multi_2(u_long handle, unsigned reg, unsigned short *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) - (addr)[i] = _inp_word((volatile unsigned short*)((handle)+(reg))); -} - -static inline void bus_space_do_read_multi_4(u_long handle, unsigned reg, unsigned long *addr, int cnt) -{ - int i; for (i=0; i<cnt; i++) - (addr)[i] = _inp_long((volatile unsigned *)((handle)+(reg))); -} - -#define bus_space_read_multi_1(tag, handle, reg, addr, cnt) \ - bus_space_do_read_multi_1(handle, reg, addr, cnt) -#define bus_space_read_multi_2(tag, handle, reg, addr, cnt) \ - bus_space_do_read_multi_2(handle, reg, addr, cnt) -#define bus_space_read_multi_4(tag, handle, reg, addr, cnt) \ - bus_space_do_read_multi_4(handle, reg, addr, cnt) - - - -#define bus_space_write_1(tag, handle, reg, val) \ - do { _out_byte( (handle) + (reg), (val)); } while (0) - -#define bus_space_write_2(tag, handle, reg, val) \ - do { _out_word( (handle) + (reg), (val)); } while (0) - -#define bus_space_write_4(tag, handle, reg, val) \ - do { _out_long( (handle) + (reg), (val)); } while (0) - -#define BPF_MTAP(a,b) do { } while (0) - -extern unsigned net_driver_ticks_per_sec; - -#ifdef __PPC__ -/* PPC has a timebase - based delay */ -#define DELAY(n) do { \ - if ( (n) > 10000 ) \ - rtems_task_wake_after((((n)*net_driver_ticks_per_sec)/1000000) + 1); \ - else \ - rtems_bsp_delay(n); \ - } while (0) -#else -#warning "Have no good usec delay implementation" -#define DELAY(n) do { \ - rtems_task_wake_after((((n)*net_driver_ticks_per_sec)/1000000) + 1); \ - } while (0) -#endif - - -#define IRQ_LOCKED(code) \ - do { unsigned long _xtre_irq_flags; \ - rtems_interrupt_disable(_xtre_irq_flags); \ - do { code } while(0); \ - rtems_interrupt_enable(_xtre_irq_flags); \ - } while (0) - -typedef void (driver_intr_t)(void *); - -#define if_xname if_name - -/* need to replace those with LOCAL2PCI() and make sure the bus handle is initialized - * (on most BSPs we get away with PCI_DRAM_OFFSET [no bus handle needed at all] - */ -#ifndef PCI_DRAM_OFFSET -#define PCI_DRAM_OFFSET 0 -#endif - -#ifndef PCI_MEM_BASE -#define PCI_MEM_BASE 0 -#endif - -#define kvtop(a) ((unsigned long)(a) + PCI_DRAM_OFFSET) -#define vtophys(a) ((unsigned long)(a) + PCI_DRAM_OFFSET) - -#define PCI2LOCAL(a,bus) ((unsigned long)(a) + PCI_MEM_BASE) - -#ifdef PCI0_IO_BASE /* special mvme5500 hack :-( */ -#define PCI_IO_2LOCAL(a,bus) ((unsigned long)(a) + PCI0_IO_BASE) -#elif defined(PCI_IO_BASE) -#define PCI_IO_2LOCAL(a,bus) ((unsigned long)(a) + PCI_IO_BASE) -#elif defined(_IO_BASE) -#define PCI_IO_2LOCAL(a,bus) ((unsigned long)(a) + _IO_BASE) -#else -#warning "Unable to determine base address of PCI IO space; using ZERO" -#define PCI_IO_2LOCAL(a,bus) ((unsigned long)(a)) -#endif - -#define if_printf(if,fmt,args...) printf("%s:"fmt,(if)->if_name,args) - -#ifndef BUS_PROBE_DEFAULT -#define BUS_PROBE_DEFAULT 0 -#endif - -static inline void * -contigmalloc( - unsigned long size, - int type, - int flags, - unsigned long lo, - unsigned long hi, - unsigned long align, - unsigned long bound) -{ -void *ptr = rtems_bsdnet_malloc(size + sizeof(ptr) + align-1, type, flags); -char *rval = 0; - if ( ptr ) { - unsigned tmp = (unsigned)ptr + align - 1; - tmp -= tmp % align; - rval = (char*)tmp; - /* save backlink */ - *(void**)(rval+size) = ptr; - } - return rval; -} - -static inline void -contigfree(void *ptr, size_t size, int type) -{ - rtems_bsdnet_free( *(void**)((unsigned)ptr + size), type); -} - -/* callout stuff */ -#define callout_init(args...) do {} while (0); -#define callout_reset(args...) do {} while (0); -#define callout_stop(args...) do {} while (0); - -#define IFQ_DRV_IS_EMPTY(q) (0 == (q)->ifq_head) -#define IFQ_DRV_DEQUEUE(q,m) IF_DEQUEUE((q),(m)) -#define IFQ_DRV_PREPEND(q,m) IF_PREPEND((q),(m)) - -#define DO_ETHER_INPUT_SKIPPING_ETHER_HEADER(ifp,m) \ - { struct ether_header *eh; \ - eh = mtod(m, struct ether_header*); \ - m->m_data += sizeof(struct ether_header); \ - m->m_len -= sizeof(struct ether_header); \ - m->m_pkthdr.len -= sizeof(struct ether_header); \ - m->m_pkthdr.rcvif = ifp; \ - ether_input(ifp, eh, m); \ - } while (0) - - -#ifndef __KERNEL_RCSID -#define __KERNEL_RCSID(arg...) -#endif - -#endif diff --git a/bsps/powerpc/beatnik/net/porting/rtemscompat1.h b/bsps/powerpc/beatnik/net/porting/rtemscompat1.h deleted file mode 100644 index cee16522cc..0000000000 --- a/bsps/powerpc/beatnik/net/porting/rtemscompat1.h +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef RTEMS_COMPAT1_BSD_NET_H -#define RTEMS_COMPAT1_BSD_NET_H - -/* BSD -> RTEMS conversion wrappers; stuff that must be defined - * after most BSD headers are included. - */ - -#include <netinet/in.h> -#include <netinet/if_ether.h> - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -typedef struct device { - struct NET_SOFTC d_softc; /* MUST BE FIRST FIELD */ - char *d_name; - char *d_desc; - int d_unit; - int flags; - /* pointer to ifconfig only valid during excution of - * the n_attach/n_detach methods (see below) - */ - struct rtems_bsdnet_ifconfig *d_ifconfig; -} netdev_t; - -#define THEDEVS NET_EMBEMB(the_,NETDRIVER_PREFIX,_devs) -#define NETDEV_DECL netdev_t THEDEVS[NETDRIVER_SLOTS] - -extern NETDEV_DECL; - -typedef struct _net_drv_tbl { - int (*n_probe)(device_t); - int (*n_attach)(device_t); - int (*n_detach)(device_t); - void (*n_intr)(void *); -} net_drv_tbl_t; - -static inline netdev_t * -net_dev_get(struct rtems_bsdnet_ifconfig *config) -{ - int unitNo; - char *unitName; - - unitNo = rtems_bsdnet_parse_driver_name(config, &unitName); - if ( unitNo < 0 ) - return 0; - - if ( unitNo <=0 || unitNo > NETDRIVER_SLOTS ) { - device_printf(dev, "Bad "NETDRIVER" unit number.\n"); - return 0; - } - - if ( THEDEVS[unitNo-1].d_unit && THEDEVS[unitNo-1].d_unit != unitNo ) { - device_printf(dev, "Unit # mismatch !!??\n"); - return 0; - } - - THEDEVS[unitNo-1].d_unit = unitNo; - THEDEVS[unitNo-1].d_name = unitName; - THEDEVS[unitNo-1].d_ifconfig = config; - - return &THEDEVS[unitNo - 1]; -} - -/* kludge; that's why softc needs to be first */ -static inline netdev_t * -softc_get_device(struct NET_SOFTC *sc) -{ - return (netdev_t *)sc; -} - -static inline struct NET_SOFTC * -device_get_softc(netdev_t *dev) -{ return &dev->d_softc; } - -static inline int -device_get_unit(netdev_t *dev) -{ return dev->d_unit; } - -static inline char * -device_get_name(netdev_t *dev) -{ return dev->d_name; } - -static inline void -if_initname(struct ifnet *ifp, char *name, int unit) -{ - ifp->if_name = name; - ifp->if_unit = unit; -} - -static inline void -device_set_desc(netdev_t *dev, char *str) -{ - dev->d_desc = str; -} - -static inline void -device_set_desc_copy(netdev_t *dev, char *str) -{ - dev->d_desc = strdup(str); -} - - -static inline int -device_is_attached(netdev_t *dev) -{ - return dev->d_softc.arpcom.ac_if.if_addrlist && dev->d_softc.arpcom.ac_if.if_init; -} - -#ifdef NETDRIVER_PCI -#include NETDRIVER_PCI -#include "pcireg.h" - -static inline unsigned -pci_read_config(device_t dev, unsigned addr, unsigned width) -{ -rtemscompat_32_t d; -unsigned short s; -unsigned char b; -struct NET_SOFTC *sc = device_get_softc(dev); - switch (width) { - case 1: pci_read_config_byte(sc->b, sc->d, sc->f, addr, &b); - return b; - case 2: pci_read_config_word(sc->b, sc->d, sc->f, addr, &s); - return s; - case 4: pci_read_config_dword(sc->b, sc->d, sc->f, addr, &d); - return d; - default: - break; - } - return 0xdeadbeef; -} - -static inline void -pci_write_config(device_t dev, unsigned addr, unsigned width, unsigned val) -{ -struct NET_SOFTC *sc = device_get_softc(dev); - switch (width) { - case 1: pci_write_config_byte(sc->b, sc->d, sc->f, addr, val); - return ; - case 2: pci_write_config_word(sc->b, sc->d, sc->f, addr, val); - return ; - case 4: pci_write_config_dword(sc->b, sc->d, sc->f, addr, val); - return ; - default: - break; - } -} - - -static inline unsigned short -pci_get_vendor(device_t dev) -{ - return pci_read_config(dev, PCIR_VENDOR, 2); -} - -static inline unsigned short -pci_get_device(device_t dev) -{ - return pci_read_config(dev, PCIR_DEVICE, 2); -} - -static inline unsigned short -pci_get_subvendor(device_t dev) -{ - return pci_read_config(dev, PCIR_SUBVEND_0, 2); -} - -static inline unsigned short -pci_get_subdevice(device_t dev) -{ - return pci_read_config(dev, PCIR_SUBDEV_0, 2); -} - - -static inline void -pci_enable_busmaster(device_t dev) -{ - pci_write_config( - dev, - PCIR_COMMAND, - 2, - pci_read_config(dev, PCIR_COMMAND, 2) - | PCIM_CMD_BUSMASTEREN); -} - -#define mtx_init(a,b,c,d) do {} while(0) -#define mtx_initialized(ma) (1) -#define mtx_destroy(ma) do {} while(0) -#define mtx_lock(a) do {} while(0) -#define mtx_unlock(a) do {} while(0) -#define mtx_assert(a,b) do {} while(0) - -#define callout_handle_init(x) do {} while (0) -#define untimeout(a...) do {} while (0) - -#if !ISMINVERSION(4,6,99) -#define pci_bus_count BusCountPCI -#endif - -#endif - -/* Ugly hack to allow unloading/reloading the driver core. - * Needed because rtems' bsdnet release doesn't implement - * if_detach(). Therefore, we bring the interface down but - * keep the device record alive... - */ -static inline void -__ether_ifdetach(struct ifnet *ifp) -{ - ifp->if_flags = 0; - ifp->if_ioctl = 0; - ifp->if_start = 0; - ifp->if_watchdog = 0; - ifp->if_init = 0; -} - -#endif diff --git a/bsps/powerpc/beatnik/net/porting/rtemscompat_defs.h.template b/bsps/powerpc/beatnik/net/porting/rtemscompat_defs.h.template deleted file mode 100644 index 5dc8d1efff..0000000000 --- a/bsps/powerpc/beatnik/net/porting/rtemscompat_defs.h.template +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef RTEMS_COMPAT_DEFS_H -#define RTEMS_COMPAT_DEFS_H - -/* Symbol definitions for a particular driver */ - -/* Copyright: Till Straumann <strauman@slac.stanford.edu>, 2005; - * License: see LICENSE file. - */ - -/* Number of device instances the driver should support - * - may be limited to 1 depending on IRQ API - * (braindamaged PC586 and powerpc) - */ -#define NETDRIVER_SLOTS 1 -/* String name to print with error messages */ -#define NETDRIVER "PCN" -/* Name snippet used to make global symbols unique to this driver */ -#define NETDRIVER_PREFIX pcn - -/* Define according to endianness of the *ethernet*chip* - * (not the CPU - most probably are LE) - * This must be either NET_CHIP_LE or NET_CHIP_BE - */ - -#define NET_CHIP_LE -#undef NET_CHIP_BE - -/* Define either NET_CHIP_MEM_IO or NET_CHIP_PORT_IO, - * depending whether the CPU sees it in memory address space - * or (e.g. x86) uses special I/O instructions. - */ -#define NET_CHIP_MEM_IO -#undef NET_CHIP_PORT_IO - -/* The name of the hijacked 'bus handle' field in the softc - * structure. We use this field to store the chip's base address. - */ -#define NET_SOFTC_BHANDLE_FIELD pcn_bhandle - -/* define the names of the 'if_XXXreg.h' and 'if_XXXvar.h' headers - * (only if present, i.e., if the BSDNET driver has no respective - * header, leave this undefined). - * - */ -#undef IF_REG_HEADER <if_XXXreg.h> -#undef IF_VAR_HEADER <if_XXXvar.h> - -/* define if a pci device */ -#define NETDRIVER_PCI <bsp/pci.h> - -/* Macros to disable and enable interrupts, respectively. - * The 'disable' macro is expanded in the ISR, the 'enable' - * macro is expanded in the driver task. - * The global network semaphore usually provides mutex - * protection of the device registers. - * Special care must be taken when coding the 'disable' macro, - * however to MAKE SURE THERE ARE NO OTHER SIDE EFFECTS such - * as: - * - macro must not clear any status flags - * - macro must save/restore any context information - * (e.g., a address register pointer or a bank switch register) - * - * ARGUMENT: the macro arg is a pointer to the driver's 'softc' structure - */ - -/* Here EXAMPLES for the pcnet chip which addresses registers indirectly - * through a 'address-pointer' (RAP) and 'data-port' (RDP) register pair: -#define NET_DISABLE_IRQS(sc) do { \ - unsigned rap = CSR_READ_4((sc),PCN_IO32_RAP); \ - unsigned val; \ - CSR_WRITE_4((sc),PCN_IO32_RAP,PCN_CSR_CSR); \ - val = CSR_READ_4((sc),PCN_IO32_RDP); \ - CSR_WRITE_4((sc), PCN_IO32_RDP, val & ~(CSR0_INT_STATUS_MASK | PCN_CSR_INTEN)); \ - CSR_WRITE_4((sc), PCN_IO32_RAP, rap); \ - } while (0) - -#define NET_ENABLE_IRQS(sc) do { \ - unsigned flags,val; \ - rtems_interrupt_disable(flags); \ - CSR_WRITE_4((sc),PCN_IO32_RAP,PCN_CSR_CSR); \ - val = CSR_READ_4((sc),PCN_IO32_RDP); \ - CSR_WRITE_4((sc), PCN_IO32_RDP, (val & ~CSR0_INT_STATUS_MASK) | PCN_CSR_INTEN); \ - rtems_interrupt_enable(flags); \ - } while (0) -*/ - -/* Driver may provide a macro/function to copy the hardware address - * from the device into 'softc.arpcom'. - * If this is undefined, the driver must to the copy itself. - * Preferrably, it should check soft.arpcom.ac_enaddr for all - * zeros and leave it alone if it is nonzero, i.e., write it - * to the hardware. -#define NET_READ_MAC_ADDR(sc) - */ - -#define KASSERT(a...) do {} while (0) -#endif |