This SONIC driver does not make any attempt to support the SONIC chip in any of the following modes: + 16-bit + little endian It does not attempt to handle SONIC's older than Revision C. There is a bug in chips before that revision that must be handled in the driver. The configuration table should be discussed here but if you look in the include file for the sonic, it is reasonably obvious. :) The performance impact of transforming this driver into libchip format was minimal. The powerpc/dmv177 BSP used this driver and the following should serve as an example configuration table. This BSP was obsoleted after the 4.6 release series so the code is included here. ====================================================================== /* * DMV177 SONIC Configuration Information * * References: * * 1) SVME/DMV-171 Single Board Computer Documentation Package, #805905, * DY 4 Systems Inc., Kanata, Ontario, September, 1996. */ #include #include #include void dmv177_sonic_write_register( void *base, unsigned32 regno, unsigned32 value ) { volatile unsigned32 *p = base; #if (SONIC_DEBUG & SONIC_DEBUG_PRINT_REGISTERS) printf( "%p Write 0x%04x to %s (0x%02x)\n", &p[regno], value, SONIC_Reg_name[regno], regno ); fflush( stdout ); #endif p[regno] = value; } unsigned32 dmv177_sonic_read_register( void *base, unsigned32 regno ) { volatile unsigned32 *p = base; unsigned32 value; value = p[regno]; #if (SONIC_DEBUG & SONIC_DEBUG_PRINT_REGISTERS) printf( "%p Read 0x%04x from %s (0x%02x)\n", &p[regno], value, SONIC_Reg_name[regno], regno ); fflush( stdout ); #endif return value; } /* * Default sizes of transmit and receive descriptor areas */ #define RDA_COUNT 20 /* 20 */ #define TDA_COUNT 20 /* 10 */ /* * Default device configuration register values * Conservative, generic values. * DCR: * No extended bus mode * Unlatched bus retry * Programmable outputs unused * Asynchronous bus mode * User definable pins unused * No wait states (access time controlled by DTACK*) * 32-bit DMA * Empty/Fill DMA mode * Maximum Transmit/Receive FIFO * DC2: * Extended programmable outputs unused * Normal HOLD request * Packet compress output unused * No reject on CAM match */ #define SONIC_DCR \ (DCR_DW32 | DCR_WAIT0 | DCR_PO0 | DCR_PO1 | DCR_RFT24 | DCR_TFT28) #ifndef SONIC_DCR # define SONIC_DCR (DCR_DW32 | DCR_TFT28) #endif #ifndef SONIC_DC2 # define SONIC_DC2 (0) #endif /* * Default location of device registers */ #ifndef SONIC_BASE_ADDRESS # define SONIC_BASE_ADDRESS 0xF3000000 # warning "Using default SONIC_BASE_ADDRESS." #endif /* * Default interrupt vector */ #ifndef SONIC_VECTOR # define SONIC_VECTOR 1 # warning "Using default SONIC_VECTOR." #endif sonic_configuration_t dmv177_sonic_configuration = { SONIC_BASE_ADDRESS, /* base address */ SONIC_VECTOR, /* vector number */ SONIC_DCR, /* DCR register value */ SONIC_DC2, /* DC2 register value */ TDA_COUNT, /* number of transmit descriptors */ RDA_COUNT, /* number of receive descriptors */ dmv177_sonic_write_register, dmv177_sonic_read_register }; int rtems_dmv177_sonic_driver_attach(struct rtems_bsdnet_ifconfig *config) { return rtems_sonic_driver_attach( config, &dmv177_sonic_configuration ); } ======================================================================