]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/nve/if_nvereg.h
Make nve(4) work for people with nf3/nf4 who never got it
[FreeBSD/FreeBSD.git] / sys / dev / nve / if_nvereg.h
1 /*
2  * Copyright (c) 2005 by David E. O'Brien <obrien@FreeBSD.org>.
3  * Copyright (c) 2003 by Quinton Dolan <q@onthenet.com.au>.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
25  * SUCH DAMAGE.
26  *
27  * $Id: if_nvreg.h,v 1.6 2004/08/12 14:00:05 q Exp $
28  * $FreeBSD$
29  */
30  
31 #ifndef _IF_NVEREG_H_
32 #define _IF_NVEREG_H_
33
34 #ifndef NVIDIA_VENDORID
35 #define NVIDIA_VENDORID 0x10DE
36 #endif
37
38 #define NFORCE_MCPNET1_DEVICEID 0x01C3
39 #define NFORCE_MCPNET2_DEVICEID 0x0066
40 #define NFORCE_MCPNET3_DEVICEID 0x00D6
41 #define NFORCE_MCPNET4_DEVICEID 0x0086
42 #define NFORCE_MCPNET5_DEVICEID 0x008C
43 #define NFORCE_MCPNET6_DEVICEID 0x00E6
44 #define NFORCE_MCPNET7_DEVICEID 0x00DF
45 #define NFORCE_MCPNET8_DEVICEID 0x0056
46 #define NFORCE_MCPNET9_DEVICEID 0x0057
47 #define NFORCE_MCPNET10_DEVICEID 0x0037
48 #define NFORCE_MCPNET11_DEVICEID 0x0038 
49 #define NFORCE_MCPNET12_DEVICEID 0x0268
50 #define NFORCE_MCPNET13_DEVICEID 0x0269
51
52 #define NV_RID          0x10
53
54 #define TX_RING_SIZE    64
55 #define RX_RING_SIZE    64
56 #define NV_MAX_FRAGS    32      // match adapter.h:ADAPTER_WRITE_DATA.sElement[]
57
58 #define FCS_LEN 4
59
60 #define NVE_DEBUG               0x0000
61 #define NVE_DEBUG_INIT          0x0001
62 #define NVE_DEBUG_RUNNING       0x0002
63 #define NVE_DEBUG_DEINIT        0x0004
64 #define NVE_DEBUG_IOCTL         0x0008
65 #define NVE_DEBUG_INTERRUPT     0x0010
66 #define NVE_DEBUG_API           0x0020
67 #define NVE_DEBUG_LOCK          0x0040
68 #define NVE_DEBUG_BROKEN        0x0080
69 #define NVE_DEBUG_MII           0x0100
70 #define NVE_DEBUG_ALL           0xFFFF
71
72 #if NVE_DEBUG
73 #define DEBUGOUT(level, fmt, args...) if (NVE_DEBUG & level) \
74     printf(fmt, ## args)
75 #else
76 #define DEBUGOUT(level, fmt, args...)
77 #endif
78
79 typedef unsigned long   ulong;
80
81 struct nve_map_buffer {
82         struct mbuf *mbuf;      /* mbuf receiving packet */
83         bus_dmamap_t map;       /* DMA map */   
84 };
85
86 struct nve_dma_info {
87         bus_dma_tag_t tag;
88         struct nve_map_buffer buf;
89         u_int16_t buflength;
90         caddr_t vaddr;          /* Virtual memory address */
91         bus_addr_t paddr;       /* DMA physical address */
92 };
93
94 struct nve_rx_desc {
95         struct nve_rx_desc *next;
96         struct nve_map_buffer buf;
97         u_int16_t buflength;
98         caddr_t vaddr;
99         bus_addr_t paddr;
100 };
101
102 struct nve_tx_desc {
103         /* Don't add anything above this structure */
104         TX_INFO_ADAP TxInfoAdap;
105         struct nve_tx_desc *next;
106         struct nve_map_buffer buf;
107         u_int16_t buflength;
108         u_int32_t numfrags;
109         bus_dma_segment_t frags[NV_MAX_FRAGS + 1];
110 };
111
112 struct nve_softc {
113         struct ifnet *ifp;      /* interface info */
114         struct resource *res;
115         struct resource *irq;
116
117         ADAPTER_API *hwapi;
118         OS_API osapi;
119                 
120         device_t miibus;
121         device_t dev;
122         struct callout stat_callout;
123
124         void *sc_ih;
125         bus_space_tag_t sc_st;
126         bus_space_handle_t sc_sh;
127         bus_dma_tag_t mtag;
128         bus_dma_tag_t rtag;
129         bus_dmamap_t rmap;
130         bus_dma_tag_t ttag;
131         bus_dmamap_t tmap;
132
133         struct nve_rx_desc *rx_desc;
134         struct nve_tx_desc *tx_desc;
135         bus_addr_t rx_addr;
136         bus_addr_t tx_addr;
137         u_int16_t rx_ring_full;
138         u_int16_t tx_ring_full;
139         u_int32_t cur_rx;
140         u_int32_t cur_tx;
141         u_int32_t pending_rxs;
142         u_int32_t pending_txs;
143
144         struct mtx mtx;
145
146         /* Stuff for dealing with the NVIDIA OS API */
147         struct callout ostimer;
148         PTIMER_FUNC ostimer_func;
149         void *ostimer_params;
150         int linkup;
151         ulong tx_errors;
152         NV_UINT32 hwmode;
153         NV_UINT32 max_frame_size;
154         NV_UINT32 phyaddr;
155         NV_UINT32 media;
156         CMNDATA_OS_ADAPTER adapterdata;
157         unsigned char original_mac_addr[6];
158 };
159
160 struct nve_type {
161         u_int16_t       vid_id;
162         u_int16_t       dev_id;
163         char            *name;
164 };
165
166 #define NVE_LOCK(_sc)           mtx_lock(&(_sc)->mtx)
167 #define NVE_UNLOCK(_sc)         mtx_unlock(&(_sc)->mtx)
168 #define NVE_LOCK_ASSERT(_sc)    mtx_assert(&(_sc)->mtx, MA_OWNED)
169
170 #define IF_Kbps(x) ((x) * 1000)                 /* kilobits/sec. */
171 #define IF_Mbps(x) (IF_Kbps((x) * 1000))        /* megabits/sec. */
172 #define ETHER_ALIGN 2
173
174 extern int ADAPTER_ReadPhy (PVOID pContext, ULONG ulPhyAddr, ULONG ulReg, ULONG *pulVal);
175 extern int ADAPTER_WritePhy (PVOID pContext, ULONG ulPhyAddr, ULONG ulReg, ULONG ulVal);
176 extern int ADAPTER_Init (PVOID pContext, USHORT usForcedSpeed, UCHAR ucForceDpx, UCHAR ucForceMode, UINT *puiLinkState);
177
178 #endif  /* _IF_NVEREG_H_ */