#include <cfg/os.h>
#include <arch/arm.h>
#include <string.h>
#include <sys/atom.h>
#include <sys/heap.h>
#include <sys/thread.h>
#include <sys/event.h>
#include <sys/timer.h>
#include <sys/confnet.h>
#include <netinet/if_ether.h>
#include <net/ether.h>
#include <net/if_var.h>
#include <dev/irqreg.h>
#include <dev/gpio.h>
#include <dev/phy.h>
#include <dev/stm32_emac.h>
#include <arch/cm3/stm/stm32f10x.h>
#include <arch/cm3/stm/stm32f10x_rcc.h>
#include <arch/cm3/stm/stm32f10x_gpio.h>
#include <stdio.h>
Data Structures | |
struct | _EMACINFO |
Network interface controller information structure. More... | |
struct | _TBufDescriptor |
struct | _RBufDescriptor |
Defines | |
#define | EMPRINTF(args,...) printf(args,##__VA_ARGS__) |
#define | NUT_THREAD_NICRXSTACK 1024 |
#define | EMAC_RX_BUFFERS 32 |
#define | EMAC_RX_BUFSIZ 128 |
#define | EMAC_TX_BUFFERS 2 |
#define | EMAC_TX_BUFSIZ 1536 |
#define | NIC_PHY_ADDR 1 |
#define | TDES0_OWN 0x80000000 |
#define | TDES0_IC 0x40000000 |
#define | TDES0_LS 0x20000000 |
#define | TDES0_FS 0x10000000 |
#define | TDES0_DC 0x08000000 |
#define | TDES0_DP 0x04000000 |
#define | TDES0_TTSE 0x02000000 |
#define | TDES0_CIC_DIS 0x00000000 |
#define | TDES0_CIC_IP 0x00400000 |
#define | TDES0_CIC_FULL 0x00800000 |
#define | TDES0_CIC_ALL 0x00C00000 |
#define | TDES0_TER 0x00200000 |
#define | TDES0_TCH 0x00100000 |
#define | TDES0_TTSS 0x00020000 |
#define | TDES0_IHE 0x00010000 |
#define | TDES0_ES 0x00008000 |
#define | TDES0_JT 0x00004000 |
#define | TDES0_FF 0x00002000 |
#define | TDES0_IPE 0x00001000 |
#define | TDES0_LCA 0x00000800 |
#define | TDES0_NC 0x00000400 |
#define | TDES0_LCO 0x00000200 |
#define | TDES0_EC 0x00000100 |
#define | TDES0_VF 0x00000080 |
#define | TDES0_CC_MASK 0x00000078 |
#define | TDES0_CC_SHIFT 3 |
#define | TDES0_ED 0x00000004 |
#define | TDES0_UF 0x00000002 |
#define | TDES0_DB 0x00000001 |
#define | TDES1_TBS2_MASK 0x1FFF0000 |
#define | TDES1_TBS2_SHIFT 16 |
#define | TDES1_TBS1_MASK 0x00001FFF |
#define | TDES1_TBS1_SHIFT 0 |
#define | RDES0_OWN 0x80000000 |
#define | RDES0_AFM 0x40000000 |
#define | RDES0_FL_MASK 0x3FFF0000 |
#define | RDES0_FL_SHIFT 16 |
#define | RDES0_ES 0x00008000 |
#define | RDES0_DE 0x00004000 |
#define | RDES0_SAF 0x00002000 |
#define | RDES0_LE 0x00001000 |
#define | RDES0_OE 0x00000800 |
#define | RDES0_VLAN 0x00000400 |
#define | RDES0_FS 0x00000200 |
#define | RDES0_LS 0x00000100 |
#define | RDES0_IPHCE 0x00000080 |
#define | RDES0_LCO 0x00000040 |
#define | RDES0_FT 0x00000020 |
#define | RDES0_RWT 0x00000010 |
#define | RDES0_RE 0x00000008 |
#define | RDES0_DBE 0x00000004 |
#define | RDES0_CE 0x00000002 |
#define | RDES0_PCE 0x00000001 |
#define | RDES1_DIC 0x80000000 |
#define | RDES1_RBS2_MASK 0x1FFF0000 |
#define | RDES1_RBS2_SHIFT 16 |
#define | RDES1_RER 0x00008000 |
#define | RDES1_RCH 0x00004000 |
#define | RDES1_RBS1_MASK 0x00001FFF |
#define | RDES1_RBS1_SHIFT 0 |
Typedefs | |
typedef struct _EMACINFO | EMACINFO |
Network interface controller information type. | |
typedef struct _TBufDescriptor | TBufDescriptor_t |
typedef struct _RBufDescriptor | RBufDescriptor_t |
Functions | |
void | EmacRxThread (void *arg) |
int | EmacOutput (NUTDEVICE *dev, NETBUF *nb) |
Send Ethernet packet. | |
int | EmacInit (NUTDEVICE *dev) |
Initialize Ethernet hardware. | |
Variables | |
NUTDEVICE | devStm32Emac |
Device information structure. |
#define EMPRINTF | ( | args, | |
... | |||
) | printf(args,##__VA_ARGS__) |
#define NUT_THREAD_NICRXSTACK 1024 |
Referenced by EmacInit().
#define EMAC_RX_BUFFERS 32 |
#define EMAC_RX_BUFSIZ 128 |
#define EMAC_TX_BUFFERS 2 |
#define EMAC_TX_BUFSIZ 1536 |
#define NIC_PHY_ADDR 1 |
#define TDES0_OWN 0x80000000 |
Referenced by EmacOutput().
#define TDES0_IC 0x40000000 |
#define TDES0_LS 0x20000000 |
#define TDES0_FS 0x10000000 |
#define TDES0_DC 0x08000000 |
#define TDES0_DP 0x04000000 |
#define TDES0_TTSE 0x02000000 |
#define TDES0_CIC_DIS 0x00000000 |
#define TDES0_CIC_IP 0x00400000 |
#define TDES0_CIC_FULL 0x00800000 |
#define TDES0_CIC_ALL 0x00C00000 |
#define TDES0_TER 0x00200000 |
#define TDES0_TCH 0x00100000 |
#define TDES0_TTSS 0x00020000 |
#define TDES0_IHE 0x00010000 |
#define TDES0_ES 0x00008000 |
#define TDES0_JT 0x00004000 |
#define TDES0_FF 0x00002000 |
#define TDES0_IPE 0x00001000 |
#define TDES0_LCA 0x00000800 |
#define TDES0_NC 0x00000400 |
#define TDES0_LCO 0x00000200 |
#define TDES0_EC 0x00000100 |
#define TDES0_VF 0x00000080 |
#define TDES0_CC_MASK 0x00000078 |
#define TDES0_CC_SHIFT 3 |
#define TDES0_ED 0x00000004 |
#define TDES0_UF 0x00000002 |
#define TDES0_DB 0x00000001 |
#define TDES1_TBS2_MASK 0x1FFF0000 |
#define TDES1_TBS2_SHIFT 16 |
#define TDES1_TBS1_MASK 0x00001FFF |
#define TDES1_TBS1_SHIFT 0 |
#define RDES0_OWN 0x80000000 |
#define RDES0_AFM 0x40000000 |
#define RDES0_FL_MASK 0x3FFF0000 |
#define RDES0_FL_SHIFT 16 |
#define RDES0_ES 0x00008000 |
#define RDES0_DE 0x00004000 |
#define RDES0_SAF 0x00002000 |
#define RDES0_LE 0x00001000 |
#define RDES0_OE 0x00000800 |
#define RDES0_VLAN 0x00000400 |
#define RDES0_FS 0x00000200 |
#define RDES0_LS 0x00000100 |
#define RDES0_IPHCE 0x00000080 |
#define RDES0_LCO 0x00000040 |
#define RDES0_FT 0x00000020 |
#define RDES0_RWT 0x00000010 |
#define RDES0_RE 0x00000008 |
#define RDES0_DBE 0x00000004 |
#define RDES0_CE 0x00000002 |
#define RDES0_PCE 0x00000001 |
#define RDES1_DIC 0x80000000 |
#define RDES1_RBS2_MASK 0x1FFF0000 |
#define RDES1_RBS2_SHIFT 16 |
#define RDES1_RER 0x00008000 |
#define RDES1_RCH 0x00004000 |
#define RDES1_RBS1_MASK 0x00001FFF |
#define RDES1_RBS1_SHIFT 0 |
typedef struct _TBufDescriptor TBufDescriptor_t |
typedef struct _RBufDescriptor RBufDescriptor_t |
void EmacRxThread | ( | void * | arg | ) |
References _NUTDEVICE::dev_dcb, _NUTDEVICE::dev_icb, ETH, ETHER_IS_UNICAST, ifnet::if_mac, ifnet::if_recv, inr, _NETBUF::nb_dl, _EMACINFO::ni_insane, _EMACINFO::ni_mutex, _EMACINFO::ni_rx_rdy, _EMACINFO::ni_tx_quelen, _EMACINFO::ni_tx_queued, NutEventPost(), NutEventWait(), NutIrqEnable(), NutNetBufFree(), NutSleep(), NutThreadSetPriority(), outr, sig_EMAC, and _NBDATA::sz.
Send Ethernet packet.
dev | Identifies the device to use. |
nb | Network buffer structure containing the packet to be sent. The structure must have been allocated by a previous call NutNetBufAlloc(). |
References _NUTDEVICE::dev_dcb, _EMACINFO::ni_insane, _EMACINFO::ni_mutex, _EMACINFO::ni_tx_rdy, NutEventPost(), NutEventWait(), rc, _TBufDescriptor::TDES0, and TDES0_OWN.
int EmacInit | ( | NUTDEVICE * | dev | ) |
Initialize Ethernet hardware.
Applications should do not directly call this function. It is automatically executed during during device registration by NutRegisterDevice().
dev | Identifies the device to initialize. |
References _NUTDEVICE::dev_dcb, EmacRxThread(), ENABLE, GPIO_CFG_DISABLED, GPIO_CFG_OUTPUT, GPIO_ETH_MediaInterface_MII, GPIO_ETH_MediaInterface_RMII, GPIO_ETH_MediaInterfaceConfig(), GPIO_PinRemapConfig(), GPIO_Remap_ETH, GpioPinConfigSet(), memset(), NULL, NUT_THREAD_NICRXSTACK, NUT_THREAD_STACK_ADD, NUT_THREAD_STACK_MULT, NUTGPIO_PORTA, NUTGPIO_PORTB, NUTGPIO_PORTC, NutRegisterIrqHandler(), NutThreadCreate(), and sig_EMAC.
{ 0, {'e', 't', 'h', '0', 0, 0, 0, 0, 0}, IFTYP_NET, 0, 0, &ifn_eth0, &dcb_eth0, EmacInit, 0, 0, 0, 0, 0, 0, 0 }
Device information structure.
A pointer to this structure must be passed to NutRegisterDevice() to bind this Ethernet device driver to the Nut/OS kernel. An application may then call NutNetIfConfig() with the name eth0 of this driver to initialize the network interface.