]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/dev/nfe/if_nfevar.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / dev / nfe / if_nfevar.h
1 /*      $OpenBSD: if_nfevar.h,v 1.11 2006/02/19 13:57:02 damien Exp $   */
2
3 /*-
4  * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  *
18  * $FreeBSD$
19  */
20
21 struct nfe_tx_data {
22         bus_dmamap_t    tx_data_map;
23         struct mbuf     *m;
24 };
25
26 struct nfe_tx_ring {
27         bus_dma_tag_t           tx_desc_tag;
28         bus_dmamap_t            tx_desc_map;
29         bus_addr_t              physaddr;
30         struct nfe_desc32       *desc32;
31         struct nfe_desc64       *desc64;
32         bus_dma_tag_t           tx_data_tag;
33         struct nfe_tx_data      data[NFE_TX_RING_COUNT];
34         int                     queued;
35         int                     cur;
36         int                     next;
37 };
38
39 struct nfe_rx_data {
40         bus_dmamap_t    rx_data_map;
41         bus_addr_t      paddr;
42         struct mbuf     *m;
43 };
44
45 struct nfe_rx_ring {
46         bus_dma_tag_t           rx_desc_tag;
47         bus_dmamap_t            rx_desc_map;
48         bus_addr_t              physaddr;
49         struct nfe_desc32       *desc32;
50         struct nfe_desc64       *desc64;
51         bus_dma_tag_t           rx_data_tag;
52         bus_dmamap_t            rx_spare_map;
53         struct nfe_rx_data      data[NFE_RX_RING_COUNT];
54         int                     cur;
55         int                     next;
56 };
57
58 struct nfe_jrx_ring {
59         bus_dma_tag_t           jrx_desc_tag;
60         bus_dmamap_t            jrx_desc_map;
61         bus_dma_tag_t           jrx_jumbo_tag;
62         bus_dmamap_t            jrx_jumbo_map;
63         bus_addr_t              jphysaddr;
64         struct nfe_desc32       *jdesc32;
65         struct nfe_desc64       *jdesc64;
66         bus_dma_tag_t           jrx_data_tag;
67         bus_dmamap_t            jrx_spare_map;
68         struct nfe_rx_data      jdata[NFE_JUMBO_RX_RING_COUNT];
69         int                     jcur;
70         int                     jnext;
71 };
72
73 struct nfe_hw_stats {
74         uint64_t                rx_octets;
75         uint32_t                rx_frame_errors;
76         uint32_t                rx_extra_bytes;
77         uint32_t                rx_late_cols;
78         uint32_t                rx_runts;
79         uint32_t                rx_jumbos;
80         uint32_t                rx_fifo_overuns;
81         uint32_t                rx_crc_errors;
82         uint32_t                rx_fae;
83         uint32_t                rx_len_errors;
84         uint32_t                rx_unicast;
85         uint32_t                rx_multicast;
86         uint32_t                rx_broadcast;
87         uint32_t                rx_pause;
88         uint32_t                rx_drops;
89         uint64_t                tx_octets;
90         uint32_t                tx_zero_rexmits;
91         uint32_t                tx_one_rexmits;
92         uint32_t                tx_multi_rexmits;
93         uint32_t                tx_late_cols;
94         uint32_t                tx_fifo_underuns;
95         uint32_t                tx_carrier_losts;
96         uint32_t                tx_excess_deferals;
97         uint32_t                tx_retry_errors;
98         uint32_t                tx_deferals;
99         uint32_t                tx_frames;
100         uint32_t                tx_pause;
101         uint32_t                tx_unicast;
102         uint32_t                tx_multicast;
103         uint32_t                tx_broadcast;
104 };
105
106 struct nfe_softc {
107         struct ifnet            *nfe_ifp;
108         device_t                nfe_dev;
109         uint16_t                nfe_devid;
110         uint16_t                nfe_revid;
111         device_t                nfe_miibus;
112         struct mtx              nfe_mtx;
113         struct resource         *nfe_res[1];
114         struct resource         *nfe_msix_res;
115         struct resource         *nfe_msix_pba_res;
116         struct resource         *nfe_irq[NFE_MSI_MESSAGES];
117         void                    *nfe_intrhand[NFE_MSI_MESSAGES];
118         struct callout          nfe_stat_ch;
119         int                     nfe_watchdog_timer;
120
121         bus_dma_tag_t           nfe_parent_tag;
122
123         int                     nfe_if_flags;
124         uint32_t                nfe_flags;
125 #define NFE_JUMBO_SUP           0x0001
126 #define NFE_40BIT_ADDR          0x0002
127 #define NFE_HW_CSUM             0x0004
128 #define NFE_HW_VLAN             0x0008
129 #define NFE_PWR_MGMT            0x0010
130 #define NFE_CORRECT_MACADDR     0x0020
131 #define NFE_TX_FLOW_CTRL        0x0040
132 #define NFE_MIB_V1              0x0080
133 #define NFE_MIB_V2              0x0100
134 #define NFE_MIB_V3              0x0200
135         int                     nfe_jumbo_disable;
136         uint32_t                rxtxctl;
137         uint8_t                 mii_phyaddr;
138         uint8_t                 eaddr[ETHER_ADDR_LEN];
139         struct nfe_hw_stats     nfe_stats;
140         struct taskqueue        *nfe_tq;
141         struct task             nfe_int_task;
142         int                     nfe_link;
143         int                     nfe_suspended;
144         int                     nfe_framesize;
145         int                     nfe_process_limit;
146         int                     nfe_force_tx;
147         uint32_t                nfe_irq_status;
148         uint32_t                nfe_irq_mask;
149         uint32_t                nfe_intrs;
150         uint32_t                nfe_nointrs;
151         uint32_t                nfe_msi;
152         uint32_t                nfe_msix;
153
154         struct nfe_tx_ring      txq;
155         struct nfe_rx_ring      rxq;
156         struct nfe_jrx_ring     jrxq;
157 };
158
159 struct nfe_type {
160         uint16_t        vid_id;
161         uint16_t        dev_id;
162         char            *name;
163 };