Microchip® Advanced Software Framework

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
MACB - Ethernet MAC

The MACB module implements a 10/100 Ethernet MAC compatible with the IEEE 802.3 standard.

Data Structures

struct  _AVR32_RxTdDescriptor
 
struct  _AVR32_TxTdDescriptor
 
struct  macb_packet_t
 

Macros

#define ADVERTISE_ALL
 
#define ADVERTISE_FULL   (ADVERTISE_100FULL | ADVERTISE_10FULL | ADVERTISE_CSMA)
 
#define AVR32_MACB_SPD_MASK   0x00000001
 
#define AVR32_OWNERSHIP_BIT   0x00000001
 

Functions

unsigned long lMACBSend (volatile avr32_macb_t *macb, const void *pvFrom, unsigned long ulLength, long lEndOfFrame)
 Send ulLength bytes from pcFrom. More...
 
unsigned long ulMACBInputLength (void)
 Function to get length of the next frame in the receive buffers. More...
 
unsigned long ulReadMDIO (volatile avr32_macb_t *macb, unsigned short usAddress)
 
void vClearMACBTxBuffer (void)
 Called by the Tx interrupt, this function traverses the buffers used to hold the frame that has just completed transmission and marks each as free again. More...
 
void vDisableMACBOperations (volatile avr32_macb_t *macb)
 Disable MACB operations (Tx and Rx). More...
 
void vMACBRead (void *pvTo, unsigned long ulSectionLength, unsigned long ulTotalFrameLength)
 Frames can be read from the MACB in multiple sections. More...
 
void vMACBSetMACAddress (const unsigned char *MACAddress)
 Set the MACB Physical address (SA1B & SA1T registers). More...
 
bool vMACBWaitForInput (unsigned long ulTimeOut)
 Wait for new Ethernet data. More...
 
void vWriteMDIO (volatile avr32_macb_t *macb, unsigned short usAddress, unsigned short usValue)
 
bool xMACBInit (volatile avr32_macb_t *macb)
 initialize the MACB driver. More...
 

Rx Ring descriptor flags

#define AVR32_MACB_RX_USED_OFFSET   0
 
#define AVR32_MACB_RX_USED_SIZE   1
 
#define AVR32_MACB_RX_WRAP_OFFSET   1
 
#define AVR32_MACB_RX_WRAP_SIZE   1
 
#define AVR32_MACB_RX_LEN_OFFSET   0
 
#define AVR32_MACB_RX_LEN_SIZE   12
 
#define AVR32_MACB_RX_OFFSET_OFFSET   12
 
#define AVR32_MACB_RX_OFFSET_SIZE   2
 
#define AVR32_MACB_RX_SOF_OFFSET   14
 
#define AVR32_MACB_RX_SOF_SIZE   1
 
#define AVR32_MACB_RX_EOF_OFFSET   15
 
#define AVR32_MACB_RX_EOF_SIZE   1
 
#define AVR32_MACB_RX_CFI_OFFSET   16
 
#define AVR32_MACB_RX_CFI_SIZE   1
 

Tx Ring descriptor flags

#define AVR32_MACB_TX_LEN_OFFSET   0
 
#define AVR32_MACB_TX_LEN_SIZE   11
 
#define AVR32_MACB_TX_EOF_OFFSET   15
 
#define AVR32_MACB_TX_EOF_SIZE   1
 
#define AVR32_MACB_TX_NOCRC_OFFSET   16
 
#define AVR32_MACB_TX_NOCRC_SIZE   1
 
#define AVR32_MACB_TX_EMF_OFFSET   27
 
#define AVR32_MACB_TX_EMF_SIZE   1
 
#define AVR32_MACB_TX_UNR_OFFSET   28
 
#define AVR32_MACB_TX_UNR_SIZE   1
 
#define AVR32_MACB_TX_MAXRETRY_OFFSET   29
 
#define AVR32_MACB_TX_MAXRETRY_SIZE   1
 
#define AVR32_MACB_TX_WRAP_OFFSET   30
 
#define AVR32_MACB_TX_WRAP_SIZE   1
 
#define AVR32_MACB_TX_USED_OFFSET   31
 
#define AVR32_MACB_TX_USED_SIZE   1
 

Generic MII registers.

