]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/nxge/include/xgehal-config.h
This commit was generated by cvs2svn to compensate for changes in r171829,
[FreeBSD/FreeBSD.git] / sys / dev / nxge / include / xgehal-config.h
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  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
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$
27  */
28
29 /*
30  *  FileName :    xgehal-config.h
31  *
32  *  Description:  Xframe configuration.
33  *
34  *  Created:      14 May 2004
35  */
36
37 #ifndef XGE_HAL_CONFIG_H
38 #define XGE_HAL_CONFIG_H
39
40 #include <dev/nxge/include/xge-os-pal.h>
41 #include <dev/nxge/include/xgehal-types.h>
42 #include <dev/nxge/include/xge-queue.h>
43
44 __EXTERN_BEGIN_DECLS
45
46 #define XGE_HAL_DEFAULT_USE_HARDCODE            -1
47
48 #ifdef XGEHAL_RNIC
49 #define XGE_HAL_MAX_VIRTUAL_PATHS               17
50 #else
51 #define XGE_HAL_MAX_VIRTUAL_PATHS               8
52 #endif
53 #define XGE_HAL_MAX_INTR_PER_VP                 4
54
55
56 /**
57  * struct xge_hal_tti_config_t - Xframe Tx interrupt configuration.
58  * @enabled: Set to 1, if TTI feature is enabled.
59  * @urange_a: Link utilization range A. The value from 0 to 100%.
60  * @ufc_a: Frame count for the utilization range A. Interrupt will be generated
61  *         each time when (and only when) the line is utilized no more
62  *         than @urange_a percent in the transmit direction,
63  *         and number of transmitted frames is greater or equal @ufc_a.
64  * @urange_b: Link utilization range B.
65  * @ufc_b: Frame count for the utilization range B.
66  * @urange_c: Link utilization range C.
67  * @ufc_c: Frame count for the utilization range C.
68  * @urange_d: Link utilization range D.
69  * @ufc_d: Frame count for the utilization range D.
70  * @timer_val_us: Interval of time, in microseconds, at which transmit timer
71  *             interrupt is to be generated. Note that unless @timer_ci_en
72  *             is set, the timer interrupt is generated only in presence
73  *             of the transmit traffic. Note also that timer interrupt
74  *             and utilization interrupt are two separate interrupt
75  *             sources.
76  * @timer_ac_en: Enable auto-cancel. That is, reset the timer if utilization
77  *               interrupt was generated during the interval.
78  * @timer_ci_en: Enable/disable continuous interrupt. Set this value
79  *               to 1 in order to generate continuous interrupt
80  *               at fixed @timer_val intervals of time, independently
81  *               of whether there is transmit traffic or not.
82  * @enabled: Set to 1, if TTI feature is enabled.
83  *
84  * Xframe transmit interrupt configuration.
85  * See Xframe User Guide, Section 3.5 "Device Interrupts"
86  * for more details. Note also (min, max)
87  * ranges in the body of the xge_hal_tx_intr_config_t structure.
88  * Note: Valid (min, max) range for each attribute is specified in the body of
89  * the xge_hal_tti_config_t{} structure. Please refer to the
90  * corresponding header file.
91  */
92 typedef struct xge_hal_tti_config_t {
93
94         int                             enabled;
95 #define XGE_HAL_TTI_ENABLE                      1
96 #define XGE_HAL_TTI_DISABLE                     0
97
98         /* Line utilization interrupts */
99
100         int                             urange_a;
101 #define XGE_HAL_MIN_TX_URANGE_A                 0
102 #define XGE_HAL_MAX_TX_URANGE_A                 100
103
104         int                             ufc_a;
105 #define XGE_HAL_MIN_TX_UFC_A                    0
106 #define XGE_HAL_MAX_TX_UFC_A                    65535
107
108         int                             urange_b;
109 #define XGE_HAL_MIN_TX_URANGE_B                 0
110 #define XGE_HAL_MAX_TX_URANGE_B                 100
111
112         int                             ufc_b;
113 #define XGE_HAL_MIN_TX_UFC_B                    0
114 #define XGE_HAL_MAX_TX_UFC_B                    65535
115
116         int                             urange_c;
117 #define XGE_HAL_MIN_TX_URANGE_C                 0
118 #define XGE_HAL_MAX_TX_URANGE_C                 100
119
120         int                             ufc_c;
121 #define XGE_HAL_MIN_TX_UFC_C                    0
122 #define XGE_HAL_MAX_TX_UFC_C                    65535
123
124         int                             ufc_d;
125 #define XGE_HAL_MIN_TX_UFC_D                    0
126 #define XGE_HAL_MAX_TX_UFC_D                    65535
127
128         int                             timer_val_us;
129 #define XGE_HAL_MIN_TX_TIMER_VAL                0
130 #define XGE_HAL_MAX_TX_TIMER_VAL                65535
131
132         int                             timer_ac_en;
133 #define XGE_HAL_MIN_TX_TIMER_AC_EN              0
134 #define XGE_HAL_MAX_TX_TIMER_AC_EN              1
135
136         int                             timer_ci_en;
137 #define XGE_HAL_MIN_TX_TIMER_CI_EN              0
138 #define XGE_HAL_MAX_TX_TIMER_CI_EN              1
139
140
141 } xge_hal_tti_config_t;
142
143 /**
144  * struct xge_hal_rti_config_t - Xframe Rx interrupt configuration.
145  * @urange_a: Link utilization range A. The value from 0 to 100%.
146  * @ufc_a: Frame count for the utilization range A. Interrupt will be generated
147  *         each time when (and only when) the line is utilized no more
148  *         than @urange_a percent inbound,
149  *         and number of received frames is greater or equal @ufc_a.
150  * @urange_b: Link utilization range B.
151  * @ufc_b: Frame count for the utilization range B.
152  * @urange_c: Link utilization range C.
153  * @ufc_c: Frame count for the utilization range C.
154  * @urange_d: Link utilization range D.
155  * @ufc_d: Frame count for the utilization range D.
156  * @timer_ac_en: Enable auto-cancel. That is, reset the timer if utilization
157  *               interrupt was generated during the interval.
158  * @timer_val_us: Interval of time, in microseconds, at which receive timer
159  *             interrupt is to be generated. The timer interrupt is generated
160  *             only in presence of the inbound traffic. Note also that timer
161  *             interrupt and utilization interrupt are two separate interrupt
162  *             sources.
163  *
164  * Xframe receive interrupt configuration.
165  * See Xframe User Guide, Section 3.5 "Device Interrupts"
166  * for more details. Note also (min, max)
167  * ranges in the body of the xge_hal_intr_config_t structure.
168  * Note: Valid (min, max) range for each attribute is specified in the body of
169  * the xge_hal_rti_config_t{} structure. Please refer to the
170  * corresponding header file.
171  */
172 typedef struct xge_hal_rti_config_t {
173
174         int                             urange_a;
175 #define XGE_HAL_MIN_RX_URANGE_A                 0
176 #define XGE_HAL_MAX_RX_URANGE_A                 127
177
178         int                             ufc_a;
179 #define XGE_HAL_MIN_RX_UFC_A                    0
180 #define XGE_HAL_MAX_RX_UFC_A                    65535
181
182         int                             urange_b;
183 #define XGE_HAL_MIN_RX_URANGE_B                 0
184 #define XGE_HAL_MAX_RX_URANGE_B                 127
185
186         int                             ufc_b;
187 #define XGE_HAL_MIN_RX_UFC_B                    0
188 #define XGE_HAL_MAX_RX_UFC_B                    65535
189
190         int                             urange_c;
191 #define XGE_HAL_MIN_RX_URANGE_C                 0
192 #define XGE_HAL_MAX_RX_URANGE_C                 127
193
194         int                             ufc_c;
195 #define XGE_HAL_MIN_RX_UFC_C                    0
196 #define XGE_HAL_MAX_RX_UFC_C                    65535
197
198         int                             ufc_d;
199 #define XGE_HAL_MIN_RX_UFC_D                    0
200 #define XGE_HAL_MAX_RX_UFC_D                    65535
201
202         int                             timer_ac_en;
203 #define XGE_HAL_MIN_RX_TIMER_AC_EN              0
204 #define XGE_HAL_MAX_RX_TIMER_AC_EN              1
205
206         int                             timer_val_us;
207 #define XGE_HAL_MIN_RX_TIMER_VAL                0
208 #define XGE_HAL_MAX_RX_TIMER_VAL                65535
209
210 } xge_hal_rti_config_t;
211
212 /**
213  * struct xge_hal_fifo_queue_t - Single fifo configuration.
214  * @max: Max numbers of TxDLs (that is, lists of Tx descriptors) per queue.
215  * @initial: Initial numbers of TxDLs per queue (can grow up to @max).
216  * @intr: Boolean. Use 1 to generate interrupt for  each completed TxDL.
217  *        Use 0 otherwise.
218  * @intr_vector: TBD
219  * @no_snoop_bits: If non-zero, specifies no-snoop PCI operation,
220  *              which generally improves latency of the host bridge operation
221  *              (see PCI specification). For valid values please refer
222  *              to xge_hal_fifo_queue_t{} in the driver sources.
223  * @priority: TBD
224  * @configured: Boolean. Use 1 to specify that the fifo is configured.
225  *              Only "configured" fifos can be activated and used to post
226  *              Tx descriptors. Any subset of 8 available fifos can be
227  *              "configured".
228  * @tti: TBD
229  *
230  * Single fifo configuration.
231  * Note: Valid (min, max) range for each attribute is specified in the body of
232  * the xge_hal_fifo_queue_t{} structure. Please refer to the
233  * corresponding header file.
234  * See also: xge_hal_fifo_config_t{}
235  */
236 typedef struct xge_hal_fifo_queue_t {
237         int                             max;
238         int                             initial;
239 #define XGE_HAL_MIN_FIFO_QUEUE_LENGTH           2
240 #define XGE_HAL_MAX_FIFO_QUEUE_LENGTH           8192
241
242         int                             intr;
243 #define XGE_HAL_MIN_FIFO_QUEUE_INTR             0
244 #define XGE_HAL_MAX_FIFO_QUEUE_INTR             1
245
246         int                             intr_vector;
247 #define XGE_HAL_MIN_FIFO_QUEUE_INTR_VECTOR      0
248 #define XGE_HAL_MAX_FIFO_QUEUE_INTR_VECTOR      64
249
250         int                             no_snoop_bits;
251 #define XGE_HAL_MIN_FIFO_QUEUE_NO_SNOOP_DISABLED        0
252 #define XGE_HAL_MAX_FIFO_QUEUE_NO_SNOOP_TXD     1
253 #define XGE_HAL_MAX_FIFO_QUEUE_NO_SNOOP_BUFFER  2
254 #define XGE_HAL_MAX_FIFO_QUEUE_NO_SNOOP_ALL     3
255
256         int                             priority;
257 #define XGE_HAL_MIN_FIFO_PRIORITY               0
258 #define XGE_HAL_MAX_FIFO_PRIORITY               63
259
260         int                             configured;
261 #define XGE_HAL_MIN_FIFO_CONFIGURED             0
262 #define XGE_HAL_MAX_FIFO_CONFIGURED             1
263
264 #define XGE_HAL_MAX_FIFO_TTI_NUM                7
265 #define XGE_HAL_MAX_FIFO_TTI_RING_0             56
266         xge_hal_tti_config_t            tti[XGE_HAL_MAX_FIFO_TTI_NUM];
267
268 } xge_hal_fifo_queue_t;
269
270 /**
271  * struct xge_hal_fifo_config_t - Configuration of all 8 fifos.
272  * @max_frags: Max number of Tx buffers per TxDL (that is, per single
273  *             transmit operation).
274  *             No more than 256 transmit buffers can be specified.
275  * @max_aligned_frags: Number of fragments to be aligned out of
276  *             maximum fragments (see @max_frags).
277  * @reserve_threshold: Descriptor reservation threshold.
278  *                     At least @reserve_threshold descriptors will remain
279  *                     unallocated at all times.
280  * @memblock_size: Fifo descriptors are allocated in blocks of @mem_block_size
281  *                 bytes. Setting @memblock_size to page size ensures
282  *                 by-page allocation of descriptors. 128K bytes is the
283  *                 maximum supported block size.
284  * @queue: Array of per-fifo configurations.
285  * @alignment_size: per Tx fragment DMA-able memory used to align transmit data
286  *                  (e.g., to align on a cache line).
287  *
288  * Configuration of all Xframe fifos. Includes array of xge_hal_fifo_queue_t
289  * structures.
290  * Note: Valid (min, max) range for each attribute is specified in the body of
291  * the xge_hal_fifo_config_t{} structure. Please refer to the
292  * corresponding header file.
293  * See also: xge_hal_ring_queue_t{}.
294  */
295 typedef struct xge_hal_fifo_config_t {
296         int                             max_frags;
297 #define XGE_HAL_MIN_FIFO_FRAGS                  1
298 #define XGE_HAL_MAX_FIFO_FRAGS                  256
299
300         int                             reserve_threshold;
301 #define XGE_HAL_MIN_FIFO_RESERVE_THRESHOLD      0
302 #define XGE_HAL_MAX_FIFO_RESERVE_THRESHOLD      8192
303
304         int                             memblock_size;
305 #define XGE_HAL_MIN_FIFO_MEMBLOCK_SIZE          4096
306 #define XGE_HAL_MAX_FIFO_MEMBLOCK_SIZE          131072
307
308         int                             alignment_size;
309 #define XGE_HAL_MIN_ALIGNMENT_SIZE              0
310 #define XGE_HAL_MAX_ALIGNMENT_SIZE              65536
311
312         int                             max_aligned_frags;
313         /* range: (1, @max_frags) */
314
315 #define XGE_HAL_MIN_FIFO_NUM                    1
316 #define XGE_HAL_MAX_FIFO_NUM_HERC               8
317 #define XGE_HAL_MAX_FIFO_NUM_TITAN              (XGE_HAL_MAX_VIRTUAL_PATHS - 1)
318 #define XGE_HAL_MAX_FIFO_NUM                    (XGE_HAL_MAX_VIRTUAL_PATHS)
319         xge_hal_fifo_queue_t            queue[XGE_HAL_MAX_FIFO_NUM];
320 } xge_hal_fifo_config_t;
321
322 /**
323  * struct xge_hal_rts_port_t - RTS port entry
324  * @num: Port number
325  * @udp: Port is UDP (default TCP)
326  * @src: Port is Source (default Destination)
327  */
328 typedef struct xge_hal_rts_port_t {
329         int                             num;
330         int                             udp;
331         int                             src;
332 } xge_hal_rts_port_t;
333
334 /**
335  * struct xge_hal_ring_queue_t - Single ring configuration.
336  * @max: Max numbers of RxD blocks per queue
337  * @initial: Initial numbers of RxD blocks per queue
338  *           (can grow up to @max)
339  * @buffer_mode: Receive buffer mode (1, 2, 3, or 5); for details please refer
340  *               to Xframe User Guide.
341  * @dram_size_mb: Size (in MB) of Xframe DRAM used for _that_ ring.
342  *                Note that 64MB of available
343  *                on-board DRAM is shared between receive rings.
344  *                If a single ring is used, @dram_size_mb can be set to 64.
345  *                Sum of all rings' @dram_size_mb cannot exceed 64.
346  * @intr_vector: TBD
347  * @backoff_interval_us: Time (in microseconds), after which Xframe
348  *      tries to download RxDs posted by the host.
349  *      Note that the "backoff" does not happen if host posts receive
350  *      descriptors in the timely fashion.
351  * @max_frm_len: Maximum frame length that can be received on _that_ ring.
352  *               Setting this field to -1 ensures that the ring will
353  *               "accept" MTU-size frames (note that MTU can be changed at
354  *               runtime).
355  *               Any value other than (-1) specifies a certain "hard"
356  *               limit on the receive frame sizes.
357  *               The field can be used to activate receive frame-length based
358  *               steering.
359  * @priority:    Ring priority. 0 - highest, 7 - lowest. The value is used
360  *               to give prioritized access to PCI-X. See Xframe documentation
361  *               for details.
362  * @rth_en: Enable Receive Traffic Hashing (RTH).
363  * @no_snoop_bits: If non-zero, specifies no-snoop PCI operation,
364  *              which generally improves latency of the host bridge operation
365  *              (see PCI specification). For valid values please refer
366  *              to xge_hal_ring_queue_t{} in the driver sources.
367  * @indicate_max_pkts: Sets maximum number of received frames to be processed
368  *              within single interrupt.
369  * @configured: Boolean. Use 1 to specify that the ring is configured.
370  *              Only "configured" rings can be activated and used to post
371  *              Rx descriptors. Any subset of 8 available rings can be
372  *              "configured".
373  * @rts_mac_en: 1 - To enable Receive MAC address steering.
374  *              0 - To disable Receive MAC address steering.
375  * @rth_en: TBD
376  * @rts_port_en: TBD
377  * @rts_ports: TBD
378  * @rti: Xframe receive interrupt configuration.
379  *
380  * Single ring configuration.
381  * Note: Valid (min, max) range for each attribute is specified in the body of
382  * the xge_hal_ring_queue_t{} structure. Please refer to the
383  * corresponding header file.
384  * See also: xge_hal_fifo_config_t{}.
385  */
386 typedef struct xge_hal_ring_queue_t {
387         int                             max;
388         int                             initial;
389 #define XGE_HAL_MIN_RING_QUEUE_BLOCKS           1
390 #define XGE_HAL_MAX_RING_QUEUE_BLOCKS           64
391
392         int                             buffer_mode;
393 #define XGE_HAL_RING_QUEUE_BUFFER_MODE_1        1
394 #define XGE_HAL_RING_QUEUE_BUFFER_MODE_2        2
395 #define XGE_HAL_RING_QUEUE_BUFFER_MODE_3        3
396 #define XGE_HAL_RING_QUEUE_BUFFER_MODE_5        5
397
398         int                             dram_size_mb;
399 #define XGE_HAL_MIN_RING_QUEUE_SIZE             0
400 #define XGE_HAL_MAX_RING_QUEUE_SIZE_XENA        64
401 #define XGE_HAL_MAX_RING_QUEUE_SIZE_HERC        32
402
403         int                             intr_vector;
404 #define XGE_HAL_MIN_RING_QUEUE_INTR_VECTOR      0
405 #define XGE_HAL_MAX_RING_QUEUE_INTR_VECTOR      64
406
407         int                             backoff_interval_us;
408 #define XGE_HAL_MIN_BACKOFF_INTERVAL_US         1
409 #define XGE_HAL_MAX_BACKOFF_INTERVAL_US         125000
410
411         int                             max_frm_len;
412 #define XGE_HAL_MIN_MAX_FRM_LEN                 -1
413 #define XGE_HAL_MAX_MAX_FRM_LEN                 9622
414
415         int                             priority;
416 #define XGE_HAL_MIN_RING_PRIORITY               0
417 #define XGE_HAL_MAX_RING_PRIORITY               7
418
419         int                             no_snoop_bits;
420 #define XGE_HAL_MIN_RING_QUEUE_NO_SNOOP_DISABLED        0
421 #define XGE_HAL_MAX_RING_QUEUE_NO_SNOOP_RXD     1
422 #define XGE_HAL_MAX_RING_QUEUE_NO_SNOOP_BUFFER  2
423 #define XGE_HAL_MAX_RING_QUEUE_NO_SNOOP_ALL     3
424
425         int                             indicate_max_pkts;
426 #define XGE_HAL_MIN_RING_INDICATE_MAX_PKTS      1
427 #define XGE_HAL_MAX_RING_INDICATE_MAX_PKTS      65536
428
429         int                             configured;
430 #define XGE_HAL_MIN_RING_CONFIGURED             0
431 #define XGE_HAL_MAX_RING_CONFIGURED             1
432
433         int                             rts_mac_en;
434 #define XGE_HAL_MIN_RING_RTS_MAC_EN             0
435 #define XGE_HAL_MAX_RING_RTS_MAC_EN             1
436
437         int                             rth_en;
438 #define XGE_HAL_MIN_RING_RTH_EN                 0
439 #define XGE_HAL_MAX_RING_RTH_EN                 1
440
441         int                             rts_port_en;
442 #define XGE_HAL_MIN_RING_RTS_PORT_EN            0
443 #define XGE_HAL_MAX_RING_RTS_PORT_EN            1
444
445 #define XGE_HAL_MAX_STEERABLE_PORTS             32
446         xge_hal_rts_port_t                      rts_ports[XGE_HAL_MAX_STEERABLE_PORTS];
447
448         xge_hal_rti_config_t            rti;
449
450 } xge_hal_ring_queue_t;
451
452 /**
453  * struct xge_hal_ring_config_t - Array of ring configurations.
454  * @memblock_size: Ring descriptors are allocated in blocks of @mem_block_size
455  *                 bytes. Setting @memblock_size to page size ensures
456  *                 by-page allocation of descriptors. 128K bytes is the
457  *                 upper limit.
458  * @scatter_mode: Xframe supports two receive scatter modes: A and B.
459  *                For details please refer to Xframe User Guide.
460  * @strip_vlan_tag: TBD
461  * @queue: Array of all Xframe ring configurations.
462  *
463  * Array of ring configurations.
464  * See also: xge_hal_ring_queue_t{}.
465  */
466 typedef struct xge_hal_ring_config_t {
467
468         int                             memblock_size;
469 #define XGE_HAL_MIN_RING_MEMBLOCK_SIZE          4096
470 #define XGE_HAL_MAX_RING_MEMBLOCK_SIZE          131072
471
472         int                             scatter_mode;
473 #define XGE_HAL_RING_QUEUE_SCATTER_MODE_A               0
474 #define XGE_HAL_RING_QUEUE_SCATTER_MODE_B               1
475
476         int                             strip_vlan_tag;
477 #define XGE_HAL_RING_DONOT_STRIP_VLAN_TAG       0
478 #define XGE_HAL_RING_STRIP_VLAN_TAG             1
479
480 #define XGE_HAL_MIN_RING_NUM                    1
481 #define XGE_HAL_MAX_RING_NUM_HERC               8
482 #define XGE_HAL_MAX_RING_NUM_TITAN              (XGE_HAL_MAX_VIRTUAL_PATHS - 1)
483 #define XGE_HAL_MAX_RING_NUM                    (XGE_HAL_MAX_VIRTUAL_PATHS)
484         xge_hal_ring_queue_t            queue[XGE_HAL_MAX_RING_NUM];
485
486 } xge_hal_ring_config_t;
487
488 /**
489  * struct xge_hal_mac_config_t - MAC configuration.
490  * @media: Transponder type.
491  * @tmac_util_period: The sampling period over which the transmit utilization
492  *                    is calculated.
493  * @rmac_util_period: The sampling period over which the receive utilization
494  *                    is calculated.
495  * @rmac_strip_pad: Determines whether padding of received frames is removed by
496  *                  the MAC or sent to the host.
497  * @rmac_bcast_en: Enable frames containing broadcast address to be
498  *                 passed to the host.
499  * @rmac_pause_gen_en: Received pause generation enable.
500  * @rmac_pause_rcv_en: Receive pause enable.
501  * @rmac_pause_time: The value to be inserted in outgoing pause frames.
502  *             Has units of pause quanta (one pause quanta = 512 bit times).
503  * @mc_pause_threshold_q0q3: Contains thresholds for pause frame generation
504  *     for queues 0 through 3. The threshold value indicates portion of the
505  *     individual receive buffer queue size. Thresholds have a range of 0 to
506  *     255, allowing 256 possible watermarks in a queue.
507  * @mc_pause_threshold_q4q7: Contains thresholds for pause frame generation
508  *     for queues 4 through 7. The threshold value indicates portion of the
509  *     individual receive buffer queue size. Thresholds have a range of 0 to
510  *     255, allowing 256 possible watermarks in a queue.
511  *
512  * MAC configuration. This includes various aspects of configuration, including:
513  * - Pause frame threshold;
514  * - sampling rate to calculate link utilization;
515  * - enabling/disabling broadcasts.
516  *
517  * See Xframe User Guide for more details.
518  * Note: Valid (min, max) range for each attribute is specified in the body of
519  * the xge_hal_mac_config_t{} structure. Please refer to the
520  * corresponding include file.
521  */
522 typedef struct xge_hal_mac_config_t {
523         int                             media;
524 #define XGE_HAL_MIN_MEDIA                       0
525 #define XGE_HAL_MEDIA_SR                        0
526 #define XGE_HAL_MEDIA_SW                        1
527 #define XGE_HAL_MEDIA_LR                        2
528 #define XGE_HAL_MEDIA_LW                        3
529 #define XGE_HAL_MEDIA_ER                        4
530 #define XGE_HAL_MEDIA_EW                        5
531 #define XGE_HAL_MAX_MEDIA                       5
532
533         int                             tmac_util_period;
534 #define XGE_HAL_MIN_TMAC_UTIL_PERIOD            0
535 #define XGE_HAL_MAX_TMAC_UTIL_PERIOD            15
536
537         int                             rmac_util_period;
538 #define XGE_HAL_MIN_RMAC_UTIL_PERIOD            0
539 #define XGE_HAL_MAX_RMAC_UTIL_PERIOD            15
540
541         int                             rmac_bcast_en;
542 #define XGE_HAL_MIN_RMAC_BCAST_EN               0
543 #define XGE_HAL_MAX_RMAC_BCAST_EN               1
544
545         int                             rmac_pause_gen_en;
546 #define XGE_HAL_MIN_RMAC_PAUSE_GEN_EN           0
547 #define XGE_HAL_MAX_RMAC_PAUSE_GEN_EN           1
548
549         int                             rmac_pause_rcv_en;
550 #define XGE_HAL_MIN_RMAC_PAUSE_RCV_EN           0
551 #define XGE_HAL_MAX_RMAC_PAUSE_RCV_EN           1
552
553         int                             rmac_pause_time;
554 #define XGE_HAL_MIN_RMAC_HIGH_PTIME             16
555 #define XGE_HAL_MAX_RMAC_HIGH_PTIME             65535
556
557         int                             mc_pause_threshold_q0q3;
558 #define XGE_HAL_MIN_MC_PAUSE_THRESHOLD_Q0Q3     0
559 #define XGE_HAL_MAX_MC_PAUSE_THRESHOLD_Q0Q3     254
560
561         int                             mc_pause_threshold_q4q7;
562 #define XGE_HAL_MIN_MC_PAUSE_THRESHOLD_Q4Q7     0
563 #define XGE_HAL_MAX_MC_PAUSE_THRESHOLD_Q4Q7     254
564
565 } xge_hal_mac_config_t;
566
567 #ifdef XGEHAL_RNIC
568
569 /*
570  * struct xge_hal_vp_config_t - Configuration of virtual path
571  * @vp_id: Virtual Path Id
572  * @vp_valid: Flag specifies if the configuration is valid
573  * @bitmap_intr_num: Interrupt Number associated with the bitmap
574  * @nce_oid_start: The start of the NCE ID range
575  * @nce_oid_end: The end of the NCE ID range
576  * @session_oid_start: The start of the Session ID range
577  * @session_oid_end: The end of the Session ID range
578  * @srq_oid_start: The start of the HSRQ ID range
579  * @srq_oid_end: The end of the SRQ ID range
580  * @cqrq_oid_start: The start of the CQRQ range
581  * @cqrq_oid_end: The end of the CQRQ range
582  * @umq_length: Length of up message queue
583  * @umq_int_ctrl: Interrupt control for up Message queue
584  * @umq_gen_compl: Generate completion for up message queue
585  * @dmq_length: Length of down message queue
586  * @dmq_int_ctrl: Interrupt control for down Message queue
587  * @dmq_gen_compl: Generate completion for up message queue
588  *
589  * This structure is used by the driver to pass the configuration parameters to
590  * configure Virtual Path.
591  */
592 typedef struct xge_hal_vp_config_t{
593         u32                             vp_id;
594         u32                             vp_valid;
595 #define XGE_HAL_VP_CONFIG_INVALID       0
596 #define XGE_HAL_VP_CONFIG_VALID         1
597
598         int                             bitmap_intr_num;
599 #define XGE_HAL_BITMAP_INTR_NUM_MIN     0
600 #define XGE_HAL_BITMAP_INTR_NUM_MAX     3
601
602         u32                             nce_oid_start;
603         u32                             nce_oid_end;
604         u32                             session_oid_start;
605         u32                             session_oid_end;
606         u32                             srq_oid_start;
607         u32                             srq_oid_end;
608         u32                             cqrq_oid_start;
609         u32                             cqrq_oid_end;
610         u32                             umq_length;
611         u32                             umq_int_ctrl;
612         u32                             umq_gen_compl;
613         u32                             dmq_length;
614         u32                             dmq_int_ctrl;
615         u32                             dmq_gen_compl;
616 }xge_hal_vp_config_t;
617
618 #endif
619
620 /**
621  * struct xge_hal_device_config_t - Device configuration.
622  * @mtu: Current mtu size.
623  * @isr_polling_cnt: Maximum number of times to "poll" for Tx and Rx
624  *                   completions. Used in xge_hal_device_handle_irq().
625  * @latency_timer: Specifies, in units of PCI bus clocks, and in conformance
626  *                 with the PCI Specification, the value of the Latency Timer
627  *                 for this PCI bus master.
628  * Specify either zero or -1 to use BIOS default.
629  * @napi_weight: (TODO)
630  * @max_splits_trans: Maximum number of PCI-X split transactions.
631  * Specify (-1) to use BIOS default.
632  * @mmrb_count: Maximum Memory Read Byte Count. Use (-1) to use default
633  *              BIOS value. Otherwise: mmrb_count = 0 corresponds to 512B;
634  *              1 - 1KB, 2 - 2KB, and 3 - 4KB.
635  * @shared_splits: The number of Outstanding Split Transactions that is
636  *              shared by Tx and Rx requests. The device stops issuing Tx
637  *              requests once the number of Outstanding Split Transactions is
638  *              equal to the value of Shared_Splits.
639  *              A value of zero indicates that the Tx and Rx share all allocated
640  *              Split Requests, i.e. the device can issue both types (Tx and Rx)
641  *              of read requests until the number of Maximum Outstanding Split
642  *              Transactions is reached.
643  * @stats_refresh_time_sec: Sets the default interval for automatic stats transfer
644  *              to the host. This includes MAC stats as well as PCI stats.
645  *              See xge_hal_stats_hw_info_t{}.
646  * @pci_freq_mherz: PCI clock frequency, e.g.: 133 for 133MHz.
647  * @intr_mode: Line, MSI, or MSI-X interrupt.
648  * @sched_timer_us: If greater than zero, specifies time interval
649  *              (in microseconds) for the device to generate
650  *              interrupt. Note that unlike tti and rti interrupts,
651  *              the scheduled interrupt is generated independently of
652  *              whether there is transmit or receive traffic, respectively.
653  * @sched_timer_one_shot: 1 - generate scheduled interrupt only once.
654  *              0 - generate scheduled interrupt periodically at the specified
655  *              @sched_timer_us interval.
656  *
657  * @ring: See xge_hal_ring_config_t{}.
658  * @mac: See xge_hal_mac_config_t{}.
659  * @tti: See xge_hal_tti_config_t{}.
660  * @fifo: See xge_hal_fifo_config_t{}.
661  *
662  * @dump_on_serr: Dump adapter state ("about", statistics, registers) on SERR#.
663  * @dump_on_eccerr: Dump adapter state ("about", statistics, registers) on
664  *                  ECC error.
665  * @dump_on_parityerr: Dump adapter state ("about", statistics, registers) on
666  *                     parity error.
667  * @rth_en: Enable Receive Traffic Hashing(RTH) using IT(Indirection Table).
668  * @rth_bucket_size: RTH bucket width (in bits). For valid range please see
669  *                   xge_hal_device_config_t{} in the driver sources.
670  * @rth_spdm_en: Enable Receive Traffic Hashing(RTH) using SPDM(Socket Pair
671  *              Direct Match).
672  * @rth_spdm_use_l4: Set to 1, if the L4 ports are used in the calculation of
673  *      hash value in the RTH SPDM based steering.
674  * @rxufca_intr_thres: (TODO)
675  * @rxufca_lo_lim: (TODO)
676  * @rxufca_hi_lim: (TODO)
677  * @rxufca_lbolt_period: (TODO)
678  * @link_valid_cnt: link-valid counting is done only at device-open time,
679  * to determine with the specified certainty that the link is up. See also
680  * @link_retry_cnt.
681  * @link_retry_cnt: Max number of polls for link-up. Done only at device
682  * open time. Reducing this value as well as the previous @link_valid_cnt,
683  * speeds up device startup, which may be important if the driver
684  * is compiled into OS.
685  * @link_stability_period: Specify the period for which the link must be
686  * stable in order for the adapter to declare "LINK UP".
687  * The enumerated settings (see Xframe-II UG) are:
688  *      0 ........... instantaneous
689  *      1 ........... 500 Â´s
690  *      2 ........... 1 ms
691  *      3 ........... 64 ms
692  *      4 ........... 256 ms
693  *      5 ........... 512 ms
694  *      6 ........... 1 s
695  *      7 ........... 2 s
696  * @device_poll_millis: Specify the interval (in mulliseconds) between
697  * successive xge_hal_device_poll() runs.
698  * stable in order for the adapter to declare "LINK UP".
699  * @no_isr_events: TBD
700  * @lro_sg_size: TBD
701  * @lro_frm_len: TBD
702  * @bimodal_interrupts: Enable bimodal interrupts in device
703  * @bimodal_timer_lo_us: TBD
704  * @bimodal_timer_hi_us: TBD
705  * @rts_mac_en: Enable Receive Traffic Steering using MAC destination address
706  * @rts_qos_en: TBD
707  * @rts_port_en: TBD
708  * @vp_config: Configuration for virtual paths
709  * @max_cqe_groups:  The maximum number of adapter CQE group blocks a CQRQ
710  * can own at any one time.
711  * @max_num_wqe_od_groups: The maximum number of WQE Headers/OD Groups that
712  * this S-RQ can own at any one time.
713  * @no_wqe_threshold: Maximum number of times adapter polls WQE Hdr blocks for
714  * WQEs before generating a message or interrupt.
715  * @refill_threshold_high:This field provides a hysteresis upper bound for
716  * automatic adapter refill operations.
717  * @refill_threshold_low:This field provides a hysteresis lower bound for
718  * automatic adapter refill operations.
719  * @eol_policy:This field sets the policy for handling the end of list condition.\r
720  * 2'b00 - When EOL is reached,poll until last block wrapper size is no longer 0.\r
721  * 2'b01 - Send UMQ message when EOL is reached.\r
722  * 2'b1x - Poll until the poll_count_max is reached and if still EOL,send UMQ message
723  * @eol_poll_count_max:sets the maximum number of times the queue manager will poll for
724  * a non-zero block wrapper before giving up and sending a UMQ message
725  * @ack_blk_limit: Limit on the maximum number of ACK list blocks that can be held
726  * by a session at any one time.
727  * @poll_or_doorbell: TBD
728  *
729  * Xframe configuration.
730  * Contains per-device configuration parameters, including:
731  * - latency timer (settable via PCI configuration space);
732  * - maximum number of split transactions;
733  * - maximum number of shared splits;
734  * - stats sampling interval, etc.
735  *
736  * In addition, xge_hal_device_config_t{} includes "subordinate"
737  * configurations, including:
738  * - fifos and rings;
739  * - MAC (see xge_hal_mac_config_t{}).
740  *
741  * See Xframe User Guide for more details.
742  * Note: Valid (min, max) range for each attribute is specified in the body of
743  * the xge_hal_device_config_t{} structure. Please refer to the
744  * corresponding include file.
745  * See also: xge_hal_tti_config_t{}, xge_hal_stats_hw_info_t{},
746  * xge_hal_mac_config_t{}.
747  */
748 typedef struct xge_hal_device_config_t {
749         int                             mtu;
750 #define XGE_HAL_MIN_INITIAL_MTU         XGE_HAL_MIN_MTU
751 #define XGE_HAL_MAX_INITIAL_MTU         XGE_HAL_MAX_MTU
752
753         int                             isr_polling_cnt;
754 #define XGE_HAL_MIN_ISR_POLLING_CNT             0
755 #define XGE_HAL_MAX_ISR_POLLING_CNT             65536
756
757         int                             latency_timer;
758 #define XGE_HAL_USE_BIOS_DEFAULT_LATENCY        -1
759 #define XGE_HAL_MIN_LATENCY_TIMER               8
760 #define XGE_HAL_MAX_LATENCY_TIMER               255
761
762         int                             napi_weight;
763 #define XGE_HAL_DEF_NAPI_WEIGHT                 64
764
765         int                             max_splits_trans;
766 #define XGE_HAL_USE_BIOS_DEFAULT_SPLITS         -1
767 #define XGE_HAL_ONE_SPLIT_TRANSACTION           0
768 #define XGE_HAL_TWO_SPLIT_TRANSACTION           1
769 #define XGE_HAL_THREE_SPLIT_TRANSACTION         2
770 #define XGE_HAL_FOUR_SPLIT_TRANSACTION          3
771 #define XGE_HAL_EIGHT_SPLIT_TRANSACTION         4
772 #define XGE_HAL_TWELVE_SPLIT_TRANSACTION        5
773 #define XGE_HAL_SIXTEEN_SPLIT_TRANSACTION       6
774 #define XGE_HAL_THIRTYTWO_SPLIT_TRANSACTION     7
775
776         int                             mmrb_count;
777 #define XGE_HAL_DEFAULT_BIOS_MMRB_COUNT         -1
778 #define XGE_HAL_MIN_MMRB_COUNT                  0 /* 512b */
779 #define XGE_HAL_MAX_MMRB_COUNT                  3 /* 4k */
780
781         int                             shared_splits;
782 #define XGE_HAL_MIN_SHARED_SPLITS               0
783 #define XGE_HAL_MAX_SHARED_SPLITS               31
784
785         int                             stats_refresh_time_sec;
786 #define XGE_HAL_STATS_REFRESH_DISABLE           0
787 #define XGE_HAL_MIN_STATS_REFRESH_TIME          1
788 #define XGE_HAL_MAX_STATS_REFRESH_TIME          300
789
790         int                             pci_freq_mherz;
791 #define XGE_HAL_PCI_FREQ_MHERZ_33               33
792 #define XGE_HAL_PCI_FREQ_MHERZ_66               66
793 #define XGE_HAL_PCI_FREQ_MHERZ_100              100
794 #define XGE_HAL_PCI_FREQ_MHERZ_133              133
795 #define XGE_HAL_PCI_FREQ_MHERZ_266              266
796
797         int                             intr_mode;
798 #define XGE_HAL_INTR_MODE_IRQLINE               0
799 #define XGE_HAL_INTR_MODE_MSI                   1
800 #define XGE_HAL_INTR_MODE_MSIX                  2
801
802         int                             sched_timer_us;
803 #define XGE_HAL_SCHED_TIMER_DISABLED            0
804 #define XGE_HAL_SCHED_TIMER_MIN                 0
805 #define XGE_HAL_SCHED_TIMER_MAX                 0xFFFFF
806
807         int                             sched_timer_one_shot;
808 #define XGE_HAL_SCHED_TIMER_ON_SHOT_DISABLE     0
809 #define XGE_HAL_SCHED_TIMER_ON_SHOT_ENABLE      1
810
811         xge_hal_ring_config_t           ring;
812         xge_hal_mac_config_t            mac;
813         xge_hal_fifo_config_t           fifo;
814
815         int                             dump_on_serr;
816 #define XGE_HAL_DUMP_ON_SERR_DISABLE            0
817 #define XGE_HAL_DUMP_ON_SERR_ENABLE             1
818
819         int                             dump_on_eccerr;
820 #define XGE_HAL_DUMP_ON_ECCERR_DISABLE          0
821 #define XGE_HAL_DUMP_ON_ECCERR_ENABLE           1
822
823         int                             dump_on_parityerr;
824 #define XGE_HAL_DUMP_ON_PARITYERR_DISABLE       0
825 #define XGE_HAL_DUMP_ON_PARITYERR_ENABLE        1
826
827         int                             rth_en;
828 #define XGE_HAL_RTH_DISABLE                     0
829 #define XGE_HAL_RTH_ENABLE                      1
830
831         int                             rth_bucket_size;
832 #define XGE_HAL_MIN_RTH_BUCKET_SIZE             1
833 #define XGE_HAL_MAX_RTH_BUCKET_SIZE             8
834
835         int                             rth_spdm_en;
836 #define XGE_HAL_RTH_SPDM_DISABLE                0
837 #define XGE_HAL_RTH_SPDM_ENABLE                 1
838
839         int                             rth_spdm_use_l4;
840 #define XGE_HAL_RTH_SPDM_USE_L4                 1
841
842         int                             rxufca_intr_thres;
843 #define XGE_HAL_RXUFCA_INTR_THRES_MIN           1
844 #define XGE_HAL_RXUFCA_INTR_THRES_MAX           4096
845
846         int                             rxufca_lo_lim;
847 #define XGE_HAL_RXUFCA_LO_LIM_MIN               1
848 #define XGE_HAL_RXUFCA_LO_LIM_MAX               16
849
850         int                             rxufca_hi_lim;
851 #define XGE_HAL_RXUFCA_HI_LIM_MIN               1
852 #define XGE_HAL_RXUFCA_HI_LIM_MAX               256
853
854         int                             rxufca_lbolt_period;
855 #define XGE_HAL_RXUFCA_LBOLT_PERIOD_MIN         1
856 #define XGE_HAL_RXUFCA_LBOLT_PERIOD_MAX         1024
857
858         int                             link_valid_cnt;
859 #define XGE_HAL_LINK_VALID_CNT_MIN              0
860 #define XGE_HAL_LINK_VALID_CNT_MAX              127
861
862         int                             link_retry_cnt;
863 #define XGE_HAL_LINK_RETRY_CNT_MIN              0
864 #define XGE_HAL_LINK_RETRY_CNT_MAX              127
865
866         int                             link_stability_period;
867 #define XGE_HAL_DEFAULT_LINK_STABILITY_PERIOD   2 /* 1ms */
868 #define XGE_HAL_MIN_LINK_STABILITY_PERIOD       0 /* instantaneous */
869 #define XGE_HAL_MAX_LINK_STABILITY_PERIOD       7 /* 2s */
870
871         int                             device_poll_millis;
872 #define XGE_HAL_DEFAULT_DEVICE_POLL_MILLIS      1000
873 #define XGE_HAL_MIN_DEVICE_POLL_MILLIS          1
874 #define XGE_HAL_MAX_DEVICE_POLL_MILLIS          100000
875
876         int                             no_isr_events;
877 #define XGE_HAL_NO_ISR_EVENTS_MIN               0
878 #define XGE_HAL_NO_ISR_EVENTS_MAX               1
879
880         int                             lro_sg_size;
881 #define XGE_HAL_LRO_DEFAULT_SG_SIZE             10
882 #define XGE_HAL_LRO_MIN_SG_SIZE                 1
883 #define XGE_HAL_LRO_MAX_SG_SIZE                 64
884
885         int                             lro_frm_len;
886 #define XGE_HAL_LRO_DEFAULT_FRM_LEN             65536
887 #define XGE_HAL_LRO_MIN_FRM_LEN                 4096
888 #define XGE_HAL_LRO_MAX_FRM_LEN                 65536
889
890         int                             bimodal_interrupts;
891 #define XGE_HAL_BIMODAL_INTR_MIN                -1
892 #define XGE_HAL_BIMODAL_INTR_MAX                1
893
894         int                             bimodal_timer_lo_us;
895 #define XGE_HAL_BIMODAL_TIMER_LO_US_MIN         1
896 #define XGE_HAL_BIMODAL_TIMER_LO_US_MAX         127
897
898         int                             bimodal_timer_hi_us;
899 #define XGE_HAL_BIMODAL_TIMER_HI_US_MIN         128
900 #define XGE_HAL_BIMODAL_TIMER_HI_US_MAX         65535
901
902         int                             rts_mac_en;
903 #define XGE_HAL_RTS_MAC_DISABLE                 0
904 #define XGE_HAL_RTS_MAC_ENABLE                  1
905
906         int                             rts_qos_en;
907 #define XGE_HAL_RTS_QOS_DISABLE                 0
908 #define XGE_HAL_RTS_QOS_ENABLE                  1
909
910         int                             rts_port_en;
911 #define XGE_HAL_RTS_PORT_DISABLE                0
912 #define XGE_HAL_RTS_PORT_ENABLE                 1
913
914 #ifdef XGEHAL_RNIC
915
916         xge_hal_vp_config_t             vp_config[XGE_HAL_MAX_VIRTUAL_PATHS];
917
918         int                             max_cqe_groups;
919 #define XGE_HAL_MAX_CQE_GROUPS_MIN              1
920 #define XGE_HAL_MAX_CQE_GROUPS_MAX              16
921
922         int                             max_num_wqe_od_groups;
923 #define XGE_HAL_MAX_NUM_OD_GROUPS_MIN           1
924 #define XGE_HAL_MAX_NUM_OD_GROUPS_MAX           16
925
926         int                             no_wqe_threshold;
927 #define XGE_HAL_NO_WQE_THRESHOLD_MIN            1
928 #define XGE_HAL_NO_WQE_THRESHOLD_MAX            16
929
930         int                             refill_threshold_high;
931 #define XGE_HAL_REFILL_THRESHOLD_HIGH_MIN       1
932 #define XGE_HAL_REFILL_THRESHOLD_HIGH_MAX       16
933
934         int                             refill_threshold_low;
935 #define XGE_HAL_REFILL_THRESHOLD_LOW_MIN        1
936 #define XGE_HAL_REFILL_THRESHOLD_LOW_MAX        16
937
938         int                             ack_blk_limit;
939 #define XGE_HAL_ACK_BLOCK_LIMIT_MIN             1
940 #define XGE_HAL_ACK_BLOCK_LIMIT_MAX             16
941
942         int                             poll_or_doorbell;
943 #define XGE_HAL_POLL_OR_DOORBELL_POLL           1
944 #define XGE_HAL_POLL_OR_DOORBELL_DOORBELL       0
945
946
947 #endif
948
949 } xge_hal_device_config_t;
950
951 /**
952  * struct xge_hal_driver_config_t - HAL (layer) configuration.
953  * @periodic_poll_interval_millis: Interval, in milliseconds, which is used to
954  *                                 periodically poll HAL, i.e, invoke
955  *                                 xge_hal_device_poll().
956  *                                 Note that HAL does not maintain its own
957  *                                 polling context. HAL relies on ULD to
958  *                                 provide one.
959  * @queue_size_initial: Initial size of the HAL protected event queue.
960  *                      The queue is shared by HAL and upper-layer drivers.
961  *                      The queue is used to exchange and process slow-path
962  *                      events. See xge_hal_event_e.
963  * @queue_size_max: Maximum size of the HAL queue. Depending on the load,
964  *                  the queue may grow at run-time up to @queue_max_size.
965  * @tracebuf_size: Size of the trace buffer. Set it to '0' to disable.
966  * HAL configuration. (Note: do not confuse HAL layer with (possibly multiple)
967  * HAL devices.)
968  * Currently this structure contains just a few basic values.
969  * Note: Valid (min, max) range for each attribute is specified in the body of
970  * the structure. Please refer to the corresponding header file.
971  * See also: xge_hal_device_poll()
972  */
973 typedef struct xge_hal_driver_config_t {
974         int                             queue_size_initial;
975 #define XGE_HAL_MIN_QUEUE_SIZE_INITIAL          1
976 #define XGE_HAL_MAX_QUEUE_SIZE_INITIAL          16
977
978         int                             queue_size_max;
979 #define XGE_HAL_MIN_QUEUE_SIZE_MAX              1
980 #define XGE_HAL_MAX_QUEUE_SIZE_MAX              16
981
982 #ifdef XGE_TRACE_INTO_CIRCULAR_ARR
983         int                             tracebuf_size;
984 #define XGE_HAL_MIN_CIRCULAR_ARR                4096
985 #define XGE_HAL_MAX_CIRCULAR_ARR                1048576
986 #define XGE_HAL_DEF_CIRCULAR_ARR                XGE_OS_HOST_PAGE_SIZE
987
988         int                             tracebuf_timestamp_en;
989 #define XGE_HAL_MIN_TIMESTAMP_EN                0
990 #define XGE_HAL_MAX_TIMESTAMP_EN                1
991 #endif
992
993 } xge_hal_driver_config_t;
994
995
996 /* ========================== PRIVATE API ================================= */
997
998 xge_hal_status_e
999 __hal_device_config_check_common (xge_hal_device_config_t *new_config);
1000
1001 xge_hal_status_e
1002 __hal_device_config_check_xena (xge_hal_device_config_t *new_config);
1003
1004 xge_hal_status_e
1005 __hal_device_config_check_herc (xge_hal_device_config_t *new_config);
1006
1007 xge_hal_status_e
1008 __hal_driver_config_check (xge_hal_driver_config_t *new_config);
1009
1010 __EXTERN_END_DECLS
1011
1012 #endif /* XGE_HAL_CONFIG_H */