Nut/OS  5.0.5
API Reference
stm32_emac.c File Reference
#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>
Include dependency graph for stm32_emac.c:

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 Documentation

#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 Documentation

typedef struct _EMACINFO EMACINFO

Network interface controller information type.


Function Documentation

void EmacRxThread ( void *  arg)
int EmacOutput ( NUTDEVICE dev,
NETBUF nb 
)

Send Ethernet packet.

Todo:
This routine does not work.
Parameters:
devIdentifies the device to use.
nbNetwork buffer structure containing the packet to be sent. The structure must have been allocated by a previous call NutNetBufAlloc().
Returns:
0 on success, -1 in case of any errors.

References _NUTDEVICE::dev_dcb, _EMACINFO::ni_insane, _EMACINFO::ni_mutex, _EMACINFO::ni_tx_rdy, NutEventPost(), NutEventWait(), rc, _TBufDescriptor::TDES0, and TDES0_OWN.

Here is the call graph for this function:

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().

Parameters:
devIdentifies 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.

Here is the call graph for this function:


Variable Documentation

Initial value:
 {
    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.