#define PHY_BMCR   0x00
 Basic mode control register. More...
 
#define PHY_BMSR   0x01
 Basic mode status register. More...
 
#define PHY_PHYSID1   0x02
 PHYS ID 1. More...
 
#define PHY_PHYSID2   0x03
 PHYS ID 2. More...
 
#define PHY_ADVERTISE   0x04
 Advertisement control reg. More...
 
#define PHY_LPA   0x05
 Link partner ability reg. More...
 

Basic mode control register.

#define BMCR_RESV   0x007f
 Unused... More...
 
#define BMCR_CTST   0x0080
 Collision test. More...
 
#define BMCR_FULLDPLX   0x0100
 Full duplex. More...
 
#define BMCR_ANRESTART   0x0200
 Auto negotiation restart. More...
 
#define BMCR_ISOLATE   0x0400
 Disconnect PHY from MII. More...
 
#define BMCR_PDOWN   0x0800
 Powerdown the PHY. More...
 
#define BMCR_ANENABLE   0x1000
 Enable auto negotiation. More...
 
#define BMCR_SPEED100   0x2000
 Select 100Mbps. More...
 
#define BMCR_LOOPBACK   0x4000
 TXD loopback bits. More...
 
#define BMCR_RESET   0x8000
 Reset the PHY. More...
 

Basic mode status register.

#define BMSR_ERCAP   0x0001
 Ext-reg capability. More...
 
#define BMSR_JCD   0x0002
 Jabber detected. More...
 
#define BMSR_LSTATUS   0x0004
 Link status. More...
 
#define BMSR_ANEGCAPABLE   0x0008
 Able to do auto-negotiation. More...
 
#define BMSR_RFAULT   0x0010
 Remote fault detected. More...
 
#define BMSR_ANEGCOMPLETE   0x0020
 Auto-negotiation complete. More...
 
#define BMSR_RESV   0x00c0
 Unused... More...
 
#define BMSR_ESTATEN   0x0100
 Extended Status in R15. More...
 
#define BMSR_100FULL2   0x0200
 Can do 100BASE-T2 HDX. More...
 
#define BMSR_100HALF2   0x0400
 Can do 100BASE-T2 FDX. More...
 
#define BMSR_10HALF   0x0800
 Can do 10mbps, half-duplex. More...
 
#define BMSR_10FULL   0x1000
 Can do 10mbps, full-duplex. More...
 
#define BMSR_100HALF   0x2000
 Can do 100mbps, half-duplex. More...
 
#define BMSR_100FULL   0x4000
 Can do 100mbps, full-duplex. More...
 
#define BMSR_100BASE4   0x8000
 Can do 100mbps, 4k packets. More...
 

Advertisement control register.

#define ADVERTISE_SLCT   0x001f
 Selector bits. More...
 
#define ADVERTISE_CSMA   0x0001
 Only selector supported. More...
 
#define ADVERTISE_10HALF   0x0020
 Try for 10mbps half-duplex. More...
 
#define ADVERTISE_1000XFULL   0x0020
 Try for 1000BASE-X full-duplex. More...
 
#define ADVERTISE_10FULL   0x0040
 Try for 10mbps full-duplex. More...
 
#define ADVERTISE_1000XHALF   0x0040
 Try for 1000BASE-X half-duplex. More...
 
#define ADVERTISE_100HALF   0x0080
 Try for 100mbps half-duplex. More...
 
#define ADVERTISE_1000XPAUSE   0x0080
 Try for 1000BASE-X pause. More...
 
#define ADVERTISE_100FULL   0x0100
 Try for 100mbps full-duplex. More...
 
#define ADVERTISE_1000XPSE_ASYM   0x0100
 Try for 1000BASE-X asym pause. More...
 
#define ADVERTISE_100BASE4   0x0200
 Try for 100mbps 4k packets. More...
 
#define ADVERTISE_PAUSE_CAP   0x0400
 Try for pause. More...
 
#define ADVERTISE_PAUSE_ASYM   0x0800
 Try for asymmetric pause. More...
 
#define ADVERTISE_RESV   0x1000
 Unused... More...
 
#define ADVERTISE_RFAULT   0x2000
 Say we can detect faults. More...
 
#define ADVERTISE_LPACK   0x4000
 Ack link partners response. More...
 
