📄 lan_am79c973.c
字号:
/* field: MACADR4 */#define INIT_WORD2_MACADR4_SHF 0#define INIT_WORD2_MACADR4_MSK (MSK(8) << INIT_WORD2_MACADR4_SHF)/******** reg: Init Block, WORD3 ********//******** reg: Init Block, WORD4 ********//******** reg: Init Block, WORD5 ********//******** reg: Init Block, WORD6 ********//************************************************************************ * LAN AM79C973: Receive Descriptor Element (SSIZE32=1)*************************************************************************/#define RDE_WORD0_OFS 0x00000 /* Word0: */#define RDE_WORD1_OFS 0x00004 /* Word1: */#define RDE_WORD2_OFS 0x00008 /* Word2: */#define RDE_WORD3_OFS 0x0000C /* Word3: *//******** reg: RDE, WORD0 ********//******** reg: RDE, WORD1 ********//* field: OWN */#define RDE_WORD1_OWN_SHF 31#define RDE_WORD1_OWN_MSK (MSK(1) << RDE_WORD1_OWN_SHF)/* field: ERR */#define RDE_WORD1_ERR_SHF 30#define RDE_WORD1_ERR_MSK (MSK(1) << RDE_WORD1_ERR_SHF)/* field: FRAM */#define RDE_WORD1_FRAM_SHF 29#define RDE_WORD1_FRAM_MSK (MSK(1) << RDE_WORD1_FRAM_SHF)/* field: OFLO */#define RDE_WORD1_OFLO_SHF 28#define RDE_WORD1_OFLO_MSK (MSK(1) << RDE_WORD1_OFLO_SHF)/* field: CRC */#define RDE_WORD1_CRC_SHF 27#define RDE_WORD1_CRC_MSK (MSK(1) << RDE_WORD1_CRC_SHF)/* field: BUFF */#define RDE_WORD1_BUFF_SHF 26#define RDE_WORD1_BUFF_MSK (MSK(1) << RDE_WORD1_BUFF_SHF)/* field: STP */#define RDE_WORD1_STP_SHF 25#define RDE_WORD1_STP_MSK (MSK(1) << RDE_WORD1_STP_SHF)/* field: ENP */#define RDE_WORD1_ENP_SHF 24#define RDE_WORD1_ENP_MSK (MSK(1) << RDE_WORD1_ENP_SHF)/* field: BPE */#define RDE_WORD1_BPE_SHF 23#define RDE_WORD1_BPE_MSK (MSK(1) << RDE_WORD1_BPE_SHF)/* field: PAM */#define RDE_WORD1_PAM_SHF 22#define RDE_WORD1_PAM_MSK (MSK(1) << RDE_WORD1_PAM_SHF)/* field: LAFM */#define RDE_WORD1_LAFM_SHF 21#define RDE_WORD1_LAFM_MSK (MSK(1) << RDE_WORD1_LAFM_SHF)/* field: BAM */#define RDE_WORD1_BAM_SHF 20#define RDE_WORD1_BAM_MSK (MSK(1) << RDE_WORD1_BAM_SHF)/* field: ONES */#define RDE_WORD1_ONES_SHF 12#define RDE_WORD1_ONES_MSK (MSK(4) << RDE_WORD1_ONES_SHF)/* field: BCNT */#define RDE_WORD1_BCNT_SHF 0#define RDE_WORD1_BCNT_MSK (MSK(12) << RDE_WORD1_BCNT_SHF)/******** reg: RDE, WORD2 ********//* field: MCNT */#define RDE_WORD2_MCNT_SHF 0#define RDE_WORD2_MCNT_MSK (MSK(12) << RDE_WORD2_MCNT_SHF)/******** reg: RDE, WORD3 ********//************************************************************************ * LAN AM79C973: Transmit Descriptor Element (SSIZE32=1)*************************************************************************/#define TDE_WORD0_OFS 0x00000 /* Word0: */#define TDE_WORD1_OFS 0x00004 /* Word1: */#define TDE_WORD2_OFS 0x00008 /* Word2: */#define TDE_WORD3_OFS 0x0000C /* Word3: *//******** reg: TDE, WORD0 ********//******** reg: TDE, WORD1 ********//* field: OWN */#define TDE_WORD1_OWN_SHF 31#define TDE_WORD1_OWN_MSK (MSK(1) << TDE_WORD1_OWN_SHF)/* field: ERR */#define TDE_WORD1_ERR_SHF 30#define TDE_WORD1_ERR_MSK (MSK(1) << TDE_WORD1_ERR_SHF)/* field: AFCS */#define TDE_WORD1_AFCS_SHF 29#define TDE_WORD1_AFCS_MSK (MSK(1) << TDE_WORD1_AFCS_SHF)/* field: MORE */#define TDE_WORD1_MORE_SHF 28#define TDE_WORD1_MORE_MSK (MSK(1) << TDE_WORD1_MORE_SHF)/* field: ONE */#define TDE_WORD1_ONE_SHF 27#define TDE_WORD1_ONE_MSK (MSK(1) << TDE_WORD1_ONE_SHF)/* field: DEF */#define TDE_WORD1_DEF_SHF 26#define TDE_WORD1_DEF_MSK (MSK(1) << TDE_WORD1_DEF_SHF)/* field: STP */#define TDE_WORD1_STP_SHF 25#define TDE_WORD1_STP_MSK (MSK(1) << TDE_WORD1_STP_SHF)/* field: ENP */#define TDE_WORD1_ENP_SHF 24#define TDE_WORD1_ENP_MSK (MSK(1) << TDE_WORD1_ENP_SHF)/* field: BPE */#define TDE_WORD1_BPE_SHF 23#define TDE_WORD1_BPE_MSK (MSK(1) << TDE_WORD1_BPE_SHF)/* field: ONES */#define TDE_WORD1_ONES_SHF 12#define TDE_WORD1_ONES_MSK (MSK(4) << TDE_WORD1_ONES_SHF)/* field: BCNT */#define TDE_WORD1_BCNT_SHF 0#define TDE_WORD1_BCNT_MSK (MSK(12) << TDE_WORD1_BCNT_SHF)/******** reg: TDE, WORD2 ********//* field: BUFF */#define TDE_WORD2_BUFF_SHF 31#define TDE_WORD2_BUFF_MSK (MSK(1) << TDE_WORD2_BUFF_SHF)/* field: UFLO */#define TDE_WORD2_UFLO_SHF 30#define TDE_WORD2_UFLO_MSK (MSK(1) << TDE_WORD2_UFLO_SHF)/* field: EXDEF */#define TDE_WORD2_EXDEF_SHF 29#define TDE_WORD2_EXDEF_MSK (MSK(1) << TDE_WORD2_EXDEF_SHF)/* field: LCOL */#define TDE_WORD2_LCOL_SHF 28#define TDE_WORD2_LCOL_MSK (MSK(1) << TDE_WORD2_LCOL_SHF)/* field: LCAR */#define TDE_WORD2_LCAR_SHF 27#define TDE_WORD2_LCAR_MSK (MSK(1) << TDE_WORD2_LCAR_SHF)/* field: RTRY */#define TDE_WORD2_RTRY_SHF 26#define TDE_WORD2_RTRY_MSK (MSK(1) << TDE_WORD2_RTRY_SHF)/* field: TRC */#define TDE_WORD2_TRC_SHF 0#define TDE_WORD2_TRC_MSK (MSK(4) << TDE_WORD2_TRC_SHF)/* Value definition for TX and RX descriptor entry owner semaphore */#define HOST_IS_OWNER 0#define CTRL_IS_OWNER 1/* Global driver states */#define LAN_AM79C973_DRIVER_IS_STOPPED 0x42#define LAN_AM79C973_DRIVER_IS_STARTED 0x44/************************************************************************ * Public variables ************************************************************************//************************************************************************ * Static variables ************************************************************************/static char msg[160] ;/* Global driver state */static UINT32 LAN_AM79C973_state = LAN_AM79C973_DRIVER_IS_STOPPED ;/* MAC broadcast address */static t_mac_addr mac_broadcast_adr = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } ;/* User registered receive handler */static UINT32 (*usr_receive)( UINT32 length, UINT8 *data ) = NULL ;/* Device context per minor device for this driver */static t_LAN_AM79C973_device minor_device[LAN_MINOR_AM79C973_DEVICES] ;/* Dynamic allocated memory state */static UINT32 first_time_init = 0 ;/************************************************************************ * Static function prototypes, local helper functions ************************************************************************//************************************************************************ * * LAN_AM79C973_allocate_memory * Description : * ------------- * This routine allocates memory for: * * - Init Block, * - TX and RX descriptor ring elements, * - Tx data buffers, * - Rx data buffers and * * initializes the allocated structures. * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_allocate_memory( t_LAN_AM79C973_device *pdevice ) ;/************************************************************************ * * LAN_AM79C973_init_initblock * Description : * ------------- * This routine initializes the AM79C973 Init Block data structure. * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_init_initblock( t_LAN_AM79C973_device *pdevice ) ;/************************************************************************ * * LAN_AM79C973_init_ring_descriptors * Description : * ------------- * This routine initializes the AM79C973 ring descriptor * data structures. * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_init_ring_descriptors( t_LAN_AM79C973_device *pdevice ) ;/************************************************************************ * * LAN_AM79C973_stop * Description : * ------------- * This routine stops the AM79C973 LAN controller * by stopping DMA transfer and resetting the chip. * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_stop( t_LAN_AM79C973_device *pdevice ) ; /************************************************************************ * * LAN_AM79C973_MII_setup * Description : * ------------- * Setup MII: if PCI clock < 33 MHz, then force 10 MBit/sec and * half duplex; else setup MII for autonegotiate. * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_MII_setup( t_LAN_AM79C973_device *pdevice ) ;/************************************************************************ * * LAN_AM79C973_MII_status * Description : * ------------- * Display MII status * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/staticINT32 LAN_AM79C973_MII_status( t_LAN_AM79C973_device *pdevice ) ; /************************************************************************ * * LAN_AM79C973_dump_regs * Description : * ------------- * Dump all AM79C973 LAN controller registers * * * Parameters : * ------------ * * 'pdevice', IN, reference for this device context * * * Return values : * --------------- * * 'OK'(=0) * * * ************************************************************************/#ifdef ETH_DEBUGstaticINT32 LAN_AM79C973_dump_regs( t_LAN_AM79C973_device *pdevice ) ;#endif/************************************************************************ * * LAN_AM79C973_dump_status * Description : * ------------- * Dump all AM79C973 LAN controller statistics * * * Parameters :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -