summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/csb360/network/network.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/m68k/csb360/network/network.c')
-rw-r--r--c/src/lib/libbsp/m68k/csb360/network/network.c180
1 files changed, 90 insertions, 90 deletions
diff --git a/c/src/lib/libbsp/m68k/csb360/network/network.c b/c/src/lib/libbsp/m68k/csb360/network/network.c
index 9757402826..af0a3df207 100644
--- a/c/src/lib/libbsp/m68k/csb360/network/network.c
+++ b/c/src/lib/libbsp/m68k/csb360/network/network.c
@@ -7,7 +7,7 @@
* Right now, we only do 10 Mbps, even with the FEC. The function
* rtems_enet_driver_attach determines which one to use. Currently,
* only one may be used at a time.
- *
+ *
* Based on the MC68360 network driver by
* W. Eric Norum
* Saskatchewan Accelerator Laboratory
@@ -133,7 +133,7 @@ struct mcf5272_enet_struct {
bd_t *txBdBase;
rtems_id rxDaemonTid;
rtems_id txDaemonTid;
-
+
/*
* Statistics
*/
@@ -146,7 +146,7 @@ struct mcf5272_enet_struct {
unsigned long rxBadCRC;
unsigned long rxOverrun;
unsigned long rxTruncated;
-
+
unsigned long txInterrupts;
unsigned long txDeferred;
unsigned long txHeartbeat;
@@ -162,30 +162,30 @@ static struct mcf5272_enet_struct enet_driver[NIFACES];
void dump_enet_regs(void)
{
printf("**************************************************************\n");
- printf("ecr: 0x%08x eir: 0x%08x eimr: 0x%08x ivsr: 0x%08x\n\r",
- g_enet_regs->ecr, g_enet_regs->eir,
- g_enet_regs->eimr, g_enet_regs->ivsr);
- printf("rdar: 0x%08x tdar: 0x%08x mmfr: 0x%08x mscr: 0x%08x\n\r",
- g_enet_regs->rdar, g_enet_regs->tdar,
- g_enet_regs->mmfr, g_enet_regs->mscr);
- printf("frbr: 0x%08x frsr: 0x%08x tfwr: 0x%08x tfsr: 0x%08x\n\r",
- g_enet_regs->frbr, g_enet_regs->frsr,
- g_enet_regs->tfwr, g_enet_regs->tfsr);
- printf("rcr: 0x%08x mflr: 0x%08x tcr: 0x%08x malr: 0x%08x\n\r",
+ printf("ecr: 0x%08x eir: 0x%08x eimr: 0x%08x ivsr: 0x%08x\n\r",
+ g_enet_regs->ecr, g_enet_regs->eir,
+ g_enet_regs->eimr, g_enet_regs->ivsr);
+ printf("rdar: 0x%08x tdar: 0x%08x mmfr: 0x%08x mscr: 0x%08x\n\r",
+ g_enet_regs->rdar, g_enet_regs->tdar,
+ g_enet_regs->mmfr, g_enet_regs->mscr);
+ printf("frbr: 0x%08x frsr: 0x%08x tfwr: 0x%08x tfsr: 0x%08x\n\r",
+ g_enet_regs->frbr, g_enet_regs->frsr,
+ g_enet_regs->tfwr, g_enet_regs->tfsr);
+ printf("rcr: 0x%08x mflr: 0x%08x tcr: 0x%08x malr: 0x%08x\n\r",
g_enet_regs->rcr, g_enet_regs->mflr,
- g_enet_regs->tcr, g_enet_regs->malr);
- printf("maur: 0x%08x htur: 0x%08x htlr: 0x%08x erdsr: 0x%08x\n\r",
- g_enet_regs->maur, g_enet_regs->htur,
- g_enet_regs->htlr, g_enet_regs->erdsr);
- printf("etdsr: 0x%08x emrbr: 0x%08x\n\r",
- g_enet_regs->etdsr, g_enet_regs->emrbr);
+ g_enet_regs->tcr, g_enet_regs->malr);
+ printf("maur: 0x%08x htur: 0x%08x htlr: 0x%08x erdsr: 0x%08x\n\r",
+ g_enet_regs->maur, g_enet_regs->htur,
+ g_enet_regs->htlr, g_enet_regs->erdsr);
+ printf("etdsr: 0x%08x emrbr: 0x%08x\n\r",
+ g_enet_regs->etdsr, g_enet_regs->emrbr);
}
/*#define cp printk("%s:%d\n\r", __FUNCTION__, __LINE__) */
-#define cp
+#define cp
#define mcf5272_bd_allocate(_n_) malloc((_n_) * sizeof(bd_t), 0, M_NOWAIT)
@@ -236,7 +236,7 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
* Issue reset to FEC
*/
g_enet_regs->ecr=0x1;
-
+
/*
* Set the TX and RX fifo sizes. For now, we'll split it evenly
*/
@@ -244,11 +244,11 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
g_enet_regs->r_fstart = ((g_enet_regs->r_bound & 0x3ff) >> 2) & 0x3ff;
g_enet_regs->x_fstart = 0;
*/
-
+
/* Copy mac address to device */
-
+
hwaddr = sc->arpcom.ac_enaddr;
-
+
g_enet_regs->malr = (hwaddr[0] << 24 |
hwaddr[1] << 16 |
hwaddr[2] << 8 |
@@ -261,23 +261,23 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
*/
g_enet_regs->htlr = 0;
g_enet_regs->htur = 0;
-
+
/*
* Set up receive buffer size
*/
g_enet_regs->emrbr = 0x5f0; /* set to 1520 */
-
+
/*
* Allocate mbuf pointers
*/
- sc->rxMbuf = malloc (sc->rxBdCount * sizeof *sc->rxMbuf,
+ sc->rxMbuf = malloc (sc->rxBdCount * sizeof *sc->rxMbuf,
M_MBUF, M_NOWAIT);
- sc->txMbuf = malloc (sc->txBdCount * sizeof *sc->txMbuf,
+ sc->txMbuf = malloc (sc->txBdCount * sizeof *sc->txMbuf,
M_MBUF, M_NOWAIT);
if (!sc->rxMbuf || !sc->txMbuf) {
rtems_panic ("No memory for mbuf pointers");
}
-
+
/*
* Set receiver and transmitter buffer descriptor bases
*/
@@ -285,7 +285,7 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
sc->txBdBase = mcf5272_bd_allocate(sc->txBdCount);
g_enet_regs->erdsr = (int)sc->rxBdBase;
g_enet_regs->etdsr = (int)sc->txBdBase;
-
+
/*
* Set up Receive Control Register:
* Not promiscuous mode
@@ -294,27 +294,27 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
* No loopback
*/
g_enet_regs->rcr = 0x00000004;
-
+
/*
* Set up Transmit Control Register:
* Full duplex
* No heartbeat
*/
g_enet_regs->tcr = 0x00000004;
-
+
/*
- * Set MII speed to 2.5 MHz for 25 Mhz system clock
+ * Set MII speed to 2.5 MHz for 25 Mhz system clock
*/
g_enet_regs->mscr = 0x0a;
g_enet_regs->mmfr = 0x58021000;
-
+
/*
* Set up receive buffer descriptors
*/
for (i = 0 ; i < sc->rxBdCount ; i++) {
(sc->rxBdBase + i)->status = 0;
}
-
+
/*
* Set up transmit buffer descriptors
*/
@@ -325,11 +325,11 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
sc->txBdHead = sc->txBdTail = 0;
sc->txBdActiveCount = 0;
-
+
/*
* Mask all FEC interrupts and clear events
*/
- g_enet_regs->eimr = (MCF5272_ENET_EIR_TXF |
+ g_enet_regs->eimr = (MCF5272_ENET_EIR_TXF |
MCF5272_ENET_EIR_RXF);
g_enet_regs->eir = ~0;
@@ -341,12 +341,12 @@ mcf5272_enet_initialize_hardware (struct mcf5272_enet_struct *sc)
/* Configure ethernet interrupts */
icr = g_intctrl_regs->icr3;
- icr = icr & ~((MCF5272_ICR3_ERX_MASK | MCF5272_ICR3_ERX_PI) |
+ icr = icr & ~((MCF5272_ICR3_ERX_MASK | MCF5272_ICR3_ERX_PI) |
(MCF5272_ICR3_ETX_MASK | MCF5272_ICR3_ETX_PI));
icr |= ((MCF5272_ICR3_ERX_IPL(BSP_INTLVL_ERX) | MCF5272_ICR3_ERX_PI)|
(MCF5272_ICR3_ETX_IPL(BSP_INTLVL_ETX) | MCF5272_ICR3_ETX_PI));
g_intctrl_regs->icr3 = icr;
-
+
}
@@ -366,7 +366,7 @@ mcf5272_enet_retire_tx_bd (struct mcf5272_enet_struct *sc)
int i;
int nRetired;
struct mbuf *m, *n;
-
+
i = sc->txBdTail;
nRetired = 0;
while ((sc->txBdActiveCount != 0) &&
@@ -436,7 +436,7 @@ mcf5272_enet_rxDaemon (void *arg)
uint16_t status;
bd_t *rxBd;
int rxBdIndex;
-
+
/*
* Allocate space for incoming packets and start reception
*/
@@ -454,14 +454,14 @@ mcf5272_enet_rxDaemon (void *arg)
break;
}
}
-
+
/*
* Input packet handling loop
*/
rxBdIndex = 0;
for (;;) {
rxBd = sc->rxBdBase + rxBdIndex;
-
+
/*
* Wait for packet if there's not one ready
*/
@@ -470,7 +470,7 @@ mcf5272_enet_rxDaemon (void *arg)
* Clear old events
*/
g_enet_regs->eir = MCF5272_ENET_EIR_RXF;
-
+
/*
* Wait for packet
* Note that the buffer descriptor is checked
@@ -480,12 +480,12 @@ mcf5272_enet_rxDaemon (void *arg)
*/
while ((status = rxBd->status) & MCF5272_BD_EMPTY) {
rtems_event_set events;
-
+
/*
* Unmask RXF (Full frame received) event
*/
g_enet_regs->eir |= MCF5272_ENET_EIR_RXF;
-
+
rtems_bsdnet_event_receive (INTERRUPT_EVENT,
RTEMS_WAIT|RTEMS_EVENT_ANY,
RTEMS_NO_TIMEOUT,
@@ -494,7 +494,7 @@ mcf5272_enet_rxDaemon (void *arg)
}
}
cp;
-
+
/*
* Check that packet is valid
*/
@@ -504,7 +504,7 @@ mcf5272_enet_rxDaemon (void *arg)
* FIXME: Packet filtering hook could be done here.
*/
struct ether_header *eh;
-
+
m = sc->rxMbuf[rxBdIndex];
m->m_len = m->m_pkthdr.len = (rxBd->length -
sizeof(uint32_t) -
@@ -512,7 +512,7 @@ mcf5272_enet_rxDaemon (void *arg)
eh = mtod (m, struct ether_header *);
m->m_data += sizeof(struct ether_header);
ether_input (ifp, eh, m);
-
+
/*
* Allocate a new mbuf
*/
@@ -571,12 +571,12 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
uint16_t status;
int nAdded;
cp;
-
+
/*
* Free up buffer descriptors
*/
mcf5272_enet_retire_tx_bd (sc);
-
+
/*
* Set up the transmit buffer descriptors.
* No need to pad out short packets since the
@@ -596,7 +596,7 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
* Clear old events
*/
g_enet_regs->eir = MCF5272_ENET_EIR_TXF;
-
+
/*
* Wait for buffer descriptor to become available.
* Note that the buffer descriptors are checked
@@ -612,7 +612,7 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
mcf5272_enet_retire_tx_bd (sc);
while ((sc->txBdActiveCount + nAdded) == sc->txBdCount) {
rtems_event_set events;
-
+
cp;
/*
* Unmask TXB (buffer transmitted) and
@@ -627,14 +627,14 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
mcf5272_enet_retire_tx_bd (sc);
}
}
-
+
/*
* Don't set the READY flag till the
* whole packet has been readied.
*/
status = nAdded ? MCF5272_BD_READY : 0;
cp;
-
+
/*
* FIXME: Why not deal with empty mbufs at at higher level?
* The IP fragmentation routine in ip_output
@@ -650,7 +650,7 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
*/
txBd->buffer = mtod (m, void *);
txBd->length = m->m_len;
-
+
sc->txMbuf[sc->txBdHead] = m;
nAdded++;
if (++sc->txBdHead == sc->txBdCount) {
@@ -673,7 +673,7 @@ mcf5272_enet_sendpacket (struct ifnet *ifp, struct mbuf *m)
l->m_next = m;
*/
}
-
+
/*
* Set the transmit buffer status.
* Break out of the loop if this mbuf is the last in the frame.
@@ -709,15 +709,15 @@ mcf5272_enet_txDaemon (void *arg)
struct ifnet *ifp = &sc->arpcom.ac_if;
struct mbuf *m;
rtems_event_set events;
-
+
cp;
for (;;) {
/*
* Wait for packet
*/
- rtems_bsdnet_event_receive (START_TRANSMIT_EVENT,
- RTEMS_EVENT_ANY | RTEMS_WAIT,
- RTEMS_NO_TIMEOUT,
+ rtems_bsdnet_event_receive (START_TRANSMIT_EVENT,
+ RTEMS_EVENT_ANY | RTEMS_WAIT,
+ RTEMS_NO_TIMEOUT,
&events);
cp;
/*
@@ -746,7 +746,7 @@ static void
mcf5272_enet_start (struct ifnet *ifp)
{
struct mcf5272_enet_struct *sc = ifp->if_softc;
-
+
cp;
rtems_event_send (sc->txDaemonTid, START_TRANSMIT_EVENT);
cp;
@@ -759,28 +759,28 @@ mcf5272_enet_init (void *arg)
{
struct mcf5272_enet_struct *sc = arg;
struct ifnet *ifp = &sc->arpcom.ac_if;
-
+
if (sc->txDaemonTid == 0) {
-
+
/*
* Set up SCC hardware
*/
mcf5272_enet_initialize_hardware (sc);
-
+
/*
* Start driver tasks
*/
- sc->txDaemonTid = rtems_bsdnet_newproc("SCtx",
- 4096,
- mcf5272_enet_txDaemon,
+ sc->txDaemonTid = rtems_bsdnet_newproc("SCtx",
+ 4096,
+ mcf5272_enet_txDaemon,
sc);
- sc->rxDaemonTid = rtems_bsdnet_newproc("SCrx",
- 4096,
- mcf5272_enet_rxDaemon,
+ sc->rxDaemonTid = rtems_bsdnet_newproc("SCrx",
+ 4096,
+ mcf5272_enet_rxDaemon,
sc);
-
+
}
-
+
/*
* Set flags appropriately
*/
@@ -789,12 +789,12 @@ mcf5272_enet_init (void *arg)
} else {
g_enet_regs->rcr &= ~0x8;
}
-
+
/*
* Tell the world that we're running.
*/
ifp->if_flags |= IFF_RUNNING;
-
+
/*
* Enable receiver and transmitter
*/
@@ -806,9 +806,9 @@ static void
mcf5272_enet_stop (struct mcf5272_enet_struct *sc)
{
struct ifnet *ifp = &sc->arpcom.ac_if;
-
+
ifp->if_flags &= ~IFF_RUNNING;
-
+
/*
* Shut down receiver and transmitter
*/
@@ -832,7 +832,7 @@ enet_stats (struct mcf5272_enet_struct *sc)
printf (" Overrun:%-8lu", sc->rxOverrun);
printf (" Truncated:%-8lu\n", sc->rxTruncated);
/* printf (" Discarded:%-8lu\n", (unsigned long)mcf5272.scc1p.un.ethernet.disfc); */
-
+
printf (" Tx Interrupts:%-8lu", sc->txInterrupts);
printf (" Deferred:%-8lu", sc->txDeferred);
printf (" Missed Hearbeat:%-8lu\n", sc->txHeartbeat);
@@ -852,37 +852,37 @@ mcf5272_enet_ioctl (struct ifnet *ifp, int command, caddr_t data)
{
struct mcf5272_enet_struct *sc = ifp->if_softc;
int error = 0;
-
+
switch (command) {
case SIOCGIFADDR:
case SIOCSIFADDR:
ether_ioctl (ifp, command, data);
break;
-
+
case SIOCSIFFLAGS:
switch (ifp->if_flags & (IFF_UP | IFF_RUNNING)) {
case IFF_RUNNING:
mcf5272_enet_stop (sc);
break;
-
+
case IFF_UP:
mcf5272_enet_init (sc);
break;
-
+
case IFF_UP | IFF_RUNNING:
mcf5272_enet_stop (sc);
mcf5272_enet_init (sc);
break;
-
+
default:
break;
}
break;
-
+
case SIO_RTEMS_SHOW_STATS:
enet_stats (sc);
break;
-
+
/*
* FIXME: All sorts of multicast commands need to be added here!
*/
@@ -902,7 +902,7 @@ rtems_enet_driver_attach (struct rtems_bsdnet_ifconfig *config)
int mtu;
int unitNumber;
char *unitName;
-
+
/*
* Parse driver name
*/
@@ -910,7 +910,7 @@ rtems_enet_driver_attach (struct rtems_bsdnet_ifconfig *config)
if (unitNumber < 0){
return 0;
}
-
+
/*
* Is driver free?
*/
@@ -925,7 +925,7 @@ rtems_enet_driver_attach (struct rtems_bsdnet_ifconfig *config)
printf ("Driver already in use.\n");
return 0;
}
-
+
/*
* Process options
*/
@@ -954,7 +954,7 @@ rtems_enet_driver_attach (struct rtems_bsdnet_ifconfig *config)
sc->txBdCount = TX_BUF_COUNT * TX_BD_PER_BUF;
}
sc->acceptBroadcast = !config->ignore_broadcast;
-
+
/*
* Set up network interface values
*/
@@ -970,7 +970,7 @@ rtems_enet_driver_attach (struct rtems_bsdnet_ifconfig *config)
if (ifp->if_snd.ifq_maxlen == 0) {
ifp->if_snd.ifq_maxlen = ifqmaxlen;
}
-
+
/*
* Attach the interface
*/