#define ADVERTISE_NPAGE   0x8000
 Next page bit. More...
 

Link partner ability register.

#define LPA_SLCT   0x001f
 Same as advertise selector. More...
 
#define LPA_10HALF   0x0020
 Can do 10mbps half-duplex. More...
 
#define LPA_1000XFULL   0x0020
 Can do 1000BASE-X full-duplex. More...
 
#define LPA_10FULL   0x0040
 Can do 10mbps full-duplex. More...
 
#define LPA_1000XHALF   0x0040
 Can do 1000BASE-X half-duplex. More...
 
#define LPA_100HALF   0x0080
 Can do 100mbps half-duplex. More...
 
#define LPA_1000XPAUSE   0x0080
 Can do 1000BASE-X pause. More...
 
#define LPA_100FULL   0x0100
 Can do 100mbps full-duplex. More...
 
#define LPA_1000XPAUSE_ASYM   0x0100
 Can do 1000BASE-X pause asym. More...
 
#define LPA_100BASE4   0x0200
 Can do 100mbps 4k packets. More...
 
#define LPA_PAUSE_CAP   0x0400
 Can pause. More...
 
#define LPA_PAUSE_ASYM   0x0800
 Can pause asymmetrically. More...
 
#define LPA_RESV   0x1000
 Unused... More...
 
#define LPA_RFAULT   0x2000
 Link partner faulted. More...
 
#define LPA_LPACK   0x4000
 Link partner acked us. More...
 
#define LPA_NPAGE   0x8000
 Next page bit. More...
 
#define LPA_DUPLEX   (LPA_10FULL | LPA_100FULL)
 
#define LPA_100   (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
 
typedef struct
_AVR32_RxTdDescriptor 
AVR32_RxTdDescriptor
 
typedef struct
_AVR32_RxTdDescriptor
AVR32P_RxTdDescriptor
 
typedef struct
_AVR32_TxTdDescriptor 
AVR32_TxTdDescriptor
 
typedef struct
_AVR32_TxTdDescriptor
AVR32P_TxTdDescriptor
 
#define AVR32_BROADCAST_ADDR   ((unsigned int) (1 << 31))
 
#define AVR32_MULTICAST_HASH   ((unsigned int) (1 << 30))
 
#define AVR32_UNICAST_HASH   ((unsigned int) (1 << 29))
 
#define AVR32_EXTERNAL_ADDR   ((unsigned int) (1 << 28))
 
#define AVR32_SA1_ADDR   ((unsigned int) (1 << 26))
 
#define AVR32_SA2_ADDR   ((unsigned int) (1 << 25))
 
#define AVR32_SA3_ADDR   ((unsigned int) (1 << 24))
 
#define AVR32_SA4_ADDR   ((unsigned int) (1 << 23))
 
#define AVR32_TYPE_ID   ((unsigned int) (1 << 22))
 
#define AVR32_VLAN_TAG   ((unsigned int) (1 << 21))
 
#define AVR32_PRIORITY_TAG   ((unsigned int) (1 << 20))
 
#define AVR32_VLAN_PRIORITY   ((unsigned int) (7 << 17))
 
#define AVR32_CFI_IND   ((unsigned int) (1 << 16))
 
#define AVR32_EOF   ((unsigned int) (1 << 15))
 
#define AVR32_SOF   ((unsigned int) (1 << 14))
 
#define AVR32_RBF_OFFSET   ((unsigned int) (3 << 12))
 
#define AVR32_LENGTH_FRAME   ((unsigned int) 0x0FFF)
 
#define AVR32_TRANSMIT_OK   ((unsigned int) (1 << 31))
 
#define AVR32_TRANSMIT_WRAP   ((unsigned int) (1 << 30))
 
#define AVR32_TRANSMIT_ERR   ((unsigned int) (1 << 29))
 
#define AVR32_TRANSMIT_UND   ((unsigned int) (1 << 28))
 
#define AVR32_BUF_EX   ((unsigned int) (1 << 27))
 
#define AVR32_TRANSMIT_NO_CRC   ((unsigned int) (1 << 16))
 
#define AVR32_LAST_BUFFER   ((unsigned int) (1 << 15))
 

#define ADVERTISE_1000XFULL   0x0020

