1 /*        $NetBSD: elink3var.h,v 1.39 2015/04/13 16:33:24 riastradh Exp $       */
2 
3 /*
4  * Copyright (c) 1994 Herb Peyerl <hpeyerl@beer.org>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *      This product includes software developed by Herb Peyerl.
18  * 4. The name of Herb Peyerl may not be used to endorse or promote products
19  *    derived from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #include <sys/rndsource.h>
34 
35 /*
36  * Ethernet software status per interface.
37  */
38 struct ep_softc {
39           device_t sc_dev;
40           void *sc_ih;
41 
42           struct ethercom sc_ethercom;  /* Ethernet common part                 */
43           struct mii_data sc_mii;                 /* MII/media control                    */
44           struct callout sc_mii_callout;          /* MII callout handle                   */
45           struct callout sc_mbuf_callout;         /* mbuf fill callout                    */
46           bus_space_tag_t sc_iot;                 /* bus cookie                           */
47           bus_space_handle_t sc_ioh;    /* bus i/o handle             */
48           bus_space_tag_t sc_memt;      /* RoadRunner only            */
49           bus_space_handle_t sc_memh;   /* RoadRunner only            */
50           u_int32_t sc_flags;           /* misc. flags                          */
51 #define MAX_MBS     8                             /* # of mbufs we keep around  */
52           struct mbuf *mb[MAX_MBS];     /* spare mbuf storage.                  */
53           int       next_mb;            /* Which mbuf to use next.    */
54           int       last_mb;            /* Last mbuf.                           */
55           int       tx_start_thresh;    /* Current TX_start_thresh.   */
56           int       tx_succ_ok;                   /* # packets sent in sequence   */
57                                                   /* w/o underrun                         */
58 
59           u_int     ep_flags;           /* capabilities flag (from EELINKROM) */
60 #define   ELINK_FLAGS_PNP                         0x00001
61 #define   ELINK_FLAGS_FULLDUPLEX                  0x00002
62 #define   ELINK_FLAGS_LARGELINKKT                 0x00004   /* 4k packet support */
63 #define   ELINK_FLAGS_SLAVEDMA                    0x00008
64 #define   ELINK_FLAGS_SECONDDMA                   0x00010
65 #define   ELINK_FLAGS_FULLDMA           0x00020
66 #define   ELINK_FLAGS_FRAGMENTDMA                 0x00040
67 #define   ELINK_FLAGS_CRC_PASSTHRU      0x00080
68 #define   ELINK_FLAGS_TXDONE            0x00100
69 #define   ELINK_FLAGS_NO_TXLENGTH                 0x00200
70 #define   ELINK_FLAGS_RXRELINKEAT                 0x00400
71 #define   ELINK_FLAGS_SNOOPING                    0x00800
72 #define   ELINK_FLAGS_100MBIT           0x01000
73 #define   ELINK_FLAGS_POWERMGMT                   0x02000
74 #define   ELINK_FLAGS_MII                         0x04000
75 #define   ELINK_FLAGS_USEFIFOBUFFER     0x08000   /* RoadRunner only */
76 #define   ELINK_FLAGS_USESHAREDMEM      0x10000   /* RoadRunner only */
77 #define   ELINK_FLAGS_FORCENOWAIT                 0x20000   /* RoadRunner only */
78 #define   ELINK_FLAGS_ATTACHED                    0x40000   /* attach has succeeded */
79 
80           u_short ep_chipset;           /* Chipset family on this board */
81 #define   ELINK_CHIPSET_3C509           0x00      /* PIO: 3c509, 3c589 */
82 #define   ELINK_CHIPSET_VORTEX                    0x01      /* 100mbit, single-pkt DMA */
83 #define   ELINK_CHIPSET_BOOMERANG                 0x02      /* Saner DMA plus PIO */
84 #define   ELINK_CHIPSET_ROADRUNNER      0x03      /* like Boomerang, but for
85                                                                PCMCIA; has shared memory
86                                                                plus FIFO buffer */
87 #define   ELINK_CHIPSET_CORKSCREW                 0x04      /* like Boomerang, but DMA
88                                                                hacked to work w/ ISA */
89 
90           u_char    bustype;            /* parent bus type */
91 #define   ELINK_BUS_ISA                 0x0
92 #define   ELINK_BUS_PCMCIA    0x1
93 #define   ELINK_BUS_EISA                0x2
94 #define   ELINK_BUS_PCI                 0x3
95 #define   ELINK_BUS_MCA                 0x6
96 
97 #define   ELINK_IS_BUS_32(a)  ((a) & 0x2)
98           int ep_pktlenshift;           /* scale factor for pkt lengths */
99 
100           krndsource_t rnd_source;
101 
102           /* power management hooks */
103           int (*enable)(struct ep_softc *);
104           void (*disable)(struct ep_softc *);
105           int enabled;
106 };
107 
108 
109 u_int16_t epreadeeprom(bus_space_tag_t, bus_space_handle_t, int);
110 int       epconfig(struct ep_softc *, u_short, u_int8_t *);
111 
112 int       epintr(void *);
113 
114 int       epenable(struct ep_softc *);
115 void      epdisable(struct ep_softc *);
116 
117 int       ep_activate(device_t, enum devact);
118 int       ep_detach(device_t, int);
119 
120 void      ep_power(int, void *);
121