3c505.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
- /*****************************************************************
- *
- * defines for 3Com Etherlink Plus adapter
- *
- *****************************************************************/
- #define ELP_DMA 6
- #define ELP_RX_PCBS 4
- #define ELP_MAX_CARDS 4
- /*
- * I/O register offsets
- */
- #define PORT_COMMAND 0x00 /* read/write, 8-bit */
- #define PORT_STATUS 0x02 /* read only, 8-bit */
- #define PORT_AUXDMA 0x02 /* write only, 8-bit */
- #define PORT_DATA 0x04 /* read/write, 16-bit */
- #define PORT_CONTROL 0x06 /* read/write, 8-bit */
- #define ELP_IO_EXTENT 0x10 /* size of used IO registers */
- /*
- * host control registers bits
- */
- #define ATTN 0x80 /* attention */
- #define FLSH 0x40 /* flush data register */
- #define DMAE 0x20 /* DMA enable */
- #define DIR 0x10 /* direction */
- #define TCEN 0x08 /* terminal count interrupt enable */
- #define CMDE 0x04 /* command register interrupt enable */
- #define HSF2 0x02 /* host status flag 2 */
- #define HSF1 0x01 /* host status flag 1 */
- /*
- * combinations of HSF flags used for PCB transmission
- */
- #define HSF_PCB_ACK HSF1
- #define HSF_PCB_NAK HSF2
- #define HSF_PCB_END (HSF2|HSF1)
- #define HSF_PCB_MASK (HSF2|HSF1)
- /*
- * host status register bits
- */
- #define HRDY 0x80 /* data register ready */
- #define HCRE 0x40 /* command register empty */
- #define ACRF 0x20 /* adapter command register full */
- /* #define DIR 0x10 direction - same as in control register */
- #define DONE 0x08 /* DMA done */
- #define ASF3 0x04 /* adapter status flag 3 */
- #define ASF2 0x02 /* adapter status flag 2 */
- #define ASF1 0x01 /* adapter status flag 1 */
- /*
- * combinations of ASF flags used for PCB reception
- */
- #define ASF_PCB_ACK ASF1
- #define ASF_PCB_NAK ASF2
- #define ASF_PCB_END (ASF2|ASF1)
- #define ASF_PCB_MASK (ASF2|ASF1)
- /*
- * host aux DMA register bits
- */
- #define DMA_BRST 0x01 /* DMA burst */
- /*
- * maximum amount of data allowed in a PCB
- */
- #define MAX_PCB_DATA 62
- /*****************************************************************
- *
- * timeout value
- * this is a rough value used for loops to stop them from
- * locking up the whole machine in the case of failure or
- * error conditions
- *
- *****************************************************************/
- #define TIMEOUT 300
- /*****************************************************************
- *
- * PCB commands
- *
- *****************************************************************/
- enum {
- /*
- * host PCB commands
- */
- CMD_CONFIGURE_ADAPTER_MEMORY = 0x01,
- CMD_CONFIGURE_82586 = 0x02,
- CMD_STATION_ADDRESS = 0x03,
- CMD_DMA_DOWNLOAD = 0x04,
- CMD_DMA_UPLOAD = 0x05,
- CMD_PIO_DOWNLOAD = 0x06,
- CMD_PIO_UPLOAD = 0x07,
- CMD_RECEIVE_PACKET = 0x08,
- CMD_TRANSMIT_PACKET = 0x09,
- CMD_NETWORK_STATISTICS = 0x0a,
- CMD_LOAD_MULTICAST_LIST = 0x0b,
- CMD_CLEAR_PROGRAM = 0x0c,
- CMD_DOWNLOAD_PROGRAM = 0x0d,
- CMD_EXECUTE_PROGRAM = 0x0e,
- CMD_SELF_TEST = 0x0f,
- CMD_SET_STATION_ADDRESS = 0x10,
- CMD_ADAPTER_INFO = 0x11,
- NUM_TRANSMIT_CMDS,
- /*
- * adapter PCB commands
- */
- CMD_CONFIGURE_ADAPTER_RESPONSE = 0x31,
- CMD_CONFIGURE_82586_RESPONSE = 0x32,
- CMD_ADDRESS_RESPONSE = 0x33,
- CMD_DOWNLOAD_DATA_REQUEST = 0x34,
- CMD_UPLOAD_DATA_REQUEST = 0x35,
- CMD_RECEIVE_PACKET_COMPLETE = 0x38,
- CMD_TRANSMIT_PACKET_COMPLETE = 0x39,
- CMD_NETWORK_STATISTICS_RESPONSE = 0x3a,
- CMD_LOAD_MULTICAST_RESPONSE = 0x3b,
- CMD_CLEAR_PROGRAM_RESPONSE = 0x3c,
- CMD_DOWNLOAD_PROGRAM_RESPONSE = 0x3d,
- CMD_EXECUTE_RESPONSE = 0x3e,
- CMD_SELF_TEST_RESPONSE = 0x3f,
- CMD_SET_ADDRESS_RESPONSE = 0x40,
- CMD_ADAPTER_INFO_RESPONSE = 0x41
- };
- /* Definitions for the PCB data structure */
- /* Data units */
- typedef unsigned char byte;
- typedef unsigned short int word;
- typedef unsigned long int dword;
- /* Data structures */
- struct Memconf {
- word cmd_q,
- rcv_q,
- mcast,
- frame,
- rcv_b,
- progs;
- };
- struct Rcv_pkt {
- word buf_ofs,
- buf_seg,
- buf_len,
- timeout;
- };
- struct Xmit_pkt {
- word buf_ofs,
- buf_seg,
- pkt_len;
- };
- struct Rcv_resp {
- word buf_ofs,
- buf_seg,
- buf_len,
- pkt_len,
- timeout,
- status;
- dword timetag;
- };
- struct Xmit_resp {
- word buf_ofs,
- buf_seg,
- c_stat,
- status;
- };
- struct Netstat {
- dword tot_recv,
- tot_xmit;
- word err_CRC,
- err_align,
- err_res,
- err_ovrrun;
- };
- struct Selftest {
- word error;
- union {
- word ROM_cksum;
- struct {
- word ofs, seg;
- } RAM;
- word i82586;
- } failure;
- };
- struct Info {
- byte minor_vers,
- major_vers;
- word ROM_cksum,
- RAM_sz,
- free_ofs,
- free_seg;
- };
- struct Memdump {
- word size,
- off,
- seg;
- };
- /*
- Primary Command Block. The most important data structure. All communication
- between the host and the adapter is done with these. (Except for the actual
- Ethernet data, which has different packaging.)
- */
- typedef struct {
- byte command;
- byte length;
- union {
- struct Memconf memconf;
- word configure;
- struct Rcv_pkt rcv_pkt;
- struct Xmit_pkt xmit_pkt;
- byte multicast[10][6];
- byte eth_addr[6];
- byte failed;
- struct Rcv_resp rcv_resp;
- struct Xmit_resp xmit_resp;
- struct Netstat netstat;
- struct Selftest selftest;
- struct Info info;
- struct Memdump memdump;
- byte raw[62];
- } data;
- } pcb_struct;
- /* These defines for 'configure' */
- #define RECV_STATION 0x00
- #define RECV_BROAD 0x01
- #define RECV_MULTI 0x02
- #define RECV_PROMISC 0x04
- #define NO_LOOPBACK 0x00
- #define INT_LOOPBACK 0x08
- #define EXT_LOOPBACK 0x10
- /*****************************************************************
- *
- * structure to hold context information for adapter
- *
- *****************************************************************/
- #define DMA_BUFFER_SIZE 1600
- #define BACKLOG_SIZE 4
- typedef struct {
- volatile short got[NUM_TRANSMIT_CMDS]; /* flags for
- command completion */
- pcb_struct tx_pcb; /* PCB for foreground sending */
- pcb_struct rx_pcb; /* PCB for foreground receiving */
- pcb_struct itx_pcb; /* PCB for background sending */
- pcb_struct irx_pcb; /* PCB for background receiving */
- struct net_device_stats stats;
- void *dma_buffer;
- struct {
- unsigned int length[BACKLOG_SIZE];
- unsigned int in;
- unsigned int out;
- } rx_backlog;
- struct {
- unsigned int direction;
- unsigned int length;
- struct sk_buff *skb;
- void *target;
- long int start_time;
- } current_dma;
- /* flags */
- unsigned long send_pcb_semaphore;
- unsigned long dmaing;
- unsigned long busy;
- unsigned int rx_active; /* number of receive PCBs */
- volatile unsigned char hcr_val; /* what we think the HCR contains */
- spinlock_t lock; /* Interrupt v tx lock */
- } elp_device;