Try for 1000BASE-X full-duplex.

#define ADVERTISE_1000XHALF   0x0040

Try for 1000BASE-X half-duplex.

#define ADVERTISE_1000XPAUSE   0x0080

Try for 1000BASE-X pause.

#define ADVERTISE_1000XPSE_ASYM   0x0100

Try for 1000BASE-X asym pause.

#define ADVERTISE_100BASE4   0x0200

Try for 100mbps 4k packets.

#define ADVERTISE_100FULL   0x0100

Try for 100mbps full-duplex.

Referenced by prvProbePHY().

#define ADVERTISE_100HALF   0x0080

Try for 100mbps half-duplex.

Referenced by prvProbePHY().

#define ADVERTISE_10FULL   0x0040

Try for 10mbps full-duplex.

Referenced by prvProbePHY().

#define ADVERTISE_10HALF   0x0020

Try for 10mbps half-duplex.

Referenced by prvProbePHY().

#define ADVERTISE_ALL
Value:
#define ADVERTISE_100HALF
Try for 100mbps half-duplex.
Definition: macb.h:164
#define ADVERTISE_10FULL
Try for 10mbps full-duplex.
Definition: macb.h:162
#define ADVERTISE_10HALF
Try for 10mbps half-duplex.
Definition: macb.h:160
#define ADVERTISE_100FULL
Try for 100mbps full-duplex.
Definition: macb.h:166

Referenced by prvProbePHY().

#define ADVERTISE_CSMA   0x0001

Only selector supported.

Referenced by prvProbePHY().

#define ADVERTISE_FULL   (ADVERTISE_100FULL | ADVERTISE_10FULL | ADVERTISE_CSMA)
#define ADVERTISE_LPACK   0x4000

Ack link partners response.

#define ADVERTISE_NPAGE   0x8000

Next page bit.

#define ADVERTISE_PAUSE_ASYM   0x0800

Try for asymmetric pause.

#define ADVERTISE_PAUSE_CAP   0x0400

Try for pause.

#define ADVERTISE_RESV   0x1000

Unused...

#define ADVERTISE_RFAULT   0x2000

Say we can detect faults.

#define ADVERTISE_SLCT   0x001f

Selector bits.

#define AVR32_BROADCAST_ADDR   ((unsigned int) (1 << 31))

Receive status definition.

#define AVR32_BUF_EX   ((unsigned int) (1 << 27))
#define AVR32_CFI_IND   ((unsigned int) (1 << 16))
#define AVR32_EOF   ((unsigned int) (1 << 15))
#define AVR32_EXTERNAL_ADDR   ((unsigned int) (1 << 28))
#define AVR32_LAST_BUFFER   ((unsigned int) (1 << 15))

Referenced by lMACBSend(), and vClearMACBTxBuffer().

#define AVR32_LENGTH_FRAME   ((unsigned int) 0x0FFF)

Referenced by lMACBSend(), and ulMACBInputLength().

#define AVR32_MACB_RX_CFI_OFFSET   16
#define AVR32_MACB_RX_CFI_SIZE   1
#define AVR32_MACB_RX_EOF_OFFSET   15
#define AVR32_MACB_RX_EOF_SIZE   1
#define AVR32_MACB_RX_LEN_OFFSET   0
#define AVR32_MACB_RX_LEN_SIZE   12
#define AVR32_MACB_RX_OFFSET_OFFSET   12
#define AVR32_MACB_RX_OFFSET_SIZE   2
#define AVR32_MACB_RX_SOF_OFFSET   14
#define AVR32_MACB_RX_SOF_SIZE   1
#define AVR32_MACB_RX_USED_OFFSET   0
#define AVR32_MACB_RX_USED_SIZE   1
#define AVR32_MACB_RX_WRAP_OFFSET   1
#define AVR32_MACB_RX_WRAP_SIZE   1
#define AVR32_MACB_SPD_MASK   0x00000001

Referenced by prvProbePHY().

#define AVR32_MACB_TX_EMF_OFFSET   27
#define AVR32_MACB_TX_EMF_SIZE   1
#define AVR32_MACB_TX_EOF_OFFSET   15
#define AVR32_MACB_TX_EOF_SIZE   1
#define AVR32_MACB_TX_LEN_OFFSET   0
#define AVR32_MACB_TX_LEN_SIZE   11
#define AVR32_MACB_TX_MAXRETRY_OFFSET   29
#define AVR32_MACB_TX_MAXRETRY_SIZE   1
#define AVR32_MACB_TX_NOCRC_OFFSET   16
#define AVR32_MACB_TX_NOCRC_SIZE   1
#define AVR32_MACB_TX_UNR_OFFSET   28
#define AVR32_MACB_TX_UNR_SIZE   1
#define AVR32_MACB_TX_USED_OFFSET   31
#define AVR32_MACB_TX_USED_SIZE   1
#define AVR32_MACB_TX_WRAP_OFFSET   30
#define AVR32_MACB_TX_WRAP_SIZE   1
#define AVR32_MULTICAST_HASH   ((unsigned int) (1 << 30))
#define AVR32_OWNERSHIP_BIT   0x00000001

Mask for frame used.

Referenced by ulMACBInputLength(), vMACBRead(), and vResetMacbRxFrames().

#define AVR32_PRIORITY_TAG   ((unsigned int) (1 << 20))
#define AVR32_RBF_OFFSET   ((unsigned int) (3 << 12))
#define AVR32_SA1_ADDR   ((unsigned int) (1 << 26))
#define AVR32_SA2_ADDR   ((unsigned int) (1 << 25))
#define AVR32_SA3_ADDR   ((unsigned int) (1 << 24))
#define AVR32_SA4_ADDR   ((unsigned int) (1 << 23))
#define AVR32_SOF   ((unsigned int) (1 << 14))

Referenced by ulMACBInputLength().

#define AVR32_TRANSMIT_ERR   ((unsigned int) (1 << 29))
#define AVR32_TRANSMIT_NO_CRC   ((unsigned int) (1 << 16))
#define AVR32_TRANSMIT_OK   ((unsigned int) (1 << 31))
#define AVR32_TRANSMIT_UND   ((unsigned int) (1 << 28))
#define AVR32_TRANSMIT_WRAP   ((unsigned int) (1 << 30))

Referenced by lMACBSend(), and prvSetupDescriptors().

#define AVR32_TYPE_ID   ((unsigned int) (1 << 22))
#define AVR32_UNICAST_HASH   ((unsigned int) (1 << 29))
#define AVR32_VLAN_PRIORITY   ((unsigned int) (7 << 17))
#define AVR32_VLAN_TAG   ((unsigned int) (1 << 21))
#define BMCR_ANENABLE   0x1000

Enable auto negotiation.

Referenced by ethernet_phy_setup_auto_negotiation().

#define BMCR_ANRESTART   0x0200

Auto negotiation restart.

Referenced by ethernet_phy_setup_auto_negotiation().

#define BMCR_CTST   0x0080

Collision test.

#define BMCR_FULLDPLX   0x0100

Full duplex.

Referenced by ethernet_phy_setup_auto_negotiation().

#define BMCR_ISOLATE   0x0400

Disconnect PHY from MII.

#define BMCR_LOOPBACK   0x4000

TXD loopback bits.

#define BMCR_PDOWN   0x0800

Powerdown the PHY.

#define BMCR_RESET   0x8000

Reset the PHY.

Referenced by ethernet_phy_sw_reset().

#define BMCR_RESV   0x007f

Unused...

#define BMCR_SPEED100   0x2000

Select 100Mbps.

Referenced by ethernet_phy_setup_auto_negotiation().

#define BMSR_100BASE4   0x8000

Can do 100mbps, 4k packets.

#define BMSR_100FULL   0x4000

Can do 100mbps, full-duplex.

#define BMSR_100FULL2   0x0200

Can do 100BASE-T2 HDX.

#define BMSR_100HALF   0x2000

Can do 100mbps, half-duplex.

#define BMSR_100HALF2   0x0400

Can do 100BASE-T2 FDX.

#define BMSR_10FULL   0x1000

Can do 10mbps, full-duplex.

#define BMSR_10HALF   0x0800

Can do 10mbps, half-duplex.

#define BMSR_ANEGCAPABLE   0x0008

Able to do auto-negotiation.

#define BMSR_ANEGCOMPLETE   0x0020

Auto-negotiation complete.

#define BMSR_ERCAP   0x0001

