⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs8900a.h

📁 网卡cs8900的源代码
💻 H
字号:
/****************************************************************************/
/*                                                                          */
/* FILENAME                                                 VERSION         */
/*                                                                          */
/*    CS8900A.H                                              0.91           */
/*                                                                          */
/* DESCRIPTION                                                              */
/*                                                                          */
/*    This file contains the definitions and macros necessary for the       */
/*    CS8900A driver.                                                        */
/*                                                                          */
/* DATA STRUCTURES                                                          */
/*                                                                          */
/*    none                                                                  */
/*                                                                          */
/* FUNCTIONS                                                                */
/*                                                                          */
/*     none                                                                 */
/*                                                                          */
/* DEPENDENCIES                                                             */
/*                                                                          */
/*     none                                                                 */
/*                                                                          */
/* HISTORY                                                                  */
/*                                                                          */
/*  NAME                 DATE    REMARKS                                    */
/*                                                                          */
/*      02/17/96  Inital version. (Version 1.0)                */
/*      03/11/96  This file did not change for version 1.0a    */
/*                                                                          */
/****************************************************************************/
#ifndef CS8900A_H
#define CS8900A_H

#include "dev.h"
#include "target.h"

typedef char int8;              /*  1                   1   */
typedef unsigned char uint8;    /*  1                   1   */
typedef short int int16;        /*  2                   2   */
typedef unsigned short uint16;  /*  2                   2   */
typedef long int int32;         /*  4                   4   */
typedef unsigned long uint32;   /*  4                   4   */

/* This structure is used to keep track of extended data that is required for
   each registered CS8900A device. */


typedef struct _CS8900A_XDATA
{
    /* Receive errors. */
    uint16    OVW_Error_Count;
    uint16    CRC_Error_Count;
    uint16    FAE_Error_Count;
    uint16    FIFO_Error_Count;
    uint16    MPA_Error_Count;

    /* Transmit errors. */
    uint16    COLL_Error_Count;
    uint16    ABT_Error_Count;
    uint16    CRS_Error_Count;
    uint16    FU_Error_Count;
    uint16    CDH_Error_Count;
    uint16    OWC_Error_Count;

    /* Page data. */
    uint8  Next_Page;
//    unsigned int     cur_rx, cur_tx;    /* Index into the Rx buffer     */
//    unsigned int     dirty_tx, tx_flag; /* of next Rx pkt.              */
    /* The saved address of a sent-in-place packet/buffer, for skfree(). */
//    unsigned char   *tx_buf[NUM_TX_DESC];   /* Tx bounce buffers        */
//    unsigned char   *rx_ring;
//    unsigned char   *tx_bufspc;         /* Tx bounce buffer region.     */
//    unsigned int     tx_full;           /* The Tx queue is full.        */

} CS8900A_XDATA;

#define OUTW(offset, value)    outport ((int16)offset, (int16)value)
#define INW(offset)            (uint16)inport ((uint16)offset)
#define OUTB(offset, value)    outp ((int16)offset, (uint8)value)
#define INB(offset)            (uint8)inp ((int16)offset)

#define CS8900A_pPacketPage    0x86000000

#define EP7211_Register_Base   0x80000000
#define EP7211_intmask1_Offset 0x280

#define Eint3_Enable           0x0080

#define CS8900AInMemoryMode    0
/* Description of header of each packet in receive area of memory */

#define RBUF_STAT       0               /* Received frame status */
#define RBUF_NXT_PG     1               /* Page after this frame */
#define RBUF_SIZE_LO    2               /* Length of this frame  */
#define RBUF_SIZE_HI    3               /* Length of this frame (hi byte) */
#define RBUF_HDR_LEN    4               /* Length of above header area */

#define PSTART          0x46      //whether or not collision to IRQ_VECTOR in follows.
#define PSTOP           0x80
#define TX_PAGE         0x40

#define SIZE_OF_CRC     4
#define MAX_FRAME_SIZE  256

/***********************************************************************************/
#define FAILURE  (-1)
#define SUCCESS    0
#define TRUE       1
#define FALSE      0

#define MAXLOOP       0x8888
#define HEADER_LENGTH 14

#define SIGNATURE_PKTPG_PTR 0x3000
#define EISA_NUM_CRYSTAL    0x630E
#define PROD_ID_MASK        0xE000
#define PROD_ID_CS8900      0x0000
#define PROD_ID_CS8920      0x4000
#define PROD_ID_CS892X      0x6000
#define PROD_REV_MASK       0x1F00

#define FRAME_TYPE_IP       0x0800
#define FRAME_TYPE_ARP      0x0806
#define FRAME_TYPE_RARP     0x8035
#define FRAME_TYPE_NETWARE  0x8137


#define MAXTXREQ  16


#define BSP_CS8900_IO_BASE 0x86000300
/* IO Port Addresses */

#define PORT_RXTX_DATA     (BSP_CS8900_IO_BASE+0x00)
#define PORT_RXTX_DATA_1   (BSP_CS8900_IO_BASE+0x02)
#define PORT_TX_CMD        (BSP_CS8900_IO_BASE+0x04)
#define PORT_TX_LENGTH     (BSP_CS8900_IO_BASE+0x06)
#define PORT_ISQ           (BSP_CS8900_IO_BASE+0x08)
#define PORT_PKTPG_PTR     (BSP_CS8900_IO_BASE+0x0A)
#define PORT_PKTPG_DATA    (BSP_CS8900_IO_BASE+0x0C)
#define PORT_PKTPG_DATA_1  (BSP_CS8900_IO_BASE+0x0E)

/*
#define PORT_RXTX_DATA     (BSP_CS8900_IO_BASE+0x00)
#define PORT_RXTX_DATA_1   (BSP_CS8900_IO_BASE+0x04)
#define PORT_TX_CMD        (BSP_CS8900_IO_BASE+0x08)
#define PORT_TX_LENGTH     (BSP_CS8900_IO_BASE+0x0c)
#define PORT_ISQ           (BSP_CS8900_IO_BASE+0x10)
#define PORT_PKTPG_PTR     (BSP_CS8900_IO_BASE+0x14)
#define PORT_PKTPG_DATA    (BSP_CS8900_IO_BASE+0x18)
#define PORT_PKTPG_DATA_1  (BSP_CS8900_IO_BASE+0x1c)
*/

/* PacketPage Offsets */

#define PKTPG_EISA_NUM     0x0000
#define PKTPG_PRODUCT_ID   0x0002
#define PKTPG_IO_BASE      0x0020
#define PKTPG_INT_NUM      0x0022
#define PKTPG_MEM_BASE     0x002C
#define PKTPG_EEPROM_CMD   0x0040
#define PKTPG_EEPROM_DATA  0x0042
#define PKTPG_RX_CFG       0x0102
#define PKTPG_RX_CTL       0x0104
#define PKTPG_TX_CFG       0x0106
#define PKTPG_BUF_CFG      0x010A
#define PKTPG_LINE_CTL     0x0112
#define PKTPG_SELF_CTL     0x0114
#define PKTPG_BUS_CTL      0x0116
#define PKTPG_TEST_CTL     0x0118
#define PKTPG_ISQ          0x0120
#define PKTPG_RX_EVENT     0x0124
#define PKTPG_TX_EVENT     0x0128
#define PKTPG_BUF_EVENT    0x012C
#define PKTPG_RX_MISS      0x0130
#define PKTPG_TX_COL       0x0132
#define PKTPG_LINE_ST      0x0134
#define PKTPG_SELF_ST      0x0136
#define PKTPG_BUS_ST       0x0138
#define PKTPG_TX_CMD       0x0144
#define PKTPG_TX_LENGTH    0x0146
#define PKTPG_IND_ADDR     0x0158
#define PKTPG_RX_STATUS    0x0400
#define PKTPG_RX_LENGTH    0x0402
#define PKTPG_RX_FRAME     0x0404
#define PKTPG_TX_FRAME     0x0A00


/* EEPROM Offsets */

#define EEPROM_IND_ADDR_H  0x001C
#define EEPROM_IND_ADDR_M  0x001D
#define EEPROM_IND_ADDR_L  0x001E
#define EEPROM_ISA_CFG     0x001F
#define EEPROM_MEM_BASE    0x0020
#define EEPROM_XMIT_CTL    0x0023
#define EEPROM_ADPTR_CFG   0x0024


/* Register Numbers */

#define REG_NUM_MASK       0x003F
#define REG_NUM_RX_EVENT   0x0004
#define REG_NUM_TX_EVENT   0x0008
#define REG_NUM_BUF_EVENT  0x000C
#define REG_NUM_RX_MISS    0x0010
#define REG_NUM_TX_COL     0x0012


/* Self Control Register */

#define SELF_CTL_RESET     0x0040
#define SELF_CTL_HC1E      0x2000
#define SELF_CTL_HCB1      0x8000


/* Self Status Register */

#define SELF_ST_INIT_DONE  0x0080
#define SELF_ST_SI_BUSY    0x0100
#define SELF_ST_EEP_PRES   0x0200
#define SELF_ST_EEP_OK     0x0400
#define SELF_ST_EL_PRES    0x0800


/* EEPROM Command Register */

#define EEPROM_CMD_READ    0x0200
#define EEPROM_CMD_ELSEL   0x0400


/* Bus Control Register */

#define BUS_CTL_USE_SA     0x0200
#define BUS_CTL_MEM_MODE   0x0400
#define BUS_CTL_IOCHRDY    0x1000
#define BUS_CTL_int_ENBL   0x8000


/* Bus Status Register */

#define BUS_ST_TX_BID_ERR  0x0080
#define BUS_ST_RDY4TXNOW   0x0100

/* @jla added for rdy4tx interrupt*/

/* Buf Event Register */

#define BUF_EVENT_RDY4TX   0x0100

/* Line Control Register */

#define LINE_CTL_RX_ON     0x0040
#define LINE_CTL_TX_ON     0x0080
#define LINE_CTL_AUI_ONLY  0x0100
#define LINE_CTL_10BASET   0x0000


/* Test Control Register */

#define TEST_CTL_DIS_LT    0x0080
#define TEST_CTL_ENDEC_LP  0x0200
#define TEST_CTL_AUI_LOOP  0x0400
#define TEST_CTL_DIS_BKOFF 0x0800
#define TEST_CTL_FDX       0x4000


/* Receiver Configuration Register */

#define RX_CFG_SKIP        0x0040
#define RX_CFG_RX_OK_IE    0x0100
#define RX_CFG_CRC_ERR_IE  0x1000
#define RX_CFG_RUNT_IE     0x2000
#define RX_CFG_X_DATA_IE   0x4000


/* Receiver Event Register */

#define RX_EVENT_RX_OK     0x0100
#define RX_EVENT_IND_ADDR  0x0400
#define RX_EVENT_BCAST     0x0800
#define RX_EVENT_CRC_ERR   0x1000
#define RX_EVENT_RUNT      0x2000
#define RX_EVENT_X_DATA    0x4000


/* Receiver Control Register */

#define RX_CTL_RX_OK_A     0x0100
#define RX_CTL_MCAST_A     0x0200
#define RX_CTL_IND_A       0x0400
#define RX_CTL_BCAST_A     0x0800
#define RX_CTL_CRC_ERR_A   0x1000
#define RX_CTL_RUNT_A      0x2000
#define RX_CTL_X_DATA_A    0x4000


/* Transmit Configuration Register */

#define TX_CFG_LOSS_CRS_IE 0x0040
#define TX_CFG_SQE_ERR_IE  0x0080
#define TX_CFG_TX_OK_IE    0x0100
#define TX_CFG_OUT_WIN_IE  0x0200
#define TX_CFG_JABBER_IE   0x0400
#define TX_CFG_16_COLL_IE  0x8000
#define TX_CFG_ALL_IE      0x8FC0


/* Transmit Event Register */

#define TX_EVENT_TX_OK     0x0100
#define TX_EVENT_OUT_WIN   0x0200
#define TX_EVENT_JABBER    0x0400
#define TX_EVENT_16_COLL   0x1000


/* Transmit Command Register */

#define TX_CMD_START_5     0x0000
#define TX_CMD_START_381   0x0080
#define TX_CMD_START_1021  0x0040
#define TX_CMD_START_ALL   0x00C0
#define TX_CMD_FORCE       0x0100
#define TX_CMD_ONE_COLL    0x0200
#define TX_CMD_NO_CRC      0x1000
#define TX_CMD_NO_PAD      0x2000


/* Buffer Configuration Register */

#define BUF_CFG_SW_int     0x0040
#define BUF_CFG_RDY4TX_IE  0x0100
#define BUF_CFG_TX_UNDR_IE 0x0200


/* ISA Configuration from EEPROM */

#define ISA_CFG_IRQ_MASK   0x000F
#define ISA_CFG_USE_SA     0x0080
#define ISA_CFG_IOCHRDY    0x0100
#define ISA_CFG_MEM_MODE   0x8000


/* Memory Base from EEPROM */

#define MEM_BASE_MASK      0xFFF0


/* Adpater Configuration from EEPROM */

#define ADPTR_CFG_MEDIA    0x0060
#define ADPTR_CFG_10BASET  0x0020
#define ADPTR_CFG_AUI      0x0040
#define ADPTR_CFG_10BASE2  0x0060
#define ADPTR_CFG_DCDC_POL 0x0080


/* Transmission Control from EEPROM */

#define XMIT_CTL_FDX       0x8000

/***************************************************************************/
/*   杨天池,增加的S3C2410寄存器 2003.11.2                                 */
/***************************************************************************/
#define BIT_EINT9          0x00000200
#define BIT_EINT8_23       (0x1<<5)
#define rSRCPND     (*(volatile unsigned *)0x90a00000) //Interrupt request status
#define rINTMSK     (*(volatile unsigned *)0x90a00008) //Interrupt mask control
#define rINTPND     (*(volatile unsigned *)0x90a00010) //Interrupt request status
#define rEINTPEND   (*(volatile unsigned *)0x916000a8) //External interrupt pending
#define rEXTINT1    (*(volatile unsigned *)0x9160008c) //External interrupt control register 1
#define rEINTMASK   (*(volatile unsigned *)0x916000a4) //External interrupt mask
#define rGPGCON     (*(volatile unsigned *)0x91600060) //Port G control
#define rGPGDAT     (*(volatile unsigned *)0x91600064) //Port G data
#define rGPGUP      (*(volatile unsigned *)0x91600068) //Pull-up control G

#define ClearPending(bit) {\
                rSRCPND = bit;\
                rINTPND = bit;\
                rINTPND;\
                }       


/***************************************************************************/
/*   杨天池,结束的S3C2410寄存器 2003.11.2                                 */
/***************************************************************************/



/************************************************************************************/

STATUS CS8900A_Init(DV_DEVICE_ENTRY *device);
STATUS CS8900A_Close(NU_DEVICE *device);
STATUS CS8900A_Recv_Packet (DV_DEVICE_ENTRY *device,unsigned short RxEvent);
void   CS8900A_Set_Address (uint8 *ether_addr, DV_DEVICE_ENTRY *device);
STATUS CS8900A_Get_Address (uint8 *ether_addr);
STATUS CS8900A_Open (uint8 *, DV_DEVICE_ENTRY *);
STATUS CS8900A_Xmit_Packet (DV_DEVICE_ENTRY *device, NET_BUFFER *buf_ptr);
STATUS CS8900A_Chip_Read( int16 io_addr, NET_BUFFER *buf_ptr, unsigned short *pFrame);
int    CS8900A_Chip_Write(int16 io_addr, NET_BUFFER *buf_ptr);
void   CS8900A_Recv_HISR (void);
void   CS8900A_Transmit (void);
void   CS8900A_LISR (long);
unsigned long CS8900A_VerifyChip(void);
unsigned long   CS8900A_Reset(DV_DEVICE_ENTRY * device);
void   CS8900A_Delay(void);
STATUS CS8900A_Ioctl(DV_DEVICE_ENTRY *dev, int option, DV_REQ *d_req);
void   CS8900A_Update_Hash_Table(DV_DEVICE_ENTRY *device, int index);
uint32 CS8900A_Calculate_Hash(uint8 *multi_addr);
STATUS CS8900A_Set_RXCFG(DV_DEVICE_ENTRY *device);
int recv_intr_handle(DV_DEVICE_ENTRY *device);
void send_intr_handle(DV_DEVICE_ENTRY *device,uint8 int_status);

void CS8900A_BufferEvent(void);
STATUS CS8900A_Buffer_Packet (DV_DEVICE_ENTRY *device, NET_BUFFER *buf_ptr);
int CS8900A_Buffer_Write(int16 io_addr, NET_BUFFER *buf_ptr);

//unsigned int ioread16(unsigned int addr);
//void iowrite16(unsigned int addr,unsigned int data);

#endif

⌨️ 快捷键说明

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