Reverse merge from trunk in pci_BaS_gcc branch
This commit is contained in:
231
net/fec.c
231
net/fec.c
@@ -17,24 +17,21 @@
|
||||
#include "bas_string.h"
|
||||
#include "bas_printf.h"
|
||||
#include "util.h"
|
||||
#include "wait.h"
|
||||
#include "am79c874.h"
|
||||
//#include "bcm5222.h"
|
||||
#include "bcm5222.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
#if defined(MACHINE_FIREBEE)
|
||||
#include "firebee.h"
|
||||
#elif defined(MACHINE_M5484LITE)
|
||||
#include "m5484l.h"
|
||||
#elif defined(MACHINE_M54455)
|
||||
#include "m54455.h"
|
||||
#else
|
||||
#error Unknown machine!
|
||||
#endif
|
||||
|
||||
// #define DBG_FEC
|
||||
//#define DBG_FEC
|
||||
#ifdef DBG_FEC
|
||||
#define dbg(format, arg...) do { xprintf("DEBUG: %s(): " format, __FUNCTION__, ##arg); } while (0)
|
||||
#define dbg(format, arg...) do { xprintf("DEBUG: " format, ##arg); } while (0)
|
||||
#else
|
||||
#define dbg(format, arg...) do { ; } while (0)
|
||||
#endif /* DBG_FEC */
|
||||
@@ -94,12 +91,11 @@ int fec_mii_write(uint8_t ch, uint8_t phy_addr, uint8_t reg_addr, uint16_t data)
|
||||
*/
|
||||
for (timeout = 0; timeout < FEC_MII_TIMEOUT; timeout++)
|
||||
{
|
||||
wait(1);
|
||||
if (MCF_FEC_EIR(ch) & MCF_FEC_EIR_MII)
|
||||
break;
|
||||
}
|
||||
|
||||
if (timeout == FEC_MII_TIMEOUT)
|
||||
if(timeout == FEC_MII_TIMEOUT)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -160,12 +156,11 @@ int fec_mii_read(uint8_t ch, uint8_t phy_addr, uint8_t reg_addr, uint16_t *data)
|
||||
*/
|
||||
for (timeout = 0; timeout < FEC_MII_TIMEOUT; timeout++)
|
||||
{
|
||||
wait(1);
|
||||
if (MCF_FEC_EIR(ch) & MCF_FEC_EIR_MII)
|
||||
break;
|
||||
}
|
||||
|
||||
if (timeout == FEC_MII_TIMEOUT)
|
||||
if(timeout == FEC_MII_TIMEOUT)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
@@ -237,33 +232,33 @@ void fec_log_init(uint8_t ch)
|
||||
*/
|
||||
void fec_log_dump(uint8_t ch)
|
||||
{
|
||||
dbg("\r\n FEC%d Log\r\n", __FUNCTION__, ch);
|
||||
dbg(" ---------------\r\n", __FUNCTION__);
|
||||
dbg(" Total: %4d\r\n", fec_log[ch].total);
|
||||
dbg(" hberr: %4d\r\n", fec_log[ch].hberr);
|
||||
dbg(" babr: %4d\r\n", fec_log[ch].babr);
|
||||
dbg(" babt: %4d\r\n", fec_log[ch].babt);
|
||||
dbg(" gra: %4d\r\n", fec_log[ch].gra);
|
||||
dbg(" txf: %4d\r\n", fec_log[ch].txf);
|
||||
dbg(" mii: %4d\r\n", fec_log[ch].mii);
|
||||
dbg(" lc: %4d\r\n", fec_log[ch].lc);
|
||||
dbg(" rl: %4d\r\n", fec_log[ch].rl);
|
||||
dbg(" xfun: %4d\r\n", fec_log[ch].xfun);
|
||||
dbg(" xferr: %4d\r\n", fec_log[ch].xferr);
|
||||
dbg(" rferr: %4d\r\n", fec_log[ch].rferr);
|
||||
dbg(" dtxf: %4d\r\n", fec_log[ch].dtxf);
|
||||
dbg(" drxf: %4d\r\n", fec_log[ch].drxf);
|
||||
dbg(" \r\nRFSW:\r\n");
|
||||
dbg(" inv: %4d\r\n", fec_log[ch].rfsw_inv);
|
||||
dbg(" m: %4d\r\n", fec_log[ch].rfsw_m);
|
||||
dbg(" bc: %4d\r\n", fec_log[ch].rfsw_bc);
|
||||
dbg(" mc: %4d\r\n", fec_log[ch].rfsw_mc);
|
||||
dbg(" lg: %4d\r\n", fec_log[ch].rfsw_lg);
|
||||
dbg(" no: %4d\r\n", fec_log[ch].rfsw_no);
|
||||
dbg(" cr: %4d\r\n", fec_log[ch].rfsw_cr);
|
||||
dbg(" ov: %4d\r\n", fec_log[ch].rfsw_ov);
|
||||
dbg(" tr: %4d\r\n", fec_log[ch].rfsw_tr);
|
||||
dbg(" ---------------\r\n\r\n");
|
||||
dbg("%s: \r\n FEC%d Log\r\n", __FUNCTION__, ch);
|
||||
dbg("%s: ---------------\r\n", __FUNCTION__);
|
||||
dbg("%s: Total: %4d\r\n", __FUNCTION__, fec_log[ch].total);
|
||||
dbg("%s: hberr: %4d\r\n", __FUNCTION__, fec_log[ch].hberr);
|
||||
dbg("%s: babr: %4d\r\n", __FUNCTION__, fec_log[ch].babr);
|
||||
dbg("%s: babt: %4d\r\n", __FUNCTION__, fec_log[ch].babt);
|
||||
dbg("%s: gra: %4d\r\n", __FUNCTION__, fec_log[ch].gra);
|
||||
dbg("%s: txf: %4d\r\n", __FUNCTION__, fec_log[ch].txf);
|
||||
dbg("%s: mii: %4d\r\n", __FUNCTION__, fec_log[ch].mii);
|
||||
dbg("%s: lc: %4d\r\n", __FUNCTION__, fec_log[ch].lc);
|
||||
dbg("%s: rl: %4d\r\n", __FUNCTION__, fec_log[ch].rl);
|
||||
dbg("%s: xfun: %4d\r\n", __FUNCTION__, fec_log[ch].xfun);
|
||||
dbg("%s: xferr: %4d\r\n", __FUNCTION__, fec_log[ch].xferr);
|
||||
dbg("%s: rferr: %4d\r\n", __FUNCTION__, fec_log[ch].rferr);
|
||||
dbg("%s: dtxf: %4d\r\n", __FUNCTION__, fec_log[ch].dtxf);
|
||||
dbg("%s: drxf: %4d\r\n", __FUNCTION__, fec_log[ch].drxf);
|
||||
dbg("%s: \r\nRFSW:\r\n", __FUNCTION__);
|
||||
dbg("%s: inv: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_inv);
|
||||
dbg("%s: m: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_m);
|
||||
dbg("%s: bc: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_bc);
|
||||
dbg("%s: mc: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_mc);
|
||||
dbg("%s: lg: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_lg);
|
||||
dbg("%s: no: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_no);
|
||||
dbg("%s: cr: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_cr);
|
||||
dbg("%s: ov: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_ov);
|
||||
dbg("%s: tr: %4d\r\n", __FUNCTION__, fec_log[ch].rfsw_tr);
|
||||
dbg("%s: ---------------\r\n\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -486,7 +481,9 @@ void fec_init(uint8_t ch, uint8_t mode, const uint8_t *pa)
|
||||
*/
|
||||
MCF_FEC_RCR(ch) = 0
|
||||
| MCF_FEC_RCR_MAX_FL(ETH_MAX_FRM)
|
||||
//#ifdef FEC_PROMISCUOUS
|
||||
| MCF_FEC_RCR_PROM
|
||||
//#endif
|
||||
| MCF_FEC_RCR_FCE;
|
||||
|
||||
if (mode == FEC_MODE_MII)
|
||||
@@ -538,26 +535,19 @@ void fec_rx_start(uint8_t ch, int8_t *rxbd)
|
||||
{
|
||||
uint32_t initiator;
|
||||
int channel;
|
||||
#ifdef DBG_FEC
|
||||
int res;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make the initiator assignment
|
||||
*/
|
||||
#if defined(DBG_FEC)
|
||||
res =
|
||||
#else
|
||||
(void)
|
||||
#endif
|
||||
dma_set_initiator(DMA_FEC_RX(ch));
|
||||
dbg("dma_set_initiator(DMA_FEC_RX(%d)): %d\r\n", ch, res);
|
||||
res = dma_set_initiator(DMA_FEC_RX(ch));
|
||||
dbg("%s: dma_set_initiator(DMA_FEC_RX(%d)): %d\r\n", __FUNCTION__, ch, res);
|
||||
|
||||
/*
|
||||
* Grab the initiator number
|
||||
*/
|
||||
initiator = dma_get_initiator(DMA_FEC_RX(ch));
|
||||
dbg("dma_get_initiator(DMA_FEC_RX(%d)) = %d\r\n", ch, initiator);
|
||||
dbg("%s: dma_get_initiator(DMA_FEC_RX(%d)) = %d\r\n", __FUNCTION__, ch, initiator);
|
||||
|
||||
/*
|
||||
* Determine the DMA channel running the task for the
|
||||
@@ -565,7 +555,7 @@ void fec_rx_start(uint8_t ch, int8_t *rxbd)
|
||||
*/
|
||||
channel = dma_set_channel(DMA_FEC_RX(ch),
|
||||
(ch == 0) ? fec0_rx_frame : fec1_rx_frame);
|
||||
dbg("DMA channel for FEC%1d: %d\r\n", ch, channel);
|
||||
dbg("%s: DMA channel for FEC%1d: %d\r\n", __FUNCTION__, ch, channel);
|
||||
|
||||
/*
|
||||
* Start the Rx DMA task
|
||||
@@ -579,18 +569,18 @@ void fec_rx_start(uint8_t ch, int8_t *rxbd)
|
||||
0,
|
||||
initiator,
|
||||
FECRX_DMA_PRI(ch),
|
||||
0
|
||||
| MCD_FECRX_DMA
|
||||
0
|
||||
| MCD_FECRX_DMA
|
||||
| MCD_INTERRUPT
|
||||
| MCD_TT_FLAGS_CW
|
||||
| MCD_TT_FLAGS_CW
|
||||
| MCD_TT_FLAGS_RL
|
||||
| MCD_TT_FLAGS_SP
|
||||
,
|
||||
0
|
||||
0
|
||||
| MCD_NO_CSUM
|
||||
| MCD_NO_BYTE_SWAP
|
||||
);
|
||||
dbg("Rx DMA task for FEC%1d started\r\n", ch);
|
||||
dbg("%s: Rx DMA task for FEC%1d started\r\n", __FUNCTION__, ch);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -614,13 +604,13 @@ void fec_rx_continue(uint8_t ch)
|
||||
*/
|
||||
channel = dma_get_channel(DMA_FEC_RX(ch));
|
||||
|
||||
dbg("RX DMA channel for FEC%1d is %d\r\n", ch, channel);
|
||||
dbg("%s: RX DMA channel for FEC%1d is %d\r\n", __FUNCTION__, ch, channel);
|
||||
|
||||
/*
|
||||
* Continue/restart the DMA task
|
||||
*/
|
||||
MCD_continDma(channel);
|
||||
dbg("RX dma on channel %d continued\r\n", channel);
|
||||
dbg("%s: RX dma on channel %d continued\r\n", __FUNCTION__, channel);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -649,9 +639,9 @@ void fec_rx_stop (uint8_t ch)
|
||||
/* Kill the FEC Rx DMA task */
|
||||
MCD_killDma(channel);
|
||||
|
||||
/*
|
||||
* Free up the FEC requestor from the software maintained
|
||||
* initiator list
|
||||
/*
|
||||
* Free up the FEC requestor from the software maintained
|
||||
* initiator list
|
||||
*/
|
||||
dma_free_initiator(DMA_FEC_RX(ch));
|
||||
|
||||
@@ -663,7 +653,7 @@ void fec_rx_stop (uint8_t ch)
|
||||
}
|
||||
|
||||
/*
|
||||
* Receive Frame interrupt handler - this handler is called by the
|
||||
* Receive Frame interrupt handler - this handler is called by the
|
||||
* DMA interrupt handler indicating that a packet was successfully
|
||||
* transferred out of the Rx FIFO.
|
||||
*
|
||||
@@ -678,7 +668,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
NBUF *cur_nbuf, *new_nbuf;
|
||||
int keep;
|
||||
|
||||
dbg("started\r\n");
|
||||
dbg("%s: started\r\n", __FUNCTION__);
|
||||
|
||||
while ((pRxBD = fecbd_rx_alloc(ch)) != NULL)
|
||||
{
|
||||
@@ -691,7 +681,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
* - No undefined bits should be set
|
||||
* - The upper 5 bits of the length should be cleared
|
||||
*/
|
||||
if (!(pRxBD->status & RX_BD_L) || (pRxBD->status & 0x0608)
|
||||
if (!(pRxBD->status & RX_BD_L) || (pRxBD->status & 0x0608)
|
||||
|| (pRxBD->length & 0xF800))
|
||||
{
|
||||
keep = false;
|
||||
@@ -723,8 +713,8 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
|
||||
if (keep)
|
||||
{
|
||||
/*
|
||||
* Pull the network buffer off the Rx ring queue
|
||||
/*
|
||||
* Pull the network buffer off the Rx ring queue
|
||||
*/
|
||||
cur_nbuf = nbuf_remove(NBUF_RX_RING);
|
||||
|
||||
@@ -740,7 +730,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
new_nbuf = nbuf_alloc();
|
||||
if (new_nbuf == NULL)
|
||||
{
|
||||
dbg("nbuf_alloc() failed\n");
|
||||
dbg("%s: nbuf_alloc() failed\n", __FUNCTION__);
|
||||
|
||||
/*
|
||||
* Can't allocate a new network buffer, so we
|
||||
@@ -774,7 +764,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
|
||||
|
||||
/*
|
||||
* Let the DMA know that there is a new Rx BD (in case the
|
||||
* Let the DMA know that there is a new Rx BD (in case the
|
||||
* ring was full and the DMA was waiting for an empty one)
|
||||
*/
|
||||
fec_rx_continue(ch);
|
||||
@@ -785,7 +775,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
eth_hdr = (ETH_HDR *) cur_nbuf->data;
|
||||
|
||||
/*
|
||||
* Pass the received packet up the network stack if the
|
||||
* Pass the received packet up the network stack if the
|
||||
* protocol is supported in our network interface (NIF)
|
||||
*/
|
||||
if (nif_protocol_exist(nif, eth_hdr->type))
|
||||
@@ -796,12 +786,12 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
else
|
||||
{
|
||||
nbuf_free(cur_nbuf);
|
||||
dbg("got unsupported packet %d, trashed it\r\n", eth_hdr->type);
|
||||
dbg("%s: got unsupported packet %d, trashed it\r\n", __FUNCTION__, eth_hdr->type);
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
/*
|
||||
/*
|
||||
* This frame isn't a keeper
|
||||
* Reset the status and length, but don't need to get another
|
||||
* buffer since we are trashing the data in the current one
|
||||
@@ -811,7 +801,7 @@ void fec_rx_frame(uint8_t ch, NIF *nif)
|
||||
pRxBD->status |= RX_BD_E;
|
||||
|
||||
/*
|
||||
* Move the current buffer from the beginning to the end of the
|
||||
* Move the current buffer from the beginning to the end of the
|
||||
* Rx ring queue
|
||||
*/
|
||||
cur_nbuf = nbuf_remove(NBUF_RX_RING);
|
||||
@@ -851,28 +841,22 @@ void fec_tx_start(uint8_t ch, int8_t *txbd)
|
||||
{
|
||||
uint32_t initiator;
|
||||
int channel;
|
||||
int result;
|
||||
void fec0_tx_frame(void);
|
||||
void fec1_tx_frame(void);
|
||||
#ifdef DBG_FEC
|
||||
int res;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Make the initiator assignment
|
||||
*/
|
||||
#ifdef DBG_FEC
|
||||
res =
|
||||
#else
|
||||
(void)
|
||||
#endif
|
||||
dma_set_initiator(DMA_FEC_TX(ch));
|
||||
dbg("dma_set_initiator(%d) = %d\r\n", ch, res);
|
||||
res = dma_set_initiator(DMA_FEC_TX(ch));
|
||||
dbg("%s: dma_set_initiator(%d) = %d\r\n", __FUNCTION__, ch, res);
|
||||
|
||||
/*
|
||||
* Grab the initiator number
|
||||
*/
|
||||
initiator = dma_get_initiator(DMA_FEC_TX(ch));
|
||||
dbg("dma_get_initiator(%d) = %d\r\n", ch, initiator);
|
||||
dbg("%s: dma_get_initiator(%d) = %d\r\n", __FUNCTION__, ch, initiator);
|
||||
|
||||
|
||||
/*
|
||||
@@ -881,7 +865,7 @@ void fec_tx_start(uint8_t ch, int8_t *txbd)
|
||||
*/
|
||||
channel = dma_set_channel(DMA_FEC_TX(ch),
|
||||
(ch == 0) ? fec0_tx_frame : fec1_tx_frame);
|
||||
dbg("dma_set_channel(%d, ...) = %d\r\n", ch, channel);
|
||||
dbg("%s: dma_set_channel(%d, ...) = %d\r\n", __FUNCTION__, ch, channel);
|
||||
|
||||
/*
|
||||
* Start the Tx DMA task
|
||||
@@ -895,18 +879,18 @@ void fec_tx_start(uint8_t ch, int8_t *txbd)
|
||||
0,
|
||||
initiator,
|
||||
FECTX_DMA_PRI(ch),
|
||||
0
|
||||
| MCD_FECTX_DMA
|
||||
0
|
||||
| MCD_FECTX_DMA
|
||||
| MCD_INTERRUPT
|
||||
| MCD_TT_FLAGS_CW
|
||||
| MCD_TT_FLAGS_CW
|
||||
| MCD_TT_FLAGS_RL
|
||||
| MCD_TT_FLAGS_SP
|
||||
,
|
||||
0
|
||||
0
|
||||
| MCD_NO_CSUM
|
||||
| MCD_NO_BYTE_SWAP
|
||||
);
|
||||
dbg("DMA tx task started\r\n");
|
||||
dbg("%s: DMA tx task started\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -929,13 +913,14 @@ void fec_tx_continue(uint8_t ch)
|
||||
* selected FEC
|
||||
*/
|
||||
channel = dma_get_channel(DMA_FEC_TX(ch));
|
||||
dbg("dma_get_channel(DMA_FEC_TX(%d)) = %d\r\n", ch, channel);
|
||||
dbg("%s: dma_get_channel(DMA_FEC_TX(%d)) = %d\r\n",
|
||||
__FUNCTION__, ch, channel);
|
||||
|
||||
/*
|
||||
* Continue/restart the DMA task
|
||||
*/
|
||||
MCD_continDma(channel);
|
||||
dbg("DMA TX task continue\r\n");
|
||||
dbg("%s: DMA TX task continue\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -982,9 +967,9 @@ void fec_tx_stop(uint8_t ch)
|
||||
/* Kill the FEC Tx DMA task */
|
||||
MCD_killDma(channel);
|
||||
|
||||
/*
|
||||
* Free up the FEC requestor from the software maintained
|
||||
* initiator list
|
||||
/*
|
||||
* Free up the FEC requestor from the software maintained
|
||||
* initiator list
|
||||
*/
|
||||
dma_free_initiator(DMA_FEC_TX(ch));
|
||||
|
||||
@@ -996,7 +981,7 @@ void fec_tx_stop(uint8_t ch)
|
||||
}
|
||||
|
||||
/*
|
||||
* Trasmit Frame interrupt handler - this handler is called by the
|
||||
* Trasmit Frame interrupt handler - this handler is called by the
|
||||
* DMA interrupt handler indicating that a packet was successfully
|
||||
* transferred to the Tx FIFO.
|
||||
*
|
||||
@@ -1009,7 +994,7 @@ void fec_tx_frame(uint8_t ch)
|
||||
NBUF *pNbuf;
|
||||
bool is_empty = true;
|
||||
|
||||
dbg("\r\n");
|
||||
dbg("%s:\r\n", __FUNCTION__);
|
||||
while ((pTxBD = fecbd_tx_free(ch)) != NULL)
|
||||
{
|
||||
fec_log[ch].dtxf++;
|
||||
@@ -1023,7 +1008,7 @@ void fec_tx_frame(uint8_t ch)
|
||||
* Free up the network buffer that was just transmitted
|
||||
*/
|
||||
nbuf_free(pNbuf);
|
||||
dbg("free buffer %p from TX ring\r\n", pNbuf);
|
||||
dbg("%s: free buffer %p from TX ring\r\n", __FUNCTION__, pNbuf);
|
||||
|
||||
/*
|
||||
* Re-initialize the Tx BD
|
||||
@@ -1032,9 +1017,9 @@ void fec_tx_frame(uint8_t ch)
|
||||
pTxBD->length = 0;
|
||||
is_empty = false;
|
||||
|
||||
}
|
||||
}
|
||||
if (is_empty)
|
||||
dbg("transmit queue was empty!\r\n");
|
||||
dbg("%s: transmit queue was empty!\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
void fec0_tx_frame(void)
|
||||
@@ -1057,7 +1042,7 @@ void fec1_tx_frame(void)
|
||||
* dst Destination MAC Address
|
||||
* src Source MAC Address
|
||||
* type Ethernet Frame Type
|
||||
* length Number of bytes to be transmitted (doesn't include type,
|
||||
* length Number of bytes to be transmitted (doesn't include type,
|
||||
* src, or dest byte count)
|
||||
* pkt Pointer packet network buffer
|
||||
*
|
||||
@@ -1072,14 +1057,14 @@ int fec_send(uint8_t ch, NIF *nif, uint8_t *dst, uint8_t *src, uint16_t type, NB
|
||||
/* Check the length */
|
||||
if ((nbuf->length + ETH_HDR_LEN) > ETH_MTU)
|
||||
{
|
||||
dbg("nbuf->length (%d) + ETH_HDR_LEN (%d) exceeds ETH_MTU (%d)\r\n",
|
||||
nbuf->length, ETH_HDR_LEN, ETH_MTU);
|
||||
dbg("%s: nbuf->length (%d) + ETH_HDR_LEN (%d) exceeds ETH_MTU (%d)\r\n",
|
||||
__FUNCTION__, nbuf->length, ETH_HDR_LEN, ETH_MTU);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy the destination address, source address, and Ethernet
|
||||
* type into the packet
|
||||
/*
|
||||
* Copy the destination address, source address, and Ethernet
|
||||
* type into the packet
|
||||
*/
|
||||
memcpy(&nbuf->data[0], dst, 6);
|
||||
memcpy(&nbuf->data[6], src, 6);
|
||||
@@ -1095,7 +1080,7 @@ int fec_send(uint8_t ch, NIF *nif, uint8_t *dst, uint8_t *src, uint16_t type, NB
|
||||
*/
|
||||
nbuf_add(NBUF_TX_RING, nbuf);
|
||||
|
||||
/*
|
||||
/*
|
||||
* Setup the buffer descriptor for transmission
|
||||
*/
|
||||
pTxBD->data = nbuf->data;
|
||||
@@ -1205,7 +1190,7 @@ static void fec_irq_handler(uint8_t ch)
|
||||
event = eir & MCF_FEC_EIMR(ch);
|
||||
|
||||
if (event != eir)
|
||||
dbg("pending but not enabled: 0x%08x\r\n", (event ^ eir));
|
||||
dbg("%s: pending but not enabled: 0x%08x\r\n", __FUNCTION__, (event ^ eir));
|
||||
|
||||
/*
|
||||
* Clear the event(s) in the EIR immediately
|
||||
@@ -1216,8 +1201,8 @@ static void fec_irq_handler(uint8_t ch)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].rferr++;
|
||||
dbg("RFERR\r\n");
|
||||
dbg("FECRFSR%d = 0x%08x\r\n", ch, MCF_FEC_FECRFSR(ch));
|
||||
dbg("%s: RFERR\r\n", __FUNCTION__);
|
||||
dbg("%s: FECRFSR%d = 0x%08x\r\n", __FUNCTION__, ch, MCF_FEC_FECRFSR(ch));
|
||||
//fec_eth_stop(ch);
|
||||
}
|
||||
|
||||
@@ -1225,14 +1210,14 @@ static void fec_irq_handler(uint8_t ch)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].xferr++;
|
||||
dbg("XFERR\r\n");
|
||||
dbg("%s: XFERR\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_XFUN)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].xfun++;
|
||||
dbg("XFUN\r\n");
|
||||
dbg("%s: XFUN\r\n", __FUNCTION__);
|
||||
//fec_eth_stop(ch);
|
||||
}
|
||||
|
||||
@@ -1240,54 +1225,54 @@ static void fec_irq_handler(uint8_t ch)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].rl++;
|
||||
dbg("RL\r\n");
|
||||
dbg("%s: RL\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_LC)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].lc++;
|
||||
dbg("LC\r\n");
|
||||
dbg("%s: LC\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_MII)
|
||||
{
|
||||
fec_log[ch].mii++;
|
||||
dbg("MII\r\n");
|
||||
dbg("%s: MII\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_TXF)
|
||||
{
|
||||
fec_log[ch].txf++;
|
||||
dbg("TXF\r\n");
|
||||
dbg("%s: TXF\r\n", __FUNCTION__);
|
||||
fec_log_dump(0);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_GRA)
|
||||
{
|
||||
fec_log[ch].gra++;
|
||||
dbg("GRA\r\n");
|
||||
dbg("%s: GRA\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_BABT)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].babt++;
|
||||
dbg("BABT\r\n");
|
||||
dbg("%s: BABT\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_BABR)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].babr++;
|
||||
dbg("BABR\r\n");
|
||||
dbg("%s: BABR\r\n", __FUNCTION__);
|
||||
}
|
||||
|
||||
if (event & MCF_FEC_EIR_HBERR)
|
||||
{
|
||||
fec_log[ch].total++;
|
||||
fec_log[ch].hberr++;
|
||||
dbg("HBERR\r\n");
|
||||
dbg("%s: HBERR\r\n", __FUNCTION__);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1297,7 +1282,7 @@ static void fec_irq_handler(uint8_t ch)
|
||||
*/
|
||||
int fec0_interrupt_handler(void* arg1, void* arg2)
|
||||
{
|
||||
(void) arg1; /* not used */
|
||||
(void) arg1;
|
||||
(void) arg2;
|
||||
|
||||
fec_irq_handler(0);
|
||||
@@ -1307,7 +1292,7 @@ int fec0_interrupt_handler(void* arg1, void* arg2)
|
||||
|
||||
int fec1_interrupt_handler(void* arg1, void* arg2)
|
||||
{
|
||||
(void) arg1; /* not used */
|
||||
(void) arg1;
|
||||
(void) arg2;
|
||||
|
||||
fec_irq_handler(1);
|
||||
@@ -1357,9 +1342,9 @@ void fec_eth_setup(uint8_t ch, uint8_t trcvr, uint8_t speed, uint8_t duplex, con
|
||||
*/
|
||||
#if defined(MACHINE_FIREBEE)
|
||||
if (am79c874_init(0, 0, speed, duplex))
|
||||
dbg("PHY init completed\r\n");
|
||||
dbg("%s: PHY init completed\r\n", __FUNCTION__);
|
||||
else
|
||||
dbg("PHY init failed\r\n");
|
||||
dbg("%s: PHY init failed\r\n", __FUNCTION__);
|
||||
#elif defined(MACHINE_M548X)
|
||||
bcm_5222_init(0, 0, speed, duplex);
|
||||
#else
|
||||
@@ -1412,7 +1397,7 @@ void fec_eth_stop(uint8_t ch)
|
||||
*/
|
||||
level = set_ipl(7);
|
||||
|
||||
dbg("fec %d stopped\r\n", ch);
|
||||
dbg("%s: fec %d stopped\r\n", __FUNCTION__, ch);
|
||||
/*
|
||||
* Gracefully disable the receiver and transmitter
|
||||
*/
|
||||
@@ -1434,12 +1419,12 @@ void fec_eth_stop(uint8_t ch)
|
||||
fec_log_dump(ch);
|
||||
#endif
|
||||
|
||||
/*
|
||||
/*
|
||||
* Flush the network buffers
|
||||
*/
|
||||
nbuf_flush();
|
||||
|
||||
/*
|
||||
/*
|
||||
* Restore interrupt level
|
||||
*/
|
||||
set_ipl(level);
|
||||
|
||||
Reference in New Issue
Block a user