Ext-reg capability.

#define BMSR_ESTATEN   0x0100

Extended Status in R15.

#define BMSR_JCD   0x0002

Jabber detected.

#define BMSR_LSTATUS   0x0004

Link status.

Referenced by prvProbePHY().

#define BMSR_RESV   0x00c0

Unused...

#define BMSR_RFAULT   0x0010

Remote fault detected.

#define LPA_100   (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
#define LPA_1000XFULL   0x0020

Can do 1000BASE-X full-duplex.

#define LPA_1000XHALF   0x0040

Can do 1000BASE-X half-duplex.

#define LPA_1000XPAUSE   0x0080

Can do 1000BASE-X pause.

#define LPA_1000XPAUSE_ASYM   0x0100

Can do 1000BASE-X pause asym.

#define LPA_100BASE4   0x0200

Can do 100mbps 4k packets.

#define LPA_100FULL   0x0100

Can do 100mbps full-duplex.

Referenced by prvProbePHY().

#define LPA_100HALF   0x0080

Can do 100mbps half-duplex.

Referenced by prvProbePHY().

#define LPA_10FULL   0x0040

Can do 10mbps full-duplex.

Referenced by prvProbePHY().

#define LPA_10HALF   0x0020

Can do 10mbps half-duplex.

#define LPA_DUPLEX   (LPA_10FULL | LPA_100FULL)
#define LPA_LPACK   0x4000

Link partner acked us.

#define LPA_NPAGE   0x8000

Next page bit.

#define LPA_PAUSE_ASYM   0x0800

Can pause asymmetrically.

#define LPA_PAUSE_CAP   0x0400

Can pause.

#define LPA_RESV   0x1000

Unused...

#define LPA_RFAULT   0x2000

Link partner faulted.

#define LPA_SLCT   0x001f

Same as advertise selector.

#define PHY_ADVERTISE   0x04

Advertisement control reg.

Referenced by prvProbePHY().

#define PHY_BMCR   0x00

Basic mode control register.

Referenced by ethernet_phy_sw_reset(), and prvProbePHY().

#define PHY_BMSR   0x01

Basic mode status register.

Referenced by prvPHY_ISR_NonNakedBehaviour(), and prvProbePHY().

#define PHY_LPA   0x05

Link partner ability reg.

Referenced by prvProbePHY().

#define PHY_PHYSID1   0x02

PHYS ID 1.

Referenced by prvProbePHY().

#define PHY_PHYSID2   0x03

PHYS ID 2.

Referenced by prvProbePHY().

Receive Transfer descriptor structure.

Transmit Transfer descriptor structure.

unsigned long lMACBSend ( volatile avr32_macb_t *  macb,
const void *  pvFrom,
unsigned long  ulLength,
long  lEndOfFrame 
)

Send ulLength bytes from pcFrom.

This copies the buffer to one of the MACB Tx buffers, then indicates to the MACB that the buffer is ready. If lEndOfFrame is true then the data being copied is the end of the frame and the frame can be transmitted.

Parameters
*macbBase address of the MACB
*pvFromAddress of the data buffer
ulLengthLength of the frame
lEndOfFrameFlag for End Of Frame
Returns
length sent.

References AVR32_LAST_BUFFER, AVR32_LENGTH_FRAME, AVR32_TRANSMIT_OK, AVR32_TRANSMIT_WRAP, BUFFER_WAIT_DELAY, ETHERNET_CONF_NB_TX_BUFFERS, ETHERNET_CONF_TX_BUFFER_SIZE, portENTER_CRITICAL, portEXIT_CRITICAL, _AVR32_TxTdDescriptor::status, and _AVR32_TxTdDescriptor::U_Status.

Referenced by macb_example_receive_packet(), macb_example_send_ARP_request(), and macb_example_send_ping_response().

unsigned long ulMACBInputLength ( void  )

Function to get length of the next frame in the receive buffers.

Returns
the length of the next frame in the receive buffers.

References _AVR32_RxTdDescriptor::addr, AVR32_LENGTH_FRAME, AVR32_OWNERSHIP_BIT, AVR32_SOF, ETHERNET_CONF_NB_RX_BUFFERS, _AVR32_RxTdDescriptor::status, _AVR32_RxTdDescriptor::U_Status, ulNextRxBuffer, and vResetMacbRxFrames().

Referenced by main(), and vMACBWaitForInput().

unsigned long ulReadMDIO ( volatile avr32_macb_t *  macb,
unsigned short  usAddress 
)

Read a register on MDIO bus (access to the PHY) This function is looping until PHY gets ready

Parameters
macbInput. instance of the MACB to use
usAddressInput. register to set.
Returns
unsigned long data that has been read

References EXTPHY_PHY_ADDR.

Referenced by ethernet_phy_setup_auto_negotiation(), ethernet_phy_setup_rmii(), ethernet_phy_sw_reset(), prvPHY_ISR_NonNakedBehaviour(), and prvProbePHY().

void vClearMACBTxBuffer ( void  )

Called by the Tx interrupt, this function traverses the buffers used to hold the frame that has just completed transmission and marks each as free again.

References AVR32_LAST_BUFFER, AVR32_TRANSMIT_OK, ETHERNET_CONF_NB_TX_BUFFERS, _AVR32_TxTdDescriptor::status, and _AVR32_TxTdDescriptor::U_Status.

Referenced by prvMACB_ISR_NonNakedBehaviour().

void vDisableMACBOperations ( volatile avr32_macb_t *  macb)

Disable MACB operations (Tx and Rx).

Parameters
*macbBase address of the MACB

References Disable_global_interrupt, Enable_global_interrupt, EXTPHY_MACB_INTERRUPT_PIN, and Is_global_interrupt_enabled.

void vMACBRead ( void *  pvTo,
unsigned long  ulSectionLength,
unsigned long  ulTotalFrameLength 
)

Frames can be read from the MACB in multiple sections.

Read ulSectionLength bytes from the MACB receive buffers to pcTo. ulTotalFrameLength is the size of the entire frame. Generally vMACBRead will be repetedly called until the sum of all the ulSectionLenths totals the value of ulTotalFrameLength.

Parameters
*pvToAddress of the buffer
ulSectionLengthLength of the buffer
ulTotalFrameLengthLength of the frame

References _AVR32_RxTdDescriptor::addr, ADDRESS_MASK, AVR32_OWNERSHIP_BIT, ETHERNET_CONF_NB_RX_BUFFERS, RX_BUFFER_SIZE, and ulNextRxBuffer.

Referenced by main().

void vMACBSetMACAddress ( const unsigned char *  MACAddress)

Set the MACB Physical address (SA1B & SA1T registers).

Parameters
*MACAddressthe MAC address to set.
bool vMACBWaitForInput ( unsigned long  ulTimeOut)

Wait for new Ethernet data.

  • FreeRTOS implementation: Suspend on a semaphore waiting either for the semaphore to be obtained or a timeout. The semaphore is used by the MACB ISR to indicate that data has been received and is ready for processing.
  • Stand-alone implementation: Check, until timeout, a local variable updated by the MACB ISR upon data reception.
Parameters
ulTimeOuttime to wait for an input
Returns
true if success, false otherwise.

References portENTER_CRITICAL, portEXIT_CRITICAL, and ulMACBInputLength().

Referenced by main().

void vWriteMDIO ( volatile avr32_macb_t *  macb,
unsigned short  usAddress,
unsigned short  usValue 
)

Write a given value to a register on MDIO bus (access to the PHY) This function is looping until PHY gets ready

Parameters
*macbInput. instance of the MACB to use
usAddressInput. register to set.
usValueInput. value to write.

References EXTPHY_PHY_ADDR.

Referenced by ethernet_phy_setup_auto_negotiation(), ethernet_phy_setup_rmii(), ethernet_phy_sw_reset(), prvProbePHY(), and prvSetupMACBInterrupt().

bool xMACBInit ( volatile avr32_macb_t *  macb)

initialize the MACB driver.

Parameters
*macbBase address of the MACB
Returns
true if success, false otherwise.

References Disable_global_interrupt, Enable_global_interrupt, ethernet_phy_hw_reset(), ethernet_phy_sw_reset(), Is_global_interrupt_enabled, portENTER_CRITICAL, portEXIT_CRITICAL, prvProbePHY(), prvSetupDescriptors(), prvSetupMACAddress(), prvSetupMACBInterrupt(), and true.

Referenced by main().