]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/vxge/include/vxgehal-config.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / vxge / include / vxgehal-config.h
1 /*-
2  * Copyright(c) 2002-2011 Exar Corp.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification are permitted provided the following conditions are met:
7  *
8  *    1. Redistributions of source code must retain the above copyright notice,
9  *       this list of conditions and the following disclaimer.
10  *
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  *    3. Neither the name of the Exar Corporation nor the names of its
16  *       contributors may be used to endorse or promote products derived from
17  *       this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 /*$FreeBSD$*/
32
33 #ifndef VXGE_HAL_CONFIG_H
34 #define VXGE_HAL_CONFIG_H
35
36 __EXTERN_BEGIN_DECLS
37
38 #define VXGE_HAL_USE_FLASH_DEFAULT                      VXGE_HAL_DEFAULT_32
39
40 #define VXGE_HAL_MAX_INTR_PER_VP                        4
41
42 #define VXGE_HAL_VPATH_MSIX_MAX                         4
43
44 #define VXGE_HAL_VPATH_INTR_TX                          0
45
46 #define VXGE_HAL_VPATH_INTR_RX                          1
47
48 #define VXGE_HAL_VPATH_INTR_EINTA                       2
49
50 #define VXGE_HAL_VPATH_INTR_BMAP                        3
51
52 #define WAIT_FACTOR                                     1
53 /*
54  * struct vxge_hal_driver_config_t - HAL driver object configuration.
55  *
56  * @level: Debug Level. See vxge_debug_level_e {}
57  *
58  * Currently this structure contains just a few basic values.
59  */
60 typedef struct vxge_hal_driver_config_t {
61         vxge_debug_level_e level;
62 } vxge_hal_driver_config_t;
63
64 /*
65  * struct vxge_hal_wire_port_config_t - Wire Port configuration (Physical ports)
66  * @port_id: Port number
67  * @media: Transponder type.
68  * @mtu: mtu size used on this port.
69  * @autoneg_mode: The device supports several mechanisms to auto-negotiate the
70  *              port data rate. The Fixed mode essentially means no
71  *              auto-negotiation and the data rate is determined by the RATE
72  *              field of this register. The MDIO-based mode determines the data
73  *              rate by reading MDIO registers in the external PHY chip. The
74  *              Backplane Ethernet mode using parallel detect and/or
75  *              DME-signaled exchange of page information with the PHY chip in
76  *              order to figure out the proper rate.
77  *              00 - Fixed
78  *              01 - MDIO-based
79  *              10 - Backplane Ethernet
80  *              11 - Reserved
81  * @autoneg_rate: When MODE is set to Fixed, then this field determines the data
82  *              rate of the port.
83  *              0 - 1G
84  *              1 - 10G
85  * @fixed_use_fsm: When MODE is set to Fixed, then this field determines whether
86  *              a processor (i.e. F/W or host driver) or hardware-based state
87  *              machine is used to run the auto-negotiation.
88  *              0 - Use processor. Either on-chip F/W or host-based driver used.
89  *              1 - Use H/W state machine
90  * @antp_use_fsm: When MODE is set to ANTP (Auto-Negotiation for Twisted Pair),
91  *              this field determines whether a processor (F/W or host driver)
92  *              or hardware-based state machine is used to talk to the PHY chip
93  *              via the MDIO interface.
94  *              0 - Use processor. Either on-chip F/W or host-based driver used.
95  *              1 - Use H/W state machine
96  * @anbe_use_fsm: When MODE is set to ANBE-based, then this field determines
97  *              whether a processor (i.e. F/W or host driver) or hardware-based
98  *              state machine is used to talk to the Backplane Ethernet logic
99  *              inside the device
100  *              0 - Use processor. Either on-chip F/W or host-based driver used.
101  *              1 - Use H/W state machine
102  * @link_stability_period: Timeout for the link stability
103  * @port_stability_period: Timeout for the port stability
104  * @tmac_en: TMAC enable. 0 - Disable; 1 - Enable
105  * @rmac_en: RMAC enable. 0 - Disable; 1 - Enable
106  * @tmac_pad: Determines whether padding is appended to transmitted frames.
107  *              0 - No padding appended
108  *              1 - Pad to 64 bytes (not including preamble/SFD)
109  * @tmac_pad_byte: The byte that is used to pad
110  * @tmac_util_period: The sampling period over which the transmit utilization
111  *                 is calculated.
112  * @rmac_strip_fcs: Determines whether FCS of received frames is removed by the
113  *              MAC or sent to the host.
114  *              0 - Send FCS to host.
115  *              1 - FCS removed by MAC.
116  * @rmac_prom_en: Enable/Disable promiscuous mode. In promiscuous mode all
117  *              received frames are passed to the host. PROM_EN overrules the
118  *              configuration determined by the UCAST_ALL_ADDR_EN,
119  *              MCAST_ALL_ADDR_EN and ALL_VID_EN fields of RXMAC_VCFG, as well
120  *              as the configurable discard fields in RMAC_ERR_CFG_PORTn.
121  *              Note: PROM_EN does not overrule DISCARD_PFRM (i.e. discard of
122  *              pause frames by receive MAC is controlled solely by
123  *              DISCARD_PFRM).
124  *              0 - Disable
125  *              1 - Enable
126  * @rmac_discard_pfrm: Determines whether received pause frames are discarded at
127  *              the receive MAC or passed to the host.
128  *              Note: Other MAC control frames are always passed to the host.
129  *              0 - Send to host.
130  *              1 - Pause frames discarded by MAC.
131  * @rmac_util_period: The sampling period over which the receive utilization
132  *                 is calculated.
133  * @rmac_strip_pad: Determines whether padding of received frames is removed by
134  *               the MAC or sent to the host.
135  * @rmac_bcast_en: Enable frames containing broadcast address to be
136  *              passed to the host.
137  * @rmac_pause_gen_en: Received pause generation enable.
138  * @rmac_pause_rcv_en: Receive pause enable.
139  * @rmac_pause_time: The value to be inserted in outgoing pause frames.
140  *              Has units of pause quanta (one pause quanta = 512 bit times).
141  * @limiter_en: Enables logic that limits the contribution that any one receive
142  *              queue can have on the transmission of pause frames. This avoids
143  *              a situation where the adapter will permanently send pause frames
144  *              due to a receive VPATH that is either undergoing a long reset or
145  *              is in a dead state.
146  *              0 - Don't limit the contribution of any queue. If any queue's
147  *              fill level sits above the high threshold, then a pause frame
148  *              is sent.
149  *              1 - Place a cap on the number of pause frames that are sent
150  *              because any one queue has crossed its high threshold.
151  *              See MAX_LIMIT for more details.
152  * @max_limit: Contains the value that is loaded into the per-queue limiting
153  *              counters that exist in the flow control logic. Essentially,
154  *              this represents the maximum number of pause frames that are sent
155  *              due to any one particular queue having crossed its high
156  *              threshold. Each counter is set to this max limit the first time
157  *              the corresponding queue's high threshold is crossed. The counter
158  *              decrements each time the queue remains above the high threshold
159  *              and the adapter requests pause frame transmission. Once the
160  *              counter expires that queue no longer contributes to pause frame
161  *              transmission requests. The queue's fill level must drop below
162  *              the low pause threshold before it is once again allowed to
163  *              contribute. Note: This field is only used when LIMITER_EN is set
164  *              to 1.
165  *
166  * Wire Port Configuration
167  */
168 typedef struct vxge_hal_wire_port_config_t {
169
170                 u32                             port_id;
171 #define VXGE_HAL_WIRE_PORT_PORT0                                0
172 #define VXGE_HAL_WIRE_PORT_PORT1                                1
173 #define VXGE_HAL_WIRE_PORT_MAX_PORTS                VXGE_HAL_MAC_MAX_WIRE_PORTS
174
175                 u32                             media;
176 #define VXGE_HAL_WIRE_PORT_MIN_MEDIA                            0
177 #define VXGE_HAL_WIRE_PORT_MEDIA_SR                             0
178 #define VXGE_HAL_WIRE_PORT_MEDIA_SW                             1
179 #define VXGE_HAL_WIRE_PORT_MEDIA_LR                             2
180 #define VXGE_HAL_WIRE_PORT_MEDIA_LW                             3
181 #define VXGE_HAL_WIRE_PORT_MEDIA_ER                             4
182 #define VXGE_HAL_WIRE_PORT_MEDIA_EW                             5
183 #define VXGE_HAL_WIRE_PORT_MAX_MEDIA                            5
184 #define VXGE_HAL_WIRE_PORT_MEDIA_DEFAULT            VXGE_HAL_USE_FLASH_DEFAULT
185
186                 u32                             mtu;
187 #define VXGE_HAL_WIRE_PORT_MIN_INITIAL_MTU          VXGE_HAL_MIN_MTU
188 #define VXGE_HAL_WIRE_PORT_MAX_INITIAL_MTU          VXGE_HAL_MAX_MTU
189 #define VXGE_HAL_WIRE_PORT_DEF_INITIAL_MTU          VXGE_HAL_USE_FLASH_DEFAULT
190
191                 u32                             autoneg_mode;
192 #define VXGE_HAL_WIRE_PORT_AUTONEG_MODE_FIXED                   0
193 #define VXGE_HAL_WIRE_PORT_AUTONEG_MODE_ANTP                    1
194 #define VXGE_HAL_WIRE_PORT_AUTONEG_MODE_ANBE                    2
195 #define VXGE_HAL_WIRE_PORT_AUTONEG_MODE_RESERVED                3
196 #define VXGE_HAL_WIRE_PORT_AUTONEG_MODE_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
197
198                 u32                             autoneg_rate;
199 #define VXGE_HAL_WIRE_PORT_AUTONEG_RATE_1G                      0
200 #define VXGE_HAL_WIRE_PORT_AUTONEG_RATE_10G                     1
201 #define VXGE_HAL_WIRE_PORT_AUTONEG_RATE_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
202
203                 u32                             fixed_use_fsm;
204 #define VXGE_HAL_WIRE_PORT_FIXED_USE_FSM_PROCESSOR              0
205 #define VXGE_HAL_WIRE_PORT_FIXED_USE_FSM_HW                     1
206 #define VXGE_HAL_WIRE_PORT_FIXED_USE_FSM_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
207
208                 u32                             antp_use_fsm;
209 #define VXGE_HAL_WIRE_PORT_ANTP_USE_FSM_PROCESSOR               0
210 #define VXGE_HAL_WIRE_PORT_ANTP_USE_FSM_HW                      1
211 #define VXGE_HAL_WIRE_PORT_ANTP_USE_FSM_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
212
213                 u32                             anbe_use_fsm;
214 #define VXGE_HAL_WIRE_PORT_ANBE_USE_FSM_PROCESSOR               0
215 #define VXGE_HAL_WIRE_PORT_ANBE_USE_FSM_HW                      1
216 #define VXGE_HAL_WIRE_PORT_ANBE_USE_FSM_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
217
218                 u32                             link_stability_period;
219 #define VXGE_HAL_WIRE_PORT_MIN_LINK_STABILITY_PERIOD            0x0 /* 0s */
220 #define VXGE_HAL_WIRE_PORT_MAX_LINK_STABILITY_PERIOD            0xF /* 2s */
221 #define VXGE_HAL_WIRE_PORT_DEF_LINK_STABILITY_PERIOD            \
222                                                     VXGE_HAL_USE_FLASH_DEFAULT
223
224                 u32                             port_stability_period;
225 #define VXGE_HAL_WIRE_PORT_MIN_PORT_STABILITY_PERIOD            0x0 /* 0s */
226 #define VXGE_HAL_WIRE_PORT_MAX_PORT_STABILITY_PERIOD            0xF /* 2s */
227 #define VXGE_HAL_WIRE_PORT_DEF_PORT_STABILITY_PERIOD            \
228                                                     VXGE_HAL_USE_FLASH_DEFAULT
229
230                 u32                             tmac_en;
231 #define VXGE_HAL_WIRE_PORT_TMAC_ENABLE                          1
232 #define VXGE_HAL_WIRE_PORT_TMAC_DISABLE                         0
233 #define VXGE_HAL_WIRE_PORT_TMAC_DEFAULT             VXGE_HAL_USE_FLASH_DEFAULT
234
235                 u32                             rmac_en;
236 #define VXGE_HAL_WIRE_PORT_RMAC_ENABLE                          1
237 #define VXGE_HAL_WIRE_PORT_RMAC_DISABLE                         0
238 #define VXGE_HAL_WIRE_PORT_RMAC_DEFAULT             VXGE_HAL_USE_FLASH_DEFAULT
239
240                 u32                             tmac_pad;
241 #define VXGE_HAL_WIRE_PORT_TMAC_NO_PAD                          0
242 #define VXGE_HAL_WIRE_PORT_TMAC_64B_PAD                         1
243 #define VXGE_HAL_WIRE_PORT_TMAC_PAD_DEFAULT         VXGE_HAL_USE_FLASH_DEFAULT
244
245                 u32                             tmac_pad_byte;
246 #define VXGE_HAL_WIRE_PORT_MIN_TMAC_PAD_BYTE                    0
247 #define VXGE_HAL_WIRE_PORT_MAX_TMAC_PAD_BYTE                    255
248 #define VXGE_HAL_WIRE_PORT_DEF_TMAC_PAD_BYTE        VXGE_HAL_USE_FLASH_DEFAULT
249
250                 u32                             tmac_util_period;
251 #define VXGE_HAL_WIRE_PORT_MIN_TMAC_UTIL_PERIOD                 0
252 #define VXGE_HAL_WIRE_PORT_MAX_TMAC_UTIL_PERIOD                 15
253 #define VXGE_HAL_WIRE_PORT_DEF_TMAC_UTIL_PERIOD     VXGE_HAL_USE_FLASH_DEFAULT
254
255                 u32                             rmac_strip_fcs;
256 #define VXGE_HAL_WIRE_PORT_RMAC_STRIP_FCS                       1
257 #define VXGE_HAL_WIRE_PORT_RMAC_SEND_FCS_TO_HOST                0
258 #define VXGE_HAL_WIRE_PORT_RMAC_STRIP_FCS_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
259
260                 u32                             rmac_prom_en;
261 #define VXGE_HAL_WIRE_PORT_RMAC_PROM_EN_ENABLE                  1
262 #define VXGE_HAL_WIRE_PORT_RMAC_PROM_EN_DISABLE                 0
263 #define VXGE_HAL_WIRE_PORT_RMAC_PROM_EN_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
264
265                 u32                             rmac_discard_pfrm;
266 #define VXGE_HAL_WIRE_PORT_RMAC_DISCARD_PFRM                    1
267 #define VXGE_HAL_WIRE_PORT_RMAC_SEND_PFRM_TO_HOST               0
268 #define VXGE_HAL_WIRE_PORT_RMAC_DISCARD_PFRM_DEFAULT            \
269                                                     VXGE_HAL_USE_FLASH_DEFAULT
270
271                 u32                             rmac_util_period;
272 #define VXGE_HAL_WIRE_PORT_MIN_RMAC_UTIL_PERIOD                 0
273 #define VXGE_HAL_WIRE_PORT_MAX_RMAC_UTIL_PERIOD                 15
274 #define VXGE_HAL_WIRE_PORT_DEF_RMAC_UTIL_PERIOD     VXGE_HAL_USE_FLASH_DEFAULT
275
276                 u32                             rmac_pause_gen_en;
277 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_GEN_EN_ENABLE             1
278 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_GEN_EN_DISABLE            0
279 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_GEN_EN_DEFAULT            \
280                                                     VXGE_HAL_USE_FLASH_DEFAULT
281
282                 u32                             rmac_pause_rcv_en;
283 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_RCV_EN_ENABLE             1
284 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_RCV_EN_DISABLE            0
285 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_RCV_EN_DEFAULT            \
286                                                     VXGE_HAL_USE_FLASH_DEFAULT
287
288                 u32                             rmac_pause_time;
289 #define VXGE_HAL_WIRE_PORT_MIN_RMAC_HIGH_PTIME                  16
290 #define VXGE_HAL_WIRE_PORT_MAX_RMAC_HIGH_PTIME                  65535
291 #define VXGE_HAL_WIRE_PORT_DEF_RMAC_HIGH_PTIME      VXGE_HAL_USE_FLASH_DEFAULT
292
293                 u32                             limiter_en;
294 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_LIMITER_ENABLE            1
295 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_LIMITER_DISABLE           0
296 #define VXGE_HAL_WIRE_PORT_RMAC_PAUSE_LIMITER_DEFAULT           \
297                                                     VXGE_HAL_USE_FLASH_DEFAULT
298
299                 u32                             max_limit;
300 #define VXGE_HAL_WIRE_PORT_MIN_RMAC_MAX_LIMIT                   0
301 #define VXGE_HAL_WIRE_PORT_MAX_RMAC_MAX_LIMIT                   255
302 #define VXGE_HAL_WIRE_PORT_DEF_RMAC_MAX_LIMIT       VXGE_HAL_USE_FLASH_DEFAULT
303
304 } vxge_hal_wire_port_config_t;
305
306 /*
307  * struct vxge_hal_switch_port_config_t - Switch Port configuration(vm-vm port)
308  * @mtu: mtu size used on this port.
309  * @tmac_en: TMAC enable. 0 - Disable; 1 - Enable
310  * @rmac_en: RMAC enable. 0 - Disable; 1 - Enable
311  * @tmac_pad: Determines whether padding is appended to transmitted frames.
312  *              0 - No padding appended
313  *              1 - Pad to 64 bytes (not including preamble/SFD)
314  * @tmac_pad_byte: The byte that is used to pad
315  * @tmac_util_period: The sampling period over which the transmit utilization
316  *                 is calculated.
317  * @rmac_strip_fcs: Determines whether FCS of received frames is removed by the
318  *              MAC or sent to the host.
319  *              0 - Send FCS to host.
320  *              1 - FCS removed by MAC.
321  * @rmac_prom_en: Enable/Disable promiscuous mode. In promiscuous mode all
322  *              received frames are passed to the host. PROM_EN overrules the
323  *              configuration determined by the UCAST_ALL_ADDR_EN,
324  *              MCAST_ALL_ADDR_EN and ALL_VID_EN fields of RXMAC_VCFG, as well
325  *              as the configurable discard fields in RMAC_ERR_CFG_PORTn.
326  *              Note: PROM_EN does not overrule DISCARD_PFRM (i.e. discard of
327  *              pause frames by receive MAC is controlled solely by
328  *              DISCARD_PFRM).
329  *              0 - Disable
330  *              1 - Enable
331  * @rmac_discard_pfrm: Determines whether received pause frames are discarded at
332  *              the receive MAC or passed to the host.
333  *              Note: Other MAC control frames are always passed to the host.
334  *              0 - Send to host.
335  *              1 - Pause frames discarded by MAC.
336  * @rmac_util_period: The sampling period over which the receive utilization
337  *                 is calculated.
338  * @rmac_strip_pad: Determines whether padding of received frames is removed by
339  *               the MAC or sent to the host.
340  * @rmac_bcast_en: Enable frames containing broadcast address to be
341  *              passed to the host.
342  * @rmac_pause_gen_en: Received pause generation enable.
343  * @rmac_pause_rcv_en: Receive pause enable.
344  * @rmac_pause_time: The value to be inserted in outgoing pause frames.
345  *              Has units of pause quanta (one pause quanta = 512 bit times).
346  * @limiter_en: Enables logic that limits the contribution that any one receive
347  *              queue can have on the transmission of pause frames. This avoids
348  *              a situation where the adapter will permanently send pause frames
349  *              due to a receive VPATH that is either undergoing a long reset or
350  *              is in a dead state.
351  *              0 - Don't limit the contribution of any queue. If any queue's
352  *              fill level sits above the high threshold, then a pause frame
353  *              is sent.
354  *              1 - Place a cap on the number of pause frames that are sent
355  *              because any one queue has crossed its high threshold.
356  *              See MAX_LIMIT for more details.
357  * @max_limit: Contains the value that is loaded into the per-queue limiting
358  *              counters that exist in the flow control logic. Essentially,
359  *              this represents the maximum number of pause frames that are sent
360  *              due to any one particular queue having crossed its high
361  *              threshold. Each counter is set to this max limit the first time
362  *              the corresponding queue's high threshold is crossed. The counter
363  *              decrements each time the queue remains above the high threshold
364  *              and the adapter requests pause frame transmission. Once the
365  *              counter expires that queue no longer contributes to pause frame
366  *              transmission requests. The queue's fill level must drop below
367  *              the low pause threshold before it is once again allowed to
368  *              contribute. Note: This field is only used when LIMITER_EN is set
369  *              to 1.
370  *
371  * Switch Port Configuration
372  */
373 typedef struct vxge_hal_switch_port_config_t {
374
375                 u32                             mtu;
376 #define VXGE_HAL_SWITCH_PORT_MIN_INITIAL_MTU                VXGE_HAL_MIN_MTU
377 #define VXGE_HAL_SWITCH_PORT_MAX_INITIAL_MTU                VXGE_HAL_MAX_MTU
378 #define VXGE_HAL_SWITCH_PORT_DEF_INITIAL_MTU        VXGE_HAL_USE_FLASH_DEFAULT
379
380                 u32                             tmac_en;
381 #define VXGE_HAL_SWITCH_PORT_TMAC_ENABLE                                1
382 #define VXGE_HAL_SWITCH_PORT_TMAC_DISABLE                               0
383 #define VXGE_HAL_SWITCH_PORT_TMAC_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
384
385                 u32                             rmac_en;
386 #define VXGE_HAL_SWITCH_PORT_RMAC_ENABLE                                1
387 #define VXGE_HAL_SWITCH_PORT_RMAC_DISABLE                               0
388 #define VXGE_HAL_SWITCH_PORT_RMAC_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
389
390                 u32                             tmac_pad;
391 #define VXGE_HAL_SWITCH_PORT_TMAC_NO_PAD                                0
392 #define VXGE_HAL_SWITCH_PORT_TMAC_64B_PAD                               1
393 #define VXGE_HAL_SWITCH_PORT_TMAC_PAD_DEFAULT       VXGE_HAL_USE_FLASH_DEFAULT
394
395                 u32                             tmac_pad_byte;
396 #define VXGE_HAL_SWITCH_PORT_MIN_TMAC_PAD_BYTE                  0
397 #define VXGE_HAL_SWITCH_PORT_MAX_TMAC_PAD_BYTE                  255
398 #define VXGE_HAL_SWITCH_PORT_DEF_TMAC_PAD_BYTE      VXGE_HAL_USE_FLASH_DEFAULT
399
400                 u32                             tmac_util_period;
401 #define VXGE_HAL_SWITCH_PORT_MIN_TMAC_UTIL_PERIOD                       0
402 #define VXGE_HAL_SWITCH_PORT_MAX_TMAC_UTIL_PERIOD                       15
403 #define VXGE_HAL_SWITCH_PORT_DEF_TMAC_UTIL_PERIOD   VXGE_HAL_USE_FLASH_DEFAULT
404
405                 u32                             rmac_strip_fcs;
406 #define VXGE_HAL_SWITCH_PORT_RMAC_STRIP_FCS                     1
407 #define VXGE_HAL_SWITCH_PORT_RMAC_SEND_FCS_TO_HOST              0
408 #define VXGE_HAL_SWITCH_PORT_RMAC_STRIP_FCS_DEFAULT VXGE_HAL_USE_FLASH_DEFAULT
409
410                 u32                             rmac_prom_en;
411 #define VXGE_HAL_SWITCH_PORT_RMAC_PROM_EN_ENABLE                        1
412 #define VXGE_HAL_SWITCH_PORT_RMAC_PROM_EN_DISABLE                       0
413 #define VXGE_HAL_SWITCH_PORT_RMAC_PROM_EN_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
414
415                 u32                             rmac_discard_pfrm;
416 #define VXGE_HAL_SWITCH_PORT_RMAC_DISCARD_PFRM                  1
417 #define VXGE_HAL_SWITCH_PORT_RMAC_SEND_PFRM_TO_HOST             0
418 #define VXGE_HAL_SWITCH_PORT_RMAC_DISCARD_PFRM_DEFAULT          \
419                                                     VXGE_HAL_USE_FLASH_DEFAULT
420
421                 u32                             rmac_util_period;
422 #define VXGE_HAL_SWITCH_PORT_MIN_RMAC_UTIL_PERIOD                       0
423 #define VXGE_HAL_SWITCH_PORT_MAX_RMAC_UTIL_PERIOD                       15
424 #define VXGE_HAL_SWITCH_PORT_DEF_RMAC_UTIL_PERIOD   VXGE_HAL_USE_FLASH_DEFAULT
425
426                 u32                             rmac_pause_gen_en;
427 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_GEN_EN_ENABLE           1
428 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_GEN_EN_DISABLE          0
429 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_GEN_EN_DEFAULT          \
430                                                     VXGE_HAL_USE_FLASH_DEFAULT
431
432                 u32                             rmac_pause_rcv_en;
433 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_RCV_EN_ENABLE           1
434 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_RCV_EN_DISABLE          0
435 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_RCV_EN_DEFAULT          \
436                                                     VXGE_HAL_USE_FLASH_DEFAULT
437
438                 u32                             rmac_pause_time;
439 #define VXGE_HAL_SWITCH_PORT_MIN_RMAC_HIGH_PTIME                        16
440 #define VXGE_HAL_SWITCH_PORT_MAX_RMAC_HIGH_PTIME                        65535
441 #define VXGE_HAL_SWITCH_PORT_DEF_RMAC_HIGH_PTIME    VXGE_HAL_USE_FLASH_DEFAULT
442
443                 u32                             limiter_en;
444 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_LIMITER_ENABLE          1
445 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_LIMITER_DISABLE         0
446 #define VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_LIMITER_DEFAULT         \
447                                                     VXGE_HAL_USE_FLASH_DEFAULT
448
449                 u32                             max_limit;
450 #define VXGE_HAL_SWITCH_PORT_MIN_RMAC_MAX_LIMIT                 0
451 #define VXGE_HAL_SWITCH_PORT_MAX_RMAC_MAX_LIMIT                 255
452 #define VXGE_HAL_SWITCH_PORT_DEF_RMAC_MAX_LIMIT     VXGE_HAL_USE_FLASH_DEFAULT
453
454 } vxge_hal_switch_port_config_t;
455
456 /*
457  * struct vxge_hal_mac_config_t - MAC configuration (Physical ports).
458  * @wire_port_config: Wire Port configuration
459  * @switch_port_config: Switch Port configuration
460  * @network_stability_period: The wait period for network stability
461  * @mc_pause_threshold: Contains thresholds for pause frame generation
462  *                for queues 0 through 15. The threshold value indicates portion
463  *              of the individual receive buffer queue size. Thresholds have a
464  *              range of 0 to 255, allowing 256 possible watermarks in a queue.
465  * @tmac_perma_stop_en: Controls TMAC reaction to double ECC errors on its
466  *              internal SRAMs.
467  *              0 - Disable TMAC permanent stop
468  *              1 - Enable TMAC permanent stop whenever double ECC errors are
469  *              detected on the internal transmit SRAMs.
470  * @tmac_tx_switch_dis: Allows the user to disable the switching of transmit
471  *              frames back to the receive path.
472  *              0 - Tx frames are switched based on the result of the DA lookup
473  *              1 - The DA lookup result is ignored and all traffic is sent to
474  *              the wire.
475  *              Note that this register field does not impact the multicast
476  *              replication on the receive side.
477  * @tmac_lossy_switch_en: Controls the behaviour of the internal Tx to Rx switch
478  *              in the event of back-pressure on the receive path due to
479  *              priority given to traffic arriving off the wire or simply due to
480  *              a full receive external buffer. br>
481  *              0 - No frames are dropped on the switch path. Instead, in the
482  *              event of back-pressure, the transmit path is backed up.
483  *              1 - Whenever back-pressure is present and the next frame is
484  *              bound for the switch path, then the frame is dropped.
485  *              If it is also destined for the transmit wire, it is still
486  *              sent there.
487  *              Note: HIP traffic that is bound for the switch path is never
488  *              dropped - the transmit path is forced to backup.
489  * @tmac_lossy_wire_en: Controls the behaviour of the TMAC when the wire path
490  *              is unavailable. This occurs when the target wire port is down.
491  *              0 - No frames are dropped on the wire path. Instead,in the event
492  *              of port failure, the transmit path is backed up.
493  *              1 - Whenever a wire port is down and the next frame is bound for
494  *              that port, then the frame is dropped. If it is also destined
495  *              for the switch path, it is still sent there.
496  * @tmac_bcast_to_wire_dis: Suppresses the transmission of broadcast frames to
497  *              the wire.
498  *              0 - Transmit broadcast frames are sent out the wire and also
499  *              sent along the switch path.
500  *              1 - Transmit broadcast frame are only sent along the switch path
501  * @tmac_bcast_to_switch_dis: Suppresses the transmission of broadcast frames
502  *              along the switch path.
503  *              0 - Transmit broadcast frames are sent out the wire and also
504  *              sent along the switch path.
505  *              1 - Transmit broadcast frame are only sent out the wire.
506  * @tmac_host_append_fcs_en: Suppresses the H/W from appending the FCS to the
507  *              end of transmitted frames. The host is responsible for tacking
508  *              on the 4-byte FCS at the end of the frame.
509  *              0 - Normal operation. H/W appends FCS to all transmitted frames.
510  *              1 - Host appends FCS to frame. Transmit MAC passes it through
511  * @tpa_support_snap_ab_n: When set to 0, the TPA will accept LLC-SAP values of
512  *              0xAB as valid. If set to 1, the TPA rejects LLC-SAP values of
513  *              0xAB (only 0xAA is accepted).
514  * @tpa_ecc_enable_n: Allows ECC protection of TPA internal memories to be
515  *              disabled without having to disable ECC protection for entire
516  *              chip.
517  *              0 - Disable TPA ECC protection
518  *              1 - Enable TPA ECC protection.
519  *              Note: If chip-wide ECC protection is disabled, then so is TPA
520  *              ECC protection.
521  * @rpa_ignore_frame_err: Ignore Frame Error. The RPA may detect frame integrity
522  *              errors as it processes each received frame. If this bit is set
523  *              to '0', the RPA will tag such frames as "errored" in the RxDMA
524  *              descriptor. If the bit is set to '1', the frame will not be
525  *              tagged as "errored".
526  *              Detectable errors include:
527  *              1) early end-of-frame error, which occurs when the frame ends
528  *              before the number of bytes predicted by the IP "total length"
529  *              field have been received;
530  *              2) IP version mismatches;
531  *              3) IPv6 packets that include routing headers that are not type 0
532  *              4) Frames which contain IP packets but have an illegal SNAP-OUI
533  *              or LLC-CTRL fields, unless IGNORE_SNAP_OUI or IGNORE_LLC_CTRL
534  *              are set
535  * @rpa_support_snap_ab_n: When set to 0, the RPA will accept LLC-SAP values of
536  *              0xAB as valid. If set to 1, the RPA rejects LLC-SAP values of
537  *              0xAB (only 0xAA is accepted).
538  * @rpa_search_for_hao: Enable searching for the Home Address Option.If this bit
539  *              is set, the RPA will parse through Destination Address Headers
540  *              searching for the H.A.O. If the bit is not set, the RPA will not
541  *              perform a search and these headers will effectively be ignored.
542  * @rpa_support_ipv6_mobile_hdrs: Enable/disable support for the mobile-ipv6
543  *              Home Address Option (HAO) and Route 2 Routing Headers,as defined
544  *              in RFC 3775.
545  *              0 - Do not support mobile IPv6.
546  *              1 - Support mobile IPv6
547  * @rpa_ipv6_stop_searching: Enable/disable unknown IPv6 extension header
548  *              parsing. If the adapter discovers an unknown extension header,
549  *              it can either continue to search for a L4 protocol, or stop
550  *              searching.
551  *              0 - do not stop searching for L4 when an unknown header is
552  *              encountered.
553  *              1 - stop searching when an unknown header is encountered.
554  * @rpa_no_ps_if_unknown: Enable/disable pseudo-header inclusion if an unknown
555  *              IPv6 extension header is encountered.
556  *              If this bit is set to '1' and an unknown routing header or IPv6
557  *              extension header is discovered, the L4 checksum will not include
558  *              a pseudo-header.
559  *              If it is set to '0', the adapter will use the addresses found
560  *              in the IPv6 base header, and/or the addresses found in a Routing
561  *              Header or Home Address Option (if it is enabled).
562  *              This applies to frames not on LRO sessions only. For frames on
563  *              LRO sessions, the pseudo-header is always included in the L4
564  *              checksum
565  * @rpa_search_for_etype: For receive traffic steering purposes, indicates
566  *              whether the RPA should parse through the LLC header to find the
567  *              Ethertype of the packet.
568  *              0 - RPA presents the 802.3 length/type field, which for an
569  *              LLC-encoded frame is interpreted as a length.
570  *              1 - RPA parses the LLC-header and presents the Ethertype to the
571  *              traffic steering logic. When SEARCH_FOR_ETYPE is set and a jumbo
572  *              snap frame is received then GLOBAL_PA_CFG.EN_JS determines the
573  *              value that is presented to the traffic steering logic. If EN_JS
574  *              is set, then the RPA parses inside the header to find the
575  *              Ethertype, while if EN_JS is not set the RPA presents 0x8870.
576  * @rpa_repl_l4_comp_csum: Controls whether or not to complement the L4 checksum
577  *              after the final calculation.
578  *              0: Do not complement the L4 checksum.
579  *              1: Complement the L4 checksum.
580  *              For the behaviour on non-replicated frames see FAU_RPA_VCFG.
581  * @rpa_repl_l3_incl_cf: Controls whether or not to include the L3 checksum
582  *              field in the checksum calculation.
583  *              0: Do not include the L3 checksum field in checksum calculation
584  *              1: Include the L4 checksum field in the checksum calculation.
585  *              For the behaviour on non-replicated frames see FAU_RPA_VCFG.
586  * @rpa_repl_l3_comp_csum: Controls whether or not to complement the L3 checksum
587  *              after the final calculation.
588  *              0: Do not complement the L3 checksum.
589  *              1: Complement the L3 checksum.
590  *              For the behaviour on non-replicated frames see FAU_RPA_VCFG.
591  * @rpa_repl_ipv4_tcp_incl_ph: For received frames that are replicated at the
592  *              internal L2 switch, determines whether the pseudo-header is
593  *              included in the calculation of the L4 checksum that is passed to
594  *              the host.
595  * @rpa_repl_ipv6_tcp_incl_ph: For received frames that are replicated at the
596  *              internal L2 switch, determines whether the pseudo-header is
597  *              included in the calculation of the L4 checksum that is passed to
598  *              the host.
599  * @rpa_repl_ipv4_udp_incl_ph: For received frames that are replicated at the
600  *              internal L2 switch, determines whether the pseudo-header is
601  *              included in the calculation of the L4 checksum that is passed to
602  *              the host.
603  * @rpa_repl_ipv6_udp_incl_ph: For received frames that are replicated at the
604  *              internal L2 switch, determines whether the pseudo-header is
605  *              included in the calculation of the L4 checksum that is passed to
606  *              the host.
607  * @rpa_repl_l4_incl_cf: For received frames that are replicated at the internal
608  *              L2 switch, determines whether the checksum field (CF) of the
609  *              received frame is included in the calculation of the L4
610  *              checksum that is passed to the host.
611  * @rpa_repl_strip_vlan_tag: Strip VLAN Tag enable/disable. Instructs the device
612  *              to remove the VLAN tag from all received tagged frames that
613  *              are replicated at the internal L2 switch (i.e. multicast frames
614  *              that are placed in the replication queue).
615  *              0 - Do not strip the VLAN tag.
616  *              1 - Strip the VLAN tag.
617  *              Regardless of this setting, VLAN tags are always placed into
618  *              the RxDMA descriptor.
619  *
620  * MAC configuration. This includes various aspects of configuration, including:
621  * - Pause frame threshold;
622  * - sampling rate to calculate link utilization;
623  * - enabling/disabling broadcasts.
624  *
625  * See X3100 ER User Guide for more details.
626  * Note: Valid (min, max) range for each attribute is specified in the body of
627  * the vxge_hal_mac_config_t {} structure. Please refer to the
628  * corresponding include file.
629  */
630 typedef struct vxge_hal_mac_config_t {
631
632         vxge_hal_wire_port_config_t     wire_port_config[       \
633                                                 VXGE_HAL_MAC_MAX_WIRE_PORTS];
634         vxge_hal_switch_port_config_t   switch_port_config;
635
636         u32                             network_stability_period;
637 #define VXGE_HAL_MAC_MIN_NETWORK_STABILITY_PERIOD               0x0 /* 0s */
638 #define VXGE_HAL_MAC_MAX_NETWORK_STABILITY_PERIOD               0x7 /* 2s */
639 #define VXGE_HAL_MAC_DEF_NETWORK_STABILITY_PERIOD   VXGE_HAL_USE_FLASH_DEFAULT
640
641         u32                             mc_pause_threshold[16];
642 #define VXGE_HAL_MAC_MIN_MC_PAUSE_THRESHOLD                     0
643 #define VXGE_HAL_MAC_MAX_MC_PAUSE_THRESHOLD                     254
644 #define VXGE_HAL_MAC_DEF_MC_PAUSE_THRESHOLD         VXGE_HAL_USE_FLASH_DEFAULT
645
646         u32                             tmac_perma_stop_en;
647 #define VXGE_HAL_MAC_TMAC_PERMA_STOP_ENABLE                     1
648 #define VXGE_HAL_MAC_TMAC_PERMA_STOP_DISABLE                    0
649 #define VXGE_HAL_MAC_TMAC_PERMA_STOP_DEFAULT        VXGE_HAL_USE_FLASH_DEFAULT
650
651         u32                             tmac_tx_switch_dis;
652 #define VXGE_HAL_MAC_TMAC_TX_SWITCH_ENABLE                      0
653 #define VXGE_HAL_MAC_TMAC_TX_SWITCH_DISABLE                     1
654 #define VXGE_HAL_MAC_TMAC_TX_SWITCH_DEFAULT         VXGE_HAL_USE_FLASH_DEFAULT
655
656         u32                             tmac_lossy_switch_en;
657 #define VXGE_HAL_MAC_TMAC_LOSSY_SWITCH_ENABLE                   1
658 #define VXGE_HAL_MAC_TMAC_LOSSY_SWITCH_DISABLE                  0
659 #define VXGE_HAL_MAC_TMAC_LOSSY_SWITCH_DEFAULT      VXGE_HAL_USE_FLASH_DEFAULT
660
661         u32                             tmac_lossy_wire_en;
662 #define VXGE_HAL_MAC_TMAC_LOSSY_WIRE_ENABLE                     1
663 #define VXGE_HAL_MAC_TMAC_LOSSY_WIRE_DISABLE                    0
664 #define VXGE_HAL_MAC_TMAC_LOSSY_WIRE_DEFAULT        VXGE_HAL_USE_FLASH_DEFAULT
665
666         u32                             tmac_bcast_to_wire_dis;
667 #define VXGE_HAL_MAC_TMAC_BCAST_TO_WIRE_DISABLE                 1
668 #define VXGE_HAL_MAC_TMAC_BCAST_TO_WIRE_ENABLE                  0
669 #define VXGE_HAL_MAC_TMAC_BCAST_TO_WIRE_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
670
671         u32                             tmac_bcast_to_switch_dis;
672 #define VXGE_HAL_MAC_TMAC_BCAST_TO_SWITCH_DISABLE               1
673 #define VXGE_HAL_MAC_TMAC_BCAST_TO_SWITCH_ENABLE                0
674 #define VXGE_HAL_MAC_TMAC_BCAST_TO_SWITCH_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
675
676         u32                             tmac_host_append_fcs_en;
677 #define VXGE_HAL_MAC_TMAC_HOST_APPEND_FCS_ENABLE                1
678 #define VXGE_HAL_MAC_TMAC_HOST_APPEND_FCS_DISABLE               0
679 #define VXGE_HAL_MAC_TMAC_HOST_APPEND_FCS_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
680
681         u32                             tpa_support_snap_ab_n;
682 #define VXGE_HAL_MAC_TPA_SUPPORT_SNAP_AB_N_LLC_SAP_AB           0
683 #define VXGE_HAL_MAC_TPA_SUPPORT_SNAP_AB_N_LLC_SAP_AA           1
684 #define VXGE_HAL_MAC_TPA_SUPPORT_SNAP_AB_N_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
685
686         u32                             tpa_ecc_enable_n;
687 #define VXGE_HAL_MAC_TPA_ECC_ENABLE_N_ENABLE                    1
688 #define VXGE_HAL_MAC_TPA_ECC_ENABLE_N_DISABLE                   0
689 #define VXGE_HAL_MAC_TPA_ECC_ENABLE_N_DEFAULT       VXGE_HAL_USE_FLASH_DEFAULT
690
691         u32                             rpa_ignore_frame_err;
692 #define VXGE_HAL_MAC_RPA_IGNORE_FRAME_ERR_ENABLE                1
693 #define VXGE_HAL_MAC_RPA_IGNORE_FRAME_ERR_DISABLE               0
694 #define VXGE_HAL_MAC_RPA_IGNORE_FRAME_ERR_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
695
696         u32                             rpa_support_snap_ab_n;
697 #define VXGE_HAL_MAC_RPA_SUPPORT_SNAP_AB_N_ENABLE               1
698 #define VXGE_HAL_MAC_RPA_SUPPORT_SNAP_AB_N_DISABLE              0
699 #define VXGE_HAL_MAC_RPA_SUPPORT_SNAP_AB_N_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
700
701         u32                             rpa_search_for_hao;
702 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_HAO_ENABLE                  1
703 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_HAO_DISABLE                 0
704 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_HAO_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
705
706         u32                             rpa_support_ipv6_mobile_hdrs;
707 #define VXGE_HAL_MAC_RPA_SUPPORT_IPV6_MOBILE_HDRS_ENABLE        1
708 #define VXGE_HAL_MAC_RPA_SUPPORT_IPV6_MOBILE_HDRS_DISABLE       0
709 #define VXGE_HAL_MAC_RPA_SUPPORT_IPV6_MOBILE_HDRS_DEFAULT       \
710                                                     VXGE_HAL_USE_FLASH_DEFAULT
711
712         u32                             rpa_ipv6_stop_searching;
713 #define VXGE_HAL_MAC_RPA_IPV6_STOP_SEARCHING                    1
714 #define VXGE_HAL_MAC_RPA_IPV6_DONT_STOP_SEARCHING               0
715 #define VXGE_HAL_MAC_RPA_IPV6_STOP_SEARCHING_DEFAULT            \
716                                                     VXGE_HAL_USE_FLASH_DEFAULT
717
718         u32                             rpa_no_ps_if_unknown;
719 #define VXGE_HAL_MAC_RPA_NO_PS_IF_UNKNOWN_ENABLE                1
720 #define VXGE_HAL_MAC_RPA_NO_PS_IF_UNKNOWN_DISABLE               0
721 #define VXGE_HAL_MAC_RPA_NO_PS_IF_UNKNOWN_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
722
723         u32                             rpa_search_for_etype;
724 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_ETYPE_ENABLE                1
725 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_ETYPE_DISABLE               0
726 #define VXGE_HAL_MAC_RPA_SEARCH_FOR_ETYPE_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
727
728         u32                             rpa_repl_l4_comp_csum;
729 #define VXGE_HAL_MAC_RPA_REPL_L4_COMP_CSUM_ENABLE               1
730 #define VXGE_HAL_MAC_RPA_REPL_L4_COMP_CSUM_DISABLE              0
731 #define VXGE_HAL_MAC_RPA_REPL_l4_COMP_CSUM_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
732
733         u32                             rpa_repl_l3_incl_cf;
734 #define VXGE_HAL_MAC_RPA_REPL_L3_INCL_CF_ENABLE                 1
735 #define VXGE_HAL_MAC_RPA_REPL_L3_INCL_CF_DISABLE                0
736 #define VXGE_HAL_MAC_RPA_REPL_L3_INCL_CF_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
737
738         u32                             rpa_repl_l3_comp_csum;
739 #define VXGE_HAL_MAC_RPA_REPL_L3_COMP_CSUM_ENABLE               1
740 #define VXGE_HAL_MAC_RPA_REPL_L3_COMP_CSUM_DISABLE              0
741 #define VXGE_HAL_MAC_RPA_REPL_l3_COMP_CSUM_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
742
743         u32                             rpa_repl_ipv4_tcp_incl_ph;
744 #define VXGE_HAL_MAC_RPA_REPL_IPV4_TCP_INCL_PH_ENABLE           1
745 #define VXGE_HAL_MAC_RPA_REPL_IPV4_TCP_INCL_PH_DISABLE          0
746 #define VXGE_HAL_MAC_RPA_REPL_IPV4_TCP_INCL_PH_DEFAULT          \
747                                                     VXGE_HAL_USE_FLASH_DEFAULT
748
749         u32                             rpa_repl_ipv6_tcp_incl_ph;
750 #define VXGE_HAL_MAC_RPA_REPL_IPV6_TCP_INCL_PH_ENABLE           1
751 #define VXGE_HAL_MAC_RPA_REPL_IPV6_TCP_INCL_PH_DISABLE          0
752 #define VXGE_HAL_MAC_RPA_REPL_IPV6_TCP_INCL_PH_DEFAULT          \
753                                                     VXGE_HAL_USE_FLASH_DEFAULT
754
755         u32                             rpa_repl_ipv4_udp_incl_ph;
756 #define VXGE_HAL_MAC_RPA_REPL_IPV4_UDP_INCL_PH_ENABLE           1
757 #define VXGE_HAL_MAC_RPA_REPL_IPV4_UDP_INCL_PH_DISABLE          0
758 #define VXGE_HAL_MAC_RPA_REPL_IPV4_UDP_INCL_PH_DEFAULT          \
759                                                     VXGE_HAL_USE_FLASH_DEFAULT
760
761         u32                             rpa_repl_ipv6_udp_incl_ph;
762 #define VXGE_HAL_MAC_RPA_REPL_IPV6_UDP_INCL_PH_ENABLE           1
763 #define VXGE_HAL_MAC_RPA_REPL_IPV6_UDP_INCL_PH_DISABLE          0
764 #define VXGE_HAL_MAC_RPA_REPL_IPV6_UDP_INCL_PH_DEFAULT          \
765                                                     VXGE_HAL_USE_FLASH_DEFAULT
766
767         u32                             rpa_repl_l4_incl_cf;
768 #define VXGE_HAL_MAC_RPA_REPL_L4_INCL_CF_ENABLE                 1
769 #define VXGE_HAL_MAC_RPA_REPL_L4_INCL_CF_DISABLE                0
770 #define VXGE_HAL_MAC_RPA_REPL_L4_INCL_CF_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
771
772         u32                             rpa_repl_strip_vlan_tag;
773 #define VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_ENABLE             1
774 #define VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_DISABLE            0
775 #define VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_DEFAULT            \
776                                                     VXGE_HAL_USE_FLASH_DEFAULT
777
778 } vxge_hal_mac_config_t;
779
780 /*
781  * struct vxge_hal_lag_port_config_t - LAG Port configuration(For privileged
782  *                                mode driver only)
783  *
784  * @port_id: Port Id
785  * @lag_en: Enables or disables the port from joining a link aggregation group.
786  *              If link aggregation is enabled and this port is disabled, then
787  *              this port does not carry traffic (it is not associated with an
788  *              Aggregator). Both this bit and port_enabled from the physical
789  *              layer logic must be asserted to permit the Receive machine to
790  *              move beyond the PORT_DISABLED state.
791  *              0 - Disable;
792  *              1 - Enable;
793  * @discard_slow_proto: Discard received frames that contain the Slow Protocols
794  *              Multicast address (IEEE 802.3-2005 Clause 43B) -- Such frames
795  *              are used for link aggregation Marker Protocol and for LACP.
796  *              0 - Pass to host;
797  *              1 - Discard;
798  * @host_chosen_aggr: When the host is running the Link Aggregation Control
799  *              algorithm, this field determines which aggregator is attached
800  *              to this port. This field is only valid when LAG_LACP_CFG.EN is 0
801  *              0 - Aggregator 0 is attached to this port.
802  *              1 - Aggregator 1 is attached to this port.
803  * @discard_unknown_slow_proto: Discard received frames that contain the Slow
804  *              Protocols Multicast address (IEEE 802.3-2005 Clause 43B),
805  *              but have an unknown Slow Protocols PDU.
806  *              0 - Pass to host
807  *              1 - Discard
808  *              Note: This field is only relevant when DISCARD_SLOW_PROTO
809  *              is set to 0.
810  * @actor_port_num: The port number assigned to the port. Port Number 0 is
811  *              reserved and must not be assigned to any port.
812  * @actor_port_priority: The priority value assigned to the port.
813  * @actor_key_10g: The port's administrative Key when auto-negotiated to 10Gbps
814  *              The null (all zeros) Key value is not available for local use.
815  * @actor_key_1g: The port's administrative Key when auto-negotiated to 1Gbps.
816  *              The null (all zeros) Key value is not available for local use.
817  * @actor_lacp_activity: Indicates the Activity control value for this port.
818  *              0 - Passive LACP
819  *              1 - Active LACP
820  * @actor_lacp_timeout: Indicates the Timeout control value for this port.
821  *              0 - Long Timeout
822  *              1 - Short Timeout
823  * @actor_aggregation: Indicates if the port is a potential candidate for
824  *              aggregation.
825  *              0 - Link is Individual
826  *              1 - Link is Aggregateable
827  * @actor_synchronization: Indicates if the port is in sync.
828  *              0 - Link is out of sync; it is in the wrong Aggregation
829  *              1 - Link is in sync (allocated to the correct Link Aggregation
830  *              Group, the group is associated with a compatible Aggregator,
831  *              and the identity of the Link Aggregation Group is consistent
832  *              with the System ID and operational Key information transmitted)
833  * @actor_collecting: Indicates whether collecting of incoming frames is enabled
834  *              on this port.
835  *              0 - Not collecting
836  *              1 - Collection is enabled
837  * @actor_distributing: Indicates whether distribution of outgoing frames is
838  *              enabled on this port.
839  *              0 - Not distributing
840  *              1 - Distribution is enabled
841  * @actor_defaulted: Indicates whether the Actor's Receive state machine is
842  *              using administratively configured information for the Partner.
843  *              0 - The operational Partner info has been received in a LACPDU
844  *              1 - The operation Partner info is using administrative defaults
845  * @actor_expired: Indicates whether the Actor's Receive state machine is in the
846  *              EXPIRED state.
847  *              0 - Not in the EXPIRED state
848  *              1 - Is in the EXPIRED state
849  * @partner_sys_pri: The administrative default for the System Priority
850  *              component of the System Identifier of the Partner.
851  * @partner_key: The administrative default for the Partner's Key. The null
852  *              (all zeros) Key value is not available for local use.
853  * @partner_port_num: The administrative default for the Port Number component
854  *              of the Partner's Port Identifier.
855  * @partner_port_priority: The administrative default for the Port Identifier
856  *              component of the Partner's Port Identifier.
857  * @partner_lacp_activity: Indicates the Activity control value for this port.
858  *              0 - Passive LACP
859  *              1 - Active LACP
860  * @partner_lacp_timeout: Indicates the Timeout control value for this port.
861  *              0 - Long Timeout
862  *              1 - Short Timeout
863  * @partner_aggregation: Indicates if the port is a potential candidate for
864  *              aggregation.
865  *              0 - Link is Individual
866  *              1 - Link is Aggregateable
867  * @partner_synchronization: Indicates if the port is in sync.
868  *              0 - Link is out of sync; it is in the wrong Aggregation
869  *              1 - Link is in sync (allocated to the correct Link Aggregation
870  *              Group, the group is associated with a compatible Aggregator,
871  *              and the identity of the Link Aggregation Group is consistent
872  *              with the System ID and operational Key information transmitted)
873  * @partner_collecting: Indicates whether collecting of incoming frames is
874  *              enabled on this port.
875  *              0 - Not collecting
876  *              1 - Collection is enabled.
877  *              Note: According to IEEE 802.3-2005, the value of the
878  *              partner_collecting field of this register must be the same as
879  *              the value of the partner_synchronization field of this register
880  * @partner_distributing: Indicates whether distribution of outgoing frames is
881  *              enabled on this port.
882  *              0 - Not distributing
883  *              1 - Distribution is enabled
884  * @partner_defaulted: Indicates whether the Actor's Receive state machine is
885  *              using administratively configured information for the Partner.
886  *              0 - The operational Partner information has been received in
887  *                  a LACPDU
888  *              1 - The operation Partner information is using administrative
889  *                  defaults
890  * @partner_expired: Indicates whether the Actor's Receive state machine is in
891  *              the expired state.
892  *              0 - Not in the EXPIRED state
893  *              1 - Is in the EXPIRED state
894  * @partner_mac_addr: Default value for the MAC address of the Partner.
895  *
896  * This structure is configuration for LAG Port of device
897  */
898 typedef struct vxge_hal_lag_port_config_t {
899         u32     port_id;
900 #define VXGE_HAL_LAG_PORT_PORT_ID_0                             1
901 #define VXGE_HAL_LAG_PORT_PORT_ID_1                             2
902 #define VXGE_HAL_LAG_PORT_MAX_PORTS                 VXGE_HAL_MAC_MAX_WIRE_PORTS
903
904         u32     lag_en;
905 #define VXGE_HAL_LAG_PORT_LAG_EN_DISABLE                        0
906 #define VXGE_HAL_LAG_PORT_LAG_EN_ENABLE                         1
907 #define VXGE_HAL_LAG_PORT_LAG_EN_DEFAULT            VXGE_HAL_USE_FLASH_DEFAULT
908
909         u32     discard_slow_proto;
910 #define VXGE_HAL_LAG_PORT_DISCARD_SLOW_PROTO_DISABLE            0
911 #define VXGE_HAL_LAG_PORT_DISCARD_SLOW_PROTO_ENABLE             1
912 #define VXGE_HAL_LAG_PORT_DISCARD_SLOW_PROTO_DEFAULT            \
913                                                     VXGE_HAL_USE_FLASH_DEFAULT
914
915         u32     host_chosen_aggr;
916 #define VXGE_HAL_LAG_PORT_HOST_CHOSEN_AGGR_0                    0
917 #define VXGE_HAL_LAG_PORT_HOST_CHOSEN_AGGR_1                    1
918 #define VXGE_HAL_LAG_PORT_HOST_CHOSEN_AGGR_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
919
920         u32     discard_unknown_slow_proto;
921 #define VXGE_HAL_LAG_PORT_DISCARD_UNKNOWN_SLOW_PROTO_DISABLE    0
922 #define VXGE_HAL_LAG_PORT_DISCARD_UNKNOWN_SLOW_PROTO_ENABLE     1
923 #define VXGE_HAL_LAG_PORT_DISCARD_UNKNOWN_SLOW_PROTO_DEFAULT    \
924                                                     VXGE_HAL_USE_FLASH_DEFAULT
925
926         u32     actor_port_num;
927 #define VXGE_HAL_LAG_PORT_MIN_ACTOR_PORT_NUM                    0
928 #define VXGE_HAL_LAG_PORT_MAX_ACTOR_PORT_NUM                    65535
929 #define VXGE_HAL_LAG_PORT_DEF_ACTOR_PORT_NUM        VXGE_HAL_USE_FLASH_DEFAULT
930
931         u32     actor_port_priority;
932 #define VXGE_HAL_LAG_PORT_MIN_ACTOR_PORT_PRIORITY               0
933 #define VXGE_HAL_LAG_PORT_MAX_ACTOR_PORT_PRIORITY               65535
934 #define VXGE_HAL_LAG_PORT_DEF_ACTOR_PORT_PRIORITY    VXGE_HAL_USE_FLASH_DEFAULT
935
936         u32     actor_key_10g;
937 #define VXGE_HAL_LAG_PORT_MIN_ACTOR_KEY_10G                     0
938 #define VXGE_HAL_LAG_PORT_MAX_ACTOR_KEY_10G                     65535
939 #define VXGE_HAL_LAG_PORT_DEF_ACTOR_KEY_10G         VXGE_HAL_USE_FLASH_DEFAULT
940
941         u32     actor_key_1g;
942 #define VXGE_HAL_LAG_PORT_MIN_ACTOR_KEY_1G                      0
943 #define VXGE_HAL_LAG_PORT_MAX_ACTOR_KEY_1G                      65535
944 #define VXGE_HAL_LAG_PORT_DEF_ACTOR_KEY_1G          VXGE_HAL_USE_FLASH_DEFAULT
945
946         u32     actor_lacp_activity;
947 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_PASSIVE           0
948 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_ACTIVE            1
949 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_DEFAULT           \
950                                                     VXGE_HAL_USE_FLASH_DEFAULT
951
952         u32     actor_lacp_timeout;
953 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_TIMEOUT_LONG               0
954 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_TIMEOUT_SHORT              1
955 #define VXGE_HAL_LAG_PORT_ACTOR_LACP_TIMEOUT_DEFAULT            \
956                                                     VXGE_HAL_USE_FLASH_DEFAULT
957
958         u32     actor_aggregation;
959 #define VXGE_HAL_LAG_PORT_ACTOR_AGGREGATION_INDIVIDUAL          0
960 #define VXGE_HAL_LAG_PORT_ACTOR_AGGREGATION_AGGREGATEABLE       1
961 #define VXGE_HAL_LAG_PORT_ACTOR_AGGREGATION_DEFAULT VXGE_HAL_USE_FLASH_DEFAULT
962
963         u32     actor_synchronization;
964 #define VXGE_HAL_LAG_PORT_ACTOR_SYNCHRONIZATION_OUT_OF_SYNC     0
965 #define VXGE_HAL_LAG_PORT_ACTOR_SYNCHRONIZATION_IN_SYNC         1
966 #define VXGE_HAL_LAG_PORT_ACTOR_SYNCHRONIZATION_DEFAULT         \
967                                                     VXGE_HAL_USE_FLASH_DEFAULT
968
969         u32     actor_collecting;
970 #define VXGE_HAL_LAG_PORT_ACTOR_COLLECTING_DISABLE              0
971 #define VXGE_HAL_LAG_PORT_ACTOR_COLLECTING_ENABLE               1
972 #define VXGE_HAL_LAG_PORT_ACTOR_COLLECTING_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
973
974         u32     actor_distributing;
975 #define VXGE_HAL_LAG_PORT_ACTOR_DISTRIBUTING_DISABLE            0
976 #define VXGE_HAL_LAG_PORT_ACTOR_DISTRIBUTING_ENABLE             1
977 #define VXGE_HAL_LAG_PORT_ACTOR_DISTRIBUTING_DEFAULT            \
978                                                     VXGE_HAL_USE_FLASH_DEFAULT
979
980         u32     actor_defaulted;
981 #define VXGE_HAL_LAG_PORT_ACTOR_DEFAULTED                       0
982 #define VXGE_HAL_LAG_PORT_ACTOR_NOT_DEFAULTED                   1
983 #define VXGE_HAL_LAG_PORT_ACTOR_DEFAULTED_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
984
985         u32     actor_expired;
986 #define VXGE_HAL_LAG_PORT_ACTOR_EXPIRED                 0
987 #define VXGE_HAL_LAG_PORT_ACTOR_NOT_EXPIRED                     1
988 #define VXGE_HAL_LAG_PORT_ACTOR_EXPIRED_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
989
990         u32     partner_sys_pri;
991 #define VXGE_HAL_LAG_PORT_MIN_PARTNER_SYS_PRI                   0
992 #define VXGE_HAL_LAG_PORT_MAX_PARTNER_SYS_PRI                   65535
993 #define VXGE_HAL_LAG_PORT_DEF_PARTNER_SYS_PRI       VXGE_HAL_USE_FLASH_DEFAULT
994
995         u32     partner_key;
996 #define VXGE_HAL_LAG_PORT_MIN_PARTNER_KEY                       0
997 #define VXGE_HAL_LAG_PORT_MAX_PARTNER_KEY                       65535
998 #define VXGE_HAL_LAG_PORT_DEF_PARTNER_KEY           VXGE_HAL_USE_FLASH_DEFAULT
999
1000         u32     partner_port_num;
1001 #define VXGE_HAL_LAG_PORT_MIN_PARTNER_PORT_NUM                  0
1002 #define VXGE_HAL_LAG_PORT_MAX_PARTNER_PORT_NUM                  65535
1003 #define VXGE_HAL_LAG_PORT_DEF_PARTNER_PORT_NUM      VXGE_HAL_USE_FLASH_DEFAULT
1004
1005         u32     partner_port_priority;
1006 #define VXGE_HAL_LAG_PORT_MIN_PARTNER_PORT_PRIORITY             0
1007 #define VXGE_HAL_LAG_PORT_MAX_PARTNER_PORT_PRIORITY             65535
1008 #define VXGE_HAL_LAG_PORT_DEF_PARTNER_PORT_PRIORITY VXGE_HAL_USE_FLASH_DEFAULT
1009
1010         u32     partner_lacp_activity;
1011 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_PASSIVE         0
1012 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_ACTIVE          1
1013 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_DEFAULT         \
1014                                                     VXGE_HAL_USE_FLASH_DEFAULT
1015
1016         u32     partner_lacp_timeout;
1017 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_TIMEOUT_LONG             0
1018 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_TIMEOUT_SHORT            1
1019 #define VXGE_HAL_LAG_PORT_PARTNER_LACP_TIMEOUT_DEFAULT          \
1020                                                     VXGE_HAL_USE_FLASH_DEFAULT
1021
1022         u32     partner_aggregation;
1023 #define VXGE_HAL_LAG_PORT_PARTNER_AGGREGATION_INDIVIDUAL        0
1024 #define VXGE_HAL_LAG_PORT_PARTNER_AGGREGATION_AGGREGATEABLE     1
1025 #define VXGE_HAL_LAG_PORT_PARTNER_AGGREGATION_DEFAULT           \
1026                                                     VXGE_HAL_USE_FLASH_DEFAULT
1027
1028         u32     partner_synchronization;
1029 #define VXGE_HAL_LAG_PORT_PARTNER_SYNCHRONIZATION_OUT_OF_SYNC   0
1030 #define VXGE_HAL_LAG_PORT_PARTNER_SYNCHRONIZATION_IN_SYNC       1
1031 #define VXGE_HAL_LAG_PORT_PARTNER_SYNCHRONIZATION_DEFAULT       \
1032                                                     VXGE_HAL_USE_FLASH_DEFAULT
1033
1034         u32     partner_collecting;
1035 #define VXGE_HAL_LAG_PORT_PARTNER_COLLECTING_DISABLE            0
1036 #define VXGE_HAL_LAG_PORT_PARTNER_COLLECTING_ENABLE             1
1037 #define VXGE_HAL_LAG_PORT_PARTNER_COLLECTING_DEFAULT            \
1038                                                     VXGE_HAL_USE_FLASH_DEFAULT
1039
1040         u32     partner_distributing;
1041 #define VXGE_HAL_LAG_PORT_PARTNER_DISTRIBUTING_DISABLE          0
1042 #define VXGE_HAL_LAG_PORT_PARTNER_DISTRIBUTING_ENABLE           1
1043 #define VXGE_HAL_LAG_PORT_PARTNER_DISTRIBUTING_DEFAULT          \
1044                                                     VXGE_HAL_USE_FLASH_DEFAULT
1045
1046         u32     partner_defaulted;
1047 #define VXGE_HAL_LAG_PORT_PARTNER_DEFAULTED                     0
1048 #define VXGE_HAL_LAG_PORT_PARTNER_NOT_DEFAULTED                 1
1049 #define VXGE_HAL_LAG_PORT_PARTNER_DEFAULTED_DEFAULT VXGE_HAL_USE_FLASH_DEFAULT
1050
1051         u32     partner_expired;
1052 #define VXGE_HAL_LAG_PORT_PARTNER_EXPIRED                       0
1053 #define VXGE_HAL_LAG_PORT_PARTNER_NOT_EXPIRED                   1
1054 #define VXGE_HAL_LAG_PORT_PARTNER_EXPIRED_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
1055
1056         macaddr_t partner_mac_addr;
1057
1058 } vxge_hal_lag_port_config_t;
1059
1060 /*
1061  * struct vxge_hal_lag_aggr_config_t - LAG Aggregator configuration
1062  *                                (For privileged mode driver only)
1063  *
1064  * @aggr_id: Aggregator Id
1065  * @mac_addr: The MAC address assigned to the Aggregator.
1066  * @use_port_mac_addr: Indicates whether the Aggregator should use:
1067  *              0 - the address specified in this register
1068  *              1 - the station address of one of the ports to which
1069  *                  it is attached
1070  * @mac_addr_sel: Indicates which port address to use, if use_port_mac_addr
1071  *              is set and two ports are attached to the aggregator:
1072  *              0 - the station address of port 0
1073  *              1 - the station address of port 1.
1074  * @admin_key: The Aggregator's administrative Key under most circumstances
1075  *              (see alt_admin_key for exceptions). The null (all zeros) Key
1076  *              value is not available for local use.
1077  * This structure is configuration for LAG Aggregators of device
1078  */
1079 typedef struct vxge_hal_lag_aggr_config_t {
1080         u32     aggr_id;
1081 #define VXGE_HAL_LAG_AGGR_AGGR_ID_1                             1
1082 #define VXGE_HAL_LAG_AGGR_AGGR_ID_2                             2
1083 #define VXGE_HAL_LAG_AGGR_MAX_PORTS                 VXGE_HAL_MAC_MAX_AGGR_PORTS
1084
1085         macaddr_t mac_addr;
1086
1087         u32     use_port_mac_addr;
1088 #define VXGE_HAL_LAG_AGGR_USE_PORT_MAC_ADDR_DISBALE             0
1089 #define VXGE_HAL_LAG_AGGR_USE_PORT_MAC_ADDR_ENABLE              1
1090 #define VXGE_HAL_LAG_AGGR_USE_PORT_MAC_ADDR_DEFAULT VXGE_HAL_USE_FLASH_DEFAULT
1091
1092         u32     mac_addr_sel;
1093 #define VXGE_HAL_LAG_AGGR_MAC_ADDR_SEL_PORT_0                   0
1094 #define VXGE_HAL_LAG_AGGR_MAC_ADDR_SEL_PORT_1                   1
1095 #define VXGE_HAL_LAG_AGGR_MAC_ADDR_SEL_DEFAULT      VXGE_HAL_USE_FLASH_DEFAULT
1096
1097         u32     admin_key;
1098 #define VXGE_HAL_LAG_AGGR_MIN_ADMIN_KEY                         0
1099 #define VXGE_HAL_LAG_AGGR_MAX_ADMIN_KEY                         65535
1100 #define VXGE_HAL_LAG_AGGR_DEF_ADMIN_KEY             VXGE_HAL_USE_FLASH_DEFAULT
1101
1102 } vxge_hal_lag_aggr_config_t;
1103
1104 /*
1105  * struct vxge_hal_lag_la_config_t - LAG Link Aggregator mode configuration(
1106  *                              For privileged mode driver only)
1107  *
1108  * @tx_discard: When the state of the port state attached to the Tx Aggregator
1109  *              is not Distributing, this field determines whether frames from
1110  *              the Frame Distributor are discarded by the Aggregator Mux
1111  * @distrib_alg_sel: Configures the link aggregation distribution algorithm,
1112  *              which determines the destination port of each wire-bound frame.
1113  *              0x0 - The source VPATH determines the target port and the
1114  *                 mapping is controlled by the MAP_VPATHn fields of this
1115  *                 register.
1116  *              0x1 - Even parity over the frame's MAC destination address
1117  *              0x2 - Even parity over the frame's MAC source address
1118  *              0x3 - Even parity over the frame's MAC destination address and
1119  *                MAC source address
1120  *              Note: If the host changes this mapping while traffic is flowing,
1121  *              then (to avoid mis-ordering at the receiver) host must either
1122  *              enable the Marker protocol or assume responsibility for ensuring
1123  *              that no frames pertaining to the conversations (that are moving
1124  *              to a new port) are in flight.
1125  * @distrib_dest: When LAG_TX_CFG.DISTRIB_ALG_SEL is set to use the source
1126  *              VPATH, then this field indicates the target adapter port for
1127  *              frames that come from a particular VPATH.
1128  *              0 - Send frames from this VPATH to port 0
1129  *              1 - Send frames from this VPATH to port 1
1130  *              Note: If the host updates this mapping while traffic is flowing,
1131  *              then (to avoid mis-ordering at the receiver) the host must
1132  *              either enable the Marker protocol or assume responsibility for
1133  *              ensuring that no frames pertaining to the conversations (that
1134  *              are moving to a new port) are in flight.
1135  * @distrib_remap_if_fail: When lag_mode is Link Aggregated, this field controls
1136  *              whether frames are re-distributed to the working port if one
1137  *              port goes down.
1138  *              0 - Don't remap. Enforce frames destined for port 'x' to remain
1139  *              destined for it and let LAG_CFG.TX_DISCARD_BEHAV determine
1140  *              what happens to the frames.
1141  *              1 - Remap the frames to the working port, essentially ignoring
1142  *              the mapping table.
1143  * @coll_max_delay: Collector Max Delay - the maximum amount of time (measured
1144  *              in units of tens of microseconds) that the Frame Collector is
1145  *              allowed to delay delivery of frames to the host. The contents
1146  *              of this field are placed into the transmitted LACPDU.
1147  * @rx_discard: When the state of the port state attached to the Rx Aggregator
1148  *              is not Collecting, this field determines whether frames to the
1149  *              Frame Collector are discarded by the Aggregator Parser
1150  *
1151  * Link Aggregation Link Aggregator Mode Configuration
1152  */
1153 typedef struct vxge_hal_lag_la_config_t {
1154         u32     tx_discard;
1155 #define VXGE_HAL_LAG_TX_DISCARD_DISBALE                         0
1156 #define VXGE_HAL_LAG_TX_DISCARD_ENABLE                          1
1157 #define VXGE_HAL_LAG_TX_DISCARD_DEFAULT             VXGE_HAL_USE_FLASH_DEFAULT
1158
1159         u32     distrib_alg_sel;
1160 #define VXGE_HAL_LAG_DISTRIB_ALG_SEL_SRC_VPATH                  0
1161 #define VXGE_HAL_LAG_DISTRIB_ALG_SEL_DEST_MAC_ADDR              1
1162 #define VXGE_HAL_LAG_DISTRIB_ALG_SEL_SRC_MAC_ADDR               2
1163 #define VXGE_HAL_LAG_DISTRIB_ALG_SEL_BOTH_MAC_ADDR              3
1164 #define VXGE_HAL_LAG_DISTRIB_ALG_SEL_DEFAULT        VXGE_HAL_USE_FLASH_DEFAULT
1165
1166         u64     distrib_dest;
1167 #define VXGE_HAL_LAG_DISTRIB_DEST_VPATH_TO_PORT_PORT0(vpid)     0
1168 #define VXGE_HAL_LAG_DISTRIB_DEST_VPATH_TO_PORT_PORT1(vpid)     mBIT(vpid)
1169 #define VXGE_HAL_LAG_DISTRIB_DEST_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
1170
1171         u32     distrib_remap_if_fail;
1172 #define VXGE_HAL_LAG_DISTRIB_REMAP_IF_FAIL_DISBALE              0
1173 #define VXGE_HAL_LAG_DISTRIB_REMAP_IF_FAIL_ENABLE               1
1174 #define VXGE_HAL_LAG_DISTRIB_REMAP_IF_FAIL_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
1175
1176         u32     coll_max_delay;
1177 #define VXGE_HAL_LAG_MIN_COLL_MAX_DELAY                         0
1178 #define VXGE_HAL_LAG_MAX_COLL_MAX_DELAY                         65535
1179 #define VXGE_HAL_LAG_DEF_COLL_MAX_DELAY             VXGE_HAL_USE_FLASH_DEFAULT
1180
1181         u32     rx_discard;
1182 #define VXGE_HAL_LAG_RX_DISCARD_DISBALE                         0
1183 #define VXGE_HAL_LAG_RX_DISCARD_ENABLE                          1
1184 #define VXGE_HAL_LAG_RX_DISCARD_DEFAULT             VXGE_HAL_USE_FLASH_DEFAULT
1185
1186
1187 } vxge_hal_lag_la_config_t;
1188
1189 /*
1190  * struct vxge_hal_lag_ap_config_t - LAG Active Passive Failover mode
1191  *                          configuration(For privileged mode driver only)
1192  *
1193  * @hot_standby: Keep the standby port alive even when it is not carrying
1194  *              traffic
1195  *              0 - Standby port disabled until needed. The hardware behaves as
1196  *              if XGMAC_CFG_PORTn.PORT_EN has disabled the port.
1197  *              1 - Standby port kept up
1198  * @lacp_decides: This field determines whether or not the LACP Selection logic
1199  *              handles hot standby port interaction. This field is only used
1200  *              when hot_standby is 1.
1201  *              0 - LACP Selection logic does not explicitly determine standby
1202  *              port, instead internal logic changes the aggregator's key
1203  *              using information found in the alt_admin_key
1204  *              field. Note that this does not disable LACP.
1205  *              1 - LACP Selection logic explicitly determines standby port by
1206  *              enforcing a rule that if one port is already attached to any
1207  *              aggregator, then the other port is put into STANDBY. Assuming
1208  *              both ports have the same Key, at startup (or anytime both
1209  *              ports have become UNSELECTED) the Selection logic uses
1210  *              pref_active_port to choose the active (and consequently
1211  *              standby) port. After that it only selects a new port when
1212  *              the active port goes down.
1213  * @pref_active_port: Indicates the preferred active port number.
1214  *              If hot_standby is disabled (i.e. "cold standby"), then
1215  *              pref_active_port determines which port remains powered up
1216  *              (and consequently which one is powered down). If hot_standby is
1217  *              enabled, then pref_active_port is used by the Selection logic
1218  *              whenever both ports have become UNSELECTED and the Selection
1219  *              logic must decide which to make SELECTED and which to make
1220  *              STANDBY.
1221  *              0 - Link0 is preferred (Link1 becomes the standby port).
1222  *              1 - Link1 is preferred
1223  * @auto_failback: When LACP Selection logic is not handling standby port
1224  *              interaction, this register provides additional user flexibility
1225  *              for standby port handling. The AUTO_FAILBACK field controls
1226  *              whether the device automatically fails back to the preferred
1227  *              (i.e. non-alternate) Aggregator+Port pair in the event that the
1228  *              preferred port comes back up after a failure. Only used when
1229  *              hot_standby is set to 1 and lacp_decides is set to 0.
1230  *              0 - After a failure on the preferred port, stay on alternate
1231  *              port even if the preferred port comes back up. Return to
1232  *              preferred port only when host indicates to return
1233  *              (via FAILBACK_EN)
1234  *              1 - After a failure on the preferred port,automatically failback
1235  *              to preferred port whenever it comes back up.
1236  * @failback_en: This field is used when hot_standby is set to 1,lacp_decides is
1237  *              set to 0, and AUTO_FAILBACK is set to 0. The field is also used
1238  *              when hot_standby is set to 0. The failback_en field allow the
1239  *              host to control when the adapter is allowed to fail back to the
1240  *              preferred port. The driver sets this field to indicate to the
1241  *              adapter that it okay to fail back to the preferred port (i.e.
1242  *              attempt to acquire a good port on the preferred port). This
1243  *              field is self-clearing -- the adapter clears it immediately.
1244  *              Note that the host can use waiting_to_fallback to tell if the
1245  *              adapter is waiting for host intervention.
1246  *              0 - Adapter has acknowledged the request to fail back.
1247  *              1 - Host requests that the adapter fail back to preferred port.
1248  * @cold_failover_timeout: When cold standby mode is entered, this field
1249  *              controls how long (in msec) the adapter waits for the preferred
1250  *              port to come alive (assuming it isn't alreay alive. It the
1251  *              preferred port does not come up, then the adapter fails over
1252  *              to the standby port when the timer expires. At the time of
1253  *              standby port initialization, the timer is started again and
1254  *              if the standby port does not come up after the timer expires,
1255  *              then both ports are shut down.
1256  * @alt_admin_key: The Aggregator's administrative Key whenever the device is in
1257  *              active-passive failover mode and both ports are up. This
1258  *              prevents both ports from becoming active in this case.
1259  *              The H/W is responsible for choosing the proper key to use in
1260  *              this case. The null (all zeros) Key value is not available for
1261  *              local use.
1262  * @alt_aggr: Identifies which Aggregator is designated as the alternate
1263  *              (i.e. unused) Aggregator, when both ports are up.
1264  *              0 - Aggregator0 is the alternate
1265  *              1 - Aggregator1 is the alternate
1266  *
1267  * Link Aggregation Active Passive failover mode Configuration
1268  */
1269 typedef struct vxge_hal_lag_ap_config_t {
1270         u32     hot_standby;
1271 #define VXGE_HAL_LAG_HOT_STANDBY_DISBALE_PORT                   0
1272 #define VXGE_HAL_LAG_HOT_STANDBY_KEEP_UP_PORT                   1
1273 #define VXGE_HAL_LAG_HOT_STANDBY_DEFAULT            VXGE_HAL_USE_FLASH_DEFAULT
1274
1275         u32     lacp_decides;
1276 #define VXGE_HAL_LAG_LACP_DECIDES_DISBALE                       0
1277 #define VXGE_HAL_LAG_LACP_DECIDES_ENBALE                        1
1278 #define VXGE_HAL_LAG_LACP_DECIDES_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
1279
1280         u32     pref_active_port;
1281 #define VXGE_HAL_LAG_PREF_ACTIVE_PORT_0                         0
1282 #define VXGE_HAL_LAG_PREF_ACTIVE_PORT_1                         1
1283 #define VXGE_HAL_LAG_PREF_ACTIVE_PORT_DEFAULT       VXGE_HAL_USE_FLASH_DEFAULT
1284
1285         u32     auto_failback;
1286 #define VXGE_HAL_LAG_AUTO_FAILBACK_DISBALE                      0
1287 #define VXGE_HAL_LAG_AUTO_FAILBACK_ENBALE                       1
1288 #define VXGE_HAL_LAG_AUTO_FAILBACK_DEFAULT          VXGE_HAL_USE_FLASH_DEFAULT
1289
1290         u32     failback_en;
1291 #define VXGE_HAL_LAG_FAILBACK_EN_DISBALE                        0
1292 #define VXGE_HAL_LAG_FAILBACK_EN_ENBALE                         1
1293 #define VXGE_HAL_LAG_FAILBACK_EN_DEFAULT            VXGE_HAL_USE_FLASH_DEFAULT
1294
1295         u32     cold_failover_timeout;
1296 #define VXGE_HAL_LAG_MIN_COLD_FAILOVER_TIMEOUT                  0
1297 #define VXGE_HAL_LAG_MAX_COLD_FAILOVER_TIMEOUT                  65535
1298 #define VXGE_HAL_LAG_DEF_COLD_FAILOVER_TIMEOUT      VXGE_HAL_USE_FLASH_DEFAULT
1299
1300         u32     alt_admin_key;
1301 #define VXGE_HAL_LAG_MIN_ALT_ADMIN_KEY                          0
1302 #define VXGE_HAL_LAG_MAX_ALT_ADMIN_KEY                          65535
1303 #define VXGE_HAL_LAG_DEF_ALT_ADMIN_KEY              VXGE_HAL_USE_FLASH_DEFAULT
1304
1305         u32     alt_aggr;
1306 #define VXGE_HAL_LAG_ALT_AGGR_0                                 0
1307 #define VXGE_HAL_LAG_ALT_AGGR_1                                 1
1308 #define VXGE_HAL_LAG_ALT_AGGR_DEFAULT               VXGE_HAL_USE_FLASH_DEFAULT
1309
1310 } vxge_hal_lag_ap_config_t;
1311
1312 /*
1313  * struct vxge_hal_lag_sl_config_t - LAG Single Link configuration(For
1314  *              privileged mode driver only)
1315  *
1316  * @pref_indiv_port: For Single Link mode, this field indicates the preferred
1317  *              active port number. It is used by the Selection logic whenever
1318  *              both ports have become UNSELECTED and the Selection logic must
1319  *              decide which to make SELECTED and which to keep UNSELECTED.
1320  *              This field is only valid when the MODE field is set to
1321  *              'Single Link'.
1322  *
1323  * Link Aggregation Single Link Configuration
1324  */
1325 typedef struct vxge_hal_lag_sl_config_t {
1326         u32     pref_indiv_port;
1327 #define VXGE_HAL_LAG_PREF_INDIV_PORT_0                          0
1328 #define VXGE_HAL_LAG_PREF_INDIV_PORT_1                          1
1329 #define VXGE_HAL_LAG_PREF_INDIV_PORT_DEFAULT        VXGE_HAL_USE_FLASH_DEFAULT
1330 } vxge_hal_lag_sl_config_t;
1331
1332 /*
1333  * struct vxge_hal_lag_lacp_config_t - LAG LACP configuration(For privileged
1334  *                                mode driver only)
1335  *
1336  * @lacp_en: Enables use of the on-chip LACP implementation.
1337  * @lacp_begin: Re-initializes the LACP protocol state machines.
1338  * @discard_lacp: If LACP is not enabled on the device, then all LACP frames
1339  *              are passed to the host. However, when LACP is enabled,this field
1340  *              determines whether the LACP frames are still passed to the host.
1341  * @liberal_len_chk: Controls the length checks that are performed on the
1342  *              received LACPDU by the RX FSM. Normally, the received value of
1343  *              the following length fields is a known constant and(as suggested
1344  *              by IEEE 802.3-2005 43.4.12) the hardware validates them:
1345  *              Actor_Information_Length, Partner_Information_Length,
1346  *              Collector_Information_Length, and Terminator_Information_Length.
1347  * @marker_gen_recv_en: Enables marker generator/receiver. If this functionality
1348  *              is disabled, then the host must assume responsibility for
1349  *              ensuring that no frames pertaining to the conversations (that
1350  *              are moving to a new port) are in flight, whenever the transmit
1351  *              distribution algorithm is updated.
1352  * @marker_resp_en: Enables the transmission of Marker Response PDUs. Adapter
1353  *              sends a Marker Response PDU in response to a received Marker PDU
1354  * @marker_resp_timeout: Timeout value for response to Marker frame - number
1355  *              of milliseconds that the frame distribution logic will wait
1356  *              before assuming that all frames transmitted on a particular
1357  *              conversation have been successfully received. If a Marker
1358  *              Response PDU comes back before the timer expires, then the
1359  *              same assumption is made.
1360  * @slow_proto_mrkr_min_interval: Minimum interval (in milliseconds) between
1361  *              Marker PDU transmissions. Includes both Marker PDUs and Marker
1362  *              Response PDUs. According to IEEE 802.3-2005 Annex 43B.2, the
1363  *              device should send no more than 10 frames in any one-second
1364  *              period. Thus, waiting 100ms between successive transmission
1365  *              of Slow Protocol frames for the Marker Protocol (i.e. those
1366  *              that are sourced by our Marker Generator), guarantee that we
1367  *              satisfy this requirement. To be overly conservative the default
1368  *              value of this register allows for 200ms between frames.
1369  * @throttle_mrkr_resp: Permits the adapter to throttle the tranmission of
1370  *              Marker Response PDUs to satisfy the Slow Protocols transmission
1371  *              rate (see IEEE 802.3-2005 Annex 43B).
1372  *              0 - Transmission of Marker Response PDUs is not moderated.
1373  *              A Marker Response PDU is sent in response to every received
1374  *              Marker frame, regardless of whether the Marker frames are
1375  *              being received at a rate below the Slow Protocols rate.
1376  *              1 - Limit the transmission of Marker Response PDUs to the Slow
1377  *              Protocols transmission rate. If a remote host is generating
1378  *              Marker frames too quickly, then some of these frames will
1379  *              have no corresponding Marker Response PDU generated by the
1380  *              adapter.
1381  *
1382  * Link Aggregation LACP Configuration
1383  */
1384 typedef struct vxge_hal_lag_lacp_config_t {
1385         u32     lacp_en;
1386 #define VXGE_HAL_LAG_LACP_EN_DISBALE                            0
1387 #define VXGE_HAL_LAG_LACP_EN_ENABLE                             1
1388 #define VXGE_HAL_LAG_LACP_EN_DEFAULT                VXGE_HAL_USE_FLASH_DEFAULT
1389
1390         u32     lacp_begin;
1391 #define VXGE_HAL_LAG_LACP_BEGIN_NORMAL                          0
1392 #define VXGE_HAL_LAG_LACP_BEGIN_RESET                           1
1393 #define VXGE_HAL_LAG_LACP_BEGIN_DEFAULT             VXGE_HAL_USE_FLASH_DEFAULT
1394
1395         u32     discard_lacp;
1396 #define VXGE_HAL_LAG_DISCARD_LACP_DISBALE                       0
1397 #define VXGE_HAL_LAG_DISCARD_LACP_ENABLE                        1
1398 #define VXGE_HAL_LAG_DISCARD_LACP_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
1399
1400         u32     liberal_len_chk;
1401 #define VXGE_HAL_LAG_LIBERAL_LEN_CHK_DISBALE                    0
1402 #define VXGE_HAL_LAG_LIBERAL_LEN_CHK_ENABLE                     1
1403 #define VXGE_HAL_LAG_LIBERAL_LEN_CHK_DEFAULT        VXGE_HAL_USE_FLASH_DEFAULT
1404
1405         u32     marker_gen_recv_en;
1406 #define VXGE_HAL_LAG_MARKER_GEN_RECV_EN_DISBALE                 0
1407 #define VXGE_HAL_LAG_MARKER_GEN_RECV_EN_ENABLE                  1
1408 #define VXGE_HAL_LAG_MARKER_GEN_RECV_EN_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1409
1410         u32     marker_resp_en;
1411 #define VXGE_HAL_LAG_MARKER_RESP_EN_DISBALE                     0
1412 #define VXGE_HAL_LAG_MARKER_RESP_EN_ENABLE                      1
1413 #define VXGE_HAL_LAG_MARKER_RESP_EN_DEFAULT         VXGE_HAL_USE_FLASH_DEFAULT
1414
1415         u32     marker_resp_timeout;
1416 #define VXGE_HAL_LAG_MIN_MARKER_RESP_TIMEOUT                    0
1417 #define VXGE_HAL_LAG_MAX_MARKER_RESP_TIMEOUT                    65535
1418 #define VXGE_HAL_LAG_DEF_MARKER_RESP_TIMEOUT        VXGE_HAL_USE_FLASH_DEFAULT
1419
1420         u32     slow_proto_mrkr_min_interval;
1421 #define VXGE_HAL_LAG_MIN_SLOW_PROTO_MRKR_MIN_INTERVAL           0
1422 #define VXGE_HAL_LAG_MAX_SLOW_PROTO_MRKR_MIN_INTERVAL           65535
1423 #define VXGE_HAL_LAG_DEF_SLOW_PROTO_MRKR_MIN_INTERVAL           \
1424                                                     VXGE_HAL_USE_FLASH_DEFAULT
1425
1426         u32     throttle_mrkr_resp;
1427 #define VXGE_HAL_LAG_THROTTLE_MRKR_RESP_DISBALE                 0
1428 #define VXGE_HAL_LAG_THROTTLE_MRKR_RESP_ENABLE                  1
1429 #define VXGE_HAL_LAG_THROTTLE_MRKR_RESP_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1430
1431 } vxge_hal_lag_lacp_config_t;
1432
1433 /*
1434  * struct vxge_hal_lag_config_t - LAG configuration(For privileged
1435  *                                mode driver only)
1436  *
1437  * @lag_en: Enables link aggregation
1438  * @lag_mode: Select the mode of operation for link aggregation. The options:
1439  *              00 - Link Aggregated
1440  *              01 - Active/Passive Failover
1441  *              10 - Single Link
1442  * @la_mode_config: LAG Link Aggregator mode config
1443  * @ap_mode_config: LAG Active Passive Failover mode config
1444  * @sl_mode_config: LAG Single Link mode config
1445  * @lacp_config: LAG LACP config
1446  * @incr_tx_aggr_stats: Controls whether Tx aggregator stats are incremented
1447  *              when Link Aggregation is disabled.
1448  *              0 - Don't increment
1449  *              1 - Increment
1450  *              Note: When LAG is enabled, aggregator stats are always
1451  *              incremented.
1452  * @port_config: Lag Port configuration. See vxge_hal_lag_port_config_t {}
1453  * @aggr_config: Lag Aggregator configuration. See vxge_hal_lag_aggr_config_t {}
1454  * @sys_pri: The System Priority of the System. Numerically lower values have
1455  *              higher priority.
1456  * @mac_addr: The MAC address assigned to the System. Should be non-zero.
1457  * @use_port_mac_addr: Indicates whether the Aggregator should use:
1458  *              0 - the address specified in this register.
1459  *              1 - the station address of one of the ports in the System
1460  * @mac_addr_sel: Indicates which port address to use, if USE_PORT_ADDR is set:
1461  *              0 - the station address of port 0
1462  *              1 - the station address of port 1.
1463  * @fast_per_time: Fast Periodic Time - number of seconds between periodic
1464  *              transmissions of Short Timeouts.
1465  * @slow_per_time: Slow Periodic Time - number of seconds between periodic
1466  *              transmissions of Long Timeouts.
1467  * @short_timeout: Short Timeout Time - number of seconds before
1468  *              invalidating received LACPDU information using Short
1469  *              Timeouts (3 x Fast Periodic Time).
1470  * @long_timeout: Long Timeout Time - number of seconds before invalidating
1471  *              received LACPDU information using Long Timeouts
1472  *              (3 x Slow Periodic Time).
1473  * @churn_det_time: Churn Detection Time - number of seconds that the
1474  *              Actor and Partner Churn state machines wait for the Actor
1475  *              or Partner Sync state to stabilize.
1476  * @aggr_wait_time: Aggregate Wait Time - number of seconds to delay
1477  *              aggregation,to allow multiple links to aggregate simultaneously
1478  * @short_timer_scale: For simulation purposes, this field allows scaling of
1479  *              link aggregation timers. Specifically, the included timers are
1480  *              short (programmed with units of msec) and include 'Emptied Link
1481  *              Timer', 'Slow Proto Timer for Marker PDU', 'Slow Proto Timer for
1482  *              Marker Response PDU', and 'Cold Failover Timer'.
1483  *              0x0 - No scaling
1484  *              0x1 - Scale by 10X (counter expires 10 times faster)
1485  *              0x2 - Scale by 100X
1486  *              0x3 - Scale by 1000X
1487  * @long_timer_scale: For simulation purposes, this field allows scaling of link
1488  *              aggregation timers. Specifically, the included timers are long
1489  *              (programmed with units of seconds) and include 'Current While
1490  *              Timer', 'Periodic Timer', 'Wait While Timer', 'Transmit LACP
1491  *              Timer', 'Actor Churn Timer', 'Partner Churn Timer',
1492  *              0x0 - No scaling
1493  *              0x1 - Scale by 10X (counter expires 10 times faster)
1494  *              0x2 - Scale by 100X
1495  *              0x3 - Scale by 1000X
1496  *              0x4 - Scale by 10000X
1497  *              0x5 - Scale by 100000X
1498  *              0x6 - Scale by 1000000X
1499  *
1500  * Link Aggregation Configuration
1501  */
1502 typedef struct vxge_hal_lag_config_t {
1503         u32     lag_en;
1504 #define VXGE_HAL_LAG_LAG_EN_DISABLE                             0
1505 #define VXGE_HAL_LAG_LAG_EN_ENABLE                              1
1506 #define VXGE_HAL_LAG_LAG_EN_DEFAULT                 VXGE_HAL_USE_FLASH_DEFAULT
1507
1508         u32     lag_mode;
1509 #define VXGE_HAL_LAG_LAG_MODE_LAG                               0
1510 #define VXGE_HAL_LAG_LAG_MODE_ACTIVE_PASSIVE_FAILOVER           1
1511 #define VXGE_HAL_LAG_LAG_MODE_SINGLE_LINK                       2
1512 #define VXGE_HAL_LAG_LAG_MODE_DEFAULT               VXGE_HAL_USE_FLASH_DEFAULT
1513
1514         vxge_hal_lag_la_config_t        la_mode_config;
1515         vxge_hal_lag_ap_config_t        ap_mode_config;
1516         vxge_hal_lag_sl_config_t        sl_mode_config;
1517         vxge_hal_lag_lacp_config_t      lacp_config;
1518
1519         u32     incr_tx_aggr_stats;
1520 #define VXGE_HAL_LAG_INCR_TX_AGGR_STATS_DISBALE                 0
1521 #define VXGE_HAL_LAG_INCR_TX_AGGR_STATS_ENABLE                  1
1522 #define VXGE_HAL_LAG_INCR_TX_AGGR_STATS_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1523
1524         vxge_hal_lag_port_config_t port_config[VXGE_HAL_LAG_PORT_MAX_PORTS];
1525         vxge_hal_lag_aggr_config_t aggr_config[VXGE_HAL_LAG_AGGR_MAX_PORTS];
1526
1527         u32     sys_pri;
1528 #define VXGE_HAL_LAG_MIN_SYS_PRI                                0
1529 #define VXGE_HAL_LAG_MAX_SYS_PRI                                65535
1530 #define VXGE_HAL_LAG_DEF_SYS_PRI                    VXGE_HAL_USE_FLASH_DEFAULT
1531
1532         macaddr_t mac_addr;
1533
1534         u32     use_port_mac_addr;
1535 #define VXGE_HAL_LAG_USE_PORT_MAC_ADDR_DISBALE                  0
1536 #define VXGE_HAL_LAG_USE_PORT_MAC_ADDR_ENABLE                   1
1537 #define VXGE_HAL_LAG_USE_PORT_MAC_ADDR_DEFAULT      VXGE_HAL_USE_FLASH_DEFAULT
1538
1539         u32     mac_addr_sel;
1540 #define VXGE_HAL_LAG_MAC_ADDR_SEL_PORT_0                        0
1541 #define VXGE_HAL_LAG_MAC_ADDR_SEL_PORT_1                        1
1542 #define VXGE_HAL_LAG_MAC_ADDR_SEL_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
1543
1544         u32     fast_per_time;
1545 #define VXGE_HAL_LAG_MIN_FAST_PER_TIME                          0
1546 #define VXGE_HAL_LAG_MAX_FAST_PER_TIME                          65535
1547 #define VXGE_HAL_LAG_DEF_FAST_PER_TIME              VXGE_HAL_USE_FLASH_DEFAULT
1548
1549         u32     slow_per_time;
1550 #define VXGE_HAL_LAG_MIN_SLOW_PER_TIME                          0
1551 #define VXGE_HAL_LAG_MAX_SLOW_PER_TIME                          65535
1552 #define VXGE_HAL_LAG_DEF_SLOW_PER_TIME              VXGE_HAL_USE_FLASH_DEFAULT
1553
1554         u32     short_timeout;
1555 #define VXGE_HAL_LAG_MIN_SHORT_TIMEOUT                          0
1556 #define VXGE_HAL_LAG_MAX_SHORT_TIMEOUT                          65535
1557 #define VXGE_HAL_LAG_DEF_SHORT_TIMEOUT              VXGE_HAL_USE_FLASH_DEFAULT
1558
1559         u32     long_timeout;
1560 #define VXGE_HAL_LAG_MIN_LONG_TIMEOUT                           0
1561 #define VXGE_HAL_LAG_MAX_LONG_TIMEOUT                           65535
1562 #define VXGE_HAL_LAG_DEF_LONG_TIMEOUT               VXGE_HAL_USE_FLASH_DEFAULT
1563
1564         u32     churn_det_time;
1565 #define VXGE_HAL_LAG_MIN_CHURN_DET_TIME                         0
1566 #define VXGE_HAL_LAG_MAX_CHURN_DET_TIME                         65535
1567 #define VXGE_HAL_LAG_DEF_CHURN_DET_TIME             VXGE_HAL_USE_FLASH_DEFAULT
1568
1569         u32     aggr_wait_time;
1570 #define VXGE_HAL_LAG_MIN_AGGR_WAIT_TIME                         0
1571 #define VXGE_HAL_LAG_MAX_AGGR_WAIT_TIME                         65535
1572 #define VXGE_HAL_LAG_DEF_AGGR_WAIT_TIME             VXGE_HAL_USE_FLASH_DEFAULT
1573
1574         u32     short_timer_scale;
1575 #define VXGE_HAL_LAG_SHORT_TIMER_SCALE_1X                       0
1576 #define VXGE_HAL_LAG_SHORT_TIMER_SCALE_10X                      1
1577 #define VXGE_HAL_LAG_SHORT_TIMER_SCALE_100X                     2
1578 #define VXGE_HAL_LAG_SHORT_TIMER_SCALE_1000X                    3
1579 #define VXGE_HAL_LAG_SHORT_TIMER_SCALE_DEFAULT      VXGE_HAL_USE_FLASH_DEFAULT
1580
1581         u32     long_timer_scale;
1582 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_1X                        0
1583 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_10X                       1
1584 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_100X                      2
1585 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_1000X                     3
1586 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_10000X                    4
1587 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_100000X                   5
1588 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_1000000X                  6
1589 #define VXGE_HAL_LAG_LONG_TIMER_SCALE_DEFAULT       VXGE_HAL_USE_FLASH_DEFAULT
1590
1591 } vxge_hal_lag_config_t;
1592
1593 /*
1594  * struct vxge_hal_vpath_qos_config_t - Vpath qos(For privileged
1595  *                                mode driver only)
1596  * @priority: The priority of vpath
1597  * @min_bandwidth: Minimum Guaranteed bandwidth
1598  * @max_bandwidth: Maximum allowed bandwidth
1599  *
1600  * This structure is vpath qos configuration for MRPCIM section of device
1601  */
1602 typedef struct vxge_hal_vpath_qos_config_t {
1603         u32                             priority;
1604 #define VXGE_HAL_VPATH_QOS_PRIORITY_MIN                         0
1605 #define VXGE_HAL_VPATH_QOS_PRIORITY_MAX                         16
1606 #define VXGE_HAL_VPATH_QOS_PRIORITY_DEFAULT                     0
1607
1608         u32                             min_bandwidth;
1609 #define VXGE_HAL_VPATH_QOS_MIN_BANDWIDTH_MIN                    0
1610 #define VXGE_HAL_VPATH_QOS_MIN_BANDWIDTH_MAX                    100
1611 #define VXGE_HAL_VPATH_QOS_MIN_BANDWIDTH_DEFAULT                0
1612
1613         u32                             max_bandwidth;
1614 #define VXGE_HAL_VPATH_QOS_MAX_BANDWIDTH_MIN                    0
1615 #define VXGE_HAL_VPATH_QOS_MAX_BANDWIDTH_MAX                    100
1616 #define VXGE_HAL_VPATH_QOS_MAX_BANDWIDTH_DEFAULT                0
1617
1618 } vxge_hal_vpath_qos_config_t;
1619
1620 /*
1621  * struct vxge_hal_mrpcim_config_t - MRPCIM secion configuration(For privileged
1622  *                                mode driver only)
1623  *
1624  * @mac_config: MAC Port Config. See vxge_hal_mac_config_t {}
1625  * @lag_config: MAC Port Config. See vxge_hal_lag_config_t {}
1626  * @vp_qos: Vpath QOS
1627  * @vpath_to_wire_port_map_en: Mask to enable vpath to wire port mapping.
1628  * @vpath_to_wire_port_map: If LAG is not enabled or lag_distrib_dest is not set
1629  *              then vpath_to_wire_port_map is used to assign independent ports
1630  *              to vpath
1631  *
1632  * This structure is configuration for MRPCIM section of device
1633  */
1634 typedef struct vxge_hal_mrpcim_config_t {
1635         vxge_hal_mac_config_t mac_config;
1636         vxge_hal_lag_config_t lag_config;
1637         u64     vpath_to_wire_port_map_en;
1638 #define VXGE_HAL_VPATH_TO_WIRE_PORT_MAP_EN_DISABLE(vpid)        0
1639 #define VXGE_HAL_VPATH_TO_WIRE_PORT_MAP_EN_ENABLE(vpid)         mBIT(vpid)
1640 #define VXGE_HAL_VPATH_WIRE_PORTS_DEFAULT           VXGE_HAL_USE_FLASH_DEFAULT
1641         u64     vpath_to_wire_port_map;
1642 #define VXGE_HAL_VPATH_TO_WIRE_PORT_MAP_PORT0(vpid)             0
1643 #define VXGE_HAL_VPATH_TO_WIRE_PORT_MAP_PORT1(vpid)             mBIT(vpid)
1644 #define VXGE_HAL_VPATH_TO_WIRE_PORT_MAP_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1645         vxge_hal_vpath_qos_config_t vp_qos[VXGE_HAL_MAX_VIRTUAL_PATHS];
1646 } vxge_hal_mrpcim_config_t;
1647
1648 /*
1649  * struct vxge_hal_tim_intr_config_t - X3100 Tim interrupt configuration.
1650  * @intr_enable: Set to 1, if interrupt is enabled.
1651  * @btimer_val: Boundary Timer Initialization value in units of 272 ns.
1652  * @timer_ac_en: Timer Automatic Cancel. 1 : Automatic Canceling Enable: when
1653  *              asserted, other interrupt-generating entities will cancel the
1654  *              scheduled timer interrupt.
1655  * @timer_ci_en: Timer Continuous Interrupt. 1 : Continuous Interrupting Enable:
1656  *              When asserted, an interrupt will be generated every time the
1657  *              boundary timer expires, even if no traffic has been transmitted
1658  *              on this interrupt.
1659  * @timer_ri_en: Timer Consecutive (Re-) Interrupt 1 : Consecutive
1660  *              (Re-) Interrupt Enable: When asserted, an interrupt will be
1661  *              generated the next time the timer expires,even if no traffic has
1662  *              been transmitted on this interrupt. (This will only happen once
1663  *              each time that this value is written to the TIM.) This bit is
1664  *              cleared by H/W at the end of the current-timer-interval when
1665  *              the interrupt is triggered.
1666  * @rtimer_event_sf: Restriction Timer Event Scale Factor. A scale factor that
1667  *              is to be applied to the current event count before it is added
1668  *              to the restriction timer value when the restriction timer
1669  *              is started.
1670  *              The scale factor is applied as a right or left shift to multiply
1671  *              or divide by the event count. The programmable values are as
1672  *              follows:
1673  *              0-disable restriction timer and use the base timer value.
1674  *              1-Multiply the event count by 2, shift left by 1.
1675  *              2-Multiply the event count by 4, shift left by 2.
1676  *              3-Multiply the event count by 8, shift left by 3.
1677  *              4-Multiply the event count by 16, shift left by 4.
1678  *              5-Multiply the event count by 32, shift left by 5.
1679  *              6-Multiply the event count by 64, shift  left by 6.
1680  *              7-Multiply the event count by 128, shift left by 7.
1681  *              8-add the event count, no shifting.
1682  *              9-Divide the event count by 128, shift right by 7.
1683  *              10-Divide the event count by 64, shift right by 6.
1684  *              11-Divide the event count by 32, shift right by 5.
1685  *              12-Divide the event count by 16, shift right by 4.
1686  *              13-Divide the event count by 8, shift right by 3.
1687  *              14-Divide the event count by 4, shift right by 2.
1688  *              15-Divide the event count by 2, shift right by 1.
1689  * @rtimer_val: Restriction Timer Initialization value in units of 272 ns.
1690  * @util_sel: Utilization Selector. Selects which of the workload approximations
1691  *              to use (e.g. legacy Tx utilization, Tx/Rx utilization, host
1692  *              specified utilization etc.),selects one of the 17 host
1693  *              configured values.
1694  *              0-Virtual Path 0
1695  *              1-Virtual Path 1
1696  *              ...
1697  *              16-Virtual Path 17
1698  *              17-Legacy Tx network utilization, provided by TPA
1699  *              18-Legacy Rx network utilization, provided by FAU
1700  *              19-Average of legacy Rx and Tx utilization calculated from link
1701  *              utilization values.
1702  *              20-31-Invalid configurations
1703  *              32-Host utilization for Virtual Path 0
1704  *              33-Host utilization for Virtual Path 1
1705  *              ...
1706  *              48-Host utilization for Virtual Path 17
1707  *              49-Legacy Tx network utilization, provided by TPA
1708  *              50-Legacy Rx network utilization, provided by FAU
1709  *              51-Average of legacy Rx and Tx utilization calculated from
1710  *              link utilization values.
1711  *              52-63-Invalid configurations
1712  * @ltimer_val: Latency Timer Initialization Value in units of 272 ns.
1713  * @txfrm_cnt_en: Transmit Frame Event Count Enable. This configuration bit
1714  *              when set to 1 enables counting of transmit frame's(signalled by
1715  *              SM), towards utilization event count values.
1716  * @txd_cnt_en: TxD Return Event Count Enable. This configuration bit when set
1717  *              to 1 enables counting of TxD0 returns (signalled by PCC's),
1718  *              towards utilization event count values.
1719  * @urange_a: Defines the upper limit (in percent) for this utilization range
1720  *              to be active. This range is considered active
1721  *               if 0 = UTIL = URNG_A and the UEC_A field (below) is non-zero.
1722  * @uec_a: Utilization Event Count A. If this range is active, the adapter will
1723  *              wait until UEC_A events have occurred on the interrupt before
1724  *              generating an interrupt.
1725  * @urange_b: Link utilization range B.
1726  * @uec_b: Utilization Event Count B.
1727  * @urange_c: Link utilization range C.
1728  * @uec_c: Utilization Event Count C.
1729  * @urange_d: Link utilization range D.
1730  * @uec_d: Utilization Event Count D.
1731  * @ufca_intr_thres
1732  * @ufca_lo_lim
1733  * @ufca_hi_lim
1734  * @ufca_lbolt_period:
1735  *
1736  * Traffic Interrupt Controller Module interrupt configuration.
1737  */
1738 typedef struct vxge_hal_tim_intr_config_t {
1739
1740         u32                             intr_enable;
1741 #define VXGE_HAL_TIM_INTR_ENABLE                                1
1742 #define VXGE_HAL_TIM_INTR_DISABLE                               0
1743 #define VXGE_HAL_TIM_INTR_DEFAULT                               0
1744
1745         u32                             btimer_val;
1746 #define VXGE_HAL_MIN_TIM_BTIMER_VAL                             0
1747 #define VXGE_HAL_MAX_TIM_BTIMER_VAL                             67108864
1748 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_BTIMER_VAL    VXGE_HAL_USE_FLASH_DEFAULT
1749
1750         u32                             timer_ac_en;
1751 #define VXGE_HAL_TIM_TIMER_AC_ENABLE                            1
1752 #define VXGE_HAL_TIM_TIMER_AC_DISABLE                           0
1753 #define VXGE_HAL_TIM_TIMER_AC_USE_FLASH_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1754
1755         u32                             timer_ci_en;
1756 #define VXGE_HAL_TIM_TIMER_CI_ENABLE                            1
1757 #define VXGE_HAL_TIM_TIMER_CI_DISABLE                           0
1758 #define VXGE_HAL_TIM_TIMER_CI_USE_FLASH_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1759
1760         u32                             timer_ri_en;
1761 #define VXGE_HAL_TIM_TIMER_RI_ENABLE                            1
1762 #define VXGE_HAL_TIM_TIMER_RI_DISABLE                           0
1763 #define VXGE_HAL_TIM_TIMER_RI_USE_FLASH_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1764
1765         u32                             rtimer_event_sf;
1766 #define VXGE_HAL_MIN_TIM_RTIMER_EVENT_SF                        0
1767 #define VXGE_HAL_MAX_TIM_RTIMER_EVENT_SF                        15
1768 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_RTIMER_EVENT_SF          \
1769                                                     VXGE_HAL_USE_FLASH_DEFAULT
1770
1771         u32                             rtimer_val;
1772 #define VXGE_HAL_MIN_TIM_RTIMER_VAL                             0
1773 #define VXGE_HAL_MAX_TIM_RTIMER_VAL                             67108864
1774 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_RTIMER_VAL    VXGE_HAL_USE_FLASH_DEFAULT
1775
1776         u32                             util_sel;
1777 #define VXGE_HAL_TIM_UTIL_SEL_VPATH(n)                          n
1778 #define VXGE_HAL_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL                17
1779 #define VXGE_HAL_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL                18
1780 #define VXGE_HAL_TIM_UTIL_SEL_LEGACY_TX_RX_AVE_NET_UTIL         19
1781 #define VXGE_HAL_TIM_UTIL_SEL_VPATH(n)                          n
1782 #define VXGE_HAL_TIM_UTIL_SEL_VPATH(n)                          n
1783 #define VXGE_HAL_TIM_UTIL_SEL_HOST_UTIL_VPATH(n)                (32+n)
1784 #define VXGE_HAL_TIM_UTIL_SEL_TIM_UTIL_VPATH(n)                 63
1785 #define VXGE_HAL_TIM_UTIL_SEL_USE_FLASH_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1786
1787         u32                             ltimer_val;
1788 #define VXGE_HAL_MIN_TIM_LTIMER_VAL                             0
1789 #define VXGE_HAL_MAX_TIM_LTIMER_VAL                             67108864
1790 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_LTIMER_VAL    VXGE_HAL_USE_FLASH_DEFAULT
1791
1792         /* Line utilization interrupts */
1793         u32                             txfrm_cnt_en;
1794 #define VXGE_HAL_TXFRM_CNT_EN_ENABLE                            1
1795 #define VXGE_HAL_TXFRM_CNT_EN_DISABLE                           0
1796 #define VXGE_HAL_TXFRM_CNT_EN_USE_FLASH_DEFAULT     VXGE_HAL_USE_FLASH_DEFAULT
1797
1798         u32                             txd_cnt_en;
1799 #define VXGE_HAL_TXD_CNT_EN_ENABLE                              1
1800 #define VXGE_HAL_TXD_CNT_EN_DISABLE                             0
1801 #define VXGE_HAL_TXD_CNT_EN_USE_FLASH_DEFAULT       VXGE_HAL_USE_FLASH_DEFAULT
1802
1803         u32                             urange_a;
1804 #define VXGE_HAL_MIN_TIM_URANGE_A                               0
1805 #define VXGE_HAL_MAX_TIM_URANGE_A                               100
1806 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_URANGE_A     VXGE_HAL_USE_FLASH_DEFAULT
1807
1808         u32                             uec_a;
1809 #define VXGE_HAL_MIN_TIM_UEC_A                                  0
1810 #define VXGE_HAL_MAX_TIM_UEC_A                                  65535
1811 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_UEC_A        VXGE_HAL_USE_FLASH_DEFAULT
1812
1813         u32                             urange_b;
1814 #define VXGE_HAL_MIN_TIM_URANGE_B                               0
1815 #define VXGE_HAL_MAX_TIM_URANGE_B                               100
1816 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_URANGE_B     VXGE_HAL_USE_FLASH_DEFAULT
1817
1818         u32                             uec_b;
1819 #define VXGE_HAL_MIN_TIM_UEC_B                                  0
1820 #define VXGE_HAL_MAX_TIM_UEC_B                                  65535
1821 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_UEC_B        VXGE_HAL_USE_FLASH_DEFAULT
1822
1823         u32                             urange_c;
1824 #define VXGE_HAL_MIN_TIM_URANGE_C                               0
1825 #define VXGE_HAL_MAX_TIM_URANGE_C                               100
1826 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_URANGE_C     VXGE_HAL_USE_FLASH_DEFAULT
1827
1828         u32                             uec_c;
1829 #define VXGE_HAL_MIN_TIM_UEC_C                                  0
1830 #define VXGE_HAL_MAX_TIM_UEC_C                                  65535
1831 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_UEC_C        VXGE_HAL_USE_FLASH_DEFAULT
1832
1833         u32                             uec_d;
1834 #define VXGE_HAL_MIN_TIM_UEC_D                                  0
1835 #define VXGE_HAL_MAX_TIM_UEC_D                                  65535
1836 #define VXGE_HAL_USE_FLASH_DEFAULT_TIM_UEC_D        VXGE_HAL_USE_FLASH_DEFAULT
1837
1838         u32                             ufca_intr_thres;
1839 #define VXGE_HAL_MIN_UFCA_INTR_THRES                            1
1840 #define VXGE_HAL_MAX_UFCA_INTR_THRES                            4096
1841 #define VXGE_HAL_USE_FLASH_DEFAULT_UFCA_INTR_THRES    VXGE_HAL_USE_FLASH_DEFAULT
1842
1843         u32                             ufca_lo_lim;
1844 #define VXGE_HAL_MIN_UFCA_LO_LIM                                1
1845 #define VXGE_HAL_MAX_UFCA_LO_LIM                                16
1846 #define VXGE_HAL_USE_FLASH_DEFAULT_UFCA_LO_LIM      VXGE_HAL_USE_FLASH_DEFAULT
1847
1848         u32                             ufca_hi_lim;
1849 #define VXGE_HAL_MIN_UFCA_HI_LIM                                1
1850 #define VXGE_HAL_MAX_UFCA_HI_LIM                                256
1851 #define VXGE_HAL_USE_FLASH_DEFAULT_UFCA_HI_LIM      VXGE_HAL_USE_FLASH_DEFAULT
1852
1853         u32                             ufca_lbolt_period;
1854 #define VXGE_HAL_MIN_UFCA_LBOLT_PERIOD                          1
1855 #define VXGE_HAL_MAX_UFCA_LBOLT_PERIOD                          1024
1856 #define VXGE_HAL_USE_FLASH_DEFAULT_UFCA_LBOLT_PERIOD            \
1857                                                     VXGE_HAL_USE_FLASH_DEFAULT
1858
1859 } vxge_hal_tim_intr_config_t;
1860
1861 /*
1862  * struct vxge_hal_fifo_config_t - Configuration of fifo.
1863  * @enable: Is this fifo to be commissioned
1864  * @fifo_length: Numbers of TxDLs (that is, lists of Tx descriptors)per queue.
1865  * @max_frags: Max number of Tx buffers per TxDL (that is, per single
1866  *              transmit operation).
1867  *              No more than 256 transmit buffers can be specified.
1868  * @alignment_size: per Tx fragment DMA-able memory used to align transmit data
1869  *              (e.g., to align on a cache line).
1870  * @max_aligned_frags: Number of fragments to be aligned out of
1871  *              maximum fragments (see @max_frags).
1872  * @intr: Boolean. Use 1 to generate interrupt for each completed TxDL.
1873  *              Use 0 otherwise.
1874  * @no_snoop_bits: If non-zero, specifies no-snoop PCI operation,
1875  *              which generally improves latency of the host bridge operation
1876  *              (see PCI specification). For valid values please refer
1877  *              to vxge_hal_fifo_config_t {} in the driver sources.
1878  * Configuration of all X3100 fifos.
1879  * Note: Valid (min, max) range for each attribute is specified in the body of
1880  * the vxge_hal_fifo_config_t {} structure.
1881  */
1882 typedef struct vxge_hal_fifo_config_t {
1883         u32                             enable;
1884 #define VXGE_HAL_FIFO_ENABLE                                    1
1885 #define VXGE_HAL_FIFO_DISABLE                                   0
1886 #define VXGE_HAL_FIFO_DEFAULT                                   1
1887
1888         u32                             fifo_length;
1889 #define VXGE_HAL_MIN_FIFO_LENGTH                                1
1890 #define VXGE_HAL_MAX_FIFO_LENGTH                                12*1024
1891 #define VXGE_HAL_DEF_FIFO_LENGTH                                512
1892
1893         u32                             max_frags;
1894 #define VXGE_HAL_MIN_FIFO_FRAGS                                 1
1895 #define VXGE_HAL_MAX_FIFO_FRAGS                                 256
1896 #define VXGE_HAL_DEF_FIFO_FRAGS                                 256
1897
1898         u32                             alignment_size;
1899 #define VXGE_HAL_MIN_FIFO_ALIGNMENT_SIZE                        0
1900 #define VXGE_HAL_MAX_FIFO_ALIGNMENT_SIZE                        65536
1901 #define VXGE_HAL_DEF_FIFO_ALIGNMENT_SIZE            __vxge_os_cacheline_size
1902
1903         u32                             max_aligned_frags;
1904         /* range: (1, @max_frags) */
1905
1906         u32                             intr;
1907 #define VXGE_HAL_FIFO_QUEUE_INTR_ENABLE                         1
1908 #define VXGE_HAL_FIFO_QUEUE_INTR_DISABLE                        0
1909 #define VXGE_HAL_FIFO_QUEUE_INTR_DEFAULT                        0
1910
1911         u32                             no_snoop_bits;
1912 #define VXGE_HAL_FIFO_NO_SNOOP_DISABLED                         0
1913 #define VXGE_HAL_FIFO_NO_SNOOP_TXD                              1
1914 #define VXGE_HAL_FIFO_NO_SNOOP_FRM                              2
1915 #define VXGE_HAL_FIFO_NO_SNOOP_ALL                              3
1916 #define VXGE_HAL_FIFO_NO_SNOOP_DEFAULT                          0
1917
1918 } vxge_hal_fifo_config_t;
1919
1920 /*
1921  * struct vxge_hal_ring_config_t - Ring configurations.
1922  * @enable: Is this ring to be commissioned
1923  * @ring_length: Numbers of RxDs in the ring
1924  * @buffer_mode: Receive buffer mode (1, 2, 3, or 5); for details please refer
1925  *              to X3100 User Guide.
1926  * @scatter_mode: X3100 supports two receive scatter modes: A and B.
1927  *              For details please refer to X3100 User Guide.
1928  * @post_mode: The RxD post mode.
1929  * @max_frm_len: Maximum frame length that can be received on _that_ ring.
1930  *              Setting this field to VXGE_HAL_USE_FLASH_DEFAULT ensures that
1931  *              the ring will "accept"
1932  *              MTU-size frames (note that MTU can be changed at runtime).
1933  *              Any value other than (VXGE_HAL_USE_FLASH_DEFAULT) specifies a
1934  *              certain "hard" limit on the receive frame sizes. The field can
1935  *              be used to activate receive frame-length based steering.
1936  * @no_snoop_bits: If non-zero, specifies no-snoop PCI operation,
1937  *              which generally improves latency of the host bridge operation
1938  *              (see PCI specification). For valid values please refer
1939  *              to vxge_hal_ring_config_t {} in the driver sources.
1940  * @rx_timer_val: The number of 32ns periods that would be counted between two
1941  *              timer interrupts.
1942  * @greedy_return: If Set it forces the device to return absolutely all RxD
1943  *              that are consumed and still on board when a timer interrupt
1944  *              triggers. If Clear, then if the device has already returned
1945  *              RxD before current timer interrupt trigerred and after the
1946  *              previous timer interrupt triggered, then the device is not
1947  *              forced to returned the rest of the consumed RxD that it has
1948  *              on board which account for a byte count less than the one
1949  *              programmed into PRC_CFG6.RXD_CRXDT field
1950  * @rx_timer_ci: TBD
1951  * @backoff_interval_us: Time (in microseconds), after which X3100
1952  *              tries to download RxDs posted by the host.
1953  *              Note that the "backoff" does not happen if host posts receive
1954  *              descriptors in the timely fashion.
1955  * @indicate_max_pkts: Sets maximum number of received frames to be processed
1956  *              within single interrupt.
1957  * @sw_lro_sessions: Number of LRO Sessions
1958  * @sw_lro_sg_size: Size of LROable segment
1959  * @sw_lro_frm_len: Length of LROable frame
1960  *
1961  * Ring configuration.
1962  */
1963 typedef struct vxge_hal_ring_config_t {
1964         u32                             enable;
1965 #define VXGE_HAL_RING_ENABLE                                    1
1966 #define VXGE_HAL_RING_DISABLE                                   0
1967 #define VXGE_HAL_RING_DEFAULT                                   1
1968
1969         u32                             ring_length;
1970 #define VXGE_HAL_MIN_RING_LENGTH                                1
1971 #define VXGE_HAL_MAX_RING_LENGTH                                8096
1972 #define VXGE_HAL_DEF_RING_LENGTH                                512
1973
1974         u32                             buffer_mode;
1975 #define VXGE_HAL_RING_RXD_BUFFER_MODE_1                         1
1976 #define VXGE_HAL_RING_RXD_BUFFER_MODE_3                         3
1977 #define VXGE_HAL_RING_RXD_BUFFER_MODE_5                         5
1978 #define VXGE_HAL_RING_RXD_BUFFER_MODE_DEFAULT                   1
1979
1980         u32                             scatter_mode;
1981 #define VXGE_HAL_RING_SCATTER_MODE_A                            0
1982 #define VXGE_HAL_RING_SCATTER_MODE_B                            1
1983 #define VXGE_HAL_RING_SCATTER_MODE_C                            2
1984 #define VXGE_HAL_RING_SCATTER_MODE_USE_FLASH_DEFAULT            \
1985                                                     VXGE_HAL_USE_FLASH_DEFAULT
1986
1987         u32                             post_mode;
1988 #define VXGE_HAL_RING_POST_MODE_LEGACY                          0
1989 #define VXGE_HAL_RING_POST_MODE_DOORBELL                        1
1990 #define VXGE_HAL_RING_POST_MODE_USE_FLASH_DEFAULT   VXGE_HAL_USE_FLASH_DEFAULT
1991
1992         u32                             max_frm_len;
1993 #define VXGE_HAL_MIN_RING_MAX_FRM_LEN                       VXGE_HAL_MIN_MTU
1994 #define VXGE_HAL_MAX_RING_MAX_FRM_LEN                       VXGE_HAL_MAX_MTU
1995 #define VXGE_HAL_MAX_RING_FRM_LEN_USE_MTU           VXGE_HAL_USE_FLASH_DEFAULT
1996
1997         u32                             no_snoop_bits;
1998 #define VXGE_HAL_RING_NO_SNOOP_DISABLED                         0
1999 #define VXGE_HAL_RING_NO_SNOOP_RXD                              1
2000 #define VXGE_HAL_RING_NO_SNOOP_FRM                              2
2001 #define VXGE_HAL_RING_NO_SNOOP_ALL                              3
2002 #define VXGE_HAL_RING_NO_SNOOP_USE_FLASH_DEFAULT    VXGE_HAL_USE_FLASH_DEFAULT
2003
2004         u32                             rx_timer_val;
2005 #define VXGE_HAL_RING_MIN_RX_TIMER_VAL                          0
2006 #define VXGE_HAL_RING_MAX_RX_TIMER_VAL                          536870912
2007 #define VXGE_HAL_RING_USE_FLASH_DEFAULT_RX_TIMER_VAL            \
2008                                                     VXGE_HAL_USE_FLASH_DEFAULT
2009
2010         u32                             greedy_return;
2011 #define VXGE_HAL_RING_GREEDY_RETURN_ENABLE                      1
2012 #define VXGE_HAL_RING_GREEDY_RETURN_DISABLE                     0
2013 #define VXGE_HAL_RING_GREEDY_RETURN_USE_FLASH_DEFAULT           \
2014                                                     VXGE_HAL_USE_FLASH_DEFAULT
2015
2016         u32                             rx_timer_ci;
2017 #define VXGE_HAL_RING_RX_TIMER_CI_ENABLE                        1
2018 #define VXGE_HAL_RING_RX_TIMER_CI_DISABLE                       0
2019 #define VXGE_HAL_RING_RX_TIMER_CI_USE_FLASH_DEFAULT VXGE_HAL_USE_FLASH_DEFAULT
2020
2021         u32                             backoff_interval_us;
2022 #define VXGE_HAL_MIN_BACKOFF_INTERVAL_US                        1
2023 #define VXGE_HAL_MAX_BACKOFF_INTERVAL_US                        125000
2024 #define VXGE_HAL_USE_FLASH_DEFAULT_BACKOFF_INTERVAL_US          \
2025                                                     VXGE_HAL_USE_FLASH_DEFAULT
2026
2027         u32                             indicate_max_pkts;
2028 #define VXGE_HAL_MIN_RING_INDICATE_MAX_PKTS                     1
2029 #define VXGE_HAL_MAX_RING_INDICATE_MAX_PKTS                     65536
2030 #define VXGE_HAL_DEF_RING_INDICATE_MAX_PKTS                     65536
2031
2032
2033 } vxge_hal_ring_config_t;
2034
2035
2036 /*
2037  * struct vxge_hal_vp_config_t - Configuration of virtual path
2038  * @vp_id: Virtual Path Id
2039  * @wire_port: Wire port to be associated with the vpath
2040  * @bandwidth_limit: Desired bandwidth limit for this vpath.
2041  *              0 = Disable limit, 1 = 8192 kBps, 2 = 16384 kBps, ... ,
2042  *              >152588 = 1 GBps
2043  * @no_snoop: Enable or disable no snoop for vpath
2044  * @ring: See vxge_hal_ring_config_t {}.
2045  * @fifo: See vxge_hal_fifo_config_t {}.
2046  * @dmq: See vxge_hal_dmq_config_t {};
2047  * @umq: See vxge_hal_umq_config_t {};
2048  * @lro: See vxge_hal_lro_config_t {};
2049  * @tti: Configuration of interrupt associated with Transmit.
2050  *              see vxge_hal_tim_intr_config_t();
2051  * @rti: Configuration of interrupt associated with Receive.
2052  *               see vxge_hal_tim_intr_config_t();
2053  * @mtu: mtu size used on this port.
2054  * @tpa_lsov2_en: LSOv2 Behaviour for IP ID roll-over
2055  * @tpa_ignore_frame_error: Ignore Frame Error. TPA may detect frame integrity
2056  *              errors as it processes each frame. If this bit is set to '0',
2057  *              the TPA will tag such frames as invalid and they will be dropped
2058  *              by the transmit MAC. If the bit is set to '1',the frame will not
2059  *              be tagged as "errored".  Detectable errors include:
2060  *              1) early end-of-frame error, which occurs when the frame ends
2061  *              before the number of bytes predicted by the IP "total length"
2062  *              field have been received;
2063  *              2) IP version mismatches;
2064  *              3) IPv6 packets that include routing headers that are not type 0
2065  *              4) Frames which contain IP packets but have an illegal SNAP-OUI
2066  *              or LLC-CTRL fields, unless IGNORE_SNAP_OUI or IGNORE_LLC_CTRL
2067  *              are set (see below).
2068  * @tpa_ipv6_keep_searching: If unknown IPv6 header is found,
2069  *              0 - stop searching for TCP
2070  *              1 - keep searching for TCP
2071  * @tpa_l4_pshdr_present: If asserted true, indicates the host has provided a
2072  *              valid pseudo header for TCP or UDP running over IPv4 or IPv6
2073  * @tpa_support_mobile_ipv6_hdrs: This register is somewhat equivalent to
2074  *              asserting both Hercules register fields LSO_RT2_EN and
2075  *              LSO_IPV6_HAO_EN. Enable/disable support for Type 2 Routing
2076  *              Headers, and for Mobile-IPv6 Home Address Option (HAO),
2077  *              as defined by mobile-ipv6.
2078  * @rpa_ipv4_tcp_incl_ph: Determines if the pseudo-header is included in the
2079  *              calculation of the L4 checksum that is passed to the host. This
2080  *              field applies to TCP/IPv4 packets only. This field affects both
2081  *              non-offload and LRO traffic. Note that the RPA always includes
2082  *              the pseudo-header in the "Checksum Ok" L4 checksum calculation
2083  *              i.e. the checksum that decides whether a frame is a candidate to
2084  *              be offloaded.
2085  *              0 - Do not include the pseudo-header in L4 checksum calculation.
2086  *              This setting should be used if the adapter is incorrectly
2087  *              calculating the pseudo-header.
2088  *              1 - Include the pseudo-header in L4 checksum calculation
2089  * @rpa_ipv6_tcp_incl_ph: Determines whether the pseudo-header is included in
2090  *              the calculation of the L4 checksum that is passed to the host.
2091  *              This field applies to TCP/IPv6 packets only. This field affects
2092  *              both non-offload and LRO traffic. Note that the RPA always
2093  *              includes the pseudo-header in the "Checksum Ok" L4 checksum
2094  *              calculation. i.e. the checksum that decides whether a frame
2095  *              is a candidate to be offloaded.
2096  *              0 - Do not include the pseudo-header in L4 checksum calculation.
2097  *              This setting should be used if the adapter is incorrectly
2098  *              calculating the pseudo-header.
2099  *              1 - Include the pseudo-header in L4 checksum calculation
2100  * @rpa_ipv4_udp_incl_ph: Determines whether the pseudo-header is included in
2101  *              the calculation of the L4 checksum that is passed to the host.
2102  *              This field applies to UDP/IPv4 packets only. It only affects
2103  *              non-offload traffic(since UDP frames are not candidates for LRO)
2104  *              0 - Do not include the pseudo-header in L4 checksum calculation.
2105  *              This setting should be used if the adapter is incorrectly
2106  *              calculating the pseudo-header.
2107  *              1 - Include the pseudo-header in L4 checksum calculation
2108  * @rpa_ipv6_udp_incl_ph: Determines if the pseudo-header is included in the
2109  *              calculation of the L4 checksum that is passed to the host. This
2110  *              field applies to UDP/IPv6 packets only. It only affects
2111  *              non-offload traffic(since UDP frames are not candidates for LRO)
2112  *              0 - Do not include the pseudo-header in L4 checksum calculation.
2113  *              This setting should be used if the adapter is incorrectly
2114  *              calculating the pseudo-header.
2115  *              1 - Include the pseudo-header in L4 checksum calculation
2116  * @rpa_l4_incl_cf: Determines whether the checksum field (CF) of the received
2117  *              frame is included in the calculation of the L4 checksum that is
2118  *              passed to the host. This field affects both non-offload and LRO
2119  *              traffic. Note that the RPA always includes the checksum field in
2120  *              the "Checksum Ok" L4 checksum calculation -- i.e. the checksum
2121  *              that decides whether a frame is a candidate to be offloaded.
2122  *              0 - Do not include the checksum field in L4 checksum calculation
2123  *              1 - Include the checksum field in L4 checksum calculation
2124  * @rpa_strip_vlan_tag: Strip VLAN Tag enable/disable. Instructs the device to
2125  *              remove the VLAN tag from all received tagged frames that are not
2126  *              replicated at the internal L2 switch.
2127  *              0 - Do not strip the VLAN tag.
2128  *              1 - Strip the VLAN tag. Regardless of this setting,VLAN tags are
2129  *              always placed into the RxDMA descriptor.
2130  * @rpa_l4_comp_csum: Determines whether the calculated L4 checksum should be
2131  *              complemented before it is passed to the host This field affects
2132  *              both non-offload and LRO traffic.
2133  *              0 - Do not complement the calculated L4 checksum.
2134  *              1 - Complement the calculated L4 checksum
2135  * @rpa_l3_incl_cf: Determines whether the checksum field (CF) of the received
2136  *              frame is included in the calculation of the L3 checksum that is
2137  *              passed to the host. This field affects both non-offload and LRO
2138  *              traffic. Note that the RPA always includes the checksum field in
2139  *              the "Checksum Ok" L3 checksum calculation--i.e. the checksum
2140  *              that decides whether a frame is a candidate to be offloaded.
2141  *              0 - Do not include the checksum field in L3 checksum calculation
2142  *              1 - Include the checksum field in L3 checksum calculation
2143  * @rpa_l3_comp_csum: Determines whether the calculated L3 checksum should be
2144  *              complemented before it is passed to the host This field affects
2145  *              both non-offload and LRO traffic.
2146  *              0 - Do not complement the calculated L3 checksum.
2147  *              1 - Complement the calculated L3 checksum
2148  * @rpa_ucast_all_addr_en: Enables frames with any unicast address (as its
2149  *              destination address) to be passed to the host.
2150  * @rpa_mcast_all_addr_en: Enables frames with any multicast address (as its
2151  *              destination address) to be passed to the host.
2152  * @rpa_bcast_en: Enables frames with any broadicast address (as its
2153  *              destination address) to be passed to the host.
2154  * @rpa_all_vid_en: romiscuous mode, it overrides the value held in this field.
2155  *              0 - Disable;
2156  *              1 - Enable
2157  *              Note: RXMAC_GLOBAL_CFG.AUTHORIZE_VP_ALL_VID must be set to
2158  *              allow this.
2159  * @vp_queue_l2_flow: Allows per-VPATH receive queue from
2160  *              contributing to L2 flow control. Has precedence over
2161  *              RMAC_PAUSE_CFG_PORTn.LIMITER_EN.
2162  *              0 - Queue is not allowed to contribute to L2 flow control.
2163  *              1 - Queue is allowed to contribute to L2 flow control.
2164  *
2165  * This structure is used by the driver to pass the configuration parameters to
2166  * configure Virtual Path.
2167  */
2168 typedef struct vxge_hal_vp_config_t {
2169         u32                             vp_id;
2170
2171         u32                             wire_port;
2172 #define VXGE_HAL_VPATH_USE_DEFAULT_PORT         VXGE_HAL_FIFO_HOST_STEER_NORMAL
2173 #define VXGE_HAL_VPATH_USE_PORT0                VXGE_HAL_FIFO_HOST_STEER_PORT0
2174 #define VXGE_HAL_VPATH_USE_PORT1                VXGE_HAL_FIFO_HOST_STEER_PORT1
2175 #define VXGE_HAL_VPATH_USE_BOTH                 VXGE_HAL_FIFO_HOST_STEER_BOTH
2176
2177         u32                             bandwidth;
2178 #define VXGE_HAL_VPATH_BW_LIMIT_MAX                     10000
2179 #define VXGE_HAL_VPATH_BW_LIMIT_MIN                     100
2180 #define VXGE_HAL_VPATH_BW_LIMIT_DEFAULT                 0XFFFFFFFF
2181 #define VXGE_HAL_TX_BW_VPATH_LIMIT                      8
2182
2183         u32                             priority;
2184 #define VXGE_HAL_VPATH_PRIORITY_MIN                     0
2185 #define VXGE_HAL_VPATH_PRIORITY_MAX                     3
2186 #define VXGE_HAL_VPATH_PRIORITY_DEFAULT                 0XFFFFFFFF
2187
2188         u32                             no_snoop;
2189 #define VXGE_HAL_VPATH_NO_SNOOP_ENABLE                  1
2190 #define VXGE_HAL_VPATH_NO_SNOOP_DISABLE                 0
2191 #define VXGE_HAL_VPATH_NO_SNOOP_USE_FLASH_DEFAULT                       \
2192                                                 VXGE_HAL_USE_FLASH_DEFAULT
2193
2194         vxge_hal_ring_config_t          ring;
2195         vxge_hal_fifo_config_t          fifo;
2196
2197         vxge_hal_tim_intr_config_t      tti;
2198         vxge_hal_tim_intr_config_t      rti;
2199
2200         u32                             mtu;
2201 #define VXGE_HAL_VPATH_MIN_INITIAL_MTU                  VXGE_HAL_MIN_MTU
2202 #define VXGE_HAL_VPATH_MAX_INITIAL_MTU                  VXGE_HAL_MAX_MTU
2203 #define VXGE_HAL_VPATH_USE_FLASH_DEFAULT_INITIAL_MTU                    \
2204                                                     VXGE_HAL_USE_FLASH_DEFAULT
2205
2206         u32                             tpa_lsov2_en;
2207 #define VXGE_HAL_VPATH_TPA_LSOV2_EN_ENABLE                              1
2208 #define VXGE_HAL_VPATH_TPA_LSOV2_EN_DISABLE                             0
2209 #define VXGE_HAL_VPATH_TPA_LSOV2_EN_USE_FLASH_DEFAULT                   \
2210                                                     VXGE_HAL_USE_FLASH_DEFAULT
2211
2212         u32                             tpa_ignore_frame_error;
2213 #define VXGE_HAL_VPATH_TPA_IGNORE_FRAME_ERROR_ENABLE                    1
2214 #define VXGE_HAL_VPATH_TPA_IGNORE_FRAME_ERROR_DISABLE                   0
2215 #define VXGE_HAL_VPATH_TPA_IGNORE_FRAME_ERROR_USE_FLASH_DEFAULT         \
2216                                                     VXGE_HAL_USE_FLASH_DEFAULT
2217
2218         u32                             tpa_ipv6_keep_searching;
2219 #define VXGE_HAL_VPATH_TPA_IPV6_KEEP_SEARCHING_ENABLE                   1
2220 #define VXGE_HAL_VPATH_TPA_IPV6_KEEP_SEARCHING_DISABLE                  0
2221 #define VXGE_HAL_VPATH_TPA_IPV6_KEEP_SEARCHING_USE_FLASH_DEFAULT        \
2222                                                     VXGE_HAL_USE_FLASH_DEFAULT
2223
2224         u32                             tpa_l4_pshdr_present;
2225 #define VXGE_HAL_VPATH_TPA_L4_PSHDR_PRESENT_ENABLE                      1
2226 #define VXGE_HAL_VPATH_TPA_L4_PSHDR_PRESENT_DISABLE                     0
2227 #define VXGE_HAL_VPATH_TPA_L4_PSHDR_PRESENT_USE_FLASH_DEFAULT           \
2228                                                     VXGE_HAL_USE_FLASH_DEFAULT
2229
2230         u32                             tpa_support_mobile_ipv6_hdrs;
2231 #define VXGE_HAL_VPATH_TPA_SUPPORT_MOBILE_IPV6_HDRS_ENABLE              1
2232 #define VXGE_HAL_VPATH_TPA_SUPPORT_MOBILE_IPV6_HDRS_DISABLE             0
2233 #define VXGE_HAL_VPATH_TPA_SUPPORT_MOBILE_IPV6_HDRS_USE_FLASH_DEFAULT   \
2234                                                     VXGE_HAL_USE_FLASH_DEFAULT
2235 #define VXGE_HAL_VPATH_TPA_SUPPORT_MOBILE_IPV6_HDRS_DEFAULT             \
2236                 VXGE_HAL_VPATH_TPA_SUPPORT_MOBILE_IPV6_HDRS_USE_FLASH_DEFAULT
2237
2238         u32                             rpa_ipv4_tcp_incl_ph;
2239 #define VXGE_HAL_VPATH_RPA_IPV4_TCP_INCL_PH_ENABLE                      1
2240 #define VXGE_HAL_VPATH_RPA_IPV4_TCP_INCL_PH_DISABLE                     0
2241 #define VXGE_HAL_VPATH_RPA_IPV4_TCP_INCL_PH_USE_FLASH_DEFAULT           \
2242                                                     VXGE_HAL_USE_FLASH_DEFAULT
2243
2244         u32                             rpa_ipv6_tcp_incl_ph;
2245 #define VXGE_HAL_VPATH_RPA_IPV6_TCP_INCL_PH_ENABLE                      1
2246 #define VXGE_HAL_VPATH_RPA_IPV6_TCP_INCL_PH_DISABLE                     0
2247 #define VXGE_HAL_VPATH_RPA_IPV6_TCP_INCL_PH_USE_FLASH_DEFAULT           \
2248                                                     VXGE_HAL_USE_FLASH_DEFAULT
2249
2250         u32                             rpa_ipv4_udp_incl_ph;
2251 #define VXGE_HAL_VPATH_RPA_IPV4_UDP_INCL_PH_ENABLE                      1
2252 #define VXGE_HAL_VPATH_RPA_IPV4_UDP_INCL_PH_DISABLE                     0
2253 #define VXGE_HAL_VPATH_RPA_IPV4_UDP_INCL_PH_USE_FLASH_DEFAULT           \
2254                                                     VXGE_HAL_USE_FLASH_DEFAULT
2255
2256         u32                             rpa_ipv6_udp_incl_ph;
2257 #define VXGE_HAL_VPATH_RPA_IPV6_UDP_INCL_PH_ENABLE                      1
2258 #define VXGE_HAL_VPATH_RPA_IPV6_UDP_INCL_PH_DISABLE                     0
2259 #define VXGE_HAL_VPATH_RPA_IPV6_UDP_INCL_PH_USE_FLASH_DEFAULT           \
2260                                                     VXGE_HAL_USE_FLASH_DEFAULT
2261
2262         u32                             rpa_l4_incl_cf;
2263 #define VXGE_HAL_VPATH_RPA_L4_INCL_CF_ENABLE                            1
2264 #define VXGE_HAL_VPATH_RPA_L4_INCL_CF_DISABLE                           0
2265 #define VXGE_HAL_VPATH_RPA_L4_INCL_CF_USE_FLASH_DEFAULT                 \
2266                                                     VXGE_HAL_USE_FLASH_DEFAULT
2267
2268         u32                             rpa_strip_vlan_tag;
2269 #define VXGE_HAL_VPATH_RPA_STRIP_VLAN_TAG_ENABLE                        1
2270 #define VXGE_HAL_VPATH_RPA_STRIP_VLAN_TAG_DISABLE                       0
2271 #define VXGE_HAL_VPATH_RPA_STRIP_VLAN_TAG_USE_FLASH_DEFAULT             \
2272                                                     VXGE_HAL_USE_FLASH_DEFAULT
2273
2274         u32                             rpa_l4_comp_csum;
2275 #define VXGE_HAL_VPATH_RPA_L4_COMP_CSUM_ENABLE                          1
2276 #define VXGE_HAL_VPATH_RPA_L4_COMP_CSUM_DISABLE                         0
2277 #define VXGE_HAL_VPATH_RPA_L4_COMP_CSUM_USE_FLASH_DEFAULT               \
2278                                                     VXGE_HAL_USE_FLASH_DEFAULT
2279
2280         u32                             rpa_l3_incl_cf;
2281 #define VXGE_HAL_VPATH_RPA_L3_INCL_CF_ENABLE                            1
2282 #define VXGE_HAL_VPATH_RPA_L3_INCL_CF_DISABLE                           0
2283 #define VXGE_HAL_VPATH_RPA_L3_INCL_CF_USE_FLASH_DEFAULT                 \
2284                                                     VXGE_HAL_USE_FLASH_DEFAULT
2285
2286         u32                             rpa_l3_comp_csum;
2287 #define VXGE_HAL_VPATH_RPA_L3_COMP_CSUM_ENABLE                          1
2288 #define VXGE_HAL_VPATH_RPA_L3_COMP_CSUM_DISABLE                         0
2289 #define VXGE_HAL_VPATH_RPA_L3_COMP_CSUM_USE_FLASH_DEFAULT               \
2290                                                     VXGE_HAL_USE_FLASH_DEFAULT
2291
2292         u32                             rpa_ucast_all_addr_en;
2293 #define VXGE_HAL_VPATH_RPA_UCAST_ALL_ADDR_ENABLE                        1
2294 #define VXGE_HAL_VPATH_RPA_UCAST_ALL_ADDR_DISABLE                       0
2295 #define VXGE_HAL_VPATH_RPA_UCAST_ALL_ADDR_USE_FLASH_DEFAULT             \
2296                                                     VXGE_HAL_USE_FLASH_DEFAULT
2297
2298         u32                             rpa_mcast_all_addr_en;
2299 #define VXGE_HAL_VPATH_RPA_MCAST_ALL_ADDR_ENABLE                        1
2300 #define VXGE_HAL_VPATH_RPA_MCAST_ALL_ADDR_DISABLE                       0
2301 #define VXGE_HAL_VPATH_RPA_MCAST_ALL_ADDR_USE_FLASH_DEFAULT             \
2302                                                     VXGE_HAL_USE_FLASH_DEFAULT
2303
2304         u32                             rpa_bcast_en;
2305 #define VXGE_HAL_VPATH_RPA_BCAST_ENABLE                                 1
2306 #define VXGE_HAL_VPATH_RPA_BCAST_DISABLE                                0
2307 #define VXGE_HAL_VPATH_RPA_BCAST_USE_FLASH_DEFAULT  VXGE_HAL_USE_FLASH_DEFAULT
2308
2309         u32                             rpa_all_vid_en;
2310 #define VXGE_HAL_VPATH_RPA_ALL_VID_ENABLE                               1
2311 #define VXGE_HAL_VPATH_RPA_ALL_VID_DISABLE                              0
2312 #define VXGE_HAL_VPATH_RPA_ALL_VID_USE_FLASH_DEFAULT                    \
2313                                                     VXGE_HAL_USE_FLASH_DEFAULT
2314
2315         u32                             vp_queue_l2_flow;
2316 #define VXGE_HAL_VPATH_VP_Q_L2_FLOW_ENABLE                              1
2317 #define VXGE_HAL_VPATH_VP_Q_L2_FLOW_DISABLE                             0
2318 #define VXGE_HAL_VPATH_VP_Q_L2_FLOW_USE_FLASH_DEFAULT                   \
2319                                                     VXGE_HAL_USE_FLASH_DEFAULT
2320
2321 } vxge_hal_vp_config_t;
2322
2323 /*
2324  * struct vxge_hal_device_config_t - Device configuration.
2325  * @dma_blockpool_min: Minimum blocks in the DMA pool
2326  * @dma_blockpool_initial: Initial size of DMA Pool
2327  * @dma_blockpool_incr: Number of blocks to request each time number of blocks
2328  *              in the pool reaches dma_pool_min
2329  * @dma_blockpool_max: Maximum blocks in DMA pool
2330  * @mrpcim_config: MRPCIM section config. Used only for the privileged mode ULD
2331  *              instance.
2332  * @isr_polling_cnt: Maximum number of times to "poll" for Tx and Rx
2333  *              completions. Used in vxge_hal_device_handle_irq().
2334  * @max_payload_size: Maximum TLP payload size for the device/fFunction.
2335  *              As a Receiver, the Function/device must handle TLPs as large
2336  *              as the set value; as . As a Transmitter, the Function/device
2337  *              must not generate TLPs exceeding the set value. Permissible
2338  *              values that can be programmed are indicated by the
2339  *              Max_Payload_Size Supported in the Device Capabilities register
2340  * @mmrb_count: Maximum Memory Read Byte Count. Use (VXGE_HAL_USE_FLASH_DEFAULT)
2341  *              to use default BIOS value.
2342  * @stats_refresh_time_sec: Sets the default interval for automatic stats
2343  *              transfer to the host. This includes MAC stats as well as
2344  *              PCI stats.
2345  * @intr_mode: Line, or MSI-X interrupt.
2346  *
2347  * @dump_on_unknown: Dump adapter state ("about", statistics, registers)
2348  *              on UNKNWON#.
2349  * @dump_on_serr: Dump adapter state ("about", statistics, registers) on SERR#.
2350  * @dump_on_critical: Dump adapter state ("about", statistics, registers)
2351  *              on CRITICAL#.
2352  * @dump_on_eccerr: Dump adapter state ("about", statistics, registers) on
2353  *               ECC error.
2354  * @rth_en: Enable Receive Traffic Hashing(RTH) using IT(Indirection Table).
2355  * @rth_it_type: RTH IT table programming type
2356  * @rts_mac_en: Enable Receive Traffic Steering using MAC destination address
2357  * @rts_qos_en: TBD
2358  * @rts_port_en: TBD
2359  * @vp_config: Configuration for virtual paths
2360  * @max_cqe_groups:  The maximum number of adapter CQE group blocks a CQRQ
2361  *              can own at any one time.
2362  * @max_num_wqe_od_groups: The maximum number of WQE Headers/OD Groups that
2363  *              this S-RQ can own at any one time.
2364  * @no_wqe_threshold: Maximum number of times adapter polls WQE Hdr blocks for
2365  *              WQEs before generating a message or interrupt.
2366  * @refill_threshold_high:This field provides a hysteresis upper bound for
2367  *              automatic adapter refill operations.
2368  * @refill_threshold_low:This field provides a hysteresis lower bound for
2369  *              automatic adapter refill operations.
2370  * @eol_policy: This field sets the policy for handling the end of list
2371  *              condition.
2372  *              2'b00 - When EOL is reached, poll until last block wrapper
2373  *                      size is no longer 0.
2374  *              2'b01 - Send UMQ message when EOL is reached.
2375  *              2'b1x - Poll until the poll_count_max is reached and
2376  *                      if still EOL, send UMQ message
2377  * @eol_poll_count_max:sets the maximum number of times the queue manager will
2378  *              poll fora non-zero block wrapper before giving up and sending
2379  *              a UMQ message
2380  * @ack_blk_limit: Limit on the maximum number of ACK list blocks that can be
2381  *              held by a session at any one time.
2382  * @poll_or_doorbell: TBD
2383  * @stats_read_method: Stats read method.(DMA or PIO)
2384  * @device_poll_millis: Specify the interval (in mulliseconds) to wait for
2385  *              register reads
2386  * @debug_level: Debug logging level. see vxge_debug_level_e {}
2387  * @debug_mask: Module mask for debug logging level. for masks see vxge_debug.h
2388  * @lro_enable: SW LRO enable mask
2389  * @tracebuf_size: Size of the trace buffer. Set it to '0' to disable.
2390  *
2391  * X3100 configuration.
2392  * Contains per-device configuration parameters, including:
2393  * - latency timer (settable via PCI configuration space);
2394  * - maximum number of split transactions;
2395  * - maximum number of shared splits;
2396  * - stats sampling interval, etc.
2397  *
2398  * In addition, vxge_hal_device_config_t {} includes "subordinate"
2399  * configurations, including:
2400  * - fifos and rings;
2401  * - MAC (done at firmware level).
2402  *
2403  * See X3100 User Guide for more details.
2404  * Note: Valid (min, max) range for each attribute is specified in the body of
2405  * the vxge_hal_device_config_t {} structure. Please refer to the
2406  * corresponding include file.
2407  * See also: vxge_hal_tim_intr_config_t {}.
2408  */
2409 typedef struct vxge_hal_device_config_t {
2410         u32                             dma_blockpool_min;
2411         u32                             dma_blockpool_initial;
2412         u32                             dma_blockpool_incr;
2413         u32                             dma_blockpool_max;
2414 #define VXGE_HAL_MIN_DMA_BLOCK_POOL_SIZE                0
2415 #define VXGE_HAL_INITIAL_DMA_BLOCK_POOL_SIZE            0
2416 #define VXGE_HAL_INCR_DMA_BLOCK_POOL_SIZE               4
2417 #define VXGE_HAL_MAX_DMA_BLOCK_POOL_SIZE                4096
2418
2419         vxge_hal_mrpcim_config_t        mrpcim_config;
2420
2421         u32                             isr_polling_cnt;
2422 #define VXGE_HAL_MIN_ISR_POLLING_CNT                    0
2423 #define VXGE_HAL_MAX_ISR_POLLING_CNT                    65536
2424 #define VXGE_HAL_DEF_ISR_POLLING_CNT                    1
2425
2426         u32                             max_payload_size;
2427 #define VXGE_HAL_USE_BIOS_DEFAULT_PAYLOAD_SIZE      VXGE_HAL_USE_FLASH_DEFAULT
2428 #define VXGE_HAL_MAX_PAYLOAD_SIZE_128                   0
2429 #define VXGE_HAL_MAX_PAYLOAD_SIZE_256                   1
2430 #define VXGE_HAL_MAX_PAYLOAD_SIZE_512                   2
2431 #define VXGE_HAL_MAX_PAYLOAD_SIZE_1024                  3
2432 #define VXGE_HAL_MAX_PAYLOAD_SIZE_2048                  4
2433 #define VXGE_HAL_MAX_PAYLOAD_SIZE_4096                  5
2434
2435         u32                             mmrb_count;
2436 #define VXGE_HAL_USE_BIOS_DEFAULT_MMRB_COUNT        VXGE_HAL_USE_FLASH_DEFAULT
2437 #define VXGE_HAL_MMRB_COUNT_128                         0
2438 #define VXGE_HAL_MMRB_COUNT_256                         1
2439 #define VXGE_HAL_MMRB_COUNT_512                         2
2440 #define VXGE_HAL_MMRB_COUNT_1024                        3
2441 #define VXGE_HAL_MMRB_COUNT_2048                        4
2442 #define VXGE_HAL_MMRB_COUNT_4096                        5
2443
2444         u32                             stats_refresh_time_sec;
2445 #define VXGE_HAL_STATS_REFRESH_DISABLE                  0
2446 #define VXGE_HAL_MIN_STATS_REFRESH_TIME                 1
2447 #define VXGE_HAL_MAX_STATS_REFRESH_TIME                 300
2448 #define VXGE_HAL_USE_FLASH_DEFAULT_STATS_REFRESH_TIME   30
2449
2450         u32                             intr_mode;
2451 #define VXGE_HAL_INTR_MODE_IRQLINE                      0
2452 #define VXGE_HAL_INTR_MODE_MSIX                         1
2453 #define VXGE_HAL_INTR_MODE_MSIX_ONE_SHOT                2
2454 #define VXGE_HAL_INTR_MODE_EMULATED_INTA                3
2455 #define VXGE_HAL_INTR_MODE_DEF                          0
2456
2457         u32                             dump_on_unknown;
2458 #define VXGE_HAL_DUMP_ON_UNKNOWN_DISABLE                0
2459 #define VXGE_HAL_DUMP_ON_UNKNOWN_ENABLE                 1
2460 #define VXGE_HAL_DUMP_ON_UNKNOWN_DEFAULT                0
2461
2462         u32                             dump_on_serr;
2463 #define VXGE_HAL_DUMP_ON_SERR_DISABLE                   0
2464 #define VXGE_HAL_DUMP_ON_SERR_ENABLE                    1
2465 #define VXGE_HAL_DUMP_ON_SERR_DEFAULT                   0
2466
2467         u32                             dump_on_critical;
2468 #define VXGE_HAL_DUMP_ON_CRITICAL_DISABLE               0
2469 #define VXGE_HAL_DUMP_ON_CRITICAL_ENABLE                1
2470 #define VXGE_HAL_DUMP_ON_CRITICAL_DEFAULT               0
2471
2472         u32                             dump_on_eccerr;
2473 #define VXGE_HAL_DUMP_ON_ECCERR_DISABLE                 0
2474 #define VXGE_HAL_DUMP_ON_ECCERR_ENABLE                  1
2475 #define VXGE_HAL_DUMP_ON_ECCERR_DEFAULT                 0
2476
2477         u32                             rth_en;
2478 #define VXGE_HAL_RTH_DISABLE                            0
2479 #define VXGE_HAL_RTH_ENABLE                             1
2480 #define VXGE_HAL_RTH_DEFAULT                            0
2481
2482         u32                             rth_it_type;
2483 #define VXGE_HAL_RTH_IT_TYPE_SOLO_IT                    0
2484 #define VXGE_HAL_RTH_IT_TYPE_MULTI_IT                   1
2485 #define VXGE_HAL_RTH_IT_TYPE_DEFAULT                    0
2486
2487         u32                             rts_mac_en;
2488 #define VXGE_HAL_RTS_MAC_DISABLE                        0
2489 #define VXGE_HAL_RTS_MAC_ENABLE                         1
2490 #define VXGE_HAL_RTS_MAC_DEFAULT                        0
2491
2492         u32                             rts_qos_en;
2493 #define VXGE_HAL_RTS_QOS_DISABLE                        0
2494 #define VXGE_HAL_RTS_QOS_ENABLE                         1
2495 #define VXGE_HAL_RTS_QOS_DEFAULT                        0
2496
2497         u32                             rts_port_en;
2498 #define VXGE_HAL_RTS_PORT_DISABLE                       0
2499 #define VXGE_HAL_RTS_PORT_ENABLE                        1
2500 #define VXGE_HAL_RTS_PORT_DEFAULT                       0
2501
2502         vxge_hal_vp_config_t            vp_config[VXGE_HAL_MAX_VIRTUAL_PATHS];
2503
2504         u32                             max_cqe_groups;
2505 #define VXGE_HAL_MIN_MAX_CQE_GROUPS                     1
2506 #define VXGE_HAL_MAX_MAX_CQE_GROUPS                     16
2507 #define VXGE_HAL_DEF_MAX_CQE_GROUPS                     16
2508
2509         u32                             max_num_wqe_od_groups;
2510 #define VXGE_HAL_MIN_MAX_NUM_OD_GROUPS                  1
2511 #define VXGE_HAL_MAX_MAX_NUM_OD_GROUPS                  16
2512 #define VXGE_HAL_DEF_MAX_NUM_OD_GROUPS                  16
2513
2514         u32                             no_wqe_threshold;
2515 #define VXGE_HAL_MIN_NO_WQE_THRESHOLD                   1
2516 #define VXGE_HAL_MAX_NO_WQE_THRESHOLD                   16
2517 #define VXGE_HAL_DEF_NO_WQE_THRESHOLD                   16
2518
2519         u32                             refill_threshold_high;
2520 #define VXGE_HAL_MIN_REFILL_THRESHOLD_HIGH              1
2521 #define VXGE_HAL_MAX_REFILL_THRESHOLD_HIGH              16
2522 #define VXGE_HAL_DEF_REFILL_THRESHOLD_HIGH              16
2523
2524         u32                             refill_threshold_low;
2525 #define VXGE_HAL_MIN_REFILL_THRESHOLD_LOW               1
2526 #define VXGE_HAL_MAX_REFILL_THRESHOLD_LOW               16
2527 #define VXGE_HAL_DEF_REFILL_THRESHOLD_LOW               16
2528
2529         u32                             ack_blk_limit;
2530 #define VXGE_HAL_MIN_ACK_BLOCK_LIMIT                    1
2531 #define VXGE_HAL_MAX_ACK_BLOCK_LIMIT                    16
2532 #define VXGE_HAL_DEF_ACK_BLOCK_LIMIT                    16
2533
2534         u32                             poll_or_doorbell;
2535 #define VXGE_HAL_POLL_OR_DOORBELL_POLL                  1
2536 #define VXGE_HAL_POLL_OR_DOORBELL_DOORBELL              0
2537 #define VXGE_HAL_POLL_OR_DOORBELL_DEFAULT               1
2538
2539         u32                             stats_read_method;
2540 #define VXGE_HAL_STATS_READ_METHOD_DMA                  1
2541 #define VXGE_HAL_STATS_READ_METHOD_PIO                  0
2542 #define VXGE_HAL_STATS_READ_METHOD_DEFAULT              1
2543
2544         u32                             device_poll_millis;
2545 #define VXGE_HAL_MIN_DEVICE_POLL_MILLIS                 1
2546 #define VXGE_HAL_MAX_DEVICE_POLL_MILLIS                 100000
2547 #define VXGE_HAL_DEF_DEVICE_POLL_MILLIS                 1000
2548
2549         vxge_debug_level_e              debug_level;
2550
2551         u32                             debug_mask;
2552
2553
2554 #if defined(VXGE_TRACE_INTO_CIRCULAR_ARR)
2555         u32                             tracebuf_size;
2556 #define VXGE_HAL_MIN_CIRCULAR_ARR                       4096
2557 #define VXGE_HAL_MAX_CIRCULAR_ARR                       65536
2558 #define VXGE_HAL_DEF_CIRCULAR_ARR                       16384
2559 #endif
2560 } vxge_hal_device_config_t;
2561
2562 __EXTERN_END_DECLS
2563
2564 #endif  /* VXGE_HAL_CONFIG_H */