162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Linux ARCnet driver - COM20020 chipset support - function declarations 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Written 1997 by David Woodhouse. 562306a36Sopenharmony_ci * Written 1994-1999 by Avery Pennarun. 662306a36Sopenharmony_ci * Derived from skeleton.c by Donald Becker. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Special thanks to Contemporary Controls, Inc. (www.ccontrols.com) 962306a36Sopenharmony_ci * for sponsoring the further development of this driver. 1062306a36Sopenharmony_ci * 1162306a36Sopenharmony_ci * ********************** 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * The original copyright of skeleton.c was as follows: 1462306a36Sopenharmony_ci * 1562306a36Sopenharmony_ci * skeleton.c Written 1993 by Donald Becker. 1662306a36Sopenharmony_ci * Copyright 1993 United States Government as represented by the 1762306a36Sopenharmony_ci * Director, National Security Agency. This software may only be used 1862306a36Sopenharmony_ci * and distributed according to the terms of the GNU General Public License as 1962306a36Sopenharmony_ci * modified by SRC, incorporated herein by reference. 2062306a36Sopenharmony_ci * 2162306a36Sopenharmony_ci * ********************** 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * For more details, see drivers/net/arcnet.c 2462306a36Sopenharmony_ci * 2562306a36Sopenharmony_ci * ********************** 2662306a36Sopenharmony_ci */ 2762306a36Sopenharmony_ci#ifndef __COM20020_H 2862306a36Sopenharmony_ci#define __COM20020_H 2962306a36Sopenharmony_ci#include <linux/leds.h> 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciint com20020_check(struct net_device *dev); 3262306a36Sopenharmony_ciint com20020_found(struct net_device *dev, int shared); 3362306a36Sopenharmony_ciextern const struct net_device_ops com20020_netdev_ops; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* The number of low I/O ports used by the card. */ 3662306a36Sopenharmony_ci#define ARCNET_TOTAL_SIZE 8 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#define PLX_PCI_MAX_CARDS 2 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistruct ledoffsets { 4162306a36Sopenharmony_ci int green; 4262306a36Sopenharmony_ci int red; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct com20020_pci_channel_map { 4662306a36Sopenharmony_ci u32 bar; 4762306a36Sopenharmony_ci u32 offset; 4862306a36Sopenharmony_ci u32 size; /* 0x00 - auto, e.g. length of entire bar */ 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistruct com20020_pci_card_info { 5262306a36Sopenharmony_ci const char *name; 5362306a36Sopenharmony_ci int devcount; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci struct com20020_pci_channel_map chan_map_tbl[PLX_PCI_MAX_CARDS]; 5662306a36Sopenharmony_ci struct com20020_pci_channel_map misc_map; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci struct ledoffsets leds[PLX_PCI_MAX_CARDS]; 5962306a36Sopenharmony_ci int rotary; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci unsigned int flags; 6262306a36Sopenharmony_ci}; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_cistruct com20020_priv { 6562306a36Sopenharmony_ci struct com20020_pci_card_info *ci; 6662306a36Sopenharmony_ci struct list_head list_dev; 6762306a36Sopenharmony_ci resource_size_t misc; 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cistruct com20020_dev { 7162306a36Sopenharmony_ci struct list_head list; 7262306a36Sopenharmony_ci struct net_device *dev; 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci struct led_classdev tx_led; 7562306a36Sopenharmony_ci struct led_classdev recon_led; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci struct com20020_priv *pci_priv; 7862306a36Sopenharmony_ci int index; 7962306a36Sopenharmony_ci}; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci#define COM20020_REG_W_INTMASK 0 /* writable */ 8262306a36Sopenharmony_ci#define COM20020_REG_R_STATUS 0 /* readable */ 8362306a36Sopenharmony_ci#define COM20020_REG_W_COMMAND 1 /* standard arcnet commands */ 8462306a36Sopenharmony_ci#define COM20020_REG_R_DIAGSTAT 1 /* diagnostic status */ 8562306a36Sopenharmony_ci#define COM20020_REG_W_ADDR_HI 2 /* control for IO-mapped memory */ 8662306a36Sopenharmony_ci#define COM20020_REG_W_ADDR_LO 3 8762306a36Sopenharmony_ci#define COM20020_REG_RW_MEMDATA 4 /* data port for IO-mapped memory */ 8862306a36Sopenharmony_ci#define COM20020_REG_W_SUBADR 5 /* the extended port _XREG refers to */ 8962306a36Sopenharmony_ci#define COM20020_REG_W_CONFIG 6 /* configuration */ 9062306a36Sopenharmony_ci#define COM20020_REG_W_XREG 7 /* extra 9162306a36Sopenharmony_ci * (indexed by _CONFIG or _SUBADDR) 9262306a36Sopenharmony_ci */ 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* in the ADDR_HI register */ 9562306a36Sopenharmony_ci#define RDDATAflag 0x80 /* next access is a read (not a write) */ 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* in the DIAGSTAT register */ 9862306a36Sopenharmony_ci#define NEWNXTIDflag 0x02 /* ID to which token is passed has changed */ 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci/* in the CONFIG register */ 10162306a36Sopenharmony_ci#define RESETcfg 0x80 /* put card in reset state */ 10262306a36Sopenharmony_ci#define TXENcfg 0x20 /* enable TX */ 10362306a36Sopenharmony_ci#define XTOcfg(x) ((x) << 3) /* extended timeout */ 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/* in SETUP register */ 10662306a36Sopenharmony_ci#define PROMISCset 0x10 /* enable RCV_ALL */ 10762306a36Sopenharmony_ci#define P1MODE 0x80 /* enable P1-MODE for Backplane */ 10862306a36Sopenharmony_ci#define SLOWARB 0x01 /* enable Slow Arbitration for >=5Mbps */ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* COM2002x */ 11162306a36Sopenharmony_ci#define SUB_TENTATIVE 0 /* tentative node ID */ 11262306a36Sopenharmony_ci#define SUB_NODE 1 /* node ID */ 11362306a36Sopenharmony_ci#define SUB_SETUP1 2 /* various options */ 11462306a36Sopenharmony_ci#define SUB_TEST 3 /* test/diag register */ 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci/* COM20022 only */ 11762306a36Sopenharmony_ci#define SUB_SETUP2 4 /* sundry options */ 11862306a36Sopenharmony_ci#define SUB_BUSCTL 5 /* bus control options */ 11962306a36Sopenharmony_ci#define SUB_DMACOUNT 6 /* DMA count options */ 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_cistatic inline void com20020_set_subaddress(struct arcnet_local *lp, 12262306a36Sopenharmony_ci int ioaddr, int val) 12362306a36Sopenharmony_ci{ 12462306a36Sopenharmony_ci if (val < 4) { 12562306a36Sopenharmony_ci lp->config = (lp->config & ~0x03) | val; 12662306a36Sopenharmony_ci arcnet_outb(lp->config, ioaddr, COM20020_REG_W_CONFIG); 12762306a36Sopenharmony_ci } else { 12862306a36Sopenharmony_ci arcnet_outb(val, ioaddr, COM20020_REG_W_SUBADR); 12962306a36Sopenharmony_ci } 13062306a36Sopenharmony_ci} 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci#endif /* __COM20020_H */ 133