cs8900.c

来自「ADS下的bios工程」· C语言 代码 · 共 669 行 · 第 1/2 页

C
669
字号
#include <bios/s3c2410x.h>#include <bios/netdev.h>#include <bios/time.h> #include <bios/stdio.h> #include <bios/types.h> #include <bios/system.h> #undef DEBUG_CS8900#ifdef DEBUG_CS8900#define DEBUG_MAC(fmt, args...) printf("%s-%s()[%d]: " fmt, \      __FILE__, __FUNCTION__, __LINE__, args)#else#define DEBUG_MAC(fmt, args...)#endif/*  * General I/O port for CS8900 Device control  * ExINT0/GPG0 of S3C44B0 is assigned to IRQ0 of ISA I/F */#define INT_CS8900		INT_EINT8	/* GPG1->EINT9 */#define CS8900_IRQ_NUM		0		/* INTRQ0 *//* CS8900A Device structure */struct ei_device {        struct net_device_stats stats;/* ethernet status field */        int send_cmd;           /* the propercommand used to send a packet. */        int isa_config;        int irq_map;        int rx_mode;        int curr_rx_cfg;        int linectl;        int send_underrun;      /* keep track of how many underruns in a row we get */	int no;			/* yskim dummy number 2001-02-15 */        //struct sk_buff *skb;};static struct ei_device ei_local;/*  * CS8900A register definition  * ------------------------------- */#define CS8900_MEM_BASE		(RESET_CS8900_BASE + (0x1<<12))#define CS8900_IO_BASE		(RESET_CS8900_BASE)#define PP_ChipID               0x0000 /*  offset 0h -> Corp -ID */#define PP_ProdID               0x0002 /*  offset 2h -> Prod -ID */#define PP_IOBASE               0x0020 /*  IO base address */#define PP_INTNUM	        0x0022 /*  ISA interrupt select */#define PP_DMACH	        0x0024 /*  ISA Rec DMA channel */#define PP_ISASOF               0x0026 /*  ISA DMA offset */#define PP_DmaFrameCnt          0x0028 /*  ISA DMA Frame count */#define PP_DmaByteCnt           0x002A /*  ISA DMA Byte count */#define PP_MEMBASE              0x002C /*  Memory base */#define PP_ISABootBase          0x0030 /*  Boot Prom base  */#define PP_ISABootMask          0x0034 /*  Boot Prom Mask */#define PP_RxFrameByteCNT	0x0050 /*  Receive Frame Byte Counter */#define PP_RxCFG                0x0102  /*  Rx Bus config */#define PP_RxCTL                0x0104  /*  Receive Control Register */#define PP_TxCFG                0x0106  /*  Transmit Config Register */#define PP_TxCMD                0x0108  /*  Transmit Command Register */#define PP_BufCFG               0x010A  /*  Bus configuration Register */#define PP_LineCTL              0x0112  /*  Line Config Register */#define PP_SelfCTL              0x0114  /*  Self Command Register */#define PP_BusCTL               0x0116  /*  ISA bus control Register */#define PP_TestCTL              0x0118  /*  Test Register */#define PP_AutoNegCTL           0x011C  /*  Auto Negotiation Ctrl */#define PP_ISQ                  0x0120  /*  Interrupt Status */#define PP_RxEvent              0x0124  /*  Rx Event Register */#define PP_TxEvent              0x0128  /*  Tx Event Register */#define PP_BufEvent             0x012C  /*  Bus Event Register */#define PP_RxMiss               0x0130  /*  Receive Miss Count */#define PP_TxCol                0x0132  /*  Transmit Collision Count */#define PP_LineST               0x0134  /*  Line State Register */#define PP_SelfST               0x0136  /*  Self State register */#define PP_BusST                0x0138  /*  Bus Status */#define PP_TDR                  0x013C  /*  Time Domain Reflectometry */#define PP_AutoNegST            0x013E  /*  Auto Neg Status */#define PP_TxCommand            0x0144  /*  Tx Command */#define PP_TxLength             0x0146  /*  Tx Length */#define PP_LAF                  0x0150  /*  Hash Table */#define PP_IA                   0x0158  /*  Physical Address Register */#define PP_RxStatus             0x0400  /*  Receive start of frame */#define PP_RxLength             0x0402  /*  Receive Length of frame */#define PP_RxFrame              0x0404  /*  Receive frame pointer */#define PP_TxFrame              0x0A00  /*  Transmit frame pointer *//*  Primary I/O Base Address. If no I/O base is supplied by the user, then this *//*  can be used as the default I/O base to access the PacketPage Area. */#define DEFAULTIOBASE           0x0300#define ADD_MASK                0x3000  /*  Mask it use of the ADD_PORT register */#define ADD_SIG                 0x3000  /*  Expected ID signature */#define EISA_ID_SIG             0x630E  /*  Product ID Code for Crystal Chip (CS8900 spec 4.3) */#define PROD_ID_SIG             0x0900  /*  Product ID Code for Crystal Chip (CS8900 spec 4.3) *//*  Defines Control/Config register quintuplet numbers */#define RX_BUF_CFG              0x0003#define RX_CONTROL              0x0005#define TX_CFG                  0x0007#define TX_COMMAND              0x0009#define BUF_CFG                 0x000B#define LINE_CONTROL            0x0013#define SELF_CONTROL            0x0015#define BUS_CONTROL             0x0017#define TEST_CONTROL            0x0019/*  Defines Status/Count registers quintuplet numbers */#define RX_EVENT                0x0004#define TX_EVENT                0x0008#define BUF_EVENT               0x000C#define RX_MISS_COUNT           0x0010#define TX_COL_COUNT            0x0012#define LINE_STATUS             0x0014#define SELF_STATUS             0x0016#define BUS_STATUS              0x0018#define TDR                     0x001C/* PP_RxCFG - Receive  Configuration and Interrupt Mask bit definition -  Read/write */#define SKIP_1 			0x0040#define RX_STREAM_ENBL 		0x0080#define RX_OK_ENBL 		0x0100#define RX_DMA_ONLY 		0x0200#define AUTO_RX_DMA 		0x0400#define BUFFER_CRC 		0x0800#define RX_CRC_ERROR_ENBL 	0x1000#define RX_RUNT_ENBL 		0x2000#define RX_EXTRA_DATA_ENBL 	0x4000/* PP_RxCTL - Receive Control bit definition - Read/write */#define RX_IA_HASH_ACCEPT 	0x0040#define RX_PROM_ACCEPT 		0x0080#define RX_OK_ACCEPT 		0x0100#define RX_MULTCAST_ACCEPT 	0x0200#define RX_IA_ACCEPT 		0x0400#define RX_BROADCAST_ACCEPT 	0x0800#define RX_BAD_CRC_ACCEPT 	0x1000#define RX_RUNT_ACCEPT 		0x2000#define RX_EXTRA_DATA_ACCEPT 	0x4000#define RX_ALL_ACCEPT (RX_PROM_ACCEPT|RX_BAD_CRC_ACCEPT|RX_RUNT_ACCEPT|RX_EXTRA_DATA_ACCEPT)/*  Default receive mode - individually addressed, broadcast, and error free */#define DEF_RX_ACCEPT (RX_IA_ACCEPT | RX_BROADCAST_ACCEPT | RX_OK_ACCEPT)/* PP_TxCFG - Transmit Configuration Interrupt Mask bit definition - Read/write */#define TX_LOST_CRS_ENBL 	0x0040#define TX_SQE_ERROR_ENBL 	0x0080#define TX_OK_ENBL 		0x0100#define TX_LATE_COL_ENBL 	0x0200#define TX_JBR_ENBL 		0x0400#define TX_ANY_COL_ENBL 	0x0800#define TX_16_COL_ENBL 		0x8000/* PP_TxCMD - Transmit Command bit definition - Read-only */#define TX_START_4_BYTES 	0x0000#define TX_START_64_BYTES 	0x0040#define TX_START_128_BYTES 	0x0080#define TX_START_ALL_BYTES 	0x00C0#define TX_FORCE 		0x0100#define TX_ONE_COL 		0x0200#define TX_TWO_PART_DEFF_DISABLE 0x0400#define TX_NO_CRC 		0x1000#define TX_RUNT 		0x2000/* PP_BufCFG - Buffer Configuration Interrupt Mask bit definition - Read/write */#define GENERATE_SW_INTERRUPT 	0x0040#define RX_DMA_ENBL 		0x0080#define READY_FOR_TX_ENBL 	0x0100#define TX_UNDERRUN_ENBL 	0x0200#define RX_MISS_ENBL 		0x0400#define RX_128_BYTE_ENBL 	0x0800#define TX_COL_COUNT_OVRFLOW_ENBL 0x1000#define RX_MISS_COUNT_OVRFLOW_ENBL 0x2000#define RX_DEST_MATCH_ENBL 	0x8000/* PP_LineCTL - Line Control bit definition - Read/write */#define SERIAL_RX_ON 		0x0040#define SERIAL_TX_ON 		0x0080#define AUI_ONLY 		0x0100#define AUTO_AUI_10BASET 	0x0200#define MODIFIED_BACKOFF 	0x0800#define NO_AUTO_POLARITY 	0x1000#define TWO_PART_DEFDIS 	0x2000#define LOW_RX_SQUELCH 		0x4000/* PP_SelfCTL - Software Self Control bit definition - Read/write */#define POWER_ON_RESET 		0x0040#define SW_STOP 		0x0100#define SLEEP_ON 		0x0200#define AUTO_WAKEUP 		0x0400#define HCB0_ENBL 		0x1000#define HCB1_ENBL 		0x2000#define HCB0 			0x4000#define HCB1 			0x8000/* PP_BusCTL - ISA Bus Control bit definition - Read/write */#define RESET_RX_DMA 		0x0040#define MEMORY_ON 		0x0400#define DMA_BURST_MODE 		0x0800#define IO_CHANNEL_READY_ON 	0x1000#define RX_DMA_SIZE_64K 	0x2000#define ENABLE_IRQ 		0x8000/* PP_TestCTL - Test Control bit definition - Read/write */#define LINK_OFF 		0x0080#define ENDEC_LOOPBACK 		0x0200#define AUI_LOOPBACK 		0x0400#define BACKOFF_OFF 		0x0800#define FAST_TEST 		0x8000/* PP_RxEvent - Receive Event Bit definition - Read-only */#define RX_IA_HASHED 		0x0040#define RX_DRIBBLE 		0x0080#define RX_OK 			0x0100#define RX_HASHED 		0x0200#define RX_IA 			0x0400#define RX_BROADCAST 		0x0800#define RX_CRC_ERROR 		0x1000#define RX_RUNT 		0x2000#define RX_EXTRA_DATA 		0x4000#define HASH_INDEX_MASK 0x0FC00/* PP_TxEvent - Transmit Event Bit definition - Read-only */#define TX_LOST_CRS 		0x0040#define TX_SQE_ERROR 		0x0080#define TX_OK 			0x0100#define TX_LATE_COL 		0x0200#define TX_JBR 			0x0400#define TX_16_COL 		0x8000#define TX_SEND_OK_BITS (TX_OK|TX_LOST_CRS)#define TX_COL_COUNT_MASK 	0x7800/* PP_BufEvent - Buffer Event Bit definition - Read-only */#define SW_INTERRUPT 		0x0040#define RX_DMA 			0x0080#define READY_FOR_TX 		0x0100#define TX_UNDERRUN 		0x0200#define RX_MISS 		0x0400#define RX_128_BYTE 		0x0800#define TX_COL_OVRFLW 		0x1000#define RX_MISS_OVRFLW 		0x2000#define RX_DEST_MATCH 		0x8000/* PP_SelfST - Chip Software Status bit definition */#define ACTIVE_33V 		0x0040#define INIT_DONE 		0x0080#define SI_BUSY 		0x0100#define EEPROM_PRESENT 		0x0200#define EEPROM_OK 		0x0400#define EL_PRESENT 		0x0800#define EE_SIZE_64 		0x1000/* PP_BusST - ISA Bus Status bit definition */#define TX_BID_ERROR 		0x0080#define READY_FOR_TX_NOW 	0x0100/* PP_AutoNegCTL - Auto Negotiation Control bit definition */#define RE_NEG_NOW 		0x0040#define ALLOW_FDX 		0x0080#define AUTO_NEG_ENABLE 	0x0100#define NLP_ENABLE 		0x0200#define FORCE_FDX 		0x8000#define AUTO_NEG_BITS (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE)#define AUTO_NEG_MASK (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE|ALLOW_FDX|RE_NEG_NOW)/* PP_AutoNegST - Auto Negotiation Status bit definition */#define AUTO_NEG_BUSY 		0x0080#define FLP_LINK 		0x0100#define FLP_LINK_GOOD 		0x0800#define LINK_FAULT 		0x1000#define HDX_ACTIVE 		0x4000#define FDX_ACTIVE 		0x8000/*  The following block defines the ISQ event types */#define ISQ_RECEIVER_EVENT 	0x04#define ISQ_TRANSMITTER_EVENT 	0x08#define ISQ_BUFFER_EVENT 	0x0c#define ISQ_RX_MISS_EVENT 	0x10#define ISQ_TX_COL_EVENT 	0x12#define ISQ_EVENT_MASK 		0x003F	/*  ISQ mask to find out type of event */#define ISQ_HIST 		16	/*  small history buffer */#define AUTOINCREMENT 		0x8000	/*  Bit mask to set bit-15 for autoincrement */#define TXRXBUFSIZE 		0x0600#define RXDMABUFSIZE 		0x8000#define RXDMASIZE 		0x4000#define TXRX_LENGTH_MASK 	0x07FF/*  rx options bits */#define RCV_WITH_RXON   1       /*  Set SerRx ON */#define RCV_COUNTS      2       /*  Use Framecnt1 */#define RCV_PONG        4       /*  Pong respondent */#define RCV_DONG        8       /*  Dong operation */#define RCV_POLLING     0x10    /*  Poll RxEvent */#define RCV_ISQ         0x20    /*  Use ISQ, int */#define RCV_AUTO_DMA    0x100   /*  Set AutoRxDMAE */#define RCV_DMA         0x200   /*  Set RxDMA only */#define RCV_DMA_ALL     0x400   /*  Copy all DMA'ed */#define RCV_FIXED_DATA  0x800   /*  Every frame same */#define RCV_IO          0x1000  /*  Use ISA IO only */#define RCV_MEMORY      0x2000  /*  Use ISA Memory */#define RAM_SIZE        0x1000       /*  The card has 4k bytes or RAM */#define PKT_START PP_TxFrame  /*  Start of packet RAM */#define RX_FRAME_PORT   0x0000#define TX_FRAME_PORT RX_FRAME_PORT#define TX_CMD_PORT     0x0004#define TX_NOW          0x0000       /*  Tx packet after   5 bytes copied */#define TX_AFTER_381    0x0040       /*  Tx packet after 381 bytes copied */#define TX_AFTER_ALL    0x00c0       /*  Tx packet after all bytes copied */#define TX_LEN_PORT     0x0006#define ISQ_PORT        0x0008#define ADD_PORT        0x000A#define DATA_PORT       0x000C/*  Receive Header *//*  Description of header of each packet in receive area of memory */#define RBUF_EVENT_LOW  0   /*  Low byte of RxEvent - status of received frame */#define RBUF_EVENT_HIGH 1   /*  High byte of RxEvent - status of received frame */#define RBUF_LEN_LOW    2   /*  Length of received data - low byte */#define RBUF_LEN_HI     3   /*  Length of received data - high byte */#define RBUF_HEAD_LEN   4   /*  Length of this header */#define PACKET_PAGE_OFFSET 	0x8#define STREAM_TRANSFER		0x2000/************************************************************* *                                                           * *      CS8900A Ethernet MAC Function Proto types            * *                                                           * *************************************************************/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?