📄 3c505.h
字号:
/***************************************************************** * * 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 communicationbetween the host and the adapter is done with these. (Except for the actualEthernet 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 4typedef 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; unsigned long 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -