11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux ARCnet driver - COM20020 chipset support - function declarations 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Written 1997 by David Woodhouse. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Written 1994-1999 by Avery Pennarun. 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Derived from skeleton.c by Donald Becker. 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for sponsoring the further development of this driver. 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ********************** 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The original copyright of skeleton.c was as follows: 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * skeleton.c Written 1993 by Donald Becker. 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright 1993 United States Government as represented by the 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Director, National Security Agency. This software may only be used 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * and distributed according to the terms of the GNU General Public License as 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modified by SRC, incorporated herein by reference. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ********************** 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * For more details, see drivers/net/arcnet.c 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ********************** 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __COM20020_H 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __COM20020_H 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint com20020_check(struct net_device *dev); 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint com20020_found(struct net_device *dev, int shared); 320db155de988031f925096a7df1bf9633790a2c18David S. Millerextern const struct net_device_ops com20020_netdev_ops; 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* The number of low I/O ports used by the card. */ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARCNET_TOTAL_SIZE 8 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* various register addresses */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_SA1100_CT6001 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUS_ALIGN 2 /* 8 bit device on a 16 bit bus - needs padding */ 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUS_ALIGN 1 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 44c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik#define PLX_PCI_MAX_CARDS 2 458c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik 468c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschikstruct com20020_pci_channel_map { 478c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik u32 bar; 488c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik u32 offset; 498c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik u32 size; /* 0x00 - auto, e.g. length of entire bar */ 508c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik}; 518c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik 528c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschikstruct com20020_pci_card_info { 538c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik const char *name; 548c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik int devcount; 558c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik 568c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik struct com20020_pci_channel_map chan_map_tbl[PLX_PCI_MAX_CARDS]; 578c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik 588c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik unsigned int flags; 598c14f9c70327a6fb75534c4c61d7ea9c82ccf78fMichael Grzeschik}; 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 61c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschikstruct com20020_priv { 62c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik struct com20020_pci_card_info *ci; 63c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik struct list_head list_dev; 64c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik}; 65c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik 66c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschikstruct com20020_dev { 67c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik struct list_head list; 68c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik struct net_device *dev; 69c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik 70c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik struct com20020_priv *pci_priv; 71c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik int index; 72c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik}; 73c51da42a6346c0c747e70a4f5ae873da1150a784Michael Grzeschik 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _INTMASK (ioaddr+BUS_ALIGN*0) /* writable */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _STATUS (ioaddr+BUS_ALIGN*0) /* readable */ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMMAND (ioaddr+BUS_ALIGN*1) /* standard arcnet commands */ 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _DIAGSTAT (ioaddr+BUS_ALIGN*1) /* diagnostic status register */ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ADDR_HI (ioaddr+BUS_ALIGN*2) /* control registers for IO-mapped memory */ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ADDR_LO (ioaddr+BUS_ALIGN*3) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _MEMDATA (ioaddr+BUS_ALIGN*4) /* data port for IO-mapped memory */ 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _SUBADR (ioaddr+BUS_ALIGN*5) /* the extended port _XREG refers to */ 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _CONFIG (ioaddr+BUS_ALIGN*6) /* configuration register */ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _XREG (ioaddr+BUS_ALIGN*7) /* extra registers (indexed by _CONFIG 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds or _SUBADR) */ 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* in the ADDR_HI register */ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RDDATAflag 0x80 /* next access is a read (not a write) */ 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* in the DIAGSTAT register */ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NEWNXTIDflag 0x02 /* ID to which token is passed has changed */ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* in the CONFIG register */ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESETcfg 0x80 /* put card in reset state */ 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TXENcfg 0x20 /* enable TX */ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* in SETUP register */ 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROMISCset 0x10 /* enable RCV_ALL */ 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define P1MODE 0x80 /* enable P1-MODE for Backplane */ 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SLOWARB 0x01 /* enable Slow Arbitration for >=5Mbps */ 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* COM2002x */ 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_TENTATIVE 0 /* tentative node ID */ 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_NODE 1 /* node ID */ 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_SETUP1 2 /* various options */ 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_TEST 3 /* test/diag register */ 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* COM20022 only */ 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_SETUP2 4 /* sundry options */ 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_BUSCTL 5 /* bus control options */ 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SUB_DMACOUNT 6 /* DMA count options */ 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SET_SUBADR(x) do { \ 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if ((x) < 4) \ 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { \ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds lp->config = (lp->config & ~0x03) | (x); \ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SETCONF; \ 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } \ 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else \ 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds { \ 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(x, _SUBADR); \ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } \ 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} while (0) 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ARCRESET 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ASTATUS 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef ACOMMAND 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#undef AINTMASK 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARCRESET { outb(lp->config | 0x80, _CONFIG); \ 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds udelay(5); \ 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(lp->config , _CONFIG); \ 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ARCRESET0 { outb(0x18 | 0x80, _CONFIG); \ 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds udelay(5); \ 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outb(0x18 , _CONFIG); \ 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASTATUS() inb(_STATUS) 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ADIAGSTATUS() inb(_DIAGSTAT) 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACOMMAND(cmd) outb((cmd),_COMMAND) 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AINTMASK(msk) outb((msk),_INTMASK) 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SETCONF outb(lp->config, _CONFIG) 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __COM20020_H */ 146