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

📄 3c505.h

📁 linux设备驱动开发详解(书代码)
💻 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 + -