1*d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 29e13fbf7SJeff Kirsher /* 39e13fbf7SJeff Kirsher * linux/drivers/acorn/net/ether3.h 49e13fbf7SJeff Kirsher * 59e13fbf7SJeff Kirsher * Copyright (C) 1995-2000 Russell King 69e13fbf7SJeff Kirsher * 79e13fbf7SJeff Kirsher * network driver for Acorn/ANT Ether3 cards 89e13fbf7SJeff Kirsher */ 99e13fbf7SJeff Kirsher 109e13fbf7SJeff Kirsher #ifndef _LINUX_ether3_H 119e13fbf7SJeff Kirsher #define _LINUX_ether3_H 129e13fbf7SJeff Kirsher 139e13fbf7SJeff Kirsher /* use 0 for production, 1 for verification, >2 for debug. debug flags: */ 149e13fbf7SJeff Kirsher #define DEBUG_TX 2 159e13fbf7SJeff Kirsher #define DEBUG_RX 4 169e13fbf7SJeff Kirsher #define DEBUG_INT 8 179e13fbf7SJeff Kirsher #define DEBUG_IC 16 189e13fbf7SJeff Kirsher #ifndef NET_DEBUG 199e13fbf7SJeff Kirsher #define NET_DEBUG 0 209e13fbf7SJeff Kirsher #endif 219e13fbf7SJeff Kirsher 229e13fbf7SJeff Kirsher #define priv(dev) ((struct dev_priv *)netdev_priv(dev)) 239e13fbf7SJeff Kirsher 249e13fbf7SJeff Kirsher /* Command register definitions & bits */ 259e13fbf7SJeff Kirsher #define REG_COMMAND (priv(dev)->seeq + 0x0000) 269e13fbf7SJeff Kirsher #define CMD_ENINTDMA 0x0001 279e13fbf7SJeff Kirsher #define CMD_ENINTRX 0x0002 289e13fbf7SJeff Kirsher #define CMD_ENINTTX 0x0004 299e13fbf7SJeff Kirsher #define CMD_ENINTBUFWIN 0x0008 309e13fbf7SJeff Kirsher #define CMD_ACKINTDMA 0x0010 319e13fbf7SJeff Kirsher #define CMD_ACKINTRX 0x0020 329e13fbf7SJeff Kirsher #define CMD_ACKINTTX 0x0040 339e13fbf7SJeff Kirsher #define CMD_ACKINTBUFWIN 0x0080 349e13fbf7SJeff Kirsher #define CMD_DMAON 0x0100 359e13fbf7SJeff Kirsher #define CMD_RXON 0x0200 369e13fbf7SJeff Kirsher #define CMD_TXON 0x0400 379e13fbf7SJeff Kirsher #define CMD_DMAOFF 0x0800 389e13fbf7SJeff Kirsher #define CMD_RXOFF 0x1000 399e13fbf7SJeff Kirsher #define CMD_TXOFF 0x2000 409e13fbf7SJeff Kirsher #define CMD_FIFOREAD 0x4000 419e13fbf7SJeff Kirsher #define CMD_FIFOWRITE 0x8000 429e13fbf7SJeff Kirsher 439e13fbf7SJeff Kirsher /* status register */ 449e13fbf7SJeff Kirsher #define REG_STATUS (priv(dev)->seeq + 0x0000) 459e13fbf7SJeff Kirsher #define STAT_ENINTSTAT 0x0001 469e13fbf7SJeff Kirsher #define STAT_ENINTRX 0x0002 479e13fbf7SJeff Kirsher #define STAT_ENINTTX 0x0004 489e13fbf7SJeff Kirsher #define STAT_ENINTBUFWIN 0x0008 499e13fbf7SJeff Kirsher #define STAT_INTDMA 0x0010 509e13fbf7SJeff Kirsher #define STAT_INTRX 0x0020 519e13fbf7SJeff Kirsher #define STAT_INTTX 0x0040 529e13fbf7SJeff Kirsher #define STAT_INTBUFWIN 0x0080 539e13fbf7SJeff Kirsher #define STAT_DMAON 0x0100 549e13fbf7SJeff Kirsher #define STAT_RXON 0x0200 559e13fbf7SJeff Kirsher #define STAT_TXON 0x0400 569e13fbf7SJeff Kirsher #define STAT_FIFOFULL 0x2000 579e13fbf7SJeff Kirsher #define STAT_FIFOEMPTY 0x4000 589e13fbf7SJeff Kirsher #define STAT_FIFODIR 0x8000 599e13fbf7SJeff Kirsher 609e13fbf7SJeff Kirsher /* configuration register 1 */ 619e13fbf7SJeff Kirsher #define REG_CONFIG1 (priv(dev)->seeq + 0x0040) 629e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT0 0x0000 639e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT1 0x0001 649e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT2 0x0002 659e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT3 0x0003 669e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT4 0x0004 679e13fbf7SJeff Kirsher #define CFG1_BUFSELSTAT5 0x0005 689e13fbf7SJeff Kirsher #define CFG1_ADDRPROM 0x0006 699e13fbf7SJeff Kirsher #define CFG1_TRANSEND 0x0007 709e13fbf7SJeff Kirsher #define CFG1_LOCBUFMEM 0x0008 719e13fbf7SJeff Kirsher #define CFG1_INTVECTOR 0x0009 729e13fbf7SJeff Kirsher #define CFG1_RECVSPECONLY 0x0000 739e13fbf7SJeff Kirsher #define CFG1_RECVSPECBROAD 0x4000 749e13fbf7SJeff Kirsher #define CFG1_RECVSPECBRMULTI 0x8000 759e13fbf7SJeff Kirsher #define CFG1_RECVPROMISC 0xC000 769e13fbf7SJeff Kirsher 779e13fbf7SJeff Kirsher /* The following aren't in 8004 */ 789e13fbf7SJeff Kirsher #define CFG1_DMABURSTCONT 0x0000 799e13fbf7SJeff Kirsher #define CFG1_DMABURST800NS 0x0010 809e13fbf7SJeff Kirsher #define CFG1_DMABURST1600NS 0x0020 819e13fbf7SJeff Kirsher #define CFG1_DMABURST3200NS 0x0030 829e13fbf7SJeff Kirsher #define CFG1_DMABURST1 0x0000 839e13fbf7SJeff Kirsher #define CFG1_DMABURST4 0x0040 849e13fbf7SJeff Kirsher #define CFG1_DMABURST8 0x0080 859e13fbf7SJeff Kirsher #define CFG1_DMABURST16 0x00C0 869e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT0 0x0100 879e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT1 0x0200 889e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT2 0x0400 899e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT3 0x0800 909e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT4 0x1000 919e13fbf7SJeff Kirsher #define CFG1_RECVCOMPSTAT5 0x2000 929e13fbf7SJeff Kirsher 939e13fbf7SJeff Kirsher /* configuration register 2 */ 949e13fbf7SJeff Kirsher #define REG_CONFIG2 (priv(dev)->seeq + 0x0080) 959e13fbf7SJeff Kirsher #define CFG2_BYTESWAP 0x0001 969e13fbf7SJeff Kirsher #define CFG2_ERRENCRC 0x0008 979e13fbf7SJeff Kirsher #define CFG2_ERRENDRIBBLE 0x0010 989e13fbf7SJeff Kirsher #define CFG2_ERRSHORTFRAME 0x0020 999e13fbf7SJeff Kirsher #define CFG2_SLOTSELECT 0x0040 1009e13fbf7SJeff Kirsher #define CFG2_PREAMSELECT 0x0080 1019e13fbf7SJeff Kirsher #define CFG2_ADDRLENGTH 0x0100 1029e13fbf7SJeff Kirsher #define CFG2_RECVCRC 0x0200 1039e13fbf7SJeff Kirsher #define CFG2_XMITNOCRC 0x0400 1049e13fbf7SJeff Kirsher #define CFG2_LOOPBACK 0x0800 1059e13fbf7SJeff Kirsher #define CFG2_CTRLO 0x1000 1069e13fbf7SJeff Kirsher #define CFG2_RESET 0x8000 1079e13fbf7SJeff Kirsher 1089e13fbf7SJeff Kirsher #define REG_RECVEND (priv(dev)->seeq + 0x00c0) 1099e13fbf7SJeff Kirsher 1109e13fbf7SJeff Kirsher #define REG_BUFWIN (priv(dev)->seeq + 0x0100) 1119e13fbf7SJeff Kirsher 1129e13fbf7SJeff Kirsher #define REG_RECVPTR (priv(dev)->seeq + 0x0140) 1139e13fbf7SJeff Kirsher 1149e13fbf7SJeff Kirsher #define REG_TRANSMITPTR (priv(dev)->seeq + 0x0180) 1159e13fbf7SJeff Kirsher 1169e13fbf7SJeff Kirsher #define REG_DMAADDR (priv(dev)->seeq + 0x01c0) 1179e13fbf7SJeff Kirsher 1189e13fbf7SJeff Kirsher /* 1199e13fbf7SJeff Kirsher * Cards transmit/receive headers 1209e13fbf7SJeff Kirsher */ 1219e13fbf7SJeff Kirsher #define TX_NEXT (0xffff) 1229e13fbf7SJeff Kirsher #define TXHDR_ENBABBLEINT (1 << 16) 1239e13fbf7SJeff Kirsher #define TXHDR_ENCOLLISIONINT (1 << 17) 1249e13fbf7SJeff Kirsher #define TXHDR_EN16COLLISION (1 << 18) 1259e13fbf7SJeff Kirsher #define TXHDR_ENSUCCESS (1 << 19) 1269e13fbf7SJeff Kirsher #define TXHDR_DATAFOLLOWS (1 << 21) 1279e13fbf7SJeff Kirsher #define TXHDR_CHAINCONTINUE (1 << 22) 1289e13fbf7SJeff Kirsher #define TXHDR_TRANSMIT (1 << 23) 1299e13fbf7SJeff Kirsher #define TXSTAT_BABBLED (1 << 24) 1309e13fbf7SJeff Kirsher #define TXSTAT_COLLISION (1 << 25) 1319e13fbf7SJeff Kirsher #define TXSTAT_16COLLISIONS (1 << 26) 1329e13fbf7SJeff Kirsher #define TXSTAT_DONE (1 << 31) 1339e13fbf7SJeff Kirsher 1349e13fbf7SJeff Kirsher #define RX_NEXT (0xffff) 1359e13fbf7SJeff Kirsher #define RXHDR_CHAINCONTINUE (1 << 6) 1369e13fbf7SJeff Kirsher #define RXHDR_RECEIVE (1 << 7) 1379e13fbf7SJeff Kirsher #define RXSTAT_OVERSIZE (1 << 8) 1389e13fbf7SJeff Kirsher #define RXSTAT_CRCERROR (1 << 9) 1399e13fbf7SJeff Kirsher #define RXSTAT_DRIBBLEERROR (1 << 10) 1409e13fbf7SJeff Kirsher #define RXSTAT_SHORTPACKET (1 << 11) 1419e13fbf7SJeff Kirsher #define RXSTAT_DONE (1 << 15) 1429e13fbf7SJeff Kirsher 1439e13fbf7SJeff Kirsher 1449e13fbf7SJeff Kirsher #define TX_START 0x0000 1459e13fbf7SJeff Kirsher #define TX_END 0x6000 1469e13fbf7SJeff Kirsher #define RX_START 0x6000 1479e13fbf7SJeff Kirsher #define RX_LEN 0xA000 1489e13fbf7SJeff Kirsher #define RX_END 0x10000 1499e13fbf7SJeff Kirsher /* must be a power of 2 and greater than MAX_TX_BUFFERED */ 1509e13fbf7SJeff Kirsher #define MAX_TXED 16 1519e13fbf7SJeff Kirsher #define MAX_TX_BUFFERED 10 1529e13fbf7SJeff Kirsher 1539e13fbf7SJeff Kirsher struct dev_priv { 1549e13fbf7SJeff Kirsher void __iomem *base; 1559e13fbf7SJeff Kirsher void __iomem *seeq; 1569e13fbf7SJeff Kirsher struct { 1579e13fbf7SJeff Kirsher unsigned int command; 1589e13fbf7SJeff Kirsher unsigned int config1; 1599e13fbf7SJeff Kirsher unsigned int config2; 1609e13fbf7SJeff Kirsher } regs; 1619e13fbf7SJeff Kirsher unsigned char tx_head; /* buffer nr to insert next packet */ 1629e13fbf7SJeff Kirsher unsigned char tx_tail; /* buffer nr of transmitting packet */ 1639e13fbf7SJeff Kirsher unsigned int rx_head; /* address to fetch next packet from */ 1649e13fbf7SJeff Kirsher struct timer_list timer; 1659691cea9SArnd Bergmann struct net_device *dev; 1669e13fbf7SJeff Kirsher int broken; /* 0 = ok, 1 = something went wrong */ 1679e13fbf7SJeff Kirsher }; 1689e13fbf7SJeff Kirsher 1699e13fbf7SJeff Kirsher struct ether3_data { 1709e13fbf7SJeff Kirsher const char name[8]; 1719e13fbf7SJeff Kirsher unsigned long base_offset; 1729e13fbf7SJeff Kirsher }; 1739e13fbf7SJeff Kirsher 1749e13fbf7SJeff Kirsher #endif 175