forked from Imagelibrary/rtems
136 lines
3.5 KiB
Plaintext
136 lines
3.5 KiB
Plaintext
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 <bsp.h>
|
|
#include <rtems/rtems_bsdnet.h>
|
|
#include <libchip/sonic.h>
|
|
|
|
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 );
|
|
|
|
}
|
|
|
|
======================================================================
|