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