Deleted Added
full compact
if_nxge.h (171095) if_nxge.h (173139)
1/*-
2 * Copyright (c) 2002-2007 Neterion, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 2002-2007 Neterion, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/dev/nxge/if_nxge.h 171095 2007-06-29 22:47:18Z sam $
26 * $FreeBSD: head/sys/dev/nxge/if_nxge.h 173139 2007-10-29 14:19:32Z rwatson $
27 */
28
27 */
28
29/*
30 * if_xge.h
31 */
32
33#ifndef _IF_XGE_H
34#define _IF_XGE_H
35
36#include <dev/nxge/include/xgehal.h>
37#include <dev/nxge/xge-osdep.h>
38
29#ifndef _IF_XGE_H
30#define _IF_XGE_H
31
32#include <dev/nxge/include/xgehal.h>
33#include <dev/nxge/xge-osdep.h>
34
39#if defined(XGE_FEATURE_TSO) && (__FreeBSD_version < 700026)
40#undef XGE_FEATURE_TSO
41#endif
42
43#if defined(XGE_FEATURE_LRO)
44#if __FreeBSD_version < 700047
45#undef XGE_FEATURE_LRO
46#undef XGE_HAL_CONFIG_LRO
47#else
48#define XGE_HAL_CONFIG_LRO
49#endif
50#endif
51
52#ifdef FUNC_PRINT
53#define ENTER_FUNCTION xge_os_printf("Enter\t==>[%s]\n", __FUNCTION__);
54#define LEAVE_FUNCTION xge_os_printf("Leave\t<==[%s]\n", __FUNCTION__);
55#else
56#define ENTER_FUNCTION
57#define LEAVE_FUNCTION
58#endif
59
60/* Printing description, Copyright */
35/* Printing description, Copyright */
61#define DRIVER_VERSION XGELL_VERSION_MAJOR"." \
62 XGELL_VERSION_MINOR"." \
63 XGELL_VERSION_FIX"." \
64 XGELL_VERSION_BUILD
65#define COPYRIGHT_STRING "Copyright(c) 2002-2007 Neterion Inc."
66#define PRINT_COPYRIGHT xge_os_printf("%s", COPYRIGHT_STRING)
36#define XGE_DRIVER_VERSION \
37 XGELL_VERSION_MAJOR"."XGELL_VERSION_MINOR"." \
38 XGELL_VERSION_FIX"."XGELL_VERSION_BUILD
39#define XGE_COPYRIGHT "Copyright(c) 2002-2007 Neterion Inc."
67
68/* Printing */
69#define xge_trace(trace, fmt, args...) xge_debug_ll(trace, fmt, ## args);
40
41/* Printing */
42#define xge_trace(trace, fmt, args...) xge_debug_ll(trace, fmt, ## args);
70#define xge_ctrace(trace, fmt...) xge_debug_ll(trace, fmt);
71
43
72#define BUFALIGN(buffer_length) \
73 if((buffer_length % 128) != 0) { \
74 buffer_length += (128 - (buffer_length % 128)); \
75 }
44#define XGE_ALIGN_TO(buffer_length, to) { \
45 if((buffer_length % to) != 0) { \
46 buffer_length += (to - (buffer_length % to)); \
47 } \
48}
76
49
77static inline void *
78xge_malloc(unsigned long size) {
79 void *vaddr = malloc(size, M_DEVBUF, M_NOWAIT);
80 bzero(vaddr, size);
81 return vaddr;
50#define XGE_EXIT_ON_ERR(text, label, return_value) { \
51 xge_trace(XGE_ERR, "%s (Status: %d)", text, return_value); \
52 status = return_value; \
53 goto label; \
82}
83
54}
55
84#define SINGLE_ALLOC 0
85#define MULTI_ALLOC 1
86#define SAVE 0
87#define RESTORE 1
88#define UP 1
89#define DOWN 0
56#define XGE_SET_BUFFER_MODE_IN_RINGS(mode) { \
57 for(index = 0; index < XGE_RING_COUNT; index++) \
58 ring_config->queue[index].buffer_mode = mode; \
59}
60
90#define XGE_DEFAULT_USER_HARDCODED -1
61#define XGE_DEFAULT_USER_HARDCODED -1
91#define MAX_MBUF_FRAGS 20 /* Maximum number of fragments */
92#define MAX_SEGS 100 /* Maximum number of segments */
93#define XGELL_TX_LEVEL_LOW 16
62#define XGE_MAX_SEGS 100 /* Maximum number of segments */
63#define XGE_TX_LEVEL_LOW 16
64#define XGE_FIFO_COUNT XGE_HAL_MIN_FIFO_NUM
94#define XGE_RING_COUNT XGE_HAL_MIN_RING_NUM
65#define XGE_RING_COUNT XGE_HAL_MIN_RING_NUM
95#define BUFFER_SIZE 20
66#define XGE_BUFFER_SIZE 20
67#define XGE_LRO_DEFAULT_ENTRIES 12
68#define XGE_BAUDRATE 1000000000
96
97/* Default values to configuration parameters */
69
70/* Default values to configuration parameters */
71#define XGE_DEFAULT_ENABLED_TSO 1
72#define XGE_DEFAULT_ENABLED_LRO 1
73#define XGE_DEFAULT_ENABLED_MSI 1
74#define XGE_DEFAULT_BUFFER_MODE 1
98#define XGE_DEFAULT_INITIAL_MTU 1500
99#define XGE_DEFAULT_LATENCY_TIMER -1
100#define XGE_DEFAULT_MAX_SPLITS_TRANS -1
101#define XGE_DEFAULT_MMRB_COUNT -1
102#define XGE_DEFAULT_SHARED_SPLITS 0
103#define XGE_DEFAULT_ISR_POLLING_CNT 8
104#define XGE_DEFAULT_STATS_REFRESH_TIME_SEC 4
105#define XGE_DEFAULT_MAC_RMAC_BCAST_EN 1

--- 33 unchanged lines hidden (view full) ---

139#define XGE_DEFAULT_RING_QUEUE_RTI_URANGE_C 50
140#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_A 1
141#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_B 8
142#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_C 16
143#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_D 32
144#define XGE_DEFAULT_RING_QUEUE_RTI_TIMER_AC_EN 1
145#define XGE_DEFAULT_RING_QUEUE_RTI_TIMER_VAL_US 250
146
75#define XGE_DEFAULT_INITIAL_MTU 1500
76#define XGE_DEFAULT_LATENCY_TIMER -1
77#define XGE_DEFAULT_MAX_SPLITS_TRANS -1
78#define XGE_DEFAULT_MMRB_COUNT -1
79#define XGE_DEFAULT_SHARED_SPLITS 0
80#define XGE_DEFAULT_ISR_POLLING_CNT 8
81#define XGE_DEFAULT_STATS_REFRESH_TIME_SEC 4
82#define XGE_DEFAULT_MAC_RMAC_BCAST_EN 1

--- 33 unchanged lines hidden (view full) ---

116#define XGE_DEFAULT_RING_QUEUE_RTI_URANGE_C 50
117#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_A 1
118#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_B 8
119#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_C 16
120#define XGE_DEFAULT_RING_QUEUE_RTI_UFC_D 32
121#define XGE_DEFAULT_RING_QUEUE_RTI_TIMER_AC_EN 1
122#define XGE_DEFAULT_RING_QUEUE_RTI_TIMER_VAL_US 250
123
124#define XGE_DRV_STATS(param) (lldev->driver_stats.param++)
125
126#define XGE_SAVE_PARAM(to, what, value) to.what = value;
127
128#define XGE_GET_PARAM(str_kenv, to, param, hardcode) { \
129 static int param##__LINE__; \
130 if(testenv(str_kenv) == 1) { \
131 getenv_int(str_kenv, &param##__LINE__); \
132 } \
133 else { \
134 param##__LINE__ = hardcode; \
135 } \
136 XGE_SAVE_PARAM(to, param, param##__LINE__); \
137}
138
139#define XGE_GET_PARAM_MAC(str_kenv, param, hardcode) \
140 XGE_GET_PARAM(str_kenv, ((*dconfig).mac), param, hardcode);
141
142#define XGE_GET_PARAM_FIFO(str_kenv, param, hardcode) \
143 XGE_GET_PARAM(str_kenv, ((*dconfig).fifo), param, hardcode);
144
145#define XGE_GET_PARAM_FIFO_QUEUE(str_kenv, param, qindex, hardcode) \
146 XGE_GET_PARAM(str_kenv, ((*dconfig).fifo.queue[qindex]), param, \
147 hardcode);
148
149#define XGE_GET_PARAM_FIFO_QUEUE_TTI(str_kenv, param, qindex, tindex, hardcode)\
150 XGE_GET_PARAM(str_kenv, ((*dconfig).fifo.queue[qindex].tti[tindex]), \
151 param, hardcode);
152
153#define XGE_GET_PARAM_RING(str_kenv, param, hardcode) \
154 XGE_GET_PARAM(str_kenv, ((*dconfig).ring), param, hardcode);
155
156#define XGE_GET_PARAM_RING_QUEUE(str_kenv, param, qindex, hardcode) \
157 XGE_GET_PARAM(str_kenv, ((*dconfig).ring.queue[qindex]), param, \
158 hardcode);
159
160#define XGE_GET_PARAM_RING_QUEUE_RTI(str_kenv, param, qindex, hardcode) \
161 XGE_GET_PARAM(str_kenv, ((*dconfig).ring.queue[qindex].rti), param, \
162 hardcode);
163
147/* Values to identify the requests from getinfo tool in ioctl */
148#define XGE_QUERY_STATS 1
149#define XGE_QUERY_PCICONF 2
164/* Values to identify the requests from getinfo tool in ioctl */
165#define XGE_QUERY_STATS 1
166#define XGE_QUERY_PCICONF 2
150#define XGE_QUERY_INTRSTATS 3
167#define XGE_QUERY_DEVSTATS 3
151#define XGE_QUERY_DEVCONF 4
152#define XGE_READ_VERSION 5
168#define XGE_QUERY_DEVCONF 4
169#define XGE_READ_VERSION 5
153#define XGE_QUERY_TCODE 6
154#define XGE_SET_BUFFER_MODE_1 7
155#define XGE_SET_BUFFER_MODE_2 8
156#define XGE_SET_BUFFER_MODE_3 9
170#define XGE_QUERY_SWSTATS 6
171#define XGE_QUERY_DRIVERSTATS 7
172#define XGE_SET_BUFFER_MODE_1 8
173#define XGE_SET_BUFFER_MODE_2 9
157#define XGE_SET_BUFFER_MODE_5 10
158#define XGE_QUERY_BUFFER_MODE 11
159
160#define XGE_OFFSET_OF_LAST_REG 0x3180
161
162#define VENDOR_ID_AMD 0x1022
163#define DEVICE_ID_8131_PCI_BRIDGE 0x7450
164
165typedef struct mbuf *mbuf_t;
166
174#define XGE_SET_BUFFER_MODE_5 10
175#define XGE_QUERY_BUFFER_MODE 11
176
177#define XGE_OFFSET_OF_LAST_REG 0x3180
178
179#define VENDOR_ID_AMD 0x1022
180#define DEVICE_ID_8131_PCI_BRIDGE 0x7450
181
182typedef struct mbuf *mbuf_t;
183
167typedef enum xgell_event_e {
184typedef enum xge_lables {
185 xge_free_all = 0,
186 xge_free_mutex = 1,
187 xge_free_terminate_hal_driver = 2,
188 xge_free_hal_device = 3,
189 xge_free_pci_info = 4,
190 xge_free_bar0 = 5,
191 xge_free_bar0_resource = 6,
192 xge_free_bar1 = 7,
193 xge_free_bar1_resource = 8,
194 xge_free_irq_resource = 9,
195 xge_free_terminate_hal_device = 10,
196 xge_free_media_interface = 11,
197} xge_lables_e;
198
199typedef enum xge_option {
200 XGE_CHANGE_LRO = 0,
201 XGE_SET_MTU = 1
202} xge_option_e;
203
204typedef enum xge_event_e {
168 XGE_LL_EVENT_TRY_XMIT_AGAIN = XGE_LL_EVENT_BASE + 1,
205 XGE_LL_EVENT_TRY_XMIT_AGAIN = XGE_LL_EVENT_BASE + 1,
169 XGE_LL_EVENT_DEVICE_RESETTING = XGE_LL_EVENT_BASE + 2,
170} xgell_event_e;
206 XGE_LL_EVENT_DEVICE_RESETTING = XGE_LL_EVENT_BASE + 2
207} xge_event_e;
171
208
209typedef struct xge_msi_info {
210 u16 msi_control; /* MSI control 0x42 */
211 u32 msi_lower_address; /* MSI lower address 0x44 */
212 u32 msi_higher_address; /* MSI higher address 0x48 */
213 u16 msi_data; /* MSI data */
214} xge_msi_info_t;
215
216typedef struct xge_driver_stats_t {
217 /* ISR statistics */
218 u64 isr_filter;
219 u64 isr_line;
220 u64 isr_msi;
221
222 /* Tx statistics */
223 u64 tx_calls;
224 u64 tx_completions;
225 u64 tx_desc_compl;
226 u64 tx_tcode;
227 u64 tx_defrag;
228 u64 tx_no_txd;
229 u64 tx_map_fail;
230 u64 tx_max_frags;
231 u64 tx_tso;
232 u64 tx_posted;
233 u64 tx_again;
234 u64 tx_lock_fail;
235
236 /* Rx statistics */
237 u64 rx_completions;
238 u64 rx_desc_compl;
239 u64 rx_tcode;
240 u64 rx_no_buf;
241 u64 rx_map_fail;
242
243 /* LRO statistics */
244 u64 lro_uncapable;
245 u64 lro_begin;
246 u64 lro_end1;
247 u64 lro_end2;
248 u64 lro_end3;
249 u64 lro_append;
250 u64 lro_session_exceeded;
251 u64 lro_close;
252} xge_driver_stats_t;
253
254typedef struct xge_lro_entry_t {
255 SLIST_ENTRY(xge_lro_entry_t) next;
256 struct mbuf *m_head;
257 struct mbuf *m_tail;
258 struct ip *lro_header_ip;
259 int timestamp;
260 u32 tsval;
261 u32 tsecr;
262 u32 source_ip;
263 u32 dest_ip;
264 u32 next_seq;
265 u32 ack_seq;
266 u32 len;
267 u32 data_csum;
268 u16 window;
269 u16 source_port;
270 u16 dest_port;
271 u16 append_cnt;
272 u16 mss;
273} xge_lro_entry_t;
274
275SLIST_HEAD(lro_head, xge_lro_entry_t);
276
172/* Adapter structure */
277/* Adapter structure */
173typedef struct xgelldev {
278typedef struct xge_lldev_t {
174 device_t device; /* Device */
175 struct ifnet *ifnetp; /* Interface ifnet structure */
176 struct resource *irq; /* Resource structure for IRQ */
177 void *irqhandle; /* IRQ handle */
279 device_t device; /* Device */
280 struct ifnet *ifnetp; /* Interface ifnet structure */
281 struct resource *irq; /* Resource structure for IRQ */
282 void *irqhandle; /* IRQ handle */
178 pci_info_t *pdev;
179 struct ifmedia xge_media; /* In-kernel representation of a */
180 /* single supported media type */
283 xge_pci_info_t *pdev; /* PCI info */
181 xge_hal_device_t *devh; /* HAL: Device Handle */
284 xge_hal_device_t *devh; /* HAL: Device Handle */
182 xge_hal_channel_h ring_channel[XGE_HAL_MAX_FIFO_NUM];
183 /* Ring channel */
184 xge_hal_channel_h fifo_channel_0; /* FIFO channel */
185 struct mtx xge_lock; /* Mutex - Default */
285 struct mtx mtx_drv; /* Mutex - Driver */
286 struct mtx mtx_tx[XGE_FIFO_COUNT];
287 /* Mutex - Tx */
288 char mtx_name_drv[16];/*Mutex Name - Driver */
289 char mtx_name_tx[16][XGE_FIFO_COUNT];
290 /* Mutex Name - Tx */
186 struct callout timer; /* Timer for polling */
291 struct callout timer; /* Timer for polling */
187 struct xge_hal_stats_hw_info_t *hwstats; /* Hardware Statistics */
188 int saved_regs[16]; /* To save register space */
189 int xge_mtu; /* MTU */
190 int initialized; /* Flag: Initialized or not */
292 struct ifmedia media; /* In-kernel representation of a */
293 /* single supported media type */
294 xge_hal_channel_h fifo_channel[XGE_FIFO_COUNT];
295 /* FIFO channels */
296 xge_hal_channel_h ring_channel[XGE_RING_COUNT];
297 /* Ring channels */
191 bus_dma_tag_t dma_tag_tx; /* Tag for dtr dma mapping (Tx) */
192 bus_dma_tag_t dma_tag_rx; /* Tag for dtr dma mapping (Rx) */
298 bus_dma_tag_t dma_tag_tx; /* Tag for dtr dma mapping (Tx) */
299 bus_dma_tag_t dma_tag_rx; /* Tag for dtr dma mapping (Rx) */
300 bus_dmamap_t extra_dma_map; /* Extra DMA map for Rx */
301 xge_msi_info_t msi_info; /* MSI info */
302 xge_driver_stats_t driver_stats; /* Driver statistics */
303 int initialized; /* Flag: Initialized or not */
193 int all_multicast; /* All multicast flag */
194 int macaddr_count; /* Multicast address count */
195 int in_detach; /* To avoid ioctl during detach */
196 int buffer_mode; /* Buffer Mode */
197 int rxd_mbuf_cnt; /* Number of buffers used */
198 int rxd_mbuf_len[5];/* Buffer lengths */
304 int all_multicast; /* All multicast flag */
305 int macaddr_count; /* Multicast address count */
306 int in_detach; /* To avoid ioctl during detach */
307 int buffer_mode; /* Buffer Mode */
308 int rxd_mbuf_cnt; /* Number of buffers used */
309 int rxd_mbuf_len[5];/* Buffer lengths */
199} xgelldev_t;
310 int enabled_tso; /* Flag: TSO Enabled */
311 int enabled_lro; /* Flag: LRO Enabled */
312 int enabled_msi; /* Flag: MSI Enabled */
313 int mtu; /* Interface MTU */
314 int lro_num; /* Number of LRO sessions */
315 struct lro_head lro_active; /* Active LRO sessions */
316 struct lro_head lro_free; /* Free LRO sessions */
317} xge_lldev_t;
200
201/* Rx descriptor private structure */
318
319/* Rx descriptor private structure */
202typedef struct {
203 mbuf_t *bufferArray;
204 struct xge_dma_mbuf dmainfo[5];
205} xgell_rx_priv_t;
320typedef struct xge_rx_priv_t {
321 mbuf_t *bufferArray;
322 xge_dma_mbuf_t dmainfo[5];
323} xge_rx_priv_t;
206
207/* Tx descriptor private structure */
324
325/* Tx descriptor private structure */
208typedef struct {
326typedef struct xge_tx_priv_t {
209 mbuf_t buffer;
210 bus_dmamap_t dma_map;
327 mbuf_t buffer;
328 bus_dmamap_t dma_map;
211} xgell_tx_priv_t;
329} xge_tx_priv_t;
212
213/* BAR0 Register */
330
331/* BAR0 Register */
214typedef struct barregister {
215 char option[2];
332typedef struct xge_register_t {
333 char option[2];
216 u64 offset;
217 u64 value;
334 u64 offset;
335 u64 value;
218}bar0reg_t;
336}xge_register_t;
219
337
220void xge_init_params(xge_hal_device_config_t *dconfig, device_t dev);
338void xge_init_params(xge_hal_device_config_t *, device_t);
221void xge_init(void *);
339void xge_init(void *);
222void xge_init_locked(void *);
223void xge_stop(xgelldev_t *);
224void freeResources(device_t, int);
225void xgell_callback_link_up(void *);
226void xgell_callback_link_down(void *);
227void xgell_callback_crit_err(void *, xge_hal_event_e, u64);
228void xgell_callback_event(xge_queue_item_t *);
340void xge_device_init(xge_lldev_t *, xge_hal_channel_reopen_e);
341void xge_device_stop(xge_lldev_t *, xge_hal_channel_reopen_e);
342void xge_stop(xge_lldev_t *);
343void xge_resources_free(device_t, xge_lables_e);
344void xge_callback_link_up(void *);
345void xge_callback_link_down(void *);
346void xge_callback_crit_err(void *, xge_hal_event_e, u64);
347void xge_callback_event(xge_queue_item_t *);
229int xge_ifmedia_change(struct ifnet *);
230void xge_ifmedia_status(struct ifnet *, struct ifmediareq *);
231int xge_ioctl(struct ifnet *, unsigned long, caddr_t);
348int xge_ifmedia_change(struct ifnet *);
349void xge_ifmedia_status(struct ifnet *, struct ifmediareq *);
350int xge_ioctl(struct ifnet *, unsigned long, caddr_t);
351int xge_ioctl_stats(xge_lldev_t *, struct ifreq *);
352int xge_ioctl_registers(xge_lldev_t *, struct ifreq *);
232void xge_timer(void *);
353void xge_timer(void *);
233int xge_intr_filter(void *);
234void xge_intr(void *);
235int xgell_rx_open(int, xgelldev_t *, xge_hal_channel_reopen_e);
236int xgell_tx_open(xgelldev_t *, xge_hal_channel_reopen_e);
237int xgell_channel_close(xgelldev_t *, xge_hal_channel_reopen_e);
238int xgell_channel_open(xgelldev_t *, xge_hal_channel_reopen_e);
239xge_hal_status_e xgell_rx_compl(xge_hal_channel_h, xge_hal_dtr_h, u8, void *);
240xge_hal_status_e xgell_tx_compl(xge_hal_channel_h, xge_hal_dtr_h, u8, void *);
241xge_hal_status_e xgell_tx_initial_replenish(xge_hal_channel_h, xge_hal_dtr_h,
242 int, void *, xge_hal_channel_reopen_e);
243xge_hal_status_e xgell_rx_initial_replenish(xge_hal_channel_h, xge_hal_dtr_h,
244 int, void *, xge_hal_channel_reopen_e);
245void xgell_rx_term(xge_hal_channel_h, xge_hal_dtr_h, xge_hal_dtr_state_e,
246 void *, xge_hal_channel_reopen_e);
247void xgell_tx_term(xge_hal_channel_h, xge_hal_dtr_h, xge_hal_dtr_state_e,
248 void *, xge_hal_channel_reopen_e);
249void xgell_set_mbuf_cflags(mbuf_t);
354int xge_isr_filter(void *);
355void xge_isr_line(void *);
356void xge_isr_msi(void *);
357void xge_enable_msi(xge_lldev_t *);
358int xge_rx_open(int, xge_lldev_t *, xge_hal_channel_reopen_e);
359int xge_tx_open(xge_lldev_t *, xge_hal_channel_reopen_e);
360void xge_channel_close(xge_lldev_t *, xge_hal_channel_reopen_e);
361int xge_channel_open(xge_lldev_t *, xge_hal_channel_reopen_e);
362xge_hal_status_e xge_rx_compl(xge_hal_channel_h, xge_hal_dtr_h, u8, void *);
363xge_hal_status_e xge_tx_compl(xge_hal_channel_h, xge_hal_dtr_h, u8, void *);
364xge_hal_status_e xge_tx_initial_replenish(xge_hal_channel_h, xge_hal_dtr_h,
365 int, void *, xge_hal_channel_reopen_e);
366xge_hal_status_e xge_rx_initial_replenish(xge_hal_channel_h, xge_hal_dtr_h,
367 int, void *, xge_hal_channel_reopen_e);
368void xge_rx_term(xge_hal_channel_h, xge_hal_dtr_h, xge_hal_dtr_state_e,
369 void *, xge_hal_channel_reopen_e);
370void xge_tx_term(xge_hal_channel_h, xge_hal_dtr_h, xge_hal_dtr_state_e,
371 void *, xge_hal_channel_reopen_e);
372void xge_set_mbuf_cflags(mbuf_t);
250void xge_send(struct ifnet *);
373void xge_send(struct ifnet *);
251void xge_send_locked(struct ifnet *);
252int xgell_get_multimode_normalbuf(xge_hal_dtr_h dtrh, xgell_rx_priv_t *rxd_priv,
253 xgelldev_t *lldev);
254int xgell_get_multimode_jumbobuf(xge_hal_dtr_h dtrh, xgell_rx_priv_t *rxd_priv,
255 xgelldev_t *lldev, int lock);
256int xgell_get_second_buffer(xgell_rx_priv_t *rxd_priv, xgelldev_t *lldev);
257int xgell_get_buf(xge_hal_dtr_h dtrh, xgell_rx_priv_t *rxd_priv,
258 xgelldev_t *lldev, int index);
259int xge_ring_dtr_get(mbuf_t mbuf_up, xge_hal_channel_h channelh, xge_hal_dtr_h dtr,
260 xgelldev_t *lldev, xgell_rx_priv_t *rxd_priv);
261int xgell_get_buf_3b_5b(xge_hal_dtr_h dtrh, xgell_rx_priv_t *rxd_priv,
262 xgelldev_t *lldev);
374static void inline xge_send_locked(struct ifnet *, int);
375int xge_get_buf(xge_hal_dtr_h, xge_rx_priv_t *, xge_lldev_t *, int);
376int xge_ring_dtr_get(mbuf_t, xge_hal_channel_h, xge_hal_dtr_h, xge_lldev_t *,
377 xge_rx_priv_t *);
378int xge_get_buf_3b_5b(xge_hal_dtr_h, xge_rx_priv_t *, xge_lldev_t *);
263void dmamap_cb(void *, bus_dma_segment_t *, int, int);
379void dmamap_cb(void *, bus_dma_segment_t *, int, int);
264void xgell_reset(xgelldev_t *);
265void xge_setmulti(xgelldev_t *);
266void xge_enable_promisc(xgelldev_t *);
267void xge_disable_promisc(xgelldev_t *);
268int changeMtu(xgelldev_t *, int);
269int changeBufmode(xgelldev_t *, int);
380void xge_reset(xge_lldev_t *);
381void xge_setmulti(xge_lldev_t *);
382void xge_enable_promisc(xge_lldev_t *);
383void xge_disable_promisc(xge_lldev_t *);
384int xge_change_mtu(xge_lldev_t *, int);
385void xge_buffer_mode_init(xge_lldev_t *, int);
270void xge_initialize(device_t, xge_hal_channel_reopen_e);
271void xge_terminate(device_t, xge_hal_channel_reopen_e);
386void xge_initialize(device_t, xge_hal_channel_reopen_e);
387void xge_terminate(device_t, xge_hal_channel_reopen_e);
272void if_up_locked(xgelldev_t *);
273void if_down_locked(xgelldev_t *);
274int xge_probe(device_t);
275int xge_driver_initialize(void);
276void xge_media_init(device_t);
277void xge_pci_space_save(device_t);
278void xge_pci_space_restore(device_t);
388int xge_probe(device_t);
389int xge_driver_initialize(void);
390void xge_media_init(device_t);
391void xge_pci_space_save(device_t);
392void xge_pci_space_restore(device_t);
393void xge_msi_info_save(xge_lldev_t *);
394void xge_msi_info_restore(xge_lldev_t *);
279int xge_attach(device_t);
280int xge_interface_setup(device_t);
281int xge_detach(device_t);
282int xge_shutdown(device_t);
395int xge_attach(device_t);
396int xge_interface_setup(device_t);
397int xge_detach(device_t);
398int xge_shutdown(device_t);
283int xge_suspend(device_t);
284int xge_resume(device_t);
399void xge_mutex_init(xge_lldev_t *);
400void xge_mutex_destroy(xge_lldev_t *);
401void xge_print_info(xge_lldev_t *);
402void xge_lro_flush_sessions(xge_lldev_t *);
403void xge_rx_buffer_sizes_set(xge_lldev_t *, int, int);
404void xge_accumulate_large_rx(xge_lldev_t *, struct mbuf *, int,
405 xge_rx_priv_t *);
406xge_hal_status_e xge_create_dma_tags(device_t);
407void xge_add_sysctl_handlers(xge_lldev_t *);
408void xge_confirm_changes(xge_lldev_t *, xge_option_e);
409static int xge_lro_accumulate(xge_lldev_t *, struct mbuf *);
410static void xge_lro_flush(xge_lldev_t *, xge_lro_entry_t *);
285
286#endif // _IF_XGE_H
287
411
412#endif // _IF_XGE_H
413