📄 lan_saa9730.c
字号:
#define LAN_TXSTA_COLLISIONS_SHF 0#define LAN_TXSTA_COLLISIONS_MSK (MSK(4) << LAN_TXSTA_COLLISIONS_SHF)/******** reg: RXCTL ********//* field: ENGOOD */#define LAN_RXCTL_ENGOOD_SHF 14#define LAN_RXCTL_ENGOOD_MSK (MSK(1) << LAN_RXCTL_ENGOOD_SHF)#define LAN_RXCTL_ENGOOD_SET LAN_RXCTL_ENGOOD_MSK/* field: ENPARITY */#define LAN_RXCTL_ENPARITY_SHF 13#define LAN_RXCTL_ENPARITY_MSK (MSK(1) << LAN_RXCTL_ENPARITY_SHF)#define LAN_RXCTL_ENPARITY_SET LAN_RXCTL_ENPARITY_MSK/* field: ENLONGERR */#define LAN_RXCTL_ENLONGERR_SHF 11#define LAN_RXCTL_ENLONGERR_MSK (MSK(1) << LAN_RXCTL_ENLONGERR_SHF)#define LAN_RXCTL_ENLONGERR_SET LAN_RXCTL_ENLONGERR_MSK/* field: ENOVER */#define LAN_RXCTL_ENOVER_SHF 10#define LAN_RXCTL_ENOVER_MSK (MSK(1) << LAN_RXCTL_ENOVER_SHF)#define LAN_RXCTL_ENOVER_SET LAN_RXCTL_ENOVER_MSK/* field: ENCRCERR */#define LAN_RXCTL_ENCRCERR_SHF 9#define LAN_RXCTL_ENCRCERR_MSK (MSK(1) << LAN_RXCTL_ENCRCERR_SHF)#define LAN_RXCTL_ENCRCERR_SET LAN_RXCTL_ENCRCERR_MSK/* field: ENALIGN */#define LAN_RXCTL_ENALIGN_SHF 8#define LAN_RXCTL_ENALIGN_MSK (MSK(1) << LAN_RXCTL_ENALIGN_SHF)#define LAN_RXCTL_ENALIGN_SET LAN_RXCTL_ENALIGN_MSK/* field: IGNORECRC */#define LAN_RXCTL_IGNORECRC_SHF 6#define LAN_RXCTL_IGNORECRC_MSK (MSK(1) << LAN_RXCTL_IGNORECRC_SHF)#define LAN_RXCTL_IGNORECRC_SET LAN_RXCTL_IGNORECRC_MSK/* field: PASSCTL */#define LAN_RXCTL_PASSCTL_SHF 5#define LAN_RXCTL_PASSCTL_MSK (MSK(1) << LAN_RXCTL_PASSCTL_SHF)#define LAN_RXCTL_PASSCTL_SET LAN_RXCTL_PASSCTL_MSK/* field: STRIPCRC */#define LAN_RXCTL_STRIPCRC_SHF 4#define LAN_RXCTL_STRIPCRC_MSK (MSK(1) << LAN_RXCTL_STRIPCRC_SHF)#define LAN_RXCTL_STRIPCRC_SET LAN_RXCTL_STRIPCRC_MSK/* field: SHORTEN */#define LAN_RXCTL_SHORTEN_SHF 3#define LAN_RXCTL_SHORTEN_MSK (MSK(1) << LAN_RXCTL_SHORTEN_SHF)#define LAN_RXCTL_SHORTEN_SET LAN_RXCTL_SHORTEN_MSK/* field: LONGEN */#define LAN_RXCTL_LONGEN_SHF 2#define LAN_RXCTL_LONGEN_MSK (MSK(1) << LAN_RXCTL_LONGEN_SHF)#define LAN_RXCTL_LONGEN_SET LAN_RXCTL_LONGEN_MSK/* field: RXHALT */#define LAN_RXCTL_RXHALT_SHF 1#define LAN_RXCTL_RXHALT_MSK (MSK(1) << LAN_RXCTL_RXHALT_SHF)#define LAN_RXCTL_RXHALT_SET LAN_RXCTL_RXHALT_MSK/* field: RXEN */#define LAN_RXCTL_RXEN_SHF 0#define LAN_RXCTL_RXEN_MSK (MSK(1) << LAN_RXCTL_RXEN_SHF)#define LAN_RXCTL_RXEN_SET LAN_RXCTL_RXEN_MSK/******** reg: RXSTA ********//* field: HALTED */#define LAN_RXSTA_HALTED_SHF 15#define LAN_RXSTA_HALTED_MSK (MSK(1) << LAN_RXSTA_HALTED_SHF)#define LAN_RXSTA_HALTED_SET LAN_RXSTA_HALTED_MSK/* field: GOOD */#define LAN_RXSTA_GOOD_SHF 14#define LAN_RXSTA_GOOD_MSK (MSK(1) << LAN_RXSTA_GOOD_SHF)#define LAN_RXSTA_GOOD_SET LAN_RXSTA_GOOD_MSK/* field: PARITY */#define LAN_RXSTA_PARITY_SHF 13#define LAN_RXSTA_PARITY_MSK (MSK(1) << LAN_RXSTA_PARITY_SHF)#define LAN_RXSTA_PARITY_SET LAN_RXSTA_PARITY_MSK/* field: LONGERR */#define LAN_RXSTA_LONGERR_SHF 11#define LAN_RXSTA_LONGERR_MSK (MSK(1) << LAN_RXSTA_LONGERR_SHF)#define LAN_RXSTA_LONGERR_SET LAN_RXSTA_LONGERR_MSK/* field: OVERFLOW */#define LAN_RXSTA_OVERFLOW_SHF 10#define LAN_RXSTA_OVERFLOW_MSK (MSK(1) << LAN_RXSTA_OVERFLOW_SHF)#define LAN_RXSTA_OVERFLOW_SET LAN_RXSTA_OVERFLOW_MSK/* field: CRCERR */#define LAN_RXSTA_CRCERR_SHF 9#define LAN_RXSTA_CRCERR_MSK (MSK(1) << LAN_RXSTA_CRCERR_SHF)#define LAN_RXSTA_CRCERR_SET LAN_RXSTA_CRCERR_MSK/* field: ALIGNERR */#define LAN_RXSTA_ALIGNERR_SHF 8#define LAN_RXSTA_ALIGNERR_MSK (MSK(1) << LAN_RXSTA_ALIGNERR_SHF)#define LAN_RXSTA_ALIGNERR_SET LAN_RXSTA_ALIGNERR_MSK/* field: WAS10MB */#define LAN_RXSTA_WAS10MB_SHF 7#define LAN_RXSTA_WAS10MB_MSK (MSK(1) << LAN_RXSTA_WAS10MB_SHF)#define LAN_RXSTA_WAS10MB_SET LAN_RXSTA_WAS10MB_MSK/* field: INTERRUPT */#define LAN_RXSTA_INTERRUPT_SHF 6#define LAN_RXSTA_INTERRUPT_MSK (MSK(1) << LAN_RXSTA_INTERRUPT_SHF)#define LAN_RXSTA_INTERRUPT_SET LAN_RXSTA_INTERRUPT_MSK/* field: CONTROLRCV */#define LAN_RXSTA_CONTROLRCV_SHF 5#define LAN_RXSTA_CONTROLRCV_MSK (MSK(1) << LAN_RXSTA_CONTROLRCV_SHF)#define LAN_RXSTA_CONTROLRCV_SET LAN_RXSTA_CONTROLRCV_MSK/******** reg: MDDATA ********//* field: DATA */#define LAN_MDDATA_DATA_SHF 0#define LAN_MDDATA_DATA_MSK (MSK(16) << LAN_MDDATA_DATA_SHF)#define LAN_MDDATA_DATA_SET LAN_MDDATA_DATA_MSK/******** reg: MDCTL ********//* field: PRESUP */#define LAN_MDCTL_PRESUP_SHF 12#define LAN_MDCTL_PRESUP_MSK (MSK(1) << LAN_MDCTL_PRESUP_SHF)#define LAN_MDCTL_PRESUP_SET LAN_MDCTL_PRESUP_MSK/* field: BUSY */#define LAN_MDCTL_BUSY_SHF 11#define LAN_MDCTL_BUSY_MSK (MSK(1) << LAN_MDCTL_BUSY_SHF)#define LAN_MDCTL_BUSY_SET LAN_MDCTL_BUSY_MSK/* field: WR */#define LAN_MDCTL_WR_SHF 10#define LAN_MDCTL_WR_MSK (MSK(1) << LAN_MDCTL_WR_SHF)#define LAN_MDCTL_WR_SET LAN_MDCTL_WR_MSK/* field: PHY */#define LAN_MDCTL_PHY_SHF 5#define LAN_MDCTL_PHY_MSK (MSK(5) << LAN_MDCTL_PHY_SHF)/* field: ADDR */#define LAN_MDCTL_ADDR_SHF 0#define LAN_MDCTL_ADDR_MSK (MSK(5) << LAN_MDCTL_ADDR_SHF)/******** reg: CAMADR ********//* field: ADDRESS */#define LAN_CAMADR_ADDRESS_SHF 0#define LAN_CAMADR_ADDRESS_MSK (MSK(9) << LAN_CAMADR_ADDRESS_SHF)/******** reg: CAMDAT ********//* 32-bit transparent data register *//******** reg: CAMENA ********//* field: ENABLE */#define LAN_CAMENA_ENABLE_SHF 0#define LAN_CAMENA_ENABLE_MSK (MSK(22) << LAN_CAMENA_ENABLE_SHF)/******** reg: DBGRXS ********//* field: RXPI */#define LAN_DBGRXS_RXPI_SHF 16#define LAN_DBGRXS_RXPI_MSK (MSK(10) << LAN_DBGRXS_RXPI_SHF)#define LAN_DBGRXS_RXPI_ERROR 1/* field: RXDII */#define LAN_DBGRXS_RXDII_SHF 0#define LAN_DBGRXS_RXDII_MSK (MSK(9) << LAN_DBGRXS_RXDII_SHF)#define LAN_DBGRXS_RXDII_ERROR 8/************************************************************************ * LAN SAA9730: Packet Control & Status Word, Relative Address*************************************************************************/#define TXPACKET_CONTROL_OFS 0x00000 /* TX-Packet, Control word */#define TXPACKET_STATUS_OFS 0x00000 /* TX-Packet, Status word */#define RXPACKET_CONTROL_OFS 0x00000 /* RX-Packet, Control word */#define RXPACKET_STATUS_OFS 0x00000 /* RX-Packet, Status word *//************************************************************************ * LAN SAA9730: Packet Control & Status Word, Field encodings*************************************************************************//******** reg: TXPACKET_CONTROL ********//* field: FLAG */#define TXPACKET_CONTROL_FLAG_SHF 30#define TXPACKET_CONTROL_FLAG_MSK (MSK(2) << TXPACKET_CONTROL_FLAG_SHF)#define TX_EMPTY 0#define TX_READY 2#define TX_HWDONE 3/* field: COMPLETION */#define TXPACKET_CONTROL_COMPLETION_SHF 29#define TXPACKET_CONTROL_COMPLETION_MSK (MSK(1) << TXPACKET_CONTROL_COMPLETION_SHF)/* field: NOCRC */#define TXPACKET_CONTROL_NOCRC_SHF 28#define TXPACKET_CONTROL_NOCRC_MSK (MSK(1) << TXPACKET_CONTROL_NOCRC_SHF)/* field: NOPAD */#define TXPACKET_CONTROL_NOPAD_SHF 27#define TXPACKET_CONTROL_NOPAD_MSK (MSK(1) << TXPACKET_CONTROL_NOPAD_SHF)/* field: SIZE */#define TXPACKET_CONTROL_SIZE_SHF 0#define TXPACKET_CONTROL_SIZE_MSK (MSK(11) << TXPACKET_CONTROL_SIZE_SHF)/******** reg: TXPACKET_STATUS ********//* field: FLAG */#define TXPACKET_STATUS_FLAG_SHF 30#define TXPACKET_STATUS_FLAG_MSK (MSK(2) << TXPACKET_STATUS_FLAG_SHF)/* field: SQERR */#define TXPACKET_STATUS_SQERR_SHF 27#define TXPACKET_STATUS_SQERR_MSK (MSK(1) << TXPACKET_STATUS_SQERR_SHF)/* field: TXHALTED */#define TXPACKET_STATUS_TXHALTED_SHF 26#define TXPACKET_STATUS_TXHALTED_MSK (MSK(1) << TXPACKET_STATUS_TXHALTED_SHF)/* field: COMPLETION */#define TXPACKET_STATUS_COMPLETION_SHF 25#define TXPACKET_STATUS_COMPLETION_MSK (MSK(1) << TXPACKET_STATUS_COMPLETION_SHF)/* field: PARITYERR */#define TXPACKET_STATUS_PARITYERR_SHF 24#define TXPACKET_STATUS_PARITYERR_MSK (MSK(1) << TXPACKET_STATUS_PARITYERR_SHF)/* field: LATECOLLERR */#define TXPACKET_STATUS_LATECOLLERR_SHF 23#define TXPACKET_STATUS_LATECOLLERR_MSK (MSK(1) << TXPACKET_STATUS_LATECOLLERR_SHF)/* field: WAS10MB */#define TXPACKET_STATUS_WAS10MB_SHF 22#define TXPACKET_STATUS_WAS10MB_MSK (MSK(1) << TXPACKET_STATUS_WAS10MB_SHF)/* field: LOSTCARRIER */#define TXPACKET_STATUS_LOSTCARRIER_SHF 21#define TXPACKET_STATUS_LOSTCARRIER_MSK (MSK(1) << TXPACKET_STATUS_LOSTCARRIER_SHF)/* field: EXDEFER */#define TXPACKET_STATUS_EXDEFER_SHF 20#define TXPACKET_STATUS_EXDEFER_MSK (MSK(1) << TXPACKET_STATUS_EXDEFER_SHF)/* field: UNDERRUN */#define TXPACKET_STATUS_UNDERRUN_SHF 19#define TXPACKET_STATUS_UNDERRUN_MSK (MSK(1) << TXPACKET_STATUS_UNDERRUN_SHF)/* field: COLLISIONS */#define TXPACKET_STATUS_COLLISIONS_SHF 11#define TXPACKET_STATUS_COLLISIONS_MSK (MSK(5) <<TXPACKET_STATUS_COLLISIONS_SHF)/* field: SIZE */#define TXPACKET_STATUS_SIZE_SHF 0#define TXPACKET_STATUS_SIZE_MSK (MSK(11) << TXPACKET_STATUS_SIZE_SHF)#define TXPACKET_STATUS_ERROR_MSK (TXPACKET_STATUS_EXDEFER_MSK | \ TXPACKET_STATUS_LATECOLLERR_MSK | \ TXPACKET_STATUS_LOSTCARRIER_MSK | \ TXPACKET_STATUS_UNDERRUN_MSK | \ TXPACKET_STATUS_SQERR_MSK )/******** reg: RXPACKET_CONTROL ********//******** reg: RXPACKET_STATUS ********//* field: FLAG */#define RXPACKET_STATUS_FLAG_SHF 30#define RXPACKET_STATUS_FLAG_MSK (MSK(2) << RXPACKET_STATUS_FLAG_SHF)#define RX_NDIS 0#define RX_INVALID_STAT 1#define RX_READY 2#define RX_HWDONE 3/* field: GOOD */#define RXPACKET_STATUS_GOOD_SHF 25#define RXPACKET_STATUS_GOOD_MSK (MSK(1) << RXPACKET_STATUS_GOOD_SHF)/* field: PARITY */#define RXPACKET_STATUS_PARITY_SHF 24#define RXPACKET_STATUS_PARITY_MSK (MSK(1) << RXPACKET_STATUS_PARITY_SHF)/* field: LONGERR */#define RXPACKET_STATUS_LONGERR_SHF 22#define RXPACKET_STATUS_LONGERR_MSK (MSK(1) << RXPACKET_STATUS_LONGERR_SHF)/* field: OVERFLOW */#define RXPACKET_STATUS_OVERFLOW_SHF 21#define RXPACKET_STATUS_OVERFLOW_MSK (MSK(1) << RXPACKET_STATUS_OVERFLOW_SHF)/* field: CRCERR */#define RXPACKET_STATUS_CRCERR_SHF 20#define RXPACKET_STATUS_CRCERR_MSK (MSK(1) << RXPACKET_STATUS_CRCERR_SHF)/* field: ALIGNERR */#define RXPACKET_STATUS_ALIGNERR_SHF 19#define RXPACKET_STATUS_ALIGNERR_MSK (MSK(1) << RXPACKET_STATUS_ALIGNERR_SHF)/* field: WAS10MB */#define RXPACKET_STATUS_WAS10MB_SHF 18#define RXPACKET_STATUS_WAS10MB_MSK (MSK(1) << RXPACKET_STATUS_WAS10MB_SHF)/* field: SIZE */#define RXPACKET_STATUS_SIZE_SHF 0#define RXPACKET_STATUS_SIZE_MSK (MSK(11) << RXPACKET_STATUS_SIZE_SHF)/* Global driver states */#define LAN_SAA9730_DRIVER_IS_STOPPED 0x42#define LAN_SAA9730_DRIVER_IS_STARTED 0x44/************************************************************************ * Public variables ************************************************************************//************************************************************************ * Static variables ************************************************************************/static UINT32 poll_count = 0 ;static char msg[160] ;/* Global driver state */static UINT32 LAN_SAA9730_state = LAN_SAA9730_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_SAA9730_device minor_device[LAN_MINOR_SAA9730_DEVICES] ;/* Dynamic allocated memory */static UINT32 lan_dma_buffers ;static char* opmode_info[]= { /* OPMODE_AUTONEGOTIATE */ "still in auto-negotiate", /* OPMODE_10BASET_HALFDUPLEX */ "10 Mbit/s, half-duplex", /* OPMODE_100BASEX_HALFDUPLEX */ "100 Mbit/s, half-duplex", /* OPMODE_REPEATER_MODE */ "repeater mode", /* OPMODE_UNDEFINED */ "undefined", /* OPMODE_10BASET_FULLDUPLEX */ "10 Mbit/s, full-duplex", /* OPMODE_100BASEX_FULLDUPLEX */ "100 Mbit/s, full-duplex", /* OPMODE_ISOLATE */ "PHY/MII isolate, auto-negotiate disabled"} ;static bool opmode_is_fullduplex[]= { /* OPMODE_AUTONEGOTIATE */ FALSE, /* OPMODE_10BASET_HALFDUPLEX */ FALSE, /* OPMODE_100BASEX_HALFDUPLEX */ FALSE, /* OPMODE_REPEATER_MODE */ FALSE, /* OPMODE_UNDEFINED */ FALSE, /* OPMODE_10BASET_FULLDUPLEX */ TRUE, /* OPMODE_100BASEX_FULLDUPLEX */ TRUE, /* OPMODE_ISOLATE */ FALSE} ;/************************************************************************ * Static function prototypes, local helper functions ************************************************************************//************************************************************************ * * LAN_SAA9730_enable_buffer * Description : * ------------- * * Enable next receive buffer. * * * Parameters :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -