xref: /minix3/minix/drivers/net/vt6105/vt6105.h (revision f7df02e7476731c31f12548e38bcadbaf0233f6a)
1*c28d8fefSJia-Ju Bai #ifndef _NDR_H
2*c28d8fefSJia-Ju Bai #define _NDR_H
3022136b3SJia-Ju Bai 
48dc24c06SJia-Ju Bai /* ======= General Parameter ======= */
58dc24c06SJia-Ju Bai /* Global configure */
6022136b3SJia-Ju Bai 
7*c28d8fefSJia-Ju Bai #include <minix/drivers.h>
8022136b3SJia-Ju Bai 
9*c28d8fefSJia-Ju Bai #define DRIVER_NAME		"VT6105"
10022136b3SJia-Ju Bai 
11*c28d8fefSJia-Ju Bai /* Rx/Tx buffer parameter */
12*c28d8fefSJia-Ju Bai #define RX_BUF_SIZE		1536
13*c28d8fefSJia-Ju Bai #define TX_BUF_SIZE		1536
14*c28d8fefSJia-Ju Bai #define RX_BUFFER_NUM	64
15*c28d8fefSJia-Ju Bai #define TX_BUFFER_NUM	64
16022136b3SJia-Ju Bai 
17*c28d8fefSJia-Ju Bai /* Interrupt status */
18*c28d8fefSJia-Ju Bai #define INTR_STS_LINK	0x4000
19*c28d8fefSJia-Ju Bai #define INTR_STS_RX		0x0001
20*c28d8fefSJia-Ju Bai #define INTR_STS_TX		0x0002
21022136b3SJia-Ju Bai 
22022136b3SJia-Ju Bai /* Link status */
238dc24c06SJia-Ju Bai #define LINK_UP			1
248dc24c06SJia-Ju Bai #define LINK_DOWN		0
258dc24c06SJia-Ju Bai #define LINK_UNKNOWN	-1
26022136b3SJia-Ju Bai 
27*c28d8fefSJia-Ju Bai /* Interrupt control */
28*c28d8fefSJia-Ju Bai #define INTR_ENABLE		1
29*c28d8fefSJia-Ju Bai #define INTR_DISABLE	0
30*c28d8fefSJia-Ju Bai 
31*c28d8fefSJia-Ju Bai /* Rx status */
32*c28d8fefSJia-Ju Bai #define RX_ERROR		1
33*c28d8fefSJia-Ju Bai #define RX_OK			0
34*c28d8fefSJia-Ju Bai #define RX_SUSPEND		-1
35*c28d8fefSJia-Ju Bai 
36*c28d8fefSJia-Ju Bai /* Tx status */
37*c28d8fefSJia-Ju Bai #define TX_ERROR		1
38*c28d8fefSJia-Ju Bai #define TX_OK			0
39*c28d8fefSJia-Ju Bai #define TX_SUSPEND		-1
40*c28d8fefSJia-Ju Bai 
41*c28d8fefSJia-Ju Bai /* Rx/Tx control */
42*c28d8fefSJia-Ju Bai #define RX_TX_ENABLE	1
43*c28d8fefSJia-Ju Bai #define RX_TX_DISABLE	0
44022136b3SJia-Ju Bai 
458dc24c06SJia-Ju Bai /* ======= Self-defined Parameter ======= */
468dc24c06SJia-Ju Bai #define DESC_OWN			0x80000000
478dc24c06SJia-Ju Bai #define DESC_FIRST			0x00000200
488dc24c06SJia-Ju Bai #define DESC_LAST			0x00000100
498dc24c06SJia-Ju Bai #define DESC_RX_LENMASK		0x7fff0000
50*c28d8fefSJia-Ju Bai #define DESC_RX_ERROR		0x000000bf
518dc24c06SJia-Ju Bai #define DESC_RX_NORMAL		(DESC_FIRST | DESC_LAST)
52*c28d8fefSJia-Ju Bai #define DESC_TX_ERROR		0x00008f10
538dc24c06SJia-Ju Bai 
548dc24c06SJia-Ju Bai #define REG_ADDR			0x00
55*c28d8fefSJia-Ju Bai #define REG_RCR				0x06
568dc24c06SJia-Ju Bai #define REG_TCR				0x07
578dc24c06SJia-Ju Bai #define REG_CR				0x08
58*c28d8fefSJia-Ju Bai #define REG_IMR				0x0e
59*c28d8fefSJia-Ju Bai #define REG_ISR				0x0c
60*c28d8fefSJia-Ju Bai #define REG_RX_DESC_BASE	0x18
61*c28d8fefSJia-Ju Bai #define REG_TX_DESC_BASE	0x1c
62*c28d8fefSJia-Ju Bai #define REG_MII_PHY			0x6c
63*c28d8fefSJia-Ju Bai #define REG_BCR				0x6e
648dc24c06SJia-Ju Bai #define REG_MII_CR			0x70
65*c28d8fefSJia-Ju Bai #define REG_MII_REG			0x71
668dc24c06SJia-Ju Bai #define REG_MII_DATA		0x72
67*c28d8fefSJia-Ju Bai #define REG_MCR				0x81
68*c28d8fefSJia-Ju Bai #define REG_STICK			0x83
698dc24c06SJia-Ju Bai 
708dc24c06SJia-Ju Bai #define CMD_START			0x0002
718dc24c06SJia-Ju Bai #define CMD_STOP			0x0004
728dc24c06SJia-Ju Bai #define CMD_RX_ON			0x0008
738dc24c06SJia-Ju Bai #define CMD_TX_ON			0x0010
748dc24c06SJia-Ju Bai #define CMD_TX_DEMAND		0x0020
758dc24c06SJia-Ju Bai #define CMD_RX_DEMAND		0x0040
768dc24c06SJia-Ju Bai #define CMD_FDUPLEX			0x0400
778dc24c06SJia-Ju Bai #define CMD_NO_POLL			0x0800
788dc24c06SJia-Ju Bai #define CMD_RESET			0x8000
79*c28d8fefSJia-Ju Bai #define CMD_INTR_ENABLE		0xfeff
80*c28d8fefSJia-Ju Bai #define CMD_RCR_UNICAST		0x10
81*c28d8fefSJia-Ju Bai #define CMD_RCR_MULTICAST	0x04
82*c28d8fefSJia-Ju Bai #define CMD_RCR_BROADCAST	0x08
83*c28d8fefSJia-Ju Bai #define INTR_STS_CLEAR		0xbfbf
84*c28d8fefSJia-Ju Bai #define LINK_STATUS			0x0004
858dc24c06SJia-Ju Bai 
868dc24c06SJia-Ju Bai /* ======= Data Descriptor ======= */
87*c28d8fefSJia-Ju Bai typedef struct NDR_desc {
888dc24c06SJia-Ju Bai 	u32_t status;
898dc24c06SJia-Ju Bai 	u32_t length;
908dc24c06SJia-Ju Bai 	u32_t addr;
918dc24c06SJia-Ju Bai 	u32_t next;
92*c28d8fefSJia-Ju Bai } NDR_desc;
93022136b3SJia-Ju Bai 
94022136b3SJia-Ju Bai /* Driver Data Structure */
95*c28d8fefSJia-Ju Bai typedef struct NDR_driver {
96*c28d8fefSJia-Ju Bai 	char *dev_name;			/* Device name */
97*c28d8fefSJia-Ju Bai 	u16_t vid, did;			/* Vendor and device ID */
98*c28d8fefSJia-Ju Bai 	u32_t devind;			/* Device index */
99*c28d8fefSJia-Ju Bai 	u32_t base[6];			/* Base address */
100*c28d8fefSJia-Ju Bai 	char irq;				/* IRQ number */
101*c28d8fefSJia-Ju Bai 	char revision;			/* Revision ID */
102*c28d8fefSJia-Ju Bai 
1038dc24c06SJia-Ju Bai 	int mode;
1048dc24c06SJia-Ju Bai 	int link;				/* Whether link-up */
1058dc24c06SJia-Ju Bai 	int recv_flag;			/* Receive flag */
1068dc24c06SJia-Ju Bai 	int send_flag;			/* Send flag */
107*c28d8fefSJia-Ju Bai 	int tx_busy;			/* Whether Tx is busy */
108022136b3SJia-Ju Bai 
109022136b3SJia-Ju Bai 	/* Buffer */
1108dc24c06SJia-Ju Bai 	size_t buf_size;
1118dc24c06SJia-Ju Bai 	char *buf;
112022136b3SJia-Ju Bai 
113022136b3SJia-Ju Bai 	/* Rx data */
1148dc24c06SJia-Ju Bai 	int rx_head;
115022136b3SJia-Ju Bai 	struct {
116022136b3SJia-Ju Bai 		phys_bytes buf_dma;
117022136b3SJia-Ju Bai 		char *buf;
118*c28d8fefSJia-Ju Bai 	} rx[RX_BUFFER_NUM];
119022136b3SJia-Ju Bai 
120022136b3SJia-Ju Bai 	/* Tx data */
1218dc24c06SJia-Ju Bai 	int tx_head;
1228dc24c06SJia-Ju Bai 	int tx_tail;
123022136b3SJia-Ju Bai 	struct {
124022136b3SJia-Ju Bai 		int busy;
125022136b3SJia-Ju Bai 		phys_bytes buf_dma;
126022136b3SJia-Ju Bai 		char *buf;
127*c28d8fefSJia-Ju Bai 	} tx[TX_BUFFER_NUM];
128*c28d8fefSJia-Ju Bai 	int tx_busy_num;			/* Number of busy Tx buffer */
129*c28d8fefSJia-Ju Bai 
130*c28d8fefSJia-Ju Bai 	NDR_desc *rx_desc;			/* Rx descriptor buffer */
131*c28d8fefSJia-Ju Bai 	phys_bytes rx_desc_dma;		/* Rx descriptor DMA buffer */
132*c28d8fefSJia-Ju Bai 	NDR_desc *tx_desc;			/* Tx descriptor buffer */
1338dc24c06SJia-Ju Bai 	phys_bytes tx_desc_dma;		/* Tx descriptor DMA buffer */
134022136b3SJia-Ju Bai 
1358dc24c06SJia-Ju Bai 	int hook;			/* IRQ hook id at kernel */
136*c28d8fefSJia-Ju Bai } NDR_driver;
1378dc24c06SJia-Ju Bai 
1388dc24c06SJia-Ju Bai #endif
139