1/* 2 * Common [OS-independent] header file for 3 * Broadcom BCM47XX 10/100Mbps Ethernet Device Driver 4 * 5 * Copyright 2007, Broadcom Corporation 6 * All Rights Reserved. 7 * 8 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation; 9 * the contents of this file may not be disclosed to third parties, copied 10 * or duplicated in any form, in whole or in part, without the prior 11 * written permission of Broadcom Corporation. 12 * 13 * $Id: etc.h,v 1.1.1.1 2008/10/15 03:25:54 james26_jang Exp $ 14 */ 15 16#ifndef _etc_h_ 17#define _etc_h_ 18 19#include <etioctl.h> 20 21#define MAXMULTILIST 32 22 23#ifndef ch_t 24#define ch_t void 25#endif 26 27struct etc_info; /* forward declaration */ 28struct bcmstrbuf; /* forward declaration */ 29 30/* each chip type supports a set of chip-type-specific ops */ 31struct chops { 32 bool (*id)(uint vendor, uint device); /* return true if match */ 33 void *(*attach)(struct etc_info *etc, void *dev, void *regs); 34 void (*detach)(ch_t *ch); /* free chip private state */ 35 void (*reset)(ch_t *ch); /* chip reset */ 36 void (*init)(ch_t *ch, bool full); /* chip init */ 37 bool (*tx)(ch_t *ch, void *p); /* transmit frame */ 38 void *(*rx)(ch_t *ch); /* receive frame */ 39 void (*rxfill)(ch_t *ch); /* post dma rx buffers */ 40 int (*getintrevents)(ch_t *ch, bool in_isr); /* return intr events */ 41 bool (*errors)(ch_t *ch); /* handle chip errors */ 42 void (*intrson)(ch_t *ch); /* enable chip interrupts */ 43 void (*intrsoff)(ch_t *ch); /* disable chip interrupts */ 44 void (*txreclaim)(ch_t *ch, bool all); /* reclaim transmit resources */ 45 void (*rxreclaim)(ch_t *ch); /* reclaim receive resources */ 46 void (*statsupd)(ch_t *ch); /* update sw stat counters */ 47 void (*enablepme)(ch_t *ch); /* enable PME */ 48 void (*disablepme)(ch_t *ch); /* disable PME */ 49 void (*phyreset)(ch_t *ch, uint phyaddr); /* reset phy */ 50 uint16 (*phyrd)(ch_t *ch, uint phyaddr, uint reg); /* read phy register */ 51 void (*phywr)(ch_t *ch, uint phyaddr, uint reg, uint16 val); /* write phy register */ 52 void (*dump)(ch_t *ch, struct bcmstrbuf *b); /* debugging output */ 53 void (*longname)(ch_t *ch, char *buf, uint bufsize); /* return descriptive name */ 54 void (*duplexupd)(ch_t *ch); /* keep mac duplex consistent */ 55}; 56 57/* 58 * "Common" os-independent software state structure. 59 */ 60typedef struct etc_info { 61 void *et; /* pointer to os-specific private state */ 62 uint unit; /* device instance number */ 63 void *osh; /* pointer to os handler */ 64 bool up; /* interface up and running */ 65 bool promisc; /* promiscuous destination address */ 66 bool qos; /* QoS priority determination on rx */ 67 bool loopbk; /* loopback override mode */ 68 69 int forcespeed; /* disable autonegotiation and force speed/duplex */ 70 uint advertise; /* control speed/duplex advertised capability bits */ 71 bool needautoneg; /* request restart autonegotiation */ 72 int speed; /* current speed: 10, 100 */ 73 int duplex; /* current duplex: 0=half, 1=full */ 74 75 bool piomode; /* enable programmed io (!dma) */ 76 void *pioactive; /* points to pio packet being transmitted */ 77 volatile uint *txavail; /* dma: # tx descriptors available */ 78 79 uint16 vendorid; /* pci function vendor id */ 80 uint16 deviceid; /* pci function device id */ 81 uint chip; /* chip number */ 82 uint chiprev; /* chip revision */ 83 84 bool nicmode; /* is this core using its own pci i/f */ 85 86 struct chops *chops; /* pointer to chip-specific opsvec */ 87 void *ch; /* pointer to chip-specific state */ 88 void *robo; /* optional robo private data */ 89 90 uint coreunit; /* sb chips: chip enet instance # */ 91 uint phyaddr; /* sb chips: mdio 5-bit phy address */ 92 uint mdcport; /* sb chips: which mii to use (enet core #) to access phy */ 93 94 struct ether_addr cur_etheraddr; /* our local ethernet address */ 95 struct ether_addr perm_etheraddr; /* original sprom local ethernet address */ 96 97 struct ether_addr multicast[MAXMULTILIST]; 98 uint nmulticast; 99 bool allmulti; /* enable all multicasts */ 100 101 bool linkstate; /* link integrity state */ 102 bool pm_modechange; /* true if mode change is to due pm */ 103 104 uint32 now; /* elapsed seconds */ 105 106 uint32 boardflags; /* board flags */ 107 108 /* chip-maintained plus a few sw-maintained stat counters */ 109 bcmenetmib_t mib; /* mib statistic counters */ 110 uint32 txframe; /* transmitted frames */ 111 uint32 txbyte; /* transmitted bytes */ 112 uint32 rxframe; /* received frames */ 113 uint32 rxbyte; /* received bytes */ 114 uint32 txerror; /* total tx errors */ 115 uint32 txnobuf; /* tx out-of-buffer errors */ 116 uint32 rxerror; /* total rx errors */ 117 uint32 rxnobuf; /* rx out-of-buffer errors */ 118 uint32 reset; /* reset count */ 119 uint32 dmade; /* pci descriptor errors */ 120 uint32 dmada; /* pci data errors */ 121 uint32 dmape; /* descriptor protocol error */ 122 uint32 rxdmauflo; /* receive descriptor underflow */ 123 uint32 rxoflo; /* receive fifo overflow */ 124 uint32 txuflo; /* transmit fifo underflow */ 125 uint32 rxbadlen; /* 802.3 len field != read length */ 126} etc_info_t; 127 128/* interrupt event bitvec */ 129#define INTR_TX 0x1 130#define INTR_RX 0x2 131#define INTR_ERROR 0x4 132#define INTR_TO 0x8 133#define INTR_NEW 0x10 134 135/* forcespeed values */ 136#define ET_AUTO -1 137#define ET_10HALF 0 138#define ET_10FULL 1 139#define ET_100HALF 2 140#define ET_100FULL 3 141 142/* 143 * Least-common denominator rxbuf start-of-data offset: 144 * Must be >= size of largest rxhdr 145 * Must be 2-mod-4 aligned so IP is 0-mod-4 146 */ 147#define HWRXOFF 30 148 149/* exported prototypes */ 150extern struct chops *etc_chipmatch(uint vendor, uint device); 151extern void *etc_attach(void *et, uint vendor, uint device, uint unit, void *dev, void *regsva); 152extern void etc_detach(etc_info_t *etc); 153extern void etc_reset(etc_info_t *etc); 154extern void etc_init(etc_info_t *etc); 155extern void etc_up(etc_info_t *etc); 156extern uint etc_down(etc_info_t *etc, int reset); 157extern int etc_ioctl(etc_info_t *etc, int cmd, void *arg); 158extern void etc_promisc(etc_info_t *etc, uint on); 159extern void etc_qos(etc_info_t *etc, uint on); 160extern void etc_dump(etc_info_t *etc, struct bcmstrbuf *b); 161extern void etc_watchdog(etc_info_t *etc); 162extern uint etc_totlen(etc_info_t *etc, void *p); 163 164#endif /* _etc_h_ */ 165