]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/dev/vxge/vxgehal/vxgehal-mrpcim.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / dev / vxge / vxgehal / vxgehal-mrpcim.c
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 #include <dev/vxge/vxgehal/vxgehal.h>
34
35 /*
36  * vxge_hal_mrpcim_serial_number_get - Returns the serial number
37  * @devh: HAL device handle.
38  *
39  * Return the serial number
40  */
41 const u8 *
42 vxge_hal_mrpcim_serial_number_get(vxge_hal_device_h devh)
43 {
44         __hal_device_t *hldev = (__hal_device_t *) devh;
45
46         vxge_assert(devh);
47
48         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
49             __FILE__, __func__, __LINE__);
50
51         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
52             (ptr_t) devh);
53
54         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
55                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
56                     __FILE__, __func__, __LINE__,
57                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
58
59                 return (NULL);
60         }
61
62         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
63             __FILE__, __func__, __LINE__);
64
65         return (hldev->mrpcim->vpd_data.serial_num);
66 }
67
68 /*
69  * vxge_hal_mrpcim_vpath_map_get - Returns the assigned vpaths map
70  * @pdev: PCI device object.
71  * @regh0: BAR0 mapped memory handle (Solaris), or simply PCI device @pdev
72  *      (Linux and the rest.)
73  * @bar0: Address of BAR0 in PCI config
74  * @func: Function Number
75  *
76  * Returns the assigned vpaths map
77  */
78 u64
79 vxge_hal_mrpcim_vpath_map_get(
80     pci_dev_h pdev,
81     pci_reg_h regh0,
82     u8 *bar0,
83     u32 func)
84 {
85         u64 val64;
86         vxge_hal_legacy_reg_t *legacy_reg;
87         vxge_hal_toc_reg_t *toc_reg;
88         vxge_hal_vpath_reg_t *vpath_reg;
89
90         vxge_assert(bar0 != NULL);
91
92         vxge_hal_trace_log_driver("==> %s:%s:%d",
93             __FILE__, __func__, __LINE__);
94
95         vxge_hal_trace_log_driver(
96             "pdev = 0x"VXGE_OS_STXFMT", regh0 = 0x"VXGE_OS_STXFMT", "
97             "bar0 = 0x"VXGE_OS_STXFMT", func = %d",
98             (ptr_t) pdev, (ptr_t) regh0, (ptr_t) bar0, func);
99
100         legacy_reg = (vxge_hal_legacy_reg_t *)
101             vxge_hal_device_get_legacy_reg(pdev, regh0, bar0);
102
103         val64 = vxge_os_pio_mem_read64(pdev, regh0,
104             &legacy_reg->toc_first_pointer);
105
106         toc_reg = (vxge_hal_toc_reg_t *) ((void *)(bar0 + val64));
107
108         val64 = vxge_os_pio_mem_read64(pdev, regh0,
109             &toc_reg->toc_vpath_pointer[0]);
110
111         vpath_reg = (vxge_hal_vpath_reg_t *) ((void *)(bar0 + val64));
112
113         val64 = __hal_vpath_vpath_map_get(pdev, regh0, 0, 0, func, vpath_reg);
114
115         vxge_hal_trace_log_driver("<== %s:%s:%d Result = 0",
116             __FILE__, __func__, __LINE__);
117
118         return (val64);
119 }
120
121 /*
122  * vxge_hal_mrpcim_pcie_func_mode_set - Set PCI-E function mode
123  * @devh: Device Handle.
124  * @func_mode: PCI-E func mode. Please see vxge_hal_pcie_function_mode_e{}
125  *
126  * Set PCI-E function mode.
127  *
128  */
129 vxge_hal_status_e
130 vxge_hal_mrpcim_pcie_func_mode_set(
131     vxge_hal_device_h devh,
132     vxge_hal_pcie_function_mode_e func_mode)
133 {
134         __hal_device_t *hldev = (__hal_device_t *) devh;
135         u32 fmode;
136         vxge_hal_status_e status;
137
138         vxge_assert(hldev != NULL);
139
140         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
141             __FILE__, __func__, __LINE__);
142
143         vxge_hal_trace_log_driver("devh = 0x"VXGE_OS_STXFMT
144             ",func_mode = %d", (ptr_t) devh, func_mode);
145
146         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
147                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
148                     __FILE__, __func__, __LINE__,
149                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
150
151                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
152         }
153
154         switch (func_mode) {
155         case VXGE_HAL_PCIE_FUNC_MODE_SF1_VP17:
156                 fmode =
157                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_SF1_VP17;
158                 break;
159         case VXGE_HAL_PCIE_FUNC_MODE_MF8_VP2:
160                 fmode =
161                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MF8_VP2;
162                 break;
163         case VXGE_HAL_PCIE_FUNC_MODE_SR17_VP1:
164                 fmode =
165                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_SR17_VP1;
166                 break;
167         case VXGE_HAL_PCIE_FUNC_MODE_MR17_VP1:
168                 fmode =
169                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MR17_VP1;
170                 break;
171         case VXGE_HAL_PCIE_FUNC_MODE_MR8_VP2:
172                 fmode =
173                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MR8_VP2;
174                 break;
175         case VXGE_HAL_PCIE_FUNC_MODE_MF17_VP1:
176                 fmode =
177                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MF17_VP1;
178                 break;
179         case VXGE_HAL_PCIE_FUNC_MODE_SR8_VP2:
180                 fmode =
181                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_SR8_VP2;
182                 break;
183         case VXGE_HAL_PCIE_FUNC_MODE_SR4_VP4:
184                 fmode =
185                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_SR4_VP4;
186                 break;
187         case VXGE_HAL_PCIE_FUNC_MODE_MF2_VP8:
188                 fmode =
189                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MF2_VP8;
190                 break;
191         case VXGE_HAL_PCIE_FUNC_MODE_MF4_VP4:
192                 fmode =
193                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MF4_VP4;
194                 break;
195         case VXGE_HAL_PCIE_FUNC_MODE_MR4_VP4:
196                 fmode =
197                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MR4_VP4;
198                 break;
199         case VXGE_HAL_PCIE_FUNC_MODE_MF8P_VP2:
200                 fmode =
201                     VXGE_HAL_RTS_ACCESS_STEER_DATA0_FUNC_MODE_MF8P_VP2;
202                 break;
203         default:
204                 vxge_hal_trace_log_driver("<== %s:%s:%d Result = %d",
205                     __FILE__, __func__, __LINE__,
206                     VXGE_HAL_ERR_INVALID_TYPE);
207
208                 return (VXGE_HAL_ERR_INVALID_TYPE);
209         }
210
211         status = __hal_vpath_pcie_func_mode_set(hldev, hldev->first_vp_id, fmode);
212
213         vxge_hal_trace_log_driver("<== %s:%s:%d Result = 0",
214             __FILE__, __func__, __LINE__);
215
216         return (status);
217
218 }
219
220 /*
221  * vxge_hal_mrpcim_fw_upgrade - Upgrade firmware
222  * @pdev: PCI device object.
223  * @regh0: BAR0 mapped memory handle (Solaris), or simply PCI device @pdev
224  *      (Linux and the rest.)
225  * @bar0: Address of BAR0 in PCI config
226  * @buffer: Buffer containing F/W image
227  * @length: F/W image length
228  *
229  * Upgrade firmware
230  */
231 vxge_hal_status_e
232 vxge_hal_mrpcim_fw_upgrade(
233     pci_dev_h pdev,
234     pci_reg_h regh0,
235     u8 *bar0,
236     u8 *buffer,
237     u32 length)
238 {
239         u64 val64, vpath_mask;
240         u32 host_type, func_id, i;
241         vxge_hal_legacy_reg_t *legacy_reg;
242         vxge_hal_toc_reg_t *toc_reg;
243         vxge_hal_mrpcim_reg_t *mrpcim_reg;
244         vxge_hal_common_reg_t *common_reg;
245         vxge_hal_vpmgmt_reg_t *vpmgmt_reg;
246         vxge_hal_vpath_reg_t *vpath_reg;
247         vxge_hal_status_e status = VXGE_HAL_OK;
248
249         vxge_assert((bar0 != NULL) && (buffer != NULL));
250
251         vxge_hal_trace_log_driver("==> %s:%s:%d",
252             __FILE__, __func__, __LINE__);
253
254         vxge_hal_trace_log_driver(
255             "pdev = 0x"VXGE_OS_STXFMT", regh0 = 0x"VXGE_OS_STXFMT", "
256             "bar0 = 0x"VXGE_OS_STXFMT", buffer = 0x"VXGE_OS_STXFMT", "
257             "length = %d", (ptr_t) pdev, (ptr_t) regh0, (ptr_t) bar0,
258             (ptr_t) buffer, length);
259
260         legacy_reg = (vxge_hal_legacy_reg_t *)
261             vxge_hal_device_get_legacy_reg(pdev, regh0, bar0);
262
263         val64 = vxge_os_pio_mem_read64(pdev, regh0,
264             &legacy_reg->toc_first_pointer);
265
266         toc_reg = (vxge_hal_toc_reg_t *) ((void *)(bar0 + val64));
267
268         val64 =
269             vxge_os_pio_mem_read64(pdev, regh0, &toc_reg->toc_common_pointer);
270
271         common_reg = (vxge_hal_common_reg_t *) ((void *)(bar0 + val64));
272
273         vpath_mask = vxge_os_pio_mem_read64(pdev, regh0,
274             &common_reg->vpath_assignments);
275
276         val64 = vxge_os_pio_mem_read64(pdev, regh0,
277             &common_reg->host_type_assignments);
278
279         host_type = (u32)
280             VXGE_HAL_HOST_TYPE_ASSIGNMENTS_GET_HOST_TYPE_ASSIGNMENTS(val64);
281
282         for (i = 0; i < VXGE_HAL_MAX_VIRTUAL_PATHS; i++) {
283
284                 if (!((vpath_mask) & mBIT(i)))
285                         continue;
286
287                 val64 = vxge_os_pio_mem_read64(pdev, regh0,
288                     &toc_reg->toc_vpmgmt_pointer[i]);
289
290                 vpmgmt_reg = (vxge_hal_vpmgmt_reg_t *) ((void *)(bar0 + val64));
291
292                 val64 = vxge_os_pio_mem_read64(pdev, regh0,
293                     &vpmgmt_reg->vpath_to_func_map_cfg1);
294
295                 func_id = (u32) VXGE_HAL_VPATH_TO_FUNC_MAP_CFG1_GET_CFG1(val64);
296
297                 if (!(__hal_device_access_rights_get(host_type, func_id) &
298                     VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
299
300                         vxge_hal_trace_log_driver("<== %s:%s:%d Result = %d",
301                             __FILE__, __func__, __LINE__,
302                             VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
303
304                         return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
305                 }
306
307                 val64 = vxge_os_pio_mem_read64(pdev, regh0,
308                     &toc_reg->toc_vpath_pointer[i]);
309
310                 vpath_reg = (vxge_hal_vpath_reg_t *) ((void *)(bar0 + val64));
311
312                 status = __hal_vpath_fw_upgrade(pdev, regh0,
313                     i, vpath_reg, buffer, length);
314
315                 break;
316         }
317
318         if (status == VXGE_HAL_OK) {
319                 val64 = vxge_os_pio_mem_read64(pdev, regh0,
320                     &toc_reg->toc_mrpcim_pointer);
321
322                 mrpcim_reg = (vxge_hal_mrpcim_reg_t *) ((void *)(bar0 + val64));
323
324                 val64 = vxge_os_pio_mem_read64(pdev, regh0,
325                     &mrpcim_reg->sw_reset_cfg1);
326
327                 val64 |= VXGE_HAL_SW_RESET_CFG1_TYPE;
328
329                 vxge_os_pio_mem_write64(pdev, regh0,
330                     val64,
331                     &mrpcim_reg->sw_reset_cfg1);
332
333                 vxge_os_pio_mem_write64(pdev, regh0,
334                     VXGE_HAL_PF_SW_RESET_PF_SW_RESET(
335                     VXGE_HAL_PF_SW_RESET_COMMAND),
336                     &mrpcim_reg->bf_sw_reset);
337
338                 vxge_os_mdelay(100);
339         }
340
341         vxge_hal_trace_log_driver("<== %s:%s:%d Result = %d",
342             __FILE__, __func__, __LINE__, status);
343
344         return (status);
345 }
346
347 /*
348  * vxge_hal_mrpcim_vpath_qos_set - Set the priority, Guaranteed and maximum
349  *                               bandwidth for a vpath.
350  * @devh: HAL device handle.
351  * @vp_id: Vpath Id.
352  * @priority: Priority
353  * @min_bandwidth: Minimum Bandwidth
354  * @max_bandwidth: Maximum Bandwidth
355  *
356  * Set the Guaranteed and maximum bandwidth for a given vpath
357  *
358  */
359 vxge_hal_status_e
360 vxge_hal_mrpcim_vpath_qos_set(
361     vxge_hal_device_h devh,
362     u32 vp_id,
363     u32 priority,
364     u32 min_bandwidth,
365     u32 max_bandwidth)
366 {
367         vxge_hal_status_e status = VXGE_HAL_OK;
368         vxge_hal_vpath_qos_config_t config;
369         __hal_device_t *hldev = (__hal_device_t *) devh;
370
371         vxge_assert(devh != NULL);
372
373         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
374             __FILE__, __func__, __LINE__);
375
376         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT", vp_id = %d, "
377             "priority = %d, min_bandwidth = %d, max_bandwidth = %d",
378             (ptr_t) devh, vp_id, priority, min_bandwidth, max_bandwidth);
379
380         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
381                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
382                     __FILE__, __func__, __LINE__,
383                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
384
385                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
386         }
387
388         if (vp_id >= VXGE_HAL_MAX_VIRTUAL_PATHS) {
389                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
390                     __FILE__, __func__, __LINE__,
391                     VXGE_HAL_ERR_VPATH_NOT_AVAILABLE);
392
393                 return (VXGE_HAL_ERR_VPATH_NOT_AVAILABLE);
394         }
395
396         config.priority = priority;
397         config.min_bandwidth = min_bandwidth;
398         config.max_bandwidth = max_bandwidth;
399
400         if ((status = __hal_vpath_qos_config_check(&config)) != VXGE_HAL_OK) {
401                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
402                     __FILE__, __func__, __LINE__, status);
403                 return (status);
404         }
405
406         if (status == VXGE_HAL_OK) {
407                 hldev->header.config.mrpcim_config.vp_qos[vp_id].priority =
408                     priority;
409                 hldev->header.config.mrpcim_config.vp_qos[vp_id].min_bandwidth =
410                     min_bandwidth;
411                 hldev->header.config.mrpcim_config.vp_qos[vp_id].max_bandwidth =
412                     max_bandwidth;
413         }
414
415         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
416             __FILE__, __func__, __LINE__, status);
417         return (status);
418 }
419
420 /*
421  * vxge_hal_mrpcim_vpath_qos_get - Get the priority, Guaranteed and maximum
422  *                               bandwidth for a vpath.
423  * @devh: HAL device handle.
424  * @vp_id: Vpath Id.
425  * @priority: Buffer to return Priority
426  * @min_bandwidth: Buffer to return Minimum Bandwidth
427  * @max_bandwidth: Buffer to return Maximum Bandwidth
428  *
429  * Get the Guaranteed and maximum bandwidth for a given vpath
430  *
431  */
432 vxge_hal_status_e
433 vxge_hal_mrpcim_vpath_qos_get(
434     vxge_hal_device_h devh,
435     u32 vp_id,
436     u32 *priority,
437     u32 *min_bandwidth,
438     u32 *max_bandwidth)
439 {
440         vxge_hal_status_e status = VXGE_HAL_OK;
441         __hal_device_t *hldev = (__hal_device_t *) devh;
442
443         vxge_assert(devh != NULL);
444
445         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
446             __FILE__, __func__, __LINE__);
447
448         vxge_hal_trace_log_mrpcim(
449             "devh = 0x"VXGE_OS_STXFMT", vp_id = %d, "
450             "priority = 0x"VXGE_OS_STXFMT", "
451             "min_bandwidth = 0x"VXGE_OS_STXFMT", "
452             "max_bandwidth = 0x"VXGE_OS_STXFMT,
453             (ptr_t) devh, vp_id, (ptr_t) priority,
454             (ptr_t) min_bandwidth, (ptr_t) max_bandwidth);
455
456         if (vp_id >= VXGE_HAL_MAX_VIRTUAL_PATHS) {
457                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
458                     __FILE__, __func__, __LINE__,
459                     VXGE_HAL_ERR_VPATH_NOT_AVAILABLE);
460
461                 return (VXGE_HAL_ERR_VPATH_NOT_AVAILABLE);
462         }
463
464         *priority =
465             hldev->header.config.mrpcim_config.vp_qos[vp_id].min_bandwidth;
466
467         *min_bandwidth =
468             hldev->header.config.mrpcim_config.vp_qos[vp_id].min_bandwidth;
469
470         *max_bandwidth =
471             hldev->header.config.mrpcim_config.vp_qos[vp_id].max_bandwidth;
472
473         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
474             __FILE__, __func__, __LINE__, status);
475         return (status);
476 }
477
478 /*
479  * __hal_mrpcim_mdio_access - Access the MDIO device
480  * @devh: HAL Device handle.
481  * @port: Port id
482  * @operation: Type of operation
483  * @device: MMD device address
484  * @addr: MMD address
485  * @data: MMD data
486  *
487  * Access the data from a MDIO Device.
488  *
489  */
490 vxge_hal_status_e
491 __hal_mrpcim_mdio_access(
492     vxge_hal_device_h devh,
493     u32 port,
494     u32 operation,
495     u32 device,
496     u16 addr,
497     u16 *data)
498 {
499         u64 val64;
500         u32 prtad;
501         vxge_hal_status_e status = VXGE_HAL_OK;
502         __hal_device_t *hldev = (__hal_device_t *) devh;
503
504         vxge_assert((devh != NULL) && (data != NULL));
505
506         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
507             __FILE__, __func__, __LINE__);
508
509         vxge_hal_trace_log_mrpcim(
510             "devh = 0x"VXGE_OS_STXFMT", operation = %d, "
511             "device = %d, addr = %d, data = 0x"VXGE_OS_STXFMT,
512             (ptr_t) devh, operation, device, addr, (ptr_t) data);
513
514         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
515                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
516                     __FILE__, __func__, __LINE__,
517                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
518
519                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
520         }
521
522         if (device == VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD_DTE_XS) {
523                 if (port == 0)
524                         prtad = hldev->mrpcim->mdio_dte_prtad0;
525                 else
526                         prtad = hldev->mrpcim->mdio_dte_prtad1;
527         } else {
528                 if (port == 0)
529                         prtad = hldev->mrpcim->mdio_phy_prtad0;
530                 else
531                         prtad = hldev->mrpcim->mdio_phy_prtad1;
532         }
533
534         val64 = VXGE_HAL_MDIO_MGR_ACCESS_PORT_STROBE_ONE |
535             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE(operation) |
536             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD(device) |
537             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR(addr) |
538             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DATA(*data) |
539             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ST_PATTERN(0) |
540             VXGE_HAL_MDIO_MGR_ACCESS_PORT_PREAMBLE |
541             VXGE_HAL_MDIO_MGR_ACCESS_PORT_PRTAD(prtad) |
542             VXGE_HAL_MDIO_MGR_ACCESS_PORT_STROBE_TWO;
543
544         vxge_os_pio_mem_write64(hldev->header.pdev,
545             hldev->header.regh0,
546             val64,
547             &hldev->mrpcim_reg->mdio_mgr_access_port[port]);
548
549         vxge_os_wmb();
550
551         status = vxge_hal_device_register_poll(hldev->header.pdev,
552             hldev->header.regh0,
553             &hldev->mrpcim_reg->mdio_mgr_access_port[port],
554             0,
555             VXGE_HAL_MDIO_MGR_ACCESS_PORT_STROBE_ONE |
556             VXGE_HAL_MDIO_MGR_ACCESS_PORT_STROBE_TWO,
557             hldev->header.config.device_poll_millis);
558
559         if ((status == VXGE_HAL_OK) &&
560             ((operation == VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_READ_INCR) ||
561             (operation == VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_READ) ||
562             (operation ==
563             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_READ_INCR) ||
564             (operation == VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_READ))) {
565
566                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
567                     hldev->header.regh0,
568                     &hldev->mrpcim_reg->mdio_mgr_access_port[port]);
569
570                 *data = (u16) VXGE_HAL_MDIO_MGR_ACCESS_GET_PORT_DATA(val64);
571
572         } else {
573                 *data = 0;
574         }
575
576         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
577             __FILE__, __func__, __LINE__, status);
578
579         return (VXGE_HAL_OK);
580 }
581
582 /*
583  * vxge_hal_mrpcim_intr_enable - Enable the interrupts on mrpcim.
584  * @devh: HAL device handle.
585  *
586  * Enable mrpcim interrupts
587  *
588  * See also: vxge_hal_mrpcim_intr_disable().
589  */
590 vxge_hal_status_e
591 vxge_hal_mrpcim_intr_enable(vxge_hal_device_h devh)
592 {
593         u32 i;
594         u64 val64;
595         vxge_hal_status_e status = VXGE_HAL_OK;
596         vxge_hal_mrpcim_reg_t *mrpcim_reg;
597         __hal_device_t *hldev = (__hal_device_t *) devh;
598
599         vxge_assert(devh);
600
601         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
602             __FILE__, __func__, __LINE__);
603
604         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
605             (ptr_t) devh);
606
607         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
608                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
609                     __FILE__, __func__, __LINE__,
610                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
611
612                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
613
614         }
615
616         mrpcim_reg = hldev->mrpcim_reg;
617
618         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->ini_errors_reg);
619
620         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->dma_errors_reg);
621
622         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->tgt_errors_reg);
623
624         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->config_errors_reg);
625
626         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->crdt_errors_reg);
627
628         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->mrpcim_general_errors_reg);
629
630         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pll_errors_reg);
631
632         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->mrpcim_ppif_int_status);
633
634         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->dbecc_err_reg);
635
636         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->general_err_reg);
637
638         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pcipif_int_status);
639
640         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pda_alarm_reg);
641
642         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pcc_error_reg);
643
644         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->lso_error_reg);
645
646         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->sm_error_reg);
647
648         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rtdma_int_status);
649
650         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rc_alarm_reg);
651
652         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxdrm_sm_err_reg);
653
654         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxdcm_sm_err_reg);
655
656         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxdwm_sm_err_reg);
657
658         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rda_err_reg);
659
660         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rda_ecc_db_reg);
661
662         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rqa_err_reg);
663
664         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->frf_alarm_reg);
665
666         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rocrc_alarm_reg);
667
668         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->wde0_alarm_reg);
669
670         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->wde1_alarm_reg);
671
672         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->wde2_alarm_reg);
673
674         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->wde3_alarm_reg);
675
676         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->wrdma_int_status);
677
678         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3cmct_err_reg);
679
680         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3cmct_int_status);
681
682         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gsscc_err_reg);
683
684         for (i = 0; i < 3; i++) {
685
686                 VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gssc_err0_reg[i]);
687
688                 VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gssc_err1_reg[i]);
689
690         }
691
692         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gcmg1_int_status);
693
694         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gxtmc_err_reg);
695
696         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gcp_err_reg);
697
698         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->cmc_err_reg);
699
700         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->gcmg2_int_status);
701
702         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_cml_err_reg);
703
704         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_cml_int_status);
705
706         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_cmu_err_reg);
707
708         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_cmu_int_status);
709
710         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->psscc_err_reg);
711
712         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pcmg1_int_status);
713
714         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pxtmc_err_reg);
715
716         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->cp_exc_reg);
717
718         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->cp_err_reg);
719
720         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pcmg2_int_status);
721
722         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->dam_err_reg);
723
724         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->pcmg3_int_status);
725
726         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->xmac_gen_err_reg);
727
728         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->xgxs_gen_err_reg);
729
730         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->asic_ntwk_err_reg);
731
732         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->xgmac_int_status);
733
734         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxmac_ecc_err_reg);
735
736         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxmac_various_err_reg);
737
738         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->rxmac_int_status);
739
740         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->txmac_gen_err_reg);
741
742         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->txmac_ecc_err_reg);
743
744         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->tmac_int_status);
745
746         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_fb_err_reg);
747
748         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3ifcmd_fb_int_status);
749
750         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->mc_err_reg);
751
752         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->grocrc_alarm_reg);
753
754         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->fau_ecc_err_reg);
755
756         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->mc_int_status);
757
758         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3fbct_err_reg);
759
760         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->g3fbct_int_status);
761
762         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->orp_err_reg);
763
764         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->ptm_alarm_reg);
765
766         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->tpa_error_reg);
767
768         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->tpa_int_status);
769
770         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->kdfc_err_reg);
771
772         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->doorbell_int_status);
773
774         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->tim_err_reg);
775
776         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->msg_exc_reg);
777
778         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->msg_err_reg);
779
780         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->msg_err2_reg);
781
782         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->msg_err3_reg);
783
784         VXGE_HAL_MRPCIM_ERROR_REG_CLEAR(&mrpcim_reg->msg_int_status);
785
786         vxge_os_pio_mem_read64(hldev->header.pdev,
787             hldev->header.regh0,
788             &mrpcim_reg->mrpcim_general_int_status);
789
790         /* unmask interrupts */
791         val64 = VXGE_HAL_INI_ERRORS_REG_DCPL_FSM_ERR |
792             VXGE_HAL_INI_ERRORS_REG_INI_BUF_DB_ERR |
793             VXGE_HAL_INI_ERRORS_REG_INI_DATA_OVERFLOW |
794             VXGE_HAL_INI_ERRORS_REG_INI_HDR_OVERFLOW;
795
796         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->ini_errors_mask);
797
798         val64 = VXGE_HAL_DMA_ERRORS_REG_RDARB_FSM_ERR |
799             VXGE_HAL_DMA_ERRORS_REG_WRARB_FSM_ERR |
800             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_WR_HDR_OVERFLOW |
801             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_WR_HDR_UNDERFLOW |
802             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_WR_DATA_OVERFLOW |
803             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_WR_DATA_UNDERFLOW |
804             VXGE_HAL_DMA_ERRORS_REG_DMA_MSG_WR_HDR_OVERFLOW |
805             VXGE_HAL_DMA_ERRORS_REG_DMA_MSG_WR_HDR_UNDERFLOW |
806             VXGE_HAL_DMA_ERRORS_REG_DMA_MSG_WR_DATA_OVERFLOW |
807             VXGE_HAL_DMA_ERRORS_REG_DMA_MSG_WR_DATA_UNDERFLOW |
808             VXGE_HAL_DMA_ERRORS_REG_DMA_STATS_WR_HDR_OVERFLOW |
809             VXGE_HAL_DMA_ERRORS_REG_DMA_STATS_WR_HDR_UNDERFLOW |
810             VXGE_HAL_DMA_ERRORS_REG_DMA_STATS_WR_DATA_OVERFLOW |
811             VXGE_HAL_DMA_ERRORS_REG_DMA_STATS_WR_DATA_UNDERFLOW |
812             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_WR_HDR_OVERFLOW |
813             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_WR_HDR_UNDERFLOW |
814             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_WR_DATA_OVERFLOW |
815             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_WR_DATA_UNDERFLOW |
816             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_RD_HDR_OVERFLOW |
817             VXGE_HAL_DMA_ERRORS_REG_DMA_WRDMA_RD_HDR_UNDERFLOW |
818             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_RD_HDR_OVERFLOW |
819             VXGE_HAL_DMA_ERRORS_REG_DMA_RTDMA_RD_HDR_UNDERFLOW |
820             VXGE_HAL_DMA_ERRORS_REG_DBLGEN_FSM_ERR |
821             VXGE_HAL_DMA_ERRORS_REG_DBLGEN_CREDIT_FSM_ERR |
822             VXGE_HAL_DMA_ERRORS_REG_DBLGEN_DMA_WRR_SM_ERR;
823
824         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->dma_errors_mask);
825
826         val64 = VXGE_HAL_TGT_ERRORS_REG_TGT_REQ_FSM_ERR |
827             VXGE_HAL_TGT_ERRORS_REG_TGT_CPL_FSM_ERR;
828
829         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->tgt_errors_mask);
830
831         val64 = VXGE_HAL_CONFIG_ERRORS_REG_I2C_MAIN_FSM_ERR |
832             VXGE_HAL_CONFIG_ERRORS_REG_I2C_REG_FSM_ERR |
833             VXGE_HAL_CONFIG_ERRORS_REG_CFGM_I2C_TIMEOUT |
834             VXGE_HAL_CONFIG_ERRORS_REG_RIC_I2C_TIMEOUT |
835             VXGE_HAL_CONFIG_ERRORS_REG_CFGM_FSM_ERR |
836             VXGE_HAL_CONFIG_ERRORS_REG_RIC_FSM_ERR |
837             VXGE_HAL_CONFIG_ERRORS_REG_PIFM_TIMEOUT |
838             VXGE_HAL_CONFIG_ERRORS_REG_PIFM_FSM_ERR |
839             VXGE_HAL_CONFIG_ERRORS_REG_PIFM_TO_FSM_ERR |
840             VXGE_HAL_CONFIG_ERRORS_REG_RIC_RIC_RD_TIMEOUT;
841
842         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
843             &mrpcim_reg->config_errors_mask);
844
845         val64 = VXGE_HAL_CRDT_ERRORS_REG_WRCRDTARB_FSM_ERR |
846             VXGE_HAL_CRDT_ERRORS_REG_WRCRDTARB_INTCTL_ILLEGAL_CRD_DEAL |
847             VXGE_HAL_CRDT_ERRORS_REG_WRCRDTARB_PDA_ILLEGAL_CRD_DEAL |
848             VXGE_HAL_CRDT_ERRORS_REG_WRCRDTARB_PCI_MSG_ILLEGAL_CRD_DEAL |
849             VXGE_HAL_CRDT_ERRORS_REG_RDCRDTARB_FSM_ERR |
850             VXGE_HAL_CRDT_ERRORS_REG_RDCRDTARB_RDA_ILLEGAL_CRD_DEAL |
851             VXGE_HAL_CRDT_ERRORS_REG_RDCRDTARB_PDA_ILLEGAL_CRD_DEAL |
852             VXGE_HAL_CRDT_ERRORS_REG_RDCRDTARB_DBLGEN_ILLEGAL_CRD_DEAL;
853
854         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->crdt_errors_mask);
855
856         val64 = VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_STATSB_FSM_ERR |
857             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_XGEN_FSM_ERR |
858             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_XMEM_FSM_ERR |
859             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_KDFCCTL_FSM_ERR |
860             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_MRIOVCTL_FSM_ERR |
861             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_SPI_FLSH_ERR |
862             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_SPI_IIC_ACK_ERR |
863             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_SPI_IIC_CHKSUM_ERR |
864             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_INI_SERR_DET |
865             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_INTCTL_MSIX_FSM_ERR |
866             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_INTCTL_MSI_OVERFLOW |
867             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_PPIF_PCI_NOT_FLUSH_SW_RESET |
868             VXGE_HAL_MRPCIM_GENERAL_ERRORS_REG_PPIF_SW_RESET_FSM_ERR;
869
870         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
871             &mrpcim_reg->mrpcim_general_errors_mask);
872
873         val64 = VXGE_HAL_PLL_ERRORS_REG_CORE_CMG_PLL_OOL |
874             VXGE_HAL_PLL_ERRORS_REG_CORE_FB_PLL_OOL |
875             VXGE_HAL_PLL_ERRORS_REG_CORE_X_PLL_OOL;
876
877         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pll_errors_mask);
878
879         val64 = VXGE_HAL_MRPCIM_PPIF_INT_STATUS_INI_ERRORS_INI_INT |
880             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_DMA_ERRORS_DMA_INT |
881             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_TGT_ERRORS_TGT_INT |
882             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_CONFIG_ERRORS_CONFIG_INT |
883             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_CRDT_ERRORS_CRDT_INT |
884             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_MRPCIM_GENERAL_ERRORS_GENERAL_INT |
885             VXGE_HAL_MRPCIM_PPIF_INT_STATUS_PLL_ERRORS_PLL_INT;
886
887         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
888             &mrpcim_reg->mrpcim_ppif_int_mask);
889
890         val64 = VXGE_HAL_DBECC_ERR_REG_PCI_RETRY_BUF_DB_ERR |
891             VXGE_HAL_DBECC_ERR_REG_PCI_RETRY_SOT_DB_ERR |
892             VXGE_HAL_DBECC_ERR_REG_PCI_P_HDR_DB_ERR |
893             VXGE_HAL_DBECC_ERR_REG_PCI_P_DATA_DB_ERR |
894             VXGE_HAL_DBECC_ERR_REG_PCI_NP_HDR_DB_ERR |
895             VXGE_HAL_DBECC_ERR_REG_PCI_NP_DATA_DB_ERR;
896
897         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->dbecc_err_mask);
898
899         val64 = VXGE_HAL_GENERAL_ERR_REG_PCI_LINK_RST_FSM_ERR;
900
901         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->general_err_mask);
902
903         val64 = VXGE_HAL_PCIPIF_INT_STATUS_DBECC_ERR_DBECC_ERR_INT |
904             VXGE_HAL_PCIPIF_INT_STATUS_GENERAL_ERR_GENERAL_ERR_INT;
905
906         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pcipif_int_mask);
907
908         val64 = VXGE_HAL_PDA_ALARM_REG_PDA_SM_ERR;
909
910         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pda_alarm_mask);
911
912         val64 = 0;
913
914         for (i = 0; i < 8; i++) {
915                 val64 |= VXGE_HAL_PCC_ERROR_REG_PCC_PCC_FRM_BUF_DBE(i) |
916                     VXGE_HAL_PCC_ERROR_REG_PCC_PCC_TXDO_DBE(i) |
917                     VXGE_HAL_PCC_ERROR_REG_PCC_PCC_FSM_ERR_ALARM(i) |
918                     VXGE_HAL_PCC_ERROR_REG_PCC_PCC_SERR(i);
919         }
920
921         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pcc_error_mask);
922
923         val64 = 0;
924
925         for (i = 0; i < 8; i++) {
926                 val64 |= VXGE_HAL_LSO_ERROR_REG_PCC_LSO_FSM_ERR_ALARM(i);
927         }
928
929         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->lso_error_mask);
930
931         val64 = VXGE_HAL_SM_ERROR_REG_SM_FSM_ERR_ALARM;
932
933         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->sm_error_mask);
934
935         val64 = VXGE_HAL_RTDMA_INT_STATUS_PDA_ALARM_PDA_INT |
936             VXGE_HAL_RTDMA_INT_STATUS_PCC_ERROR_PCC_INT |
937             VXGE_HAL_RTDMA_INT_STATUS_LSO_ERROR_LSO_INT |
938             VXGE_HAL_RTDMA_INT_STATUS_SM_ERROR_SM_INT;
939
940         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rtdma_int_mask);
941
942         val64 = VXGE_HAL_RC_ALARM_REG_FTC_SM_ERR |
943             VXGE_HAL_RC_ALARM_REG_FTC_SM_PHASE_ERR |
944             VXGE_HAL_RC_ALARM_REG_BTDWM_SM_ERR |
945             VXGE_HAL_RC_ALARM_REG_BTC_SM_ERR |
946             VXGE_HAL_RC_ALARM_REG_BTDCM_SM_ERR |
947             VXGE_HAL_RC_ALARM_REG_BTDRM_SM_ERR |
948             VXGE_HAL_RC_ALARM_REG_RMM_RXD_RC_ECC_DB_ERR |
949             VXGE_HAL_RC_ALARM_REG_RHS_RXD_RHS_ECC_DB_ERR |
950             VXGE_HAL_RC_ALARM_REG_RMM_SM_ERR |
951             VXGE_HAL_RC_ALARM_REG_BTC_VPATH_MISMATCH_ERR;
952
953         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rc_alarm_mask);
954
955         val64 = 0;
956
957         for (i = 0; i < 17; i++) {
958                 val64 |= VXGE_HAL_RXDRM_SM_ERR_REG_PRC_VP(i);
959         }
960
961         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rxdrm_sm_err_mask);
962
963         val64 = 0;
964
965         for (i = 0; i < 17; i++) {
966                 val64 |= VXGE_HAL_RXDCM_SM_ERR_REG_PRC_VP(i);
967         }
968
969         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rxdcm_sm_err_mask);
970
971         val64 = 0;
972
973         for (i = 0; i < 17; i++) {
974                 val64 |= VXGE_HAL_RXDWM_SM_ERR_REG_PRC_VP(i);
975         }
976
977         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rxdwm_sm_err_mask);
978
979         val64 = VXGE_HAL_RDA_ERR_REG_RDA_SM0_ERR_ALARM |
980             VXGE_HAL_RDA_ERR_REG_RDA_RXD_ECC_DB_ERR |
981             VXGE_HAL_RDA_ERR_REG_RDA_FRM_ECC_DB_ERR |
982             VXGE_HAL_RDA_ERR_REG_RDA_UQM_ECC_DB_ERR |
983             VXGE_HAL_RDA_ERR_REG_RDA_IMM_ECC_DB_ERR |
984             VXGE_HAL_RDA_ERR_REG_RDA_TIM_ECC_DB_ERR;
985
986         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rda_err_mask);
987
988         val64 = 0;
989
990         for (i = 0; i < 17; i++) {
991                 val64 |= VXGE_HAL_RDA_ECC_DB_REG_RDA_RXD_ERR(i);
992         }
993
994         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rda_ecc_db_mask);
995
996         val64 = VXGE_HAL_RQA_ERR_REG_RQA_SM_ERR_ALARM;
997
998         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rqa_err_mask);
999
1000         val64 = 0;
1001
1002         for (i = 0; i < 17; i++) {
1003                 val64 |= VXGE_HAL_FRF_ALARM_REG_PRC_VP_FRF_SM_ERR(i);
1004         }
1005
1006         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->frf_alarm_mask);
1007
1008         val64 = VXGE_HAL_ROCRC_ALARM_REG_QCQ_QCC_BYP_ECC_DB |
1009             VXGE_HAL_ROCRC_ALARM_REG_NOA_NMA_SM_ERR |
1010             VXGE_HAL_ROCRC_ALARM_REG_NOA_IMMM_ECC_DB |
1011             VXGE_HAL_ROCRC_ALARM_REG_UDQ_UMQM_ECC_DB |
1012             VXGE_HAL_ROCRC_ALARM_REG_NOA_RCBM_ECC_DB |
1013             VXGE_HAL_ROCRC_ALARM_REG_NOA_WCT_CMD_FIFO_ERR;
1014
1015         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rocrc_alarm_mask);
1016
1017         val64 = VXGE_HAL_WDE0_ALARM_REG_WDE0_DCC_SM_ERR |
1018             VXGE_HAL_WDE0_ALARM_REG_WDE0_PRM_SM_ERR |
1019             VXGE_HAL_WDE0_ALARM_REG_WDE0_CP_SM_ERR |
1020             VXGE_HAL_WDE0_ALARM_REG_WDE0_CP_CMD_ERR |
1021             VXGE_HAL_WDE0_ALARM_REG_WDE0_PCR_SM_ERR;
1022
1023         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->wde0_alarm_mask);
1024
1025         val64 = VXGE_HAL_WDE1_ALARM_REG_WDE1_DCC_SM_ERR |
1026             VXGE_HAL_WDE1_ALARM_REG_WDE1_PRM_SM_ERR |
1027             VXGE_HAL_WDE1_ALARM_REG_WDE1_CP_SM_ERR |
1028             VXGE_HAL_WDE1_ALARM_REG_WDE1_CP_CMD_ERR |
1029             VXGE_HAL_WDE1_ALARM_REG_WDE1_PCR_SM_ERR;
1030
1031         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->wde1_alarm_mask);
1032
1033         val64 = VXGE_HAL_WDE2_ALARM_REG_WDE2_DCC_SM_ERR |
1034             VXGE_HAL_WDE2_ALARM_REG_WDE2_PRM_SM_ERR |
1035             VXGE_HAL_WDE2_ALARM_REG_WDE2_CP_SM_ERR |
1036             VXGE_HAL_WDE2_ALARM_REG_WDE2_CP_CMD_ERR |
1037             VXGE_HAL_WDE2_ALARM_REG_WDE2_PCR_SM_ERR;
1038
1039         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->wde2_alarm_mask);
1040
1041         val64 = VXGE_HAL_WDE3_ALARM_REG_WDE3_DCC_SM_ERR |
1042             VXGE_HAL_WDE3_ALARM_REG_WDE3_PRM_SM_ERR |
1043             VXGE_HAL_WDE3_ALARM_REG_WDE3_CP_SM_ERR |
1044             VXGE_HAL_WDE3_ALARM_REG_WDE3_CP_CMD_ERR |
1045             VXGE_HAL_WDE3_ALARM_REG_WDE3_PCR_SM_ERR;
1046
1047         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->wde3_alarm_mask);
1048
1049         val64 = VXGE_HAL_WRDMA_INT_STATUS_RC_ALARM_RC_INT |
1050             VXGE_HAL_WRDMA_INT_STATUS_RXDRM_SM_ERR_RXDRM_INT |
1051             VXGE_HAL_WRDMA_INT_STATUS_RXDCM_SM_ERR_RXDCM_SM_INT |
1052             VXGE_HAL_WRDMA_INT_STATUS_RXDWM_SM_ERR_RXDWM_INT |
1053             VXGE_HAL_WRDMA_INT_STATUS_RDA_ERR_RDA_INT |
1054             VXGE_HAL_WRDMA_INT_STATUS_RDA_ECC_DB_RDA_ECC_DB_INT |
1055             VXGE_HAL_WRDMA_INT_STATUS_FRF_ALARM_FRF_INT |
1056             VXGE_HAL_WRDMA_INT_STATUS_ROCRC_ALARM_ROCRC_INT |
1057             VXGE_HAL_WRDMA_INT_STATUS_WDE0_ALARM_WDE0_INT |
1058             VXGE_HAL_WRDMA_INT_STATUS_WDE1_ALARM_WDE1_INT |
1059             VXGE_HAL_WRDMA_INT_STATUS_WDE2_ALARM_WDE2_INT |
1060             VXGE_HAL_WRDMA_INT_STATUS_WDE3_ALARM_WDE3_INT;
1061
1062         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->wrdma_int_mask);
1063
1064         val64 = VXGE_HAL_G3CMCT_ERR_REG_G3IF_SM_ERR |
1065             VXGE_HAL_G3CMCT_ERR_REG_G3IF_GDDR3_DECC |
1066             VXGE_HAL_G3CMCT_ERR_REG_G3IF_GDDR3_U_DECC |
1067             VXGE_HAL_G3CMCT_ERR_REG_G3IF_CTRL_FIFO_DECC;
1068
1069         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->g3cmct_err_mask);
1070
1071         val64 = VXGE_HAL_G3CMCT_INT_STATUS_ERR_G3IF_INT;
1072
1073         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->g3cmct_int_mask);
1074
1075         val64 = VXGE_HAL_GSSCC_ERR_REG_SSCC_SSR_DB_ERR(0x3) |
1076             VXGE_HAL_GSSCC_ERR_REG_SSCC_TSR_DB_ERR(0x3f) |
1077             VXGE_HAL_GSSCC_ERR_REG_SSCC_CP2STE_UFLOW_ERR |
1078             VXGE_HAL_GSSCC_ERR_REG_SSCC_CP2TTE_UFLOW_ERR;
1079
1080         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->gsscc_err_mask);
1081
1082         for (i = 0; i < 3; i++) {
1083
1084                 val64 = VXGE_HAL_GSSC_ERR0_REG_SSCC_STATE_DB_ERR(0xff) |
1085                     VXGE_HAL_GSSC_ERR0_REG_SSCC_CM_RESP_DB_ERR(0xf) |
1086                     VXGE_HAL_GSSC_ERR0_REG_SSCC_SSR_RESP_DB_ERR(0x3) |
1087                     VXGE_HAL_GSSC_ERR0_REG_SSCC_TSR_RESP_DB_ERR(0x3f);
1088
1089                 VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1090                     &mrpcim_reg->gssc_err0_mask[i]);
1091
1092                 val64 = VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_RESP_DB_ERR |
1093                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SCREQ_ERR |
1094                     VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_RESP_OFLOW_ERR |
1095                     VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_RESP_R_WN_ERR |
1096                     VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_RESP_UFLOW_ERR |
1097                     VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_REQ_OFLOW_ERR |
1098                     VXGE_HAL_GSSC_ERR1_REG_SSCC_CM_REQ_UFLOW_ERR |
1099                     VXGE_HAL_GSSC_ERR1_REG_SSCC_FSM_OFLOW_ERR |
1100                     VXGE_HAL_GSSC_ERR1_REG_SSCC_FSM_UFLOW_ERR |
1101                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SSR_REQ_OFLOW_ERR |
1102                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SSR_REQ_UFLOW_ERR |
1103                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SSR_RESP_OFLOW_ERR |
1104                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SSR_RESP_R_WN_ERR |
1105                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SSR_RESP_UFLOW_ERR |
1106                     VXGE_HAL_GSSC_ERR1_REG_SSCC_TSR_REQ_OFLOW_ERR |
1107                     VXGE_HAL_GSSC_ERR1_REG_SSCC_TSR_REQ_UFLOW_ERR |
1108                     VXGE_HAL_GSSC_ERR1_REG_SSCC_TSR_RESP_OFLOW_ERR |
1109                     VXGE_HAL_GSSC_ERR1_REG_SSCC_TSR_RESP_R_WN_ERR |
1110                     VXGE_HAL_GSSC_ERR1_REG_SSCC_TSR_RESP_UFLOW_ERR |
1111                     VXGE_HAL_GSSC_ERR1_REG_SSCC_SCRESP_ERR;
1112
1113                 VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1114                     &mrpcim_reg->gssc_err1_mask[i]);
1115
1116         }
1117
1118         val64 = VXGE_HAL_GCMG1_INT_STATUS_GSSCC_ERR_GSSCC_INT |
1119             VXGE_HAL_GCMG1_INT_STATUS_GSSC0_ERR0_GSSC0_0_INT |
1120             VXGE_HAL_GCMG1_INT_STATUS_GSSC0_ERR1_GSSC0_1_INT |
1121             VXGE_HAL_GCMG1_INT_STATUS_GSSC1_ERR0_GSSC1_0_INT |
1122             VXGE_HAL_GCMG1_INT_STATUS_GSSC1_ERR1_GSSC1_1_INT |
1123             VXGE_HAL_GCMG1_INT_STATUS_GSSC2_ERR0_GSSC2_0_INT |
1124             VXGE_HAL_GCMG1_INT_STATUS_GSSC2_ERR1_GSSC2_1_INT;
1125
1126         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->gcmg1_int_mask);
1127
1128         val64 = VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_MEM_DB_ERR(0xf) |
1129             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMC_RD_DATA_DB_ERR |
1130             VXGE_HAL_GXTMC_ERR_REG_XTMC_REQ_FIFO_ERR |
1131             VXGE_HAL_GXTMC_ERR_REG_XTMC_REQ_DATA_FIFO_ERR |
1132             VXGE_HAL_GXTMC_ERR_REG_XTMC_WR_RSP_FIFO_ERR |
1133             VXGE_HAL_GXTMC_ERR_REG_XTMC_RD_RSP_FIFO_ERR |
1134             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_WRP_FIFO_ERR |
1135             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_WRP_ERR |
1136             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_RRP_FIFO_ERR |
1137             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_RRP_ERR |
1138             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_DATA_SM_ERR |
1139             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_CMC0_IF_ERR |
1140             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_CFC_SM_ERR |
1141             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_DFETCH_CREDIT_OVERFLOW |
1142             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_DFETCH_CREDIT_UNDERFLOW |
1143             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_DFETCH_SM_ERR |
1144             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_RCTRL_CREDIT_OVERFLOW |
1145             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_RCTRL_CREDIT_UNDERFLOW |
1146             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_RCTRL_SM_ERR |
1147             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_WCOMPL_SM_ERR |
1148             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_WCOMPL_TAG_ERR |
1149             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_WREQ_SM_ERR |
1150             VXGE_HAL_GXTMC_ERR_REG_XTMC_BDT_CMI_WREQ_FIFO_ERR |
1151             VXGE_HAL_GXTMC_ERR_REG_XTMC_CP2BDT_RFIFO_POP_ERR |
1152             VXGE_HAL_GXTMC_ERR_REG_XTMC_XTMC_BDT_CMI_OP_ERR |
1153             VXGE_HAL_GXTMC_ERR_REG_XTMC_XTMC_BDT_DFETCH_OP_ERR |
1154             VXGE_HAL_GXTMC_ERR_REG_XTMC_XTMC_BDT_DFIFO_ERR |
1155             VXGE_HAL_GXTMC_ERR_REG_XTMC_CMI_ARB_SM_ERR;
1156
1157         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->gxtmc_err_mask);
1158
1159         val64 = VXGE_HAL_GCP_ERR_REG_CP_H2L2CP_FIFO_ERR |
1160             VXGE_HAL_GCP_ERR_REG_CP_STC2CP_FIFO_ERR |
1161             VXGE_HAL_GCP_ERR_REG_CP_STE2CP_FIFO_ERR |
1162             VXGE_HAL_GCP_ERR_REG_CP_TTE2CP_FIFO_ERR;
1163
1164         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->gcp_err_mask);
1165
1166         val64 = VXGE_HAL_CMC_ERR_REG_CMC_CMC_SM_ERR;
1167
1168         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->cmc_err_mask);
1169
1170         val64 = VXGE_HAL_GCMG2_INT_STATUS_GXTMC_ERR_GXTMC_INT |
1171             VXGE_HAL_GCMG2_INT_STATUS_GCP_ERR_GCP_INT |
1172             VXGE_HAL_GCMG2_INT_STATUS_CMC_ERR_CMC_INT;
1173
1174         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->gcmg2_int_mask);
1175
1176         val64 = VXGE_HAL_G3IFCMD_CML_ERR_REG_G3IF_SM_ERR;
1177
1178         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1179             &mrpcim_reg->g3ifcmd_cml_err_mask);
1180
1181         val64 = VXGE_HAL_G3IFCMD_CML_INT_STATUS_ERR_G3IF_INT;
1182
1183         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1184             &mrpcim_reg->g3ifcmd_cml_int_mask);
1185
1186         val64 = VXGE_HAL_G3IFCMD_CMU_ERR_REG_G3IF_SM_ERR;
1187
1188         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1189             &mrpcim_reg->g3ifcmd_cmu_err_mask);
1190
1191         val64 = VXGE_HAL_G3IFCMD_CMU_INT_STATUS_ERR_G3IF_INT;
1192
1193         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1194             &mrpcim_reg->g3ifcmd_cmu_int_mask);
1195
1196         val64 = VXGE_HAL_PSSCC_ERR_REG_SSCC_CP2STE_OFLOW_ERR |
1197             VXGE_HAL_PSSCC_ERR_REG_SSCC_CP2TTE_OFLOW_ERR;
1198
1199         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1200             &mrpcim_reg->psscc_err_mask);
1201
1202         val64 = VXGE_HAL_PCMG1_INT_STATUS_PSSCC_ERR_PSSCC_INT;
1203
1204         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1205             &mrpcim_reg->pcmg1_int_mask);
1206
1207         val64 = VXGE_HAL_PXTMC_ERR_REG_XTMC_XT_PIF_SRAM_DB_ERR(0x3) |
1208             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_REQ_FIFO_ERR |
1209             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_PRSP_FIFO_ERR |
1210             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_WRSP_FIFO_ERR |
1211             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_REQ_FIFO_ERR |
1212             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_PRSP_FIFO_ERR |
1213             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_WRSP_FIFO_ERR |
1214             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_REQ_FIFO_ERR |
1215             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_PRSP_FIFO_ERR |
1216             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_WRSP_FIFO_ERR |
1217             VXGE_HAL_PXTMC_ERR_REG_XTMC_REQ_FIFO_ERR |
1218             VXGE_HAL_PXTMC_ERR_REG_XTMC_REQ_DATA_FIFO_ERR |
1219             VXGE_HAL_PXTMC_ERR_REG_XTMC_WR_RSP_FIFO_ERR |
1220             VXGE_HAL_PXTMC_ERR_REG_XTMC_RD_RSP_FIFO_ERR |
1221             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_REQ_SHADOW_ERR |
1222             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_RSP_SHADOW_ERR |
1223             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_REQ_SHADOW_ERR |
1224             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_RSP_SHADOW_ERR |
1225             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_REQ_SHADOW_ERR |
1226             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_RSP_SHADOW_ERR |
1227             VXGE_HAL_PXTMC_ERR_REG_XTMC_XIL_SHADOW_ERR |
1228             VXGE_HAL_PXTMC_ERR_REG_XTMC_ARB_SHADOW_ERR |
1229             VXGE_HAL_PXTMC_ERR_REG_XTMC_RAM_SHADOW_ERR |
1230             VXGE_HAL_PXTMC_ERR_REG_XTMC_CMW_SHADOW_ERR |
1231             VXGE_HAL_PXTMC_ERR_REG_XTMC_CMR_SHADOW_ERR |
1232             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_REQ_FSM_ERR |
1233             VXGE_HAL_PXTMC_ERR_REG_XTMC_MPT_RSP_FSM_ERR |
1234             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_REQ_FSM_ERR |
1235             VXGE_HAL_PXTMC_ERR_REG_XTMC_UPT_RSP_FSM_ERR |
1236             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_REQ_FSM_ERR |
1237             VXGE_HAL_PXTMC_ERR_REG_XTMC_CPT_RSP_FSM_ERR |
1238             VXGE_HAL_PXTMC_ERR_REG_XTMC_XIL_FSM_ERR |
1239             VXGE_HAL_PXTMC_ERR_REG_XTMC_ARB_FSM_ERR |
1240             VXGE_HAL_PXTMC_ERR_REG_XTMC_CMW_FSM_ERR |
1241             VXGE_HAL_PXTMC_ERR_REG_XTMC_CMR_FSM_ERR |
1242             VXGE_HAL_PXTMC_ERR_REG_XTMC_MXP_RD_PROT_ERR |
1243             VXGE_HAL_PXTMC_ERR_REG_XTMC_UXP_RD_PROT_ERR |
1244             VXGE_HAL_PXTMC_ERR_REG_XTMC_CXP_RD_PROT_ERR |
1245             VXGE_HAL_PXTMC_ERR_REG_XTMC_MXP_WR_PROT_ERR |
1246             VXGE_HAL_PXTMC_ERR_REG_XTMC_UXP_WR_PROT_ERR |
1247             VXGE_HAL_PXTMC_ERR_REG_XTMC_CXP_WR_PROT_ERR |
1248             VXGE_HAL_PXTMC_ERR_REG_XTMC_MXP_INV_ADDR_ERR |
1249             VXGE_HAL_PXTMC_ERR_REG_XTMC_UXP_INV_ADDR_ERR |
1250             VXGE_HAL_PXTMC_ERR_REG_XTMC_CXP_INV_ADDR_ERR |
1251             VXGE_HAL_PXTMC_ERR_REG_XTMC_CP2BDT_DFIFO_PUSH_ERR |
1252             VXGE_HAL_PXTMC_ERR_REG_XTMC_CP2BDT_RFIFO_PUSH_ERR;
1253
1254         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pxtmc_err_mask);
1255
1256         val64 = VXGE_HAL_CP_EXC_REG_CP_CP_CAUSE_CRIT_INT |
1257             VXGE_HAL_CP_EXC_REG_CP_CP_SERR;
1258
1259         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->cp_exc_mask);
1260
1261         val64 = VXGE_HAL_CP_ERR_REG_CP_CP_DCACHE_DB_ERR(0xff) |
1262             VXGE_HAL_CP_ERR_REG_CP_CP_ICACHE_DB_ERR(0x3) |
1263             VXGE_HAL_CP_ERR_REG_CP_CP_DTAG_DB_ERR |
1264             VXGE_HAL_CP_ERR_REG_CP_CP_ITAG_DB_ERR |
1265             VXGE_HAL_CP_ERR_REG_CP_CP_TRACE_DB_ERR |
1266             VXGE_HAL_CP_ERR_REG_CP_DMA2CP_DB_ERR |
1267             VXGE_HAL_CP_ERR_REG_CP_MP2CP_DB_ERR |
1268             VXGE_HAL_CP_ERR_REG_CP_QCC2CP_DB_ERR |
1269             VXGE_HAL_CP_ERR_REG_CP_STC2CP_DB_ERR(0x3) |
1270             VXGE_HAL_CP_ERR_REG_CP_H2L2CP_FIFO_ERR |
1271             VXGE_HAL_CP_ERR_REG_CP_STC2CP_FIFO_ERR |
1272             VXGE_HAL_CP_ERR_REG_CP_STE2CP_FIFO_ERR |
1273             VXGE_HAL_CP_ERR_REG_CP_TTE2CP_FIFO_ERR |
1274             VXGE_HAL_CP_ERR_REG_CP_SWIF2CP_FIFO_ERR |
1275             VXGE_HAL_CP_ERR_REG_CP_CP2DMA_FIFO_ERR |
1276             VXGE_HAL_CP_ERR_REG_CP_DAM2CP_FIFO_ERR |
1277             VXGE_HAL_CP_ERR_REG_CP_MP2CP_FIFO_ERR |
1278             VXGE_HAL_CP_ERR_REG_CP_QCC2CP_FIFO_ERR |
1279             VXGE_HAL_CP_ERR_REG_CP_DMA2CP_FIFO_ERR |
1280             VXGE_HAL_CP_ERR_REG_CP_CP_WAKE_FSM_INTEGRITY_ERR |
1281             VXGE_HAL_CP_ERR_REG_CP_CP_PMON_FSM_INTEGRITY_ERR |
1282             VXGE_HAL_CP_ERR_REG_CP_DMA_RD_SHADOW_ERR |
1283             VXGE_HAL_CP_ERR_REG_CP_PIFT_CREDIT_ERR;
1284
1285         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->cp_err_mask);
1286
1287         val64 = VXGE_HAL_PCMG2_INT_STATUS_PXTMC_ERR_PXTMC_INT |
1288             VXGE_HAL_PCMG2_INT_STATUS_CP_EXC_CP_XT_EXC_INT |
1289             VXGE_HAL_PCMG2_INT_STATUS_CP_ERR_CP_ERR_INT;
1290
1291         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pcmg2_int_mask);
1292
1293         val64 = VXGE_HAL_DAM_ERR_REG_DAM_RDSB_ECC_DB_ERR |
1294             VXGE_HAL_DAM_ERR_REG_DAM_WRSB_ECC_DB_ERR |
1295             VXGE_HAL_DAM_ERR_REG_DAM_HPPEDAT_ECC_DB_ERR |
1296             VXGE_HAL_DAM_ERR_REG_DAM_LPPEDAT_ECC_DB_ERR |
1297             VXGE_HAL_DAM_ERR_REG_DAM_WRRESP_ECC_DB_ERR |
1298             VXGE_HAL_DAM_ERR_REG_DAM_HPRD_ERR |
1299             VXGE_HAL_DAM_ERR_REG_DAM_LPRD_0_ERR |
1300             VXGE_HAL_DAM_ERR_REG_DAM_LPRD_1_ERR |
1301             VXGE_HAL_DAM_ERR_REG_DAM_HPPEDAT_OVERFLOW_ERR |
1302             VXGE_HAL_DAM_ERR_REG_DAM_LPPEDAT_OVERFLOW_ERR |
1303             VXGE_HAL_DAM_ERR_REG_DAM_WRRESP_OVERFLOW_ERR |
1304             VXGE_HAL_DAM_ERR_REG_DAM_SM_ERR;
1305
1306         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->dam_err_mask);
1307
1308         val64 = VXGE_HAL_PCMG3_INT_STATUS_DAM_ERR_DAM_INT;
1309
1310         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->pcmg3_int_mask);
1311
1312         val64 = VXGE_HAL_XMAC_GEN_ERR_REG_XSTATS_RMAC_STATS_TILE0_DB_ERR(0x3) |
1313             VXGE_HAL_XMAC_GEN_ERR_REG_XSTATS_RMAC_STATS_TILE1_DB_ERR(0x3) |
1314             VXGE_HAL_XMAC_GEN_ERR_REG_XSTATS_RMAC_STATS_TILE2_DB_ERR(0x3) |
1315             VXGE_HAL_XMAC_GEN_ERR_REG_XSTATS_RMAC_STATS_TILE3_DB_ERR(0x3) |
1316             VXGE_HAL_XMAC_GEN_ERR_REG_XSTATS_RMAC_STATS_TILE4_DB_ERR(0x3) |
1317             VXGE_HAL_XMAC_GEN_ERR_REG_XMACJ_XMAC_FSM_ERR;
1318
1319         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->xmac_gen_err_mask);
1320
1321         val64 = VXGE_HAL_XGXS_GEN_ERR_REG_XGXS_XGXS_FSM_ERR;
1322
1323         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->xgxs_gen_err_mask);
1324
1325         val64 = VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_DOWN |
1326             VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_UP |
1327             VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_WENT_DOWN |
1328             VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_WENT_UP |
1329             VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_REAFFIRMED_FAULT |
1330             VXGE_HAL_ASIC_NTWK_ERR_REG_XMACJ_NTWK_REAFFIRMED_OK;
1331
1332         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1333             &mrpcim_reg->asic_ntwk_err_mask);
1334
1335         val64 = VXGE_HAL_XGMAC_INT_STATUS_XMAC_GEN_ERR_XMAC_GEN_INT |
1336             VXGE_HAL_XGMAC_INT_STATUS_XGXS_GEN_ERR_XGXS_GEN_INT |
1337             VXGE_HAL_XGMAC_INT_STATUS_ASIC_NTWK_ERR_ASIC_NTWK_INT;
1338
1339         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->xgmac_int_mask);
1340
1341         val64 =
1342             VXGE_HAL_RXMAC_ECC_ERR_REG_RMAC_PORT0_RMAC_RTS_PART_DB_ERR(0xf) |
1343             VXGE_HAL_RXMAC_ECC_ERR_REG_RMAC_PORT1_RMAC_RTS_PART_DB_ERR(0xf) |
1344             VXGE_HAL_RXMAC_ECC_ERR_REG_RMAC_PORT2_RMAC_RTS_PART_DB_ERR(0xf) |
1345             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_DA_LKP_PRT0_DB_ERR(0x3) |
1346             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_DA_LKP_PRT1_DB_ERR(0x3) |
1347             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_VID_LKP_DB_ERR |
1348             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_PN_LKP_PRT0_DB_ERR |
1349             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_PN_LKP_PRT1_DB_ERR |
1350             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_PN_LKP_PRT2_DB_ERR |
1351             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_RTH_MASK_DB_ERR(0x3f) |
1352             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_RTH_LKP_DB_ERR(0x7) |
1353             VXGE_HAL_RXMAC_ECC_ERR_REG_RTSJ_RMAC_DS_LKP_DB_ERR;
1354
1355         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1356             &mrpcim_reg->rxmac_ecc_err_mask);
1357
1358         val64 = VXGE_HAL_RXMAC_VARIOUS_ERR_REG_RMAC_RMAC_PORT0_FSM_ERR |
1359             VXGE_HAL_RXMAC_VARIOUS_ERR_REG_RMAC_RMAC_PORT1_FSM_ERR |
1360             VXGE_HAL_RXMAC_VARIOUS_ERR_REG_RMAC_RMAC_PORT2_FSM_ERR |
1361             VXGE_HAL_RXMAC_VARIOUS_ERR_REG_RMACJ_RMACJ_FSM_ERR;
1362
1363         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1364             &mrpcim_reg->rxmac_various_err_mask);
1365
1366         val64 = VXGE_HAL_RXMAC_INT_STATUS_RXMAC_ECC_ERR_RXMAC_ECC_INT |
1367             VXGE_HAL_RXMAC_INT_STATUS_RXMAC_VARIOUS_ERR_RXMAC_VARIOUS_INT;
1368
1369         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->rxmac_int_mask);
1370
1371         val64 = VXGE_HAL_TXMAC_GEN_ERR_REG_TMACJ_PERMANENT_STOP;
1372
1373         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1374             &mrpcim_reg->txmac_gen_err_mask);
1375
1376         val64 = VXGE_HAL_TXMAC_ECC_ERR_REG_TMACJ_TMAC_TPA2MAC_DB_ERR |
1377             VXGE_HAL_TXMAC_ECC_ERR_REG_TMACJ_TMAC_TPA2M_SB_DB_ERR |
1378             VXGE_HAL_TXMAC_ECC_ERR_REG_TMACJ_TMAC_TPA2M_DA_DB_ERR |
1379             VXGE_HAL_TXMAC_ECC_ERR_REG_TMAC_TMAC_PORT0_FSM_ERR |
1380             VXGE_HAL_TXMAC_ECC_ERR_REG_TMAC_TMAC_PORT1_FSM_ERR |
1381             VXGE_HAL_TXMAC_ECC_ERR_REG_TMAC_TMAC_PORT2_FSM_ERR |
1382             VXGE_HAL_TXMAC_ECC_ERR_REG_TMACJ_TMACJ_FSM_ERR;
1383
1384         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1385             &mrpcim_reg->txmac_ecc_err_mask);
1386
1387         val64 = VXGE_HAL_TMAC_INT_STATUS_TXMAC_GEN_ERR_TXMAC_GEN_INT |
1388             VXGE_HAL_TMAC_INT_STATUS_TXMAC_ECC_ERR_TXMAC_ECC_INT;
1389
1390         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->tmac_int_mask);
1391
1392         val64 = VXGE_HAL_G3IFCMD_FB_ERR_REG_G3IF_SM_ERR;
1393
1394         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1395             &mrpcim_reg->g3ifcmd_fb_err_mask);
1396
1397         val64 = VXGE_HAL_G3IFCMD_FB_INT_STATUS_ERR_G3IF_INT;
1398
1399         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64,
1400             &mrpcim_reg->g3ifcmd_fb_int_mask);
1401
1402         val64 = VXGE_HAL_MC_ERR_REG_MC_XFMD_MEM_ECC_DB_ERR_A |
1403             VXGE_HAL_MC_ERR_REG_MC_XFMD_MEM_ECC_DB_ERR_B |
1404             VXGE_HAL_MC_ERR_REG_MC_G3IF_RD_FIFO_ECC_DB_ERR |
1405             VXGE_HAL_MC_ERR_REG_MC_MIRI_ECC_DB_ERR_0 |
1406             VXGE_HAL_MC_ERR_REG_MC_MIRI_ECC_DB_ERR_1 |
1407             VXGE_HAL_MC_ERR_REG_MC_SM_ERR;
1408
1409         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->mc_err_mask);
1410
1411         val64 = VXGE_HAL_GROCRC_ALARM_REG_XFMD_WR_FIFO_ERR |
1412             VXGE_HAL_GROCRC_ALARM_REG_WDE2MSR_RD_FIFO_ERR;
1413
1414         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->grocrc_alarm_mask);
1415
1416         val64 = VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT0_FAU_MAC2F_N_DB_ERR |
1417             VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT0_FAU_MAC2F_W_DB_ERR(0x3) |
1418             VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT1_FAU_MAC2F_N_DB_ERR |
1419             VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT1_FAU_MAC2F_W_DB_ERR(0x3) |
1420             VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT2_FAU_MAC2F_N_DB_ERR |
1421             VXGE_HAL_FAU_ECC_ERR_REG_FAU_PORT2_FAU_MAC2F_W_DB_ERR(0x3) |
1422             VXGE_HAL_FAU_ECC_ERR_REG_FAU_FAU_XFMD_INS_DB_ERR(0x3) |
1423             VXGE_HAL_FAU_ECC_ERR_REG_FAUJ_FAU_FSM_ERR;
1424
1425         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->fau_ecc_err_mask);
1426
1427         val64 = VXGE_HAL_MC_INT_STATUS_MC_ERR_MC_INT |
1428             VXGE_HAL_MC_INT_STATUS_GROCRC_ALARM_ROCRC_INT |
1429             VXGE_HAL_MC_INT_STATUS_FAU_ECC_ERR_FAU_ECC_INT;
1430
1431         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->mc_int_mask);
1432
1433         val64 = VXGE_HAL_G3FBCT_ERR_REG_G3IF_SM_ERR |
1434             VXGE_HAL_G3FBCT_ERR_REG_G3IF_GDDR3_DECC |
1435             VXGE_HAL_G3FBCT_ERR_REG_G3IF_GDDR3_U_DECC |
1436             VXGE_HAL_G3FBCT_ERR_REG_G3IF_CTRL_FIFO_DECC;
1437
1438         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->g3fbct_err_mask);
1439
1440         val64 = VXGE_HAL_G3FBCT_INT_STATUS_ERR_G3IF_INT;
1441
1442         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->g3fbct_int_mask);
1443
1444         val64 = VXGE_HAL_ORP_ERR_REG_ORP_FIFO_DB_ERR |
1445             VXGE_HAL_ORP_ERR_REG_ORP_XFMD_FIFO_UFLOW_ERR |
1446             VXGE_HAL_ORP_ERR_REG_ORP_FRM_FIFO_UFLOW_ERR |
1447             VXGE_HAL_ORP_ERR_REG_ORP_XFMD_RCV_FSM_ERR |
1448             VXGE_HAL_ORP_ERR_REG_ORP_OUTREAD_FSM_ERR |
1449             VXGE_HAL_ORP_ERR_REG_ORP_OUTQEM_FSM_ERR |
1450             VXGE_HAL_ORP_ERR_REG_ORP_XFMD_RCV_SHADOW_ERR |
1451             VXGE_HAL_ORP_ERR_REG_ORP_OUTREAD_SHADOW_ERR |
1452             VXGE_HAL_ORP_ERR_REG_ORP_OUTQEM_SHADOW_ERR |
1453             VXGE_HAL_ORP_ERR_REG_ORP_OUTFRM_SHADOW_ERR |
1454             VXGE_HAL_ORP_ERR_REG_ORP_OPTPRS_SHADOW_ERR;
1455
1456         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->orp_err_mask);
1457
1458         val64 = VXGE_HAL_PTM_ALARM_REG_PTM_RDCTRL_SYNC_ERR |
1459             VXGE_HAL_PTM_ALARM_REG_PTM_RDCTRL_FIFO_ERR |
1460             VXGE_HAL_PTM_ALARM_REG_XFMD_RD_FIFO_ERR |
1461             VXGE_HAL_PTM_ALARM_REG_WDE2MSR_WR_FIFO_ERR |
1462             VXGE_HAL_PTM_ALARM_REG_PTM_FRMM_ECC_DB_ERR(0x3);
1463
1464         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->ptm_alarm_mask);
1465
1466         val64 = VXGE_HAL_TPA_ERROR_REG_TPA_FSM_ERR_ALARM |
1467             VXGE_HAL_TPA_ERROR_REG_TPA_TPA_DA_LKUP_PRT0_DB_ERR;
1468
1469         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->tpa_error_mask);
1470
1471         val64 = VXGE_HAL_TPA_INT_STATUS_ORP_ERR_ORP_INT |
1472             VXGE_HAL_TPA_INT_STATUS_PTM_ALARM_PTM_INT |
1473             VXGE_HAL_TPA_INT_STATUS_TPA_ERROR_TPA_INT;
1474
1475         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->tpa_int_mask);
1476
1477         val64 = VXGE_HAL_KDFC_ERR_REG_KDFC_KDFC_ECC_DB_ERR |
1478             VXGE_HAL_KDFC_ERR_REG_KDFC_KDFC_SM_ERR_ALARM;
1479
1480         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->kdfc_err_mask);
1481
1482         val64 = VXGE_HAL_DOORBELL_INT_STATUS_KDFC_ERR_REG_TXDMA_KDFC_INT;
1483
1484         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->doorbell_int_mask);
1485
1486         val64 = VXGE_HAL_TIM_ERR_REG_TIM_VBLS_DB_ERR |
1487             VXGE_HAL_TIM_ERR_REG_TIM_BMAP_PA_DB_ERR |
1488             VXGE_HAL_TIM_ERR_REG_TIM_BMAP_PB_DB_ERR |
1489             VXGE_HAL_TIM_ERR_REG_TIM_BMAP_MSG_DB_ERR |
1490             VXGE_HAL_TIM_ERR_REG_TIM_BMAP_MEM_CNTRL_SM_ERR |
1491             VXGE_HAL_TIM_ERR_REG_TIM_BMAP_MSG_MEM_CNTRL_SM_ERR |
1492             VXGE_HAL_TIM_ERR_REG_TIM_MPIF_PCIWR_ERR |
1493             VXGE_HAL_TIM_ERR_REG_TIM_ROCRC_BMAP_UPDT_FIFO_ERR |
1494             VXGE_HAL_TIM_ERR_REG_TIM_CREATE_BMAPMSG_FIFO_ERR;
1495
1496         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->tim_err_mask);
1497
1498         val64 = VXGE_HAL_MSG_EXC_REG_MP_MXP_CAUSE_CRIT_INT |
1499             VXGE_HAL_MSG_EXC_REG_UP_UXP_CAUSE_CRIT_INT |
1500             VXGE_HAL_MSG_EXC_REG_MP_MXP_SERR |
1501             VXGE_HAL_MSG_EXC_REG_UP_UXP_SERR;
1502
1503         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->msg_exc_mask);
1504
1505         val64 = VXGE_HAL_MSG_ERR_REG_UP_UXP_WAKE_FSM_INTEGRITY_ERR |
1506             VXGE_HAL_MSG_ERR_REG_MP_MXP_WAKE_FSM_INTEGRITY_ERR |
1507             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMQ_DMA_READ_CMD_FSM_INTEGRITY_ERR |
1508             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMQ_DMA_RESP_FSM_INTEGRITY_ERR |
1509             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMQ_OWN_FSM_INTEGRITY_ERR |
1510             VXGE_HAL_MSG_ERR_REG_MSG_QUE_PDA_ACC_FSM_INTEGRITY_ERR |
1511             VXGE_HAL_MSG_ERR_REG_MP_MXP_PMON_FSM_INTEGRITY_ERR |
1512             VXGE_HAL_MSG_ERR_REG_UP_UXP_PMON_FSM_INTEGRITY_ERR |
1513             VXGE_HAL_MSG_ERR_REG_MSG_XFMDQRY_FSM_INTEGRITY_ERR |
1514             VXGE_HAL_MSG_ERR_REG_MSG_FRMQRY_FSM_INTEGRITY_ERR |
1515             VXGE_HAL_MSG_ERR_REG_MSG_QUE_UMQ_WRITE_FSM_INTEGRITY_ERR |
1516             VXGE_HAL_MSG_ERR_REG_MSG_QUE_UMQ_BWR_PF_FSM_INTEGRITY_ERR |
1517             VXGE_HAL_MSG_ERR_REG_MSG_QUE_REG_RESP_FIFO_ERR |
1518             VXGE_HAL_MSG_ERR_REG_UP_UXP_DTAG_DB_ERR |
1519             VXGE_HAL_MSG_ERR_REG_UP_UXP_ITAG_DB_ERR |
1520             VXGE_HAL_MSG_ERR_REG_MP_MXP_DTAG_DB_ERR |
1521             VXGE_HAL_MSG_ERR_REG_MP_MXP_ITAG_DB_ERR |
1522             VXGE_HAL_MSG_ERR_REG_UP_UXP_TRACE_DB_ERR |
1523             VXGE_HAL_MSG_ERR_REG_MP_MXP_TRACE_DB_ERR |
1524             VXGE_HAL_MSG_ERR_REG_MSG_QUE_CMG2MSG_DB_ERR |
1525             VXGE_HAL_MSG_ERR_REG_MSG_QUE_TXPE2MSG_DB_ERR |
1526             VXGE_HAL_MSG_ERR_REG_MSG_QUE_RXPE2MSG_DB_ERR |
1527             VXGE_HAL_MSG_ERR_REG_MSG_QUE_RPE2MSG_DB_ERR |
1528             VXGE_HAL_MSG_ERR_REG_MSG_QUE_REG_READ_FIFO_ERR |
1529             VXGE_HAL_MSG_ERR_REG_MSG_QUE_MXP2UXP_FIFO_ERR |
1530             VXGE_HAL_MSG_ERR_REG_MSG_QUE_KDFC_SIF_FIFO_ERR |
1531             VXGE_HAL_MSG_ERR_REG_MSG_QUE_CXP2SWIF_FIFO_ERR |
1532             VXGE_HAL_MSG_ERR_REG_MSG_QUE_UMQ_DB_ERR |
1533             VXGE_HAL_MSG_ERR_REG_MSG_QUE_BWR_PF_DB_ERR |
1534             VXGE_HAL_MSG_ERR_REG_MSG_QUE_BWR_SIF_FIFO_ERR |
1535             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMQ_ECC_DB_ERR |
1536             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMA_READ_FIFO_ERR |
1537             VXGE_HAL_MSG_ERR_REG_MSG_QUE_DMA_RESP_ECC_DB_ERR |
1538             VXGE_HAL_MSG_ERR_REG_MSG_QUE_UXP2MXP_FIFO_ERR;
1539
1540         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->msg_err_mask);
1541
1542         val64 =
1543             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_CMG2MSG_DISPATCH_FSM_INTEGRITY_ERR |
1544             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_DMQ_DISPATCH_FSM_INTEGRITY_ERR |
1545             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_SWIF_DISPATCH_FSM_INTEGRITY_ERR |
1546             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_PIC_WRITE_FSM_INTEGRITY_ERR |
1547             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_SWIFREG_FSM_INTEGRITY_ERR |
1548             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_TIM_WRITE_FSM_INTEGRITY_ERR |
1549             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_UMQ_TA_FSM_INTEGRITY_ERR |
1550             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_TXPE_TA_FSM_INTEGRITY_ERR |
1551             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_RXPE_TA_FSM_INTEGRITY_ERR |
1552             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_SWIF_TA_FSM_INTEGRITY_ERR |
1553             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_DMA_TA_FSM_INTEGRITY_ERR |
1554             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_CP_TA_FSM_INTEGRITY_ERR |
1555             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA16_FSM_INTEGRITY_ERR |
1556             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA15_FSM_INTEGRITY_ERR |
1557             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA14_FSM_INTEGRITY_ERR |
1558             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA13_FSM_INTEGRITY_ERR |
1559             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA12_FSM_INTEGRITY_ERR |
1560             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA11_FSM_INTEGRITY_ERR |
1561             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA10_FSM_INTEGRITY_ERR |
1562             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA9_FSM_INTEGRITY_ERR |
1563             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA8_FSM_INTEGRITY_ERR |
1564             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA7_FSM_INTEGRITY_ERR |
1565             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA6_FSM_INTEGRITY_ERR |
1566             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA5_FSM_INTEGRITY_ERR |
1567             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA4_FSM_INTEGRITY_ERR |
1568             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA3_FSM_INTEGRITY_ERR |
1569             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA2_FSM_INTEGRITY_ERR |
1570             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA1_FSM_INTEGRITY_ERR |
1571             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_LONGTERMUMQ_TA0_FSM_INTEGRITY_ERR |
1572             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_FBMC_OWN_FSM_INTEGRITY_ERR |
1573             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_TXPE2MSG_DISPATCH_FSM_INTEGRITY_ERR |
1574             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_RXPE2MSG_DISPATCH_FSM_INTEGRITY_ERR |
1575             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_RPE2MSG_DISPATCH_FSM_INTEGRITY_ERR |
1576             VXGE_HAL_MSG_ERR2_REG_MP_MP_PIFT_IF_CREDIT_CNT_ERR |
1577             VXGE_HAL_MSG_ERR2_REG_UP_UP_PIFT_IF_CREDIT_CNT_ERR |
1578             VXGE_HAL_MSG_ERR2_REG_MSG_QUE_UMQ2PIC_CMD_FIFO_ERR |
1579             VXGE_HAL_MSG_ERR2_REG_TIM_TIM2MSG_CMD_FIFO_ERR;
1580
1581         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->msg_err2_mask);
1582
1583         val64 = VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR0 |
1584             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR1 |
1585             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR2 |
1586             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR3 |
1587             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR4 |
1588             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR5 |
1589             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR6 |
1590             VXGE_HAL_MSG_ERR3_REG_UP_UXP_DCACHE_DB_ERR7 |
1591             VXGE_HAL_MSG_ERR3_REG_UP_UXP_ICACHE_DB_ERR0 |
1592             VXGE_HAL_MSG_ERR3_REG_UP_UXP_ICACHE_DB_ERR1 |
1593             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR0 |
1594             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR1 |
1595             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR2 |
1596             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR3 |
1597             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR4 |
1598             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR5 |
1599             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR6 |
1600             VXGE_HAL_MSG_ERR3_REG_MP_MXP_DCACHE_DB_ERR7 |
1601             VXGE_HAL_MSG_ERR3_REG_MP_MXP_ICACHE_DB_ERR0 |
1602             VXGE_HAL_MSG_ERR3_REG_MP_MXP_ICACHE_DB_ERR1;
1603
1604         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->msg_err3_mask);
1605
1606         val64 = VXGE_HAL_MSG_INT_STATUS_TIM_ERR_TIM_INT |
1607             VXGE_HAL_MSG_INT_STATUS_MSG_EXC_MSG_XT_EXC_INT |
1608             VXGE_HAL_MSG_INT_STATUS_MSG_ERR3_MSG_ERR3_INT |
1609             VXGE_HAL_MSG_INT_STATUS_MSG_ERR2_MSG_ERR2_INT |
1610             VXGE_HAL_MSG_INT_STATUS_MSG_ERR_MSG_ERR_INT;
1611
1612         VXGE_HAL_MRPCIM_ERROR_REG_UNMASK(val64, &mrpcim_reg->msg_int_mask);
1613
1614         val64 = VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_PIC_INT |
1615             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_PCI_INT |
1616             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_RTDMA_INT |
1617             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_WRDMA_INT |
1618             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_G3CMCT_INT |
1619             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_GCMG1_INT |
1620             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_GCMG2_INT |
1621             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_G3CMIFL_INT |
1622             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_G3CMIFU_INT |
1623             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_PCMG1_INT |
1624             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_PCMG2_INT |
1625             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_PCMG3_INT |
1626             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_XMAC_INT |
1627             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_RXMAC_INT |
1628             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_TMAC_INT |
1629             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_G3FBIF_INT |
1630             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_FBMC_INT |
1631             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_G3FBCT_INT |
1632             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_TPA_INT |
1633             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_DRBELL_INT |
1634             VXGE_HAL_MRPCIM_GENERAL_INT_STATUS_MSG_INT;
1635
1636         vxge_hal_pio_mem_write32_upper(
1637             hldev->header.pdev,
1638             hldev->header.regh0,
1639             (u32) bVAL32(~val64, 0),
1640             &mrpcim_reg->mrpcim_general_int_mask);
1641
1642         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1643             __FILE__, __func__, __LINE__, status);
1644
1645         return (status);
1646 }
1647
1648 /*
1649  * vxge_hal_mrpcim_intr_disable - Disable the interrupts on mrpcim.
1650  * @devh: HAL device handle.
1651  *
1652  * Disable mrpcim interrupts
1653  *
1654  * See also: vxge_hal_mrpcim_intr_enable().
1655  */
1656 vxge_hal_status_e
1657 vxge_hal_mrpcim_intr_disable(vxge_hal_device_h devh)
1658 {
1659         u32 i;
1660         vxge_hal_status_e status = VXGE_HAL_OK;
1661         vxge_hal_mrpcim_reg_t *mrpcim_reg;
1662         __hal_device_t *hldev = (__hal_device_t *) devh;
1663
1664         vxge_assert(devh);
1665
1666         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
1667             __FILE__, __func__, __LINE__);
1668
1669         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
1670             (ptr_t) devh);
1671
1672         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
1673                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1674                     __FILE__, __func__, __LINE__,
1675                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1676
1677                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1678
1679         }
1680
1681         mrpcim_reg = hldev->mrpcim_reg;
1682
1683         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->ini_errors_mask);
1684
1685         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->dma_errors_mask);
1686
1687         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->tgt_errors_mask);
1688
1689         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->config_errors_mask);
1690
1691         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->crdt_errors_mask);
1692
1693         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->mrpcim_general_errors_mask);
1694
1695         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pll_errors_mask);
1696
1697         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->mrpcim_ppif_int_mask);
1698
1699         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->dbecc_err_mask);
1700
1701         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->general_err_mask);
1702
1703         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pcipif_int_mask);
1704
1705         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pda_alarm_mask);
1706
1707         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pcc_error_mask);
1708
1709         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->lso_error_mask);
1710
1711         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->sm_error_mask);
1712
1713         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rtdma_int_mask);
1714
1715         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rc_alarm_mask);
1716
1717         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxdrm_sm_err_mask);
1718
1719         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxdcm_sm_err_mask);
1720
1721         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxdwm_sm_err_mask);
1722
1723         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rda_err_mask);
1724
1725         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rda_ecc_db_mask);
1726
1727         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rqa_err_mask);
1728
1729         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->frf_alarm_mask);
1730
1731         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rocrc_alarm_mask);
1732
1733         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->wde0_alarm_mask);
1734
1735         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->wde1_alarm_mask);
1736
1737         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->wde2_alarm_mask);
1738
1739         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->wde3_alarm_mask);
1740
1741         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->wrdma_int_mask);
1742
1743         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3cmct_err_mask);
1744
1745         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3cmct_int_mask);
1746
1747         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gsscc_err_mask);
1748
1749         for (i = 0; i < 3; i++) {
1750
1751                 VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gssc_err0_mask[i]);
1752
1753                 VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gssc_err1_mask[i]);
1754
1755         }
1756
1757         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gcmg1_int_mask);
1758
1759         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gxtmc_err_mask);
1760
1761         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gcp_err_mask);
1762
1763         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->cmc_err_mask);
1764
1765         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->gcmg2_int_mask);
1766
1767         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_cml_err_mask);
1768
1769         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_cml_int_mask);
1770
1771         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_cmu_err_mask);
1772
1773         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_cmu_int_mask);
1774
1775         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->psscc_err_mask);
1776
1777         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pcmg1_int_mask);
1778
1779         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pxtmc_err_mask);
1780
1781         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->cp_exc_mask);
1782
1783         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->cp_err_mask);
1784
1785         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pcmg2_int_mask);
1786
1787         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->dam_err_mask);
1788
1789         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->pcmg3_int_mask);
1790
1791         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->xmac_gen_err_mask);
1792
1793         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->xgxs_gen_err_mask);
1794
1795         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->asic_ntwk_err_mask);
1796
1797         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->xgmac_int_mask);
1798
1799         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxmac_ecc_err_mask);
1800
1801         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxmac_various_err_mask);
1802
1803         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->rxmac_int_mask);
1804
1805         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->txmac_gen_err_mask);
1806
1807         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->txmac_ecc_err_mask);
1808
1809         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->tmac_int_mask);
1810
1811         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_fb_err_mask);
1812
1813         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3ifcmd_fb_int_mask);
1814
1815         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->mc_err_mask);
1816
1817         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->grocrc_alarm_mask);
1818
1819         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->fau_ecc_err_mask);
1820
1821         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->mc_int_mask);
1822
1823         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3fbct_err_mask);
1824
1825         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->g3fbct_int_mask);
1826
1827         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->orp_err_mask);
1828
1829         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->ptm_alarm_mask);
1830
1831         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->tpa_error_mask);
1832
1833         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->tpa_int_mask);
1834
1835         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->kdfc_err_mask);
1836
1837         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->doorbell_int_mask);
1838
1839         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->tim_err_mask);
1840
1841         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->msg_exc_mask);
1842
1843         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->msg_err_mask);
1844
1845         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->msg_err2_mask);
1846
1847         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->msg_err3_mask);
1848
1849         VXGE_HAL_MRPCIM_ERROR_REG_MASK(&mrpcim_reg->msg_int_mask);
1850
1851         vxge_hal_pio_mem_write32_upper(
1852             hldev->header.pdev,
1853             hldev->header.regh0,
1854             (u32) VXGE_HAL_INTR_MASK_ALL,
1855             &mrpcim_reg->mrpcim_general_int_mask);
1856
1857         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1858             __FILE__, __func__, __LINE__, status);
1859
1860         return (status);
1861 }
1862
1863 /*
1864  * vxge_hal_mrpcim_reset - Reset the entire device.
1865  * @devh: HAL device handle.
1866  *
1867  * Soft-reset the device, reset the device stats except reset_cnt.
1868  *
1869  *
1870  * Returns:  VXGE_HAL_OK - success.
1871  * VXGE_HAL_ERR_DEVICE_NOT_INITIALIZED - Device is not initialized.
1872  * VXGE_HAL_ERR_RESET_FAILED - Reset failed.
1873  *
1874  * See also: vxge_hal_status_e {}.
1875  */
1876 vxge_hal_status_e
1877 vxge_hal_mrpcim_reset(vxge_hal_device_h devh)
1878 {
1879         u64 val64;
1880         __hal_device_t *hldev = (__hal_device_t *) devh;
1881
1882         vxge_assert(devh);
1883
1884         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
1885             __FILE__, __func__, __LINE__);
1886
1887         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
1888             (ptr_t) devh);
1889
1890         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
1891                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1892                     __FILE__, __func__, __LINE__,
1893                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1894
1895                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1896
1897         }
1898
1899         if (!hldev->header.is_initialized)
1900                 return (VXGE_HAL_ERR_DEVICE_NOT_INITIALIZED);
1901
1902         if (hldev->device_resetting == 1) {
1903                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1904                     __FILE__, __func__, __LINE__,
1905                     VXGE_HAL_ERR_RESET_IN_PROGRESS);
1906
1907                 return (VXGE_HAL_ERR_RESET_IN_PROGRESS);
1908         }
1909
1910         (void) __hal_ifmsg_wmsg_post(hldev,
1911             hldev->first_vp_id,
1912             VXGE_HAL_RTS_ACCESS_STEER_MSG_DEST_BROADCAST,
1913             VXGE_HAL_RTS_ACCESS_STEER_DATA0_MSG_TYPE_DEVICE_RESET_BEGIN,
1914             0);
1915
1916         vxge_os_mdelay(100);
1917
1918         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
1919             hldev->header.regh0,
1920             &hldev->mrpcim_reg->sw_reset_cfg1);
1921
1922         val64 |= VXGE_HAL_SW_RESET_CFG1_TYPE;
1923
1924         vxge_os_pio_mem_write64(hldev->header.pdev,
1925             hldev->header.regh0,
1926             val64,
1927             &hldev->mrpcim_reg->sw_reset_cfg1);
1928
1929         vxge_os_pio_mem_write64(hldev->header.pdev,
1930             hldev->header.regh0,
1931             VXGE_HAL_PF_SW_RESET_PF_SW_RESET(
1932             VXGE_HAL_PF_SW_RESET_COMMAND),
1933             &hldev->mrpcim_reg->bf_sw_reset);
1934
1935         hldev->stats.sw_dev_info_stats.soft_reset_cnt++;
1936
1937         hldev->device_resetting = 1;
1938
1939         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1940             __FILE__, __func__, __LINE__, VXGE_HAL_PENDING);
1941
1942         return (VXGE_HAL_PENDING);
1943 }
1944
1945 /*
1946  * vxge_hal_mrpcim_reset_poll - Poll the device for reset complete.
1947  * @devh: HAL device handle.
1948  *
1949  * Soft-reset the device, reset the device stats except reset_cnt.
1950  *
1951  * After reset is done, will try to re-initialize HW.
1952  *
1953  * Returns:  VXGE_HAL_OK - success.
1954  * VXGE_HAL_ERR_DEVICE_NOT_INITIALIZED - Device is not initialized.
1955  * VXGE_HAL_ERR_RESET_FAILED - Reset failed.
1956  *
1957  * See also: vxge_hal_status_e {}.
1958  */
1959 vxge_hal_status_e
1960 vxge_hal_mrpcim_reset_poll(vxge_hal_device_h devh)
1961 {
1962         u64 val64;
1963         vxge_hal_status_e status = VXGE_HAL_OK;
1964         __hal_device_t *hldev = (__hal_device_t *) devh;
1965
1966         vxge_assert(devh);
1967
1968         vxge_hal_trace_log_mrpcim("==> %s:%s:%d", __FILE__, __func__, __LINE__);
1969
1970         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
1971             (ptr_t) devh);
1972
1973         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
1974                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1975                     __FILE__, __func__, __LINE__,
1976                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1977
1978                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
1979
1980         }
1981
1982         if (!hldev->header.is_initialized) {
1983                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1984                     __FILE__, __func__, __LINE__,
1985                     VXGE_HAL_ERR_DEVICE_NOT_INITIALIZED);
1986                 return (VXGE_HAL_ERR_DEVICE_NOT_INITIALIZED);
1987         }
1988
1989         if ((status = __hal_device_reg_addr_get(hldev)) != VXGE_HAL_OK) {
1990                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
1991                     __FILE__, __func__, __LINE__, status);
1992                 hldev->device_resetting = 0;
1993                 return (status);
1994         }
1995
1996         __hal_device_id_get(hldev);
1997
1998         __hal_device_host_info_get(hldev);
1999
2000         hldev->hw_is_initialized = 0;
2001
2002         hldev->device_resetting = 0;
2003
2004         vxge_os_memzero(hldev->mrpcim->mrpcim_stats,
2005             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
2006
2007         vxge_os_memzero(&hldev->mrpcim->mrpcim_stats_sav,
2008             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
2009
2010         status = __hal_mrpcim_mac_configure(hldev);
2011
2012         if (status != VXGE_HAL_OK) {
2013                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
2014                     __FILE__, __func__, __LINE__, status);
2015                 return (status);
2016         }
2017
2018         status = __hal_mrpcim_lag_configure(hldev);
2019
2020         if (status != VXGE_HAL_OK) {
2021                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
2022                     __FILE__, __func__, __LINE__, status);
2023                 return (status);
2024         }
2025
2026         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2027             hldev->header.regh0,
2028             &hldev->mrpcim_reg->mdio_gen_cfg_port[0]);
2029
2030         hldev->mrpcim->mdio_phy_prtad0 =
2031             (u32) VXGE_HAL_MDIO_GEN_CFG_PORT_GET_MDIO_PHY_PRTAD(val64);
2032
2033         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2034             hldev->header.regh0,
2035             &hldev->mrpcim_reg->mdio_gen_cfg_port[1]);
2036
2037         hldev->mrpcim->mdio_phy_prtad1 =
2038             (u32) VXGE_HAL_MDIO_GEN_CFG_PORT_GET_MDIO_PHY_PRTAD(val64);
2039
2040         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2041             hldev->header.regh0,
2042             &hldev->mrpcim_reg->xgxs_static_cfg_port[0]);
2043
2044         hldev->mrpcim->mdio_dte_prtad0 =
2045             (u32) VXGE_HAL_XGXS_STATIC_CFG_PORT_GET_MDIO_DTE_PRTAD(val64);
2046
2047         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2048             hldev->header.regh0,
2049             &hldev->mrpcim_reg->xgxs_static_cfg_port[1]);
2050
2051         hldev->mrpcim->mdio_dte_prtad1 =
2052             (u32) VXGE_HAL_XGXS_STATIC_CFG_PORT_GET_MDIO_DTE_PRTAD(val64);
2053
2054         vxge_os_pio_mem_write64(hldev->header.pdev,
2055             hldev->header.regh0,
2056             hldev->mrpcim->mrpcim_stats_block->dma_addr,
2057             &hldev->mrpcim_reg->mrpcim_stats_start_host_addr);
2058
2059         vxge_os_pio_mem_write64(hldev->header.pdev,
2060             hldev->header.regh0,
2061             hldev->vpath_assignments,
2062             &hldev->mrpcim_reg->rxmac_authorize_all_addr);
2063
2064         vxge_os_pio_mem_write64(hldev->header.pdev,
2065             hldev->header.regh0,
2066             hldev->vpath_assignments,
2067             &hldev->mrpcim_reg->rxmac_authorize_all_vid);
2068
2069         (void) __hal_ifmsg_wmsg_post(hldev,
2070             hldev->first_vp_id,
2071             VXGE_HAL_RTS_ACCESS_STEER_MSG_DEST_BROADCAST,
2072             VXGE_HAL_RTS_ACCESS_STEER_DATA0_MSG_TYPE_DEVICE_RESET_END,
2073             0);
2074
2075         (void) vxge_hal_device_reset_poll(devh);
2076
2077         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
2078             __FILE__, __func__, __LINE__, status);
2079
2080         return (status);
2081 }
2082
2083 /*
2084  * __hal_mrpcim_xpak_counter_check -  check the Xpak error count and log the msg
2085  * @hldev: pointer to __hal_device_t structure
2086  * @port: Port number
2087  * @type:  xpak stats error type
2088  * @value: xpak stats value
2089  *
2090  * It is used to log the error message based on the xpak stats value
2091  * Return value:
2092  * None
2093  */
2094 void
2095 __hal_mrpcim_xpak_counter_check(__hal_device_t *hldev,
2096     u32 port, u32 type, u32 value)
2097 {
2098         vxge_assert(hldev != NULL);
2099
2100         vxge_hal_trace_log_stats("==> %s:%s:%d",
2101             __FILE__, __func__, __LINE__);
2102
2103         vxge_hal_trace_log_stats(
2104             "hldev = 0x"VXGE_OS_STXFMT", port = %d, type = %d, value = %d",
2105             (ptr_t) hldev, port, type, value);
2106
2107         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2108
2109                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
2110                     __FILE__, __func__,
2111                     __LINE__, VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2112                 return;
2113
2114         }
2115
2116         /*
2117          * If the value is high for three consecutive cylce,
2118          * log a error message
2119          */
2120         if (value == 3) {
2121                 switch (type) {
2122                 case VXGE_HAL_XPAK_ALARM_EXCESS_TEMP:
2123                         hldev->mrpcim->xpak_stats[port].excess_temp = 0;
2124
2125                         /*
2126                          * Notify the ULD on Excess Xpak temperature alarm msg
2127                          */
2128                         if (g_vxge_hal_driver->uld_callbacks.xpak_alarm_log) {
2129                                 g_vxge_hal_driver->uld_callbacks.xpak_alarm_log(
2130                                     hldev->header.upper_layer_data,
2131                                     port,
2132                                     VXGE_HAL_XPAK_ALARM_EXCESS_TEMP);
2133                         }
2134                         break;
2135                 case VXGE_HAL_XPAK_ALARM_EXCESS_BIAS_CURRENT:
2136                         hldev->mrpcim->xpak_stats[port].excess_bias_current = 0;
2137
2138                         /*
2139                          * Notify the ULD on Excess  xpak bias current alarm msg
2140                          */
2141                         if (g_vxge_hal_driver->uld_callbacks.xpak_alarm_log) {
2142                                 g_vxge_hal_driver->uld_callbacks.xpak_alarm_log(
2143                                     hldev->header.upper_layer_data,
2144                                     port,
2145                                     VXGE_HAL_XPAK_ALARM_EXCESS_BIAS_CURRENT);
2146                         }
2147                         break;
2148                 case VXGE_HAL_XPAK_ALARM_EXCESS_LASER_OUTPUT:
2149                         hldev->mrpcim->xpak_stats[port].excess_laser_output = 0;
2150
2151                         /*
2152                          * Notify the ULD on Excess Xpak Laser o/p power
2153                          * alarm msg
2154                          */
2155                         if (g_vxge_hal_driver->uld_callbacks.xpak_alarm_log) {
2156                                 g_vxge_hal_driver->uld_callbacks.xpak_alarm_log(
2157                                     hldev->header.upper_layer_data,
2158                                     port,
2159                                     VXGE_HAL_XPAK_ALARM_EXCESS_LASER_OUTPUT);
2160                         }
2161                         break;
2162                 default:
2163                         vxge_hal_info_log_stats("%s",
2164                             "Incorrect XPAK Alarm type");
2165                 }
2166         }
2167
2168         vxge_hal_trace_log_stats("<== %s:%s:%d Result = 0",
2169             __FILE__, __func__, __LINE__);
2170 }
2171
2172 /*
2173  * vxge_hal_mrpcim_xpak_stats_poll -  Poll and update the Xpak error count.
2174  * @devh: HAL device handle
2175  * @port: Port number
2176  *
2177  * It is used to update the xpak stats value
2178  */
2179 vxge_hal_status_e
2180 vxge_hal_mrpcim_xpak_stats_poll(
2181     vxge_hal_device_h devh, u32 port)
2182 {
2183         u16 val;
2184         vxge_hal_status_e status = VXGE_HAL_OK;
2185         __hal_device_t *hldev = (__hal_device_t *) devh;
2186
2187         vxge_assert(hldev != NULL);
2188
2189         vxge_hal_trace_log_stats("==> %s:%s:%d",
2190             __FILE__, __func__, __LINE__);
2191
2192         vxge_hal_trace_log_stats("hldev = 0x"VXGE_OS_STXFMT", port = %d",
2193             (ptr_t) hldev, port);
2194
2195         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2196
2197                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
2198                     __FILE__, __func__, __LINE__,
2199                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2200                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2201
2202         }
2203
2204         /* Loading the DOM register to MDIO register */
2205
2206         val = 0;
2207
2208         status = __hal_mrpcim_mdio_access(devh, port,
2209             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_WRITE,
2210             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD_PMA_PMD,
2211             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_CMD_STAT,
2212             &val);
2213
2214         if (status != VXGE_HAL_OK) {
2215                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
2216                     __FILE__, __func__, __LINE__, status);
2217                 return (status);
2218         }
2219
2220         status = __hal_mrpcim_mdio_access(devh, port,
2221             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_READ,
2222             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD_PMA_PMD,
2223             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_CMD_STAT,
2224             &val);
2225
2226         if (status != VXGE_HAL_OK) {
2227                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
2228                     __FILE__, __func__, __LINE__, status);
2229                 return (status);
2230         }
2231
2232         /*
2233          * Reading the Alarm flags
2234          */
2235         status = __hal_mrpcim_mdio_access(devh, port,
2236             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_READ,
2237             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD_PMA_PMD,
2238             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG,
2239             &val);
2240
2241         if (status != VXGE_HAL_OK) {
2242                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
2243                     __FILE__, __func__, __LINE__, status);
2244                 return (status);
2245         }
2246
2247         if (val &
2248             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_TEMP_HIGH) {
2249                 hldev->mrpcim->xpak_stats[port].alarm_transceiver_temp_high++;
2250                 hldev->mrpcim->xpak_stats[port].excess_temp++;
2251                 __hal_mrpcim_xpak_counter_check(hldev, port,
2252                     VXGE_HAL_XPAK_ALARM_EXCESS_TEMP,
2253                     hldev->mrpcim->xpak_stats[port].excess_temp);
2254         } else {
2255                 hldev->mrpcim->xpak_stats[port].excess_temp = 0;
2256         }
2257
2258         if (val &
2259             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_TEMP_LOW) {
2260                 hldev->mrpcim->xpak_stats[port].alarm_transceiver_temp_low++;
2261         }
2262
2263         if (val &
2264             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_CUR_HIGH) {
2265                 hldev->mrpcim->xpak_stats[port].alarm_laser_bias_current_high++;
2266                 hldev->mrpcim->xpak_stats[port].excess_bias_current++;
2267                 __hal_mrpcim_xpak_counter_check(hldev, port,
2268                     VXGE_HAL_XPAK_ALARM_EXCESS_BIAS_CURRENT,
2269                     hldev->mrpcim->xpak_stats[port].excess_bias_current);
2270         } else {
2271                 hldev->mrpcim->xpak_stats[port].excess_bias_current = 0;
2272         }
2273
2274         if (val &
2275             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_CUR_LOW) {
2276                 hldev->mrpcim->xpak_stats[port].alarm_laser_bias_current_low++;
2277         }
2278
2279         if (val &
2280             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_PWR_HIGH) {
2281                 hldev->mrpcim->xpak_stats[port].alarm_laser_output_power_high++;
2282                 hldev->mrpcim->xpak_stats[port].excess_laser_output++;
2283                 __hal_mrpcim_xpak_counter_check(hldev, port,
2284                     VXGE_HAL_XPAK_ALARM_EXCESS_LASER_OUTPUT,
2285                     hldev->mrpcim->xpak_stats[port].excess_laser_output);
2286         } else {
2287                 hldev->mrpcim->xpak_stats[port].excess_laser_output = 0;
2288         }
2289
2290         if (val &
2291             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_ALARM_FLAG_PWR_LOW) {
2292                 hldev->mrpcim->xpak_stats[port].alarm_laser_output_power_low++;
2293         }
2294
2295         /*
2296          * Reading the warning flags
2297          */
2298         status = __hal_mrpcim_mdio_access(devh, port,
2299             VXGE_HAL_MDIO_MGR_ACCESS_PORT_OP_TYPE_ADDR_READ,
2300             VXGE_HAL_MDIO_MGR_ACCESS_PORT_DEVAD_PMA_PMD,
2301             VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG,
2302             &val);
2303
2304         if (status != VXGE_HAL_OK) {
2305                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
2306                     __FILE__, __func__, __LINE__, status);
2307                 return (status);
2308         }
2309
2310         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_TEMP_HIGH)
2311                 hldev->mrpcim->xpak_stats[port].warn_transceiver_temp_high++;
2312         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_TEMP_LOW)
2313                 hldev->mrpcim->xpak_stats[port].warn_transceiver_temp_low++;
2314         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_CUR_HIGH)
2315                 hldev->mrpcim->xpak_stats[port].warn_laser_bias_current_high++;
2316         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_CUR_LOW)
2317                 hldev->mrpcim->xpak_stats[port].warn_laser_bias_current_low++;
2318         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_PWR_HIGH)
2319                 hldev->mrpcim->xpak_stats[port].warn_laser_output_power_high++;
2320         if (val & VXGE_HAL_MDIO_MGR_ACCESS_PORT_ADDR_DOM_TX_WARN_FLAG_PWR_LOW)
2321                 hldev->mrpcim->xpak_stats[port].warn_laser_output_power_low++;
2322
2323         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2324             __FILE__, __func__, __LINE__, status);
2325         return (status);
2326 }
2327
2328 /*
2329  * vxge_hal_mrpcim_stats_enable - Enable mrpcim statistics.
2330  * @devh: HAL Device.
2331  *
2332  * Enable the DMA mrpcim statistics for the device. The function is to be called
2333  * to re-enable the adapter to update stats into the host memory
2334  *
2335  * See also: vxge_hal_mrpcim_stats_disable()
2336  */
2337 vxge_hal_status_e
2338 vxge_hal_mrpcim_stats_enable(vxge_hal_device_h devh)
2339 {
2340         u64 val64;
2341         vxge_hal_status_e status = VXGE_HAL_OK;
2342         __hal_device_t *hldev = (__hal_device_t *) devh;
2343
2344         vxge_assert(devh != NULL);
2345
2346         vxge_hal_trace_log_stats("==> %s:%s:%d",
2347             __FILE__, __func__, __LINE__);
2348
2349         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT,
2350             (ptr_t) devh);
2351
2352         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2353
2354                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
2355                     __FILE__, __func__, __LINE__,
2356                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2357                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2358
2359         }
2360
2361         vxge_os_memcpy(&hldev->mrpcim->mrpcim_stats_sav,
2362             hldev->mrpcim->mrpcim_stats,
2363             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
2364
2365         if (hldev->header.config.stats_read_method ==
2366             VXGE_HAL_STATS_READ_METHOD_DMA) {
2367
2368                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2369                     hldev->header.regh0,
2370                     &hldev->mrpcim_reg->mrpcim_general_cfg2);
2371
2372                 val64 |= VXGE_HAL_MRPCIM_GENERAL_CFG2_MRPCIM_STATS_ENABLE;
2373
2374                 vxge_os_pio_mem_write64(hldev->header.pdev,
2375                     hldev->header.regh0,
2376                     val64,
2377                     &hldev->mrpcim_reg->mrpcim_general_cfg2);
2378
2379                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2380                     hldev->header.regh0,
2381                     &hldev->common_reg->stats_cfg0);
2382
2383                 val64 |= VXGE_HAL_STATS_CFG0_STATS_ENABLE(
2384                     (1 << (16 - hldev->first_vp_id)));
2385
2386                 vxge_hal_pio_mem_write32_upper(hldev->header.pdev,
2387                     hldev->header.regh0,
2388                     (u32) bVAL32(val64, 0),
2389                     &hldev->common_reg->stats_cfg0);
2390         } else {
2391                 status = __hal_mrpcim_stats_get(
2392                     hldev,
2393                     hldev->mrpcim->mrpcim_stats);
2394         }
2395
2396         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2397             __FILE__, __func__, __LINE__, status);
2398         return (status);
2399 }
2400
2401 /*
2402  * vxge_hal_mrpcim_stats_disable - Disable mrpcim statistics.
2403  * @devh: HAL Device.
2404  *
2405  * Enable the DMA mrpcim statistics for the device. The function is to be called
2406  * to disable the adapter to update stats into the host memory. This function
2407  * is not needed to be called, normally.
2408  *
2409  * See also: vxge_hal_mrpcim_stats_enable()
2410  */
2411 vxge_hal_status_e
2412 vxge_hal_mrpcim_stats_disable(vxge_hal_device_h devh)
2413 {
2414         u64 val64;
2415         vxge_hal_status_e status = VXGE_HAL_OK;
2416         __hal_device_t *hldev = (__hal_device_t *) devh;
2417
2418         vxge_assert(devh != NULL);
2419
2420         vxge_hal_trace_log_stats("==> %s:%s:%d",
2421             __FILE__, __func__, __LINE__);
2422
2423         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT,
2424             (ptr_t) devh);
2425
2426         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2427
2428                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
2429                     __FILE__, __func__, __LINE__,
2430                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2431                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2432
2433         }
2434
2435         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2436             hldev->header.regh0,
2437             &hldev->mrpcim_reg->mrpcim_general_cfg2);
2438
2439         val64 &= ~VXGE_HAL_MRPCIM_GENERAL_CFG2_MRPCIM_STATS_ENABLE;
2440
2441         vxge_os_pio_mem_write64(hldev->header.pdev,
2442             hldev->header.regh0,
2443             val64,
2444             &hldev->mrpcim_reg->mrpcim_general_cfg2);
2445
2446         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2447             __FILE__, __func__, __LINE__, status);
2448         return (status);
2449 }
2450
2451 /*
2452  * vxge_hal_mrpcim_stats_get - Get the device mrpcim statistics.
2453  * @devh: HAL Device.
2454  * @stats: mrpcim stats
2455  *
2456  * Returns the device mrpcim stats for the device.
2457  *
2458  * See also: vxge_hal_device_stats_get()
2459  */
2460 vxge_hal_status_e
2461 vxge_hal_mrpcim_stats_get(
2462     vxge_hal_device_h devh,
2463     vxge_hal_mrpcim_stats_hw_info_t *stats)
2464 {
2465         u64 val64;
2466         vxge_hal_status_e status = VXGE_HAL_OK;
2467         __hal_device_t *hldev = (__hal_device_t *) devh;
2468
2469         vxge_assert((hldev != NULL) && (stats != NULL));
2470
2471         vxge_hal_trace_log_stats("==> %s:%s:%d",
2472             __FILE__, __func__, __LINE__);
2473
2474         vxge_hal_trace_log_stats(
2475             "devh = 0x"VXGE_OS_STXFMT", stats = 0x"VXGE_OS_STXFMT,
2476             (ptr_t) devh, (ptr_t) stats);
2477
2478         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2479
2480                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
2481                     __FILE__, __func__, __LINE__,
2482                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2483                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2484
2485         }
2486
2487         if (hldev->header.config.stats_read_method ==
2488             VXGE_HAL_STATS_READ_METHOD_DMA) {
2489
2490                 status = vxge_hal_device_register_poll(hldev->header.pdev,
2491                     hldev->header.regh0,
2492                     &hldev->common_reg->stats_cfg0,
2493                     0,
2494                     VXGE_HAL_STATS_CFG0_STATS_ENABLE(
2495                     (1 << (16 - hldev->first_vp_id))),
2496                     hldev->header.config.device_poll_millis);
2497
2498                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
2499                     hldev->header.regh0,
2500                     &hldev->mrpcim_reg->mrpcim_general_cfg2);
2501
2502                 val64 &= ~VXGE_HAL_MRPCIM_GENERAL_CFG2_MRPCIM_STATS_ENABLE;
2503
2504                 vxge_os_pio_mem_write64(hldev->header.pdev,
2505                     hldev->header.regh0,
2506                     val64,
2507                     &hldev->mrpcim_reg->mrpcim_general_cfg2);
2508         }
2509
2510         if (status == VXGE_HAL_OK) {
2511                 vxge_os_memcpy(stats,
2512                     hldev->mrpcim->mrpcim_stats,
2513                     sizeof(vxge_hal_mrpcim_stats_hw_info_t));
2514         }
2515
2516         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2517             __FILE__, __func__, __LINE__, status);
2518         return (status);
2519 }
2520
2521 /*
2522  * vxge_hal_mrpcim_stats_access - Access the statistics from the given location
2523  *                        and offset and perform an operation
2524  * @devh: HAL Device handle.
2525  * @operation: Operation to be performed
2526  * @location: Location (one of vpath id, aggregate or port)
2527  * @offset: Offset with in the location
2528  * @stat: Pointer to a buffer to return the value
2529  *
2530  * Get the statistics from the given location and offset.
2531  *
2532  */
2533 vxge_hal_status_e
2534 vxge_hal_mrpcim_stats_access(
2535     vxge_hal_device_h devh,
2536     u32 operation,
2537     u32 location,
2538     u32 offset,
2539     u64 *stat)
2540 {
2541         u64 val64;
2542         vxge_hal_status_e status = VXGE_HAL_OK;
2543         __hal_device_t *hldev = (__hal_device_t *) devh;
2544
2545         vxge_assert((devh != NULL) && (stat != NULL));
2546
2547         vxge_hal_trace_log_stats("==> %s:%s:%d",
2548             __FILE__, __func__, __LINE__);
2549
2550         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT", operation = %d, "
2551             "location = %d, offset = %d, stat = 0x"VXGE_OS_STXFMT,
2552             (ptr_t) devh, operation, location, offset, (ptr_t) stat);
2553
2554         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2555                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2556                     __FILE__, __func__, __LINE__,
2557                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2558
2559                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2560         }
2561
2562         val64 = VXGE_HAL_XMAC_STATS_SYS_CMD_OP(operation) |
2563             VXGE_HAL_XMAC_STATS_SYS_CMD_STROBE |
2564             VXGE_HAL_XMAC_STATS_SYS_CMD_LOC_SEL(location) |
2565             VXGE_HAL_XMAC_STATS_SYS_CMD_OFFSET_SEL(offset);
2566
2567
2568         vxge_hal_pio_mem_write32_lower(hldev->header.pdev,
2569             hldev->header.regh0,
2570             (u32) bVAL32(val64, 32),
2571             &hldev->mrpcim_reg->xmac_stats_sys_cmd);
2572
2573         vxge_os_wmb();
2574
2575         vxge_hal_pio_mem_write32_upper(hldev->header.pdev,
2576             hldev->header.regh0,
2577             (u32) bVAL32(val64, 0),
2578             &hldev->mrpcim_reg->xmac_stats_sys_cmd);
2579
2580         vxge_os_wmb();
2581
2582         status = vxge_hal_device_register_poll(hldev->header.pdev,
2583             hldev->header.regh0,
2584             &hldev->mrpcim_reg->xmac_stats_sys_cmd,
2585             0,
2586             VXGE_HAL_XMAC_STATS_SYS_CMD_STROBE,
2587             hldev->header.config.device_poll_millis);
2588
2589         if ((status == VXGE_HAL_OK) && (operation == VXGE_HAL_STATS_OP_READ)) {
2590
2591                 *stat = vxge_os_pio_mem_read64(hldev->header.pdev,
2592                     hldev->header.regh0,
2593                     &hldev->mrpcim_reg->xmac_stats_sys_data);
2594
2595         } else {
2596                 *stat = 0;
2597         }
2598
2599         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2600             __FILE__, __func__, __LINE__, status);
2601         return (VXGE_HAL_OK);
2602 }
2603
2604 /*
2605  * vxge_hal_mrpcim_xmac_aggr_stats_get - Get the Statistics on aggregate port
2606  * @devh: HAL device handle.
2607  * @port: Number of the port (0 or 1)
2608  * @aggr_stats: Buffer to return Statistics on aggregate port.
2609  *
2610  * Get the Statistics on aggregate port
2611  *
2612  */
2613 vxge_hal_status_e
2614 vxge_hal_mrpcim_xmac_aggr_stats_get(vxge_hal_device_h devh,
2615     u32 port,
2616     vxge_hal_xmac_aggr_stats_t *aggr_stats)
2617 {
2618         u64 val64;
2619         vxge_hal_status_e status = VXGE_HAL_OK;
2620         __hal_device_t *hldev = (__hal_device_t *) devh;
2621
2622         vxge_assert((devh != NULL) && (aggr_stats != NULL));
2623
2624         vxge_hal_trace_log_stats("==> %s:%s:%d",
2625             __FILE__, __func__, __LINE__);
2626
2627         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT", port = %d, "
2628             "aggr_stats = 0x"VXGE_OS_STXFMT,
2629             (ptr_t) devh, port, (ptr_t) aggr_stats);
2630
2631         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2632                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2633                     __FILE__, __func__, __LINE__,
2634                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2635
2636                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2637         }
2638
2639         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2640             VXGE_HAL_STATS_AGGRn_TX_FRMS_OFFSET(port));
2641
2642         aggr_stats->tx_frms =
2643             VXGE_HAL_STATS_GET_AGGRn_TX_FRMS(val64);
2644
2645         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2646             VXGE_HAL_STATS_AGGRn_TX_DATA_OCTETS_OFFSET(port));
2647
2648         aggr_stats->tx_data_octets =
2649             VXGE_HAL_STATS_GET_AGGRn_TX_DATA_OCTETS(val64);
2650
2651         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2652             VXGE_HAL_STATS_AGGRn_TX_MCAST_FRMS_OFFSET(port));
2653
2654         aggr_stats->tx_mcast_frms =
2655             VXGE_HAL_STATS_GET_AGGRn_TX_MCAST_FRMS(val64);
2656
2657         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2658             VXGE_HAL_STATS_AGGRn_TX_BCAST_FRMS_OFFSET(port));
2659
2660         aggr_stats->tx_bcast_frms =
2661             VXGE_HAL_STATS_GET_AGGRn_TX_BCAST_FRMS(val64);
2662
2663         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2664             VXGE_HAL_STATS_AGGRn_TX_DISCARDED_FRMS_OFFSET(port));
2665
2666         aggr_stats->tx_discarded_frms =
2667             VXGE_HAL_STATS_GET_AGGRn_TX_DISCARDED_FRMS(val64);
2668
2669         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2670             VXGE_HAL_STATS_AGGRn_TX_ERRORED_FRMS_OFFSET(port));
2671
2672         aggr_stats->tx_errored_frms =
2673             VXGE_HAL_STATS_GET_AGGRn_TX_ERRORED_FRMS(val64);
2674
2675         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2676             VXGE_HAL_STATS_AGGRn_RX_FRMS_OFFSET(port));
2677
2678         aggr_stats->rx_frms =
2679             VXGE_HAL_STATS_GET_AGGRn_RX_FRMS(val64);
2680
2681         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2682             VXGE_HAL_STATS_AGGRn_RX_DATA_OCTETS_OFFSET(port));
2683
2684         aggr_stats->rx_data_octets =
2685             VXGE_HAL_STATS_GET_AGGRn_RX_DATA_OCTETS(val64);
2686
2687         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2688             VXGE_HAL_STATS_AGGRn_RX_MCAST_FRMS_OFFSET(port));
2689
2690         aggr_stats->rx_mcast_frms =
2691             VXGE_HAL_STATS_GET_AGGRn_RX_MCAST_FRMS(val64);
2692
2693         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2694             VXGE_HAL_STATS_AGGRn_RX_BCAST_FRMS_OFFSET(port));
2695
2696         aggr_stats->rx_bcast_frms =
2697             VXGE_HAL_STATS_GET_AGGRn_RX_BCAST_FRMS(val64);
2698
2699         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2700             VXGE_HAL_STATS_AGGRn_RX_DISCARDED_FRMS_OFFSET(port));
2701
2702         aggr_stats->rx_discarded_frms =
2703             VXGE_HAL_STATS_GET_AGGRn_RX_DISCARDED_FRMS(val64);
2704
2705         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2706             VXGE_HAL_STATS_AGGRn_RX_ERRORED_FRMS_OFFSET(port));
2707
2708         aggr_stats->rx_errored_frms =
2709             VXGE_HAL_STATS_GET_AGGRn_RX_ERRORED_FRMS(val64);
2710
2711         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
2712             VXGE_HAL_STATS_AGGRn_RX_U_SLOW_PROTO_FRMS_OFFSET(port));
2713
2714         aggr_stats->rx_unknown_slow_proto_frms =
2715             VXGE_HAL_STATS_GET_AGGRn_RX_U_SLOW_PROTO_FRMS(val64);
2716
2717         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2718             __FILE__, __func__, __LINE__, status);
2719         return (VXGE_HAL_OK);
2720 }
2721
2722
2723 /*
2724  * vxge_hal_mrpcim_xmac_port_stats_get - Get the Statistics on a port
2725  * @devh: HAL device handle.
2726  * @port: Number of the port (wire 0, wire 1 or LAG)
2727  * @port_stats: Buffer to return Statistics on a port.
2728  *
2729  * Get the Statistics on port
2730  *
2731  */
2732 vxge_hal_status_e
2733 vxge_hal_mrpcim_xmac_port_stats_get(vxge_hal_device_h devh,
2734     u32 port,
2735     vxge_hal_xmac_port_stats_t *port_stats)
2736 {
2737         u64 val64;
2738         vxge_hal_status_e status = VXGE_HAL_OK;
2739         __hal_device_t *hldev = (__hal_device_t *) devh;
2740
2741         vxge_assert((devh != NULL) && (port_stats != NULL));
2742
2743         vxge_hal_trace_log_stats("==> %s:%s:%d",
2744             __FILE__, __func__, __LINE__);
2745
2746         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT", port = %d, "
2747             "port_stats = 0x"VXGE_OS_STXFMT,
2748             (ptr_t) devh, port, (ptr_t) port_stats);
2749
2750         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
2751                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
2752                     __FILE__, __func__, __LINE__,
2753                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2754
2755                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
2756         }
2757
2758         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2759             VXGE_HAL_STATS_PORTn_TX_TTL_FRMS_OFFSET(port));
2760
2761         port_stats->tx_ttl_frms =
2762             VXGE_HAL_STATS_GET_PORTn_TX_TTL_FRMS(val64);
2763
2764         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2765             VXGE_HAL_STATS_PORTn_TX_TTL_FRMS_OFFSET(port));
2766
2767         port_stats->tx_ttl_octets =
2768             VXGE_HAL_STATS_GET_PORTn_TX_TTL_OCTETS(val64);
2769
2770         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2771             VXGE_HAL_STATS_PORTn_TX_DATA_OCTETS_OFFSET(port));
2772
2773         port_stats->tx_data_octets =
2774             VXGE_HAL_STATS_GET_PORTn_TX_DATA_OCTETS(val64);
2775
2776         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2777             VXGE_HAL_STATS_PORTn_TX_MCAST_FRMS_OFFSET(port));
2778
2779         port_stats->tx_mcast_frms =
2780             VXGE_HAL_STATS_GET_PORTn_TX_MCAST_FRMS(val64);
2781
2782         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2783             VXGE_HAL_STATS_PORTn_TX_BCAST_FRMS_OFFSET(port));
2784
2785         port_stats->tx_bcast_frms =
2786             VXGE_HAL_STATS_GET_PORTn_TX_BCAST_FRMS(val64);
2787
2788         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2789             VXGE_HAL_STATS_PORTn_TX_UCAST_FRMS_OFFSET(port));
2790
2791         port_stats->tx_ucast_frms =
2792             VXGE_HAL_STATS_GET_PORTn_TX_UCAST_FRMS(val64);
2793
2794         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2795             VXGE_HAL_STATS_PORTn_TX_TAGGED_FRMS_OFFSET(port));
2796
2797         port_stats->tx_tagged_frms =
2798             VXGE_HAL_STATS_GET_PORTn_TX_TAGGED_FRMS(val64);
2799
2800         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2801             VXGE_HAL_STATS_PORTn_TX_VLD_IP_OFFSET(port));
2802
2803         port_stats->tx_vld_ip =
2804             VXGE_HAL_STATS_GET_PORTn_TX_VLD_IP(val64);
2805
2806         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2807             VXGE_HAL_STATS_PORTn_TX_VLD_IP_OCTETS_OFFSET(port));
2808
2809         port_stats->tx_vld_ip_octets =
2810             VXGE_HAL_STATS_GET_PORTn_TX_VLD_IP_OCTETS(val64);
2811
2812         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2813             VXGE_HAL_STATS_PORTn_TX_ICMP_OFFSET(port));
2814
2815         port_stats->tx_icmp =
2816             VXGE_HAL_STATS_GET_PORTn_TX_ICMP(val64);
2817
2818         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2819             VXGE_HAL_STATS_PORTn_TX_TCP_OFFSET(port));
2820
2821         port_stats->tx_tcp =
2822             VXGE_HAL_STATS_GET_PORTn_TX_TCP(val64);
2823
2824         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2825             VXGE_HAL_STATS_PORTn_TX_RST_TCP_OFFSET(port));
2826
2827         port_stats->tx_rst_tcp =
2828             VXGE_HAL_STATS_GET_PORTn_TX_RST_TCP(val64);
2829
2830         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2831             VXGE_HAL_STATS_PORTn_TX_UDP_OFFSET(port));
2832
2833         port_stats->tx_udp =
2834             VXGE_HAL_STATS_GET_PORTn_TX_UDP(val64);
2835
2836         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2837             VXGE_HAL_STATS_PORTn_TX_UNKNOWN_PROTOCOL_OFFSET(port));
2838
2839         port_stats->tx_unknown_protocol =
2840             (u32) VXGE_HAL_STATS_GET_PORTn_TX_UNKNOWN_PROTOCOL(val64);
2841
2842         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2843             VXGE_HAL_STATS_PORTn_TX_PARSE_ERROR_OFFSET(port));
2844
2845         port_stats->tx_parse_error =
2846             (u32) VXGE_HAL_STATS_GET_PORTn_TX_PARSE_ERROR(val64);
2847
2848         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2849             VXGE_HAL_STATS_PORTn_TX_PAUSE_CTRL_FRMS_OFFSET(port));
2850
2851         port_stats->tx_pause_ctrl_frms =
2852             VXGE_HAL_STATS_GET_PORTn_TX_PAUSE_CTRL_FRMS(val64);
2853
2854         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2855             VXGE_HAL_STATS_PORTn_TX_LACPDU_FRMS_OFFSET(port));
2856
2857         port_stats->tx_lacpdu_frms =
2858             (u32) VXGE_HAL_STATS_GET_PORTn_TX_LACPDU_FRMS(val64);
2859
2860         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2861             VXGE_HAL_STATS_PORTn_TX_MRKR_PDU_FRMS_OFFSET(port));
2862
2863         port_stats->tx_marker_pdu_frms =
2864             (u32) VXGE_HAL_STATS_GET_PORTn_TX_MRKR_PDU_FRMS(val64);
2865
2866         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2867             VXGE_HAL_STATS_PORTn_TX_MRKR_RESP_PDU_FRMS_OFFSET(port));
2868
2869         port_stats->tx_marker_resp_pdu_frms =
2870             (u32) VXGE_HAL_STATS_GET_PORTn_TX_MRKR_RESP_PDU_FRMS(val64);
2871
2872         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2873             VXGE_HAL_STATS_PORTn_TX_DROP_IP_OFFSET(port));
2874
2875         port_stats->tx_drop_ip =
2876             (u32) VXGE_HAL_STATS_GET_PORTn_TX_DROP_IP(val64);
2877
2878         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2879             VXGE_HAL_STATS_PORTn_TX_XGMII_CHAR1_MATCH_OFFSET(port));
2880
2881         port_stats->tx_xgmii_char1_match =
2882             (u32) VXGE_HAL_STATS_GET_PORTn_TX_XGMII_CHAR1_MATCH(val64);
2883
2884         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2885             VXGE_HAL_STATS_PORTn_TX_XGMII_CHAR2_MATCH_OFFSET(port));
2886
2887         port_stats->tx_xgmii_char2_match =
2888             (u32) VXGE_HAL_STATS_GET_PORTn_TX_XGMII_CHAR2_MATCH(val64);
2889
2890         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2891             VXGE_HAL_STATS_PORTn_TX_XGMII_COL1_MATCH_OFFSET(port));
2892
2893         port_stats->tx_xgmii_column1_match =
2894             (u32) VXGE_HAL_STATS_GET_PORTn_TX_XGMII_COL1_MATCH(val64);
2895
2896         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2897             VXGE_HAL_STATS_PORTn_TX_XGMII_COL2_MATCH_OFFSET(port));
2898
2899         port_stats->tx_xgmii_column2_match =
2900             (u32) VXGE_HAL_STATS_GET_PORTn_TX_XGMII_COL2_MATCH(val64);
2901
2902         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2903             VXGE_HAL_STATS_PORTn_TX_DROP_FRMS_OFFSET(port));
2904
2905         port_stats->tx_drop_frms =
2906             (u16) VXGE_HAL_STATS_GET_PORTn_TX_DROP_FRMS(val64);
2907
2908         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2909             VXGE_HAL_STATS_PORTn_TX_ANY_ERR_FRMS_OFFSET(port));
2910
2911         port_stats->tx_any_err_frms =
2912             (u16) VXGE_HAL_STATS_GET_PORTn_TX_ANY_ERR_FRMS(val64);
2913
2914         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2915             VXGE_HAL_STATS_PORTn_RX_TTL_FRMS_OFFSET(port));
2916
2917         port_stats->rx_ttl_frms =
2918             VXGE_HAL_STATS_GET_PORTn_RX_TTL_FRMS(val64);
2919
2920         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2921             VXGE_HAL_STATS_PORTn_RX_VLD_FRMS_OFFSET(port));
2922
2923         port_stats->rx_vld_frms =
2924             VXGE_HAL_STATS_GET_PORTn_RX_VLD_FRMS(val64);
2925
2926         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2927             VXGE_HAL_STATS_PORTn_RX_OFFLOAD_FRMS_OFFSET(port));
2928
2929         port_stats->rx_offload_frms =
2930             VXGE_HAL_STATS_GET_PORTn_RX_OFFLOAD_FRMS(val64);
2931
2932         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2933             VXGE_HAL_STATS_PORTn_RX_TTL_OCTETS_OFFSET(port));
2934
2935         port_stats->rx_ttl_octets =
2936             VXGE_HAL_STATS_GET_PORTn_RX_TTL_OCTETS(val64);
2937
2938         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2939             VXGE_HAL_STATS_PORTn_RX_DATA_OCTETS_OFFSET(port));
2940
2941         port_stats->rx_data_octets =
2942             VXGE_HAL_STATS_GET_PORTn_RX_DATA_OCTETS(val64);
2943
2944         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2945             VXGE_HAL_STATS_PORTn_RX_OFFLOAD_OCTETS_OFFSET(port));
2946
2947         port_stats->rx_offload_octets =
2948             VXGE_HAL_STATS_GET_PORTn_RX_OFFLOAD_OCTETS(val64);
2949
2950         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2951             VXGE_HAL_STATS_PORTn_RX_VLD_MCAST_FRMS_OFFSET(port));
2952
2953         port_stats->rx_vld_mcast_frms =
2954             VXGE_HAL_STATS_GET_PORTn_RX_VLD_MCAST_FRMS(val64);
2955
2956         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2957             VXGE_HAL_STATS_PORTn_RX_VLD_BCAST_FRMS_OFFSET(port));
2958
2959         port_stats->rx_vld_bcast_frms =
2960             VXGE_HAL_STATS_GET_PORTn_RX_VLD_BCAST_FRMS(val64);
2961
2962         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2963             VXGE_HAL_STATS_PORTn_RX_ACC_UCAST_FRMS_OFFSET(port));
2964
2965         port_stats->rx_accepted_ucast_frms =
2966             VXGE_HAL_STATS_GET_PORTn_RX_ACC_UCAST_FRMS(val64);
2967
2968         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2969             VXGE_HAL_STATS_PORTn_RX_ACC_NUCAST_FRMS_OFFSET(port));
2970
2971         port_stats->rx_accepted_nucast_frms =
2972             VXGE_HAL_STATS_GET_PORTn_RX_ACC_NUCAST_FRMS(val64);
2973
2974         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2975             VXGE_HAL_STATS_PORTn_RX_TAGGED_FRMS_OFFSET(port));
2976
2977         port_stats->rx_tagged_frms =
2978             VXGE_HAL_STATS_GET_PORTn_RX_TAGGED_FRMS(val64);
2979
2980         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2981             VXGE_HAL_STATS_PORTn_RX_LONG_FRMS_OFFSET(port));
2982
2983         port_stats->rx_long_frms =
2984             VXGE_HAL_STATS_GET_PORTn_RX_LONG_FRMS(val64);
2985
2986         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2987             VXGE_HAL_STATS_PORTn_RX_USIZED_FRMS_OFFSET(port));
2988
2989         port_stats->rx_usized_frms =
2990             VXGE_HAL_STATS_GET_PORTn_RX_USIZED_FRMS(val64);
2991
2992         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2993             VXGE_HAL_STATS_PORTn_RX_OSIZED_FRMS_OFFSET(port));
2994
2995         port_stats->rx_osized_frms =
2996             VXGE_HAL_STATS_GET_PORTn_RX_OSIZED_FRMS(val64);
2997
2998         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
2999             VXGE_HAL_STATS_PORTn_RX_FRAG_FRMS_OFFSET(port));
3000
3001         port_stats->rx_frag_frms =
3002             VXGE_HAL_STATS_GET_PORTn_RX_FRAG_FRMS(val64);
3003
3004         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3005             VXGE_HAL_STATS_PORTn_RX_JABBER_FRMS_OFFSET(port));
3006
3007         port_stats->rx_jabber_frms =
3008             VXGE_HAL_STATS_GET_PORTn_RX_JABBER_FRMS(val64);
3009
3010         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3011             VXGE_HAL_STATS_PORTn_RX_TTL_64_FRMS_OFFSET(port));
3012
3013         port_stats->rx_ttl_64_frms =
3014             VXGE_HAL_STATS_GET_PORTn_RX_TTL_64_FRMS(val64);
3015
3016         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3017             VXGE_HAL_STATS_PORTn_RX_TTL_65_127_FRMS_OFFSET(port));
3018
3019         port_stats->rx_ttl_65_127_frms =
3020             VXGE_HAL_STATS_GET_PORTn_RX_TTL_65_127_FRMS(val64);
3021
3022         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3023             VXGE_HAL_STATS_PORTn_RX_TTL_128_255_FRMS_OFFSET(port));
3024
3025         port_stats->rx_ttl_128_255_frms =
3026             VXGE_HAL_STATS_GET_PORTn_RX_TTL_128_255_FRMS(val64);
3027
3028         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3029             VXGE_HAL_STATS_PORTn_RX_TTL_256_511_FRMS_OFFSET(port));
3030
3031         port_stats->rx_ttl_256_511_frms =
3032             VXGE_HAL_STATS_GET_PORTn_RX_TTL_256_511_FRMS(val64);
3033
3034         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3035             VXGE_HAL_STATS_PORTn_RX_TTL_512_1023_FRMS_OFFSET(port));
3036
3037         port_stats->rx_ttl_512_1023_frms =
3038             VXGE_HAL_STATS_GET_PORTn_RX_TTL_512_1023_FRMS(val64);
3039
3040         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3041             VXGE_HAL_STATS_PORTn_RX_TTL_1024_1518_FRMS_OFFSET(port));
3042
3043         port_stats->rx_ttl_1024_1518_frms =
3044             VXGE_HAL_STATS_GET_PORTn_RX_TTL_1024_1518_FRMS(val64);
3045
3046         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3047             VXGE_HAL_STATS_PORTn_RX_TTL_1519_4095_FRMS_OFFSET(port));
3048
3049         port_stats->rx_ttl_1519_4095_frms =
3050             VXGE_HAL_STATS_GET_PORTn_RX_TTL_1519_4095_FRMS(val64);
3051
3052         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3053             VXGE_HAL_STATS_PORTn_RX_TTL_4096_81915_FRMS_OFFSET(port));
3054
3055         port_stats->rx_ttl_4096_8191_frms =
3056             VXGE_HAL_STATS_GET_PORTn_RX_TTL_4096_8191_FRMS(val64);
3057
3058         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3059             VXGE_HAL_STATS_PORTn_RX_TTL_8192_MAX_FRMS_OFFSET(port));
3060
3061         port_stats->rx_ttl_8192_max_frms =
3062             VXGE_HAL_STATS_GET_PORTn_RX_TTL_8192_MAX_FRMS(val64);
3063
3064         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3065             VXGE_HAL_STATS_PORTn_RX_TTL_GT_MAX_FRMS_OFFSET(port));
3066
3067         port_stats->rx_ttl_gt_max_frms =
3068             VXGE_HAL_STATS_GET_PORTn_RX_TTL_GT_MAX_FRMS(val64);
3069
3070         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3071             VXGE_HAL_STATS_PORTn_RX_IP_OFFSET(port));
3072
3073         port_stats->rx_ip = VXGE_HAL_STATS_GET_PORTn_RX_IP(val64);
3074
3075         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3076             VXGE_HAL_STATS_PORTn_RX_ACC_IP_OFFSET(port));
3077
3078         port_stats->rx_accepted_ip =
3079             VXGE_HAL_STATS_GET_PORTn_RX_ACC_IP(val64);
3080
3081         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3082             VXGE_HAL_STATS_PORTn_RX_IP_OCTETS_OFFSET(port));
3083
3084         port_stats->rx_ip_octets =
3085             VXGE_HAL_STATS_GET_PORTn_RX_IP_OCTETS(val64);
3086
3087         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3088             VXGE_HAL_STATS_PORTn_RX_ERR_IP_OFFSET(port));
3089
3090         port_stats->rx_err_ip =
3091             VXGE_HAL_STATS_GET_PORTn_RX_ERR_IP(val64);
3092
3093         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3094             VXGE_HAL_STATS_PORTn_RX_ICMP_OFFSET(port));
3095
3096         port_stats->rx_icmp = VXGE_HAL_STATS_GET_PORTn_RX_ICMP(val64);
3097
3098         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3099             VXGE_HAL_STATS_PORTn_RX_TCP_OFFSET(port));
3100
3101         port_stats->rx_tcp = VXGE_HAL_STATS_GET_PORTn_RX_TCP(val64);
3102
3103         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3104             VXGE_HAL_STATS_PORTn_RX_UDP_OFFSET(port));
3105
3106         port_stats->rx_udp = VXGE_HAL_STATS_GET_PORTn_RX_UDP(val64);
3107
3108         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3109             VXGE_HAL_STATS_PORTn_RX_ERR_TCP_OFFSET(port));
3110
3111         port_stats->rx_err_tcp = VXGE_HAL_STATS_GET_PORTn_RX_ERR_TCP(val64);
3112
3113         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3114             VXGE_HAL_STATS_PORTn_RX_PAUSE_CNT_OFFSET(port));
3115
3116         port_stats->rx_pause_count =
3117             VXGE_HAL_STATS_GET_PORTn_RX_PAUSE_CNT(val64);
3118
3119         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3120             VXGE_HAL_STATS_PORTn_RX_PAUSE_CTRL_FRMS_OFFSET(port));
3121
3122         port_stats->rx_pause_ctrl_frms =
3123             VXGE_HAL_STATS_GET_PORTn_RX_PAUSE_CTRL_FRMS(val64);
3124
3125         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3126             VXGE_HAL_STATS_PORTn_RX_UNSUP_CTRL_FRMS_OFFSET(port));
3127
3128         port_stats->rx_unsup_ctrl_frms =
3129             VXGE_HAL_STATS_GET_PORTn_RX_UNSUP_CTRL_FRMS(val64);
3130
3131         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3132             VXGE_HAL_STATS_PORTn_RX_FCS_ERR_FRMS_OFFSET(port));
3133
3134         port_stats->rx_fcs_err_frms =
3135             VXGE_HAL_STATS_GET_PORTn_RX_FCS_ERR_FRMS(val64);
3136
3137         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3138             VXGE_HAL_STATS_PORTn_RX_IN_RNG_LEN_ERR_FRMS_OFFSET(port));
3139
3140         port_stats->rx_in_rng_len_err_frms =
3141             VXGE_HAL_STATS_GET_PORTn_RX_IN_RNG_LEN_ERR_FRMS(val64);
3142
3143         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3144             VXGE_HAL_STATS_PORTn_RX_OUT_RNG_LEN_ERR_FRMS_OFFSET(port));
3145
3146         port_stats->rx_out_rng_len_err_frms =
3147             VXGE_HAL_STATS_GET_PORTn_RX_OUT_RNG_LEN_ERR_FRMS(val64);
3148
3149         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3150             VXGE_HAL_STATS_PORTn_RX_DROP_FRMS_OFFSET(port));
3151
3152         port_stats->rx_drop_frms =
3153             VXGE_HAL_STATS_GET_PORTn_RX_DROP_FRMS(val64);
3154
3155         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3156             VXGE_HAL_STATS_PORTn_RX_DISCARDED_FRMS_OFFSET(port));
3157
3158         port_stats->rx_discarded_frms =
3159             VXGE_HAL_STATS_GET_PORTn_RX_DISCARDED_FRMS(val64);
3160
3161         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3162             VXGE_HAL_STATS_PORTn_RX_DROP_IP_OFFSET(port));
3163
3164         port_stats->rx_drop_ip =
3165             VXGE_HAL_STATS_GET_PORTn_RX_DROP_IP(val64);
3166
3167         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3168             VXGE_HAL_STATS_PORTn_RX_DRP_UDP_OFFSET(port));
3169
3170         port_stats->rx_drop_udp =
3171             VXGE_HAL_STATS_GET_PORTn_RX_DRP_UDP(val64);
3172
3173         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3174             VXGE_HAL_STATS_PORTn_RX_LACPDU_FRMS_OFFSET(port));
3175
3176         port_stats->rx_lacpdu_frms =
3177             (u32) VXGE_HAL_STATS_GET_PORTn_RX_LACPDU_FRMS(val64);
3178
3179         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3180             VXGE_HAL_STATS_PORTn_RX_MRKR_PDU_FRMS_OFFSET(port));
3181
3182         port_stats->rx_marker_pdu_frms =
3183             (u32) VXGE_HAL_STATS_GET_PORTn_RX_MRKR_PDU_FRMS(val64);
3184
3185         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3186             VXGE_HAL_STATS_PORTn_RX_MRKR_RESP_PDU_FRMS_OFFSET(port));
3187
3188         port_stats->rx_marker_resp_pdu_frms =
3189             (u32) VXGE_HAL_STATS_GET_PORTn_RX_MRKR_RESP_PDU_FRMS(val64);
3190
3191         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3192             VXGE_HAL_STATS_PORTn_RX_UNKNOWN_PDU_FRMS_OFFSET(port));
3193
3194         port_stats->rx_unknown_pdu_frms =
3195             (u32) VXGE_HAL_STATS_GET_PORTn_RX_UNKNOWN_PDU_FRMS(val64);
3196
3197         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3198             VXGE_HAL_STATS_PORTn_RX_ILLEGAL_PDU_FRMS_OFFSET(port));
3199
3200         port_stats->rx_illegal_pdu_frms =
3201             (u32) VXGE_HAL_STATS_GET_PORTn_RX_ILLEGAL_PDU_FRMS(val64);
3202
3203         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3204             VXGE_HAL_STATS_PORTn_RX_FCS_DISCARD_OFFSET(port));
3205
3206         port_stats->rx_fcs_discard =
3207             (u32) VXGE_HAL_STATS_GET_PORTn_RX_FCS_DISCARD(val64);
3208
3209         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3210             VXGE_HAL_STATS_PORTn_RX_LEN_DISCARD_OFFSET(port));
3211
3212         port_stats->rx_len_discard =
3213             (u32) VXGE_HAL_STATS_GET_PORTn_RX_LEN_DISCARD(val64);
3214
3215         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3216             VXGE_HAL_STATS_PORTn_RX_SWITCH_DISCARD_OFFSET(port));
3217
3218         port_stats->rx_switch_discard =
3219             (u32) VXGE_HAL_STATS_GET_PORTn_RX_SWITCH_DISCARD(val64);
3220
3221         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3222             VXGE_HAL_STATS_PORTn_RX_L2_MGMT_DISCARD_OFFSET(port));
3223
3224         port_stats->rx_l2_mgmt_discard =
3225             (u32) VXGE_HAL_STATS_GET_PORTn_RX_L2_MGMT_DISCARD(val64);
3226
3227         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3228             VXGE_HAL_STATS_PORTn_RX_RPA_DISCARD_OFFSET(port));
3229
3230         port_stats->rx_rpa_discard =
3231             (u32) VXGE_HAL_STATS_GET_PORTn_RX_RPA_DISCARD(val64);
3232
3233         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3234             VXGE_HAL_STATS_PORTn_RX_TRASH_DISCARD_OFFSET(port));
3235
3236         port_stats->rx_trash_discard =
3237             (u32) VXGE_HAL_STATS_GET_PORTn_RX_TRASH_DISCARD(val64);
3238
3239         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3240             VXGE_HAL_STATS_PORTn_RX_RTS_DISCARD_OFFSET(port));
3241
3242         port_stats->rx_rts_discard =
3243             (u32) VXGE_HAL_STATS_GET_PORTn_RX_RTS_DISCARD(val64);
3244
3245         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3246             VXGE_HAL_STATS_PORTn_RX_RED_DISCARD_OFFSET(port));
3247
3248         port_stats->rx_red_discard =
3249             (u32) VXGE_HAL_STATS_GET_PORTn_RX_RED_DISCARD(val64);
3250
3251         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3252             VXGE_HAL_STATS_PORTn_RX_BUFF_FULL_DISCARD_OFFSET(port));
3253
3254         port_stats->rx_buff_full_discard =
3255             (u32) VXGE_HAL_STATS_GET_PORTn_RX_BUFF_FULL_DISCARD(val64);
3256
3257         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3258             VXGE_HAL_STATS_PORTn_RX_XGMII_DATA_ERR_CNT_OFFSET(port));
3259
3260         port_stats->rx_xgmii_data_err_cnt =
3261             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_DATA_ERR_CNT(val64);
3262
3263         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3264             VXGE_HAL_STATS_PORTn_RX_XGMII_CTRL_ERR_CNT_OFFSET(port));
3265
3266         port_stats->rx_xgmii_ctrl_err_cnt =
3267             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_CTRL_ERR_CNT(val64);
3268
3269         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3270             VXGE_HAL_STATS_PORTn_RX_XGMII_ERR_SYM_OFFSET(port));
3271
3272         port_stats->rx_xgmii_err_sym =
3273             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_ERR_SYM(val64);
3274
3275         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3276             VXGE_HAL_STATS_PORTn_RX_XGMII_CHAR1_MATCH_OFFSET(port));
3277
3278         port_stats->rx_xgmii_char1_match =
3279             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_CHAR1_MATCH(val64);
3280
3281         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3282             VXGE_HAL_STATS_PORTn_RX_XGMII_CHAR2_MATCH_OFFSET(port));
3283
3284         port_stats->rx_xgmii_char2_match =
3285             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_CHAR2_MATCH(val64);
3286
3287         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3288             VXGE_HAL_STATS_PORTn_RX_XGMII_COL1_MATCH_OFFSET(port));
3289
3290         port_stats->rx_xgmii_column1_match =
3291             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_COL1_MATCH(val64);
3292
3293         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3294             VXGE_HAL_STATS_PORTn_RX_XGMII_COL2_MATCH_OFFSET(port));
3295
3296         port_stats->rx_xgmii_column2_match =
3297             (u32) VXGE_HAL_STATS_GET_PORTn_RX_XGMII_COL2_MATCH(val64);
3298
3299         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3300             VXGE_HAL_STATS_PORTn_RX_LOCAL_FAULT_OFFSET(port));
3301
3302         port_stats->rx_local_fault =
3303             (u32) VXGE_HAL_STATS_GET_PORTn_RX_LOCAL_FAULT(val64);
3304
3305         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3306             VXGE_HAL_STATS_PORTn_RX_REMOTE_FAULT_OFFSET(port));
3307
3308         port_stats->rx_remote_fault =
3309             (u32) VXGE_HAL_STATS_GET_PORTn_RX_REMOTE_FAULT(val64);
3310
3311         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_PORT,
3312             VXGE_HAL_STATS_PORTn_RX_JETTISON_OFFSET(port));
3313
3314         port_stats->rx_jettison =
3315             (u32) VXGE_HAL_STATS_GET_PORTn_RX_JETTISON(val64);
3316
3317
3318         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3319             __FILE__, __func__, __LINE__, status);
3320         return (VXGE_HAL_OK);
3321 }
3322
3323
3324 /*
3325  * vxge_hal_mrpcim_xmac_stats_get - Get the XMAC Statistics
3326  * @devh: HAL device handle.
3327  * @xmac_stats: Buffer to return XMAC Statistics.
3328  *
3329  * Get the XMAC Statistics
3330  *
3331  */
3332 vxge_hal_status_e
3333 vxge_hal_mrpcim_xmac_stats_get(vxge_hal_device_h devh,
3334     vxge_hal_mrpcim_xmac_stats_t *xmac_stats)
3335 {
3336         u32 i;
3337         __hal_device_t *hldev = (__hal_device_t *) devh;
3338         vxge_hal_status_e status = VXGE_HAL_OK;
3339
3340         vxge_assert((devh != NULL) && (xmac_stats != NULL));
3341
3342         vxge_hal_trace_log_stats("==> %s:%s:%d",
3343             __FILE__, __func__, __LINE__);
3344
3345         vxge_hal_trace_log_stats(
3346             "hldev = 0x"VXGE_OS_STXFMT", mrpcim_stats = 0x"VXGE_OS_STXFMT,
3347             (ptr_t) devh, (ptr_t) xmac_stats);
3348
3349
3350         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
3351                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
3352                     __FILE__, __func__, __LINE__,
3353                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3354
3355                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3356         }
3357
3358         status = vxge_hal_mrpcim_xmac_aggr_stats_get(devh,
3359             0,
3360             &xmac_stats->aggr_stats[0]);
3361
3362         if (status != VXGE_HAL_OK) {
3363                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3364                     __FILE__, __func__, __LINE__, status);
3365                 return (status);
3366         }
3367
3368         status = vxge_hal_mrpcim_xmac_aggr_stats_get(devh,
3369             1,
3370             &xmac_stats->aggr_stats[1]);
3371
3372         if (status != VXGE_HAL_OK) {
3373                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3374                     __FILE__, __func__, __LINE__, status);
3375                 return (status);
3376         }
3377
3378         for (i = 0; i < VXGE_HAL_MAC_MAX_PORTS; i++) {
3379
3380                 status = vxge_hal_mrpcim_xmac_port_stats_get(devh,
3381                     i,
3382                     &xmac_stats->port_stats[i]);
3383
3384                 if (status != VXGE_HAL_OK) {
3385                         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3386                             __FILE__, __func__, __LINE__, status);
3387                         return (status);
3388                 }
3389
3390         }
3391
3392         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3393             __FILE__, __func__, __LINE__, status);
3394         return (status);
3395 }
3396
3397 /*
3398  * _hal_mrpcim_stats_get - Get the mrpcim statistics using PIO
3399  * @hldev: hal device.
3400  * @mrpcim_stats: MRPCIM stats
3401  *
3402  * Returns the mrpcim stats.
3403  *
3404  * See also: vxge_hal_mrpcim_stats_enable(), vxge_hal_mrpcim_stats_disable()
3405  */
3406 vxge_hal_status_e
3407 __hal_mrpcim_stats_get(
3408     __hal_device_t *hldev,
3409     vxge_hal_mrpcim_stats_hw_info_t *mrpcim_stats)
3410 {
3411         u32 i;
3412         u64 val64;
3413         vxge_hal_device_h devh = (vxge_hal_device_h) hldev;
3414         vxge_hal_status_e status = VXGE_HAL_OK;
3415
3416         vxge_assert((hldev != NULL) && (mrpcim_stats != NULL));
3417
3418         vxge_hal_trace_log_stats("==> %s:%s:%d",
3419             __FILE__, __func__, __LINE__);
3420
3421         vxge_hal_trace_log_stats(
3422             "hldev = 0x"VXGE_OS_STXFMT", mrpcim_stats = 0x"VXGE_OS_STXFMT,
3423             (ptr_t) hldev, (ptr_t) mrpcim_stats);
3424
3425         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3426             hldev->header.regh0,
3427             &hldev->mrpcim_reg->mrpcim_debug_stats0);
3428
3429         mrpcim_stats->pic_ini_rd_drop =
3430             (u32) VXGE_HAL_MRPCIM_DEBUG_STATS0_GET_INI_RD_DROP(val64);
3431
3432         mrpcim_stats->pic_ini_wr_drop =
3433             (u32) VXGE_HAL_MRPCIM_DEBUG_STATS0_GET_INI_WR_DROP(val64);
3434
3435         for (i = 0; i < VXGE_HAL_MAX_VIRTUAL_PATHS; i++) {
3436                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3437                     hldev->header.regh0,
3438                     &hldev->mrpcim_reg->mrpcim_debug_stats1_vplane[i]);
3439
3440                 mrpcim_stats->pic_wrcrdtarb_ph_crdt_depleted_vplane[i].
3441                     pic_wrcrdtarb_ph_crdt_depleted = (u32)
3442                     VXGE_HAL_MRPCIM_DEBUG_STATS1_GET_VPLANE_WRCRDTARB_PH_CRDT_DEPLETED(
3443                     val64);
3444
3445                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3446                     hldev->header.regh0,
3447                     &hldev->mrpcim_reg->mrpcim_debug_stats2_vplane[i]);
3448
3449                 mrpcim_stats->pic_wrcrdtarb_pd_crdt_depleted_vplane[i].
3450                     pic_wrcrdtarb_pd_crdt_depleted = (u32)
3451                     VXGE_HAL_MRPCIM_DEBUG_STATS2_GET_VPLANE_WRCRDTARB_PD_CRDT_DEPLETED(
3452                     val64);
3453
3454                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3455                     hldev->header.regh0,
3456                     &hldev->mrpcim_reg->mrpcim_debug_stats3_vplane[i]);
3457
3458                 mrpcim_stats->pic_rdcrdtarb_nph_crdt_depleted_vplane[i].
3459                     pic_rdcrdtarb_nph_crdt_depleted = (u32)
3460                     VXGE_HAL_MRPCIM_DEBUG_STATS3_GET_VPLANE_RDCRDTARB_NPH_CRDT_DEPLETED(
3461                     val64);
3462         }
3463
3464         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3465             hldev->header.regh0,
3466             &hldev->mrpcim_reg->mrpcim_debug_stats4);
3467
3468         mrpcim_stats->pic_ini_rd_vpin_drop =
3469             (u32) VXGE_HAL_MRPCIM_DEBUG_STATS4_GET_INI_RD_VPIN_DROP(val64);
3470
3471         mrpcim_stats->pic_ini_wr_vpin_drop =
3472             (u32) VXGE_HAL_MRPCIM_DEBUG_STATS4_GET_INI_WR_VPIN_DROP(val64);
3473
3474         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3475             hldev->header.regh0,
3476             &hldev->mrpcim_reg->genstats_count01);
3477
3478         mrpcim_stats->pic_genstats_count0 =
3479             (u32) VXGE_HAL_GENSTATS_COUNT01_GET_GENSTATS_COUNT0(val64);
3480
3481         mrpcim_stats->pic_genstats_count1 =
3482             (u32) VXGE_HAL_GENSTATS_COUNT01_GET_GENSTATS_COUNT1(val64);
3483
3484         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3485             hldev->header.regh0,
3486             &hldev->mrpcim_reg->genstats_count23);
3487
3488         mrpcim_stats->pic_genstats_count2 =
3489             (u32) VXGE_HAL_GENSTATS_COUNT23_GET_GENSTATS_COUNT2(val64);
3490
3491         mrpcim_stats->pic_genstats_count3 =
3492             (u32) VXGE_HAL_GENSTATS_COUNT23_GET_GENSTATS_COUNT3(val64);
3493
3494         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3495             hldev->header.regh0,
3496             &hldev->mrpcim_reg->genstats_count4);
3497
3498         mrpcim_stats->pic_genstats_count4 =
3499             (u32) VXGE_HAL_GENSTATS_COUNT4_GET_GENSTATS_COUNT4(val64);
3500
3501         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3502             hldev->header.regh0,
3503             &hldev->mrpcim_reg->genstats_count5);
3504
3505         mrpcim_stats->pic_genstats_count5 =
3506             (u32) VXGE_HAL_GENSTATS_COUNT5_GET_GENSTATS_COUNT5(val64);
3507
3508         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3509             hldev->header.regh0,
3510             &hldev->mrpcim_reg->debug_stats0);
3511
3512         mrpcim_stats->pci_rstdrop_cpl =
3513             (u32) VXGE_HAL_DEBUG_STATS0_GET_RSTDROP_CPL(val64);
3514
3515         mrpcim_stats->pci_rstdrop_msg =
3516             (u32) VXGE_HAL_DEBUG_STATS0_GET_RSTDROP_MSG(val64);
3517
3518         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3519             hldev->header.regh0,
3520             &hldev->mrpcim_reg->debug_stats1);
3521
3522         mrpcim_stats->pci_rstdrop_client0 =
3523             (u32) VXGE_HAL_DEBUG_STATS1_GET_RSTDROP_CLIENT0(val64);
3524
3525         mrpcim_stats->pci_rstdrop_client1 =
3526             (u32) VXGE_HAL_DEBUG_STATS1_GET_RSTDROP_CLIENT1(val64);
3527
3528         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3529             hldev->header.regh0,
3530             &hldev->mrpcim_reg->debug_stats2);
3531
3532         mrpcim_stats->pci_rstdrop_client2 =
3533             (u32) VXGE_HAL_DEBUG_STATS2_GET_RSTDROP_CLIENT2(val64);
3534
3535         for (i = 0; i < VXGE_HAL_MAX_VIRTUAL_PATHS; i++) {
3536                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3537                     hldev->header.regh0,
3538                     &hldev->mrpcim_reg->debug_stats3_vplane);
3539
3540                 mrpcim_stats->pci_depl_h_vplane[i].pci_depl_cplh =
3541                     (u16) VXGE_HAL_DEBUG_STATS3_GET_VPLANE_DEPL_CPLH(val64);
3542
3543                 mrpcim_stats->pci_depl_h_vplane[i].pci_depl_nph =
3544                     (u16) VXGE_HAL_DEBUG_STATS3_GET_VPLANE_DEPL_NPH(val64);
3545
3546                 mrpcim_stats->pci_depl_h_vplane[i].pci_depl_ph =
3547                     (u16) VXGE_HAL_DEBUG_STATS3_GET_VPLANE_DEPL_PH(val64);
3548
3549                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3550                     hldev->header.regh0,
3551                     &hldev->mrpcim_reg->debug_stats4_vplane);
3552
3553                 mrpcim_stats->pci_depl_d_vplane[i].pci_depl_cpld =
3554                     (u16) VXGE_HAL_DEBUG_STATS4_GET_VPLANE_DEPL_CPLD(val64);
3555
3556                 mrpcim_stats->pci_depl_d_vplane[i].pci_depl_npd =
3557                     (u16) VXGE_HAL_DEBUG_STATS4_GET_VPLANE_DEPL_NPD(val64);
3558
3559                 mrpcim_stats->pci_depl_d_vplane[i].pci_depl_pd =
3560                     (u16) VXGE_HAL_DEBUG_STATS4_GET_VPLANE_DEPL_PD(val64);
3561         }
3562
3563         status = vxge_hal_mrpcim_xmac_aggr_stats_get(hldev,
3564             0,
3565             &mrpcim_stats->xgmac_aggr[0]);
3566
3567         if (status != VXGE_HAL_OK) {
3568                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3569                     __FILE__, __func__, __LINE__, status);
3570                 return (status);
3571         }
3572
3573         status = vxge_hal_mrpcim_xmac_aggr_stats_get(hldev,
3574             1,
3575             &mrpcim_stats->xgmac_aggr[1]);
3576
3577         if (status != VXGE_HAL_OK) {
3578                 vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3579                     __FILE__, __func__, __LINE__, status);
3580                 return (status);
3581         }
3582
3583         for (i = 0; i < VXGE_HAL_MAC_MAX_PORTS; i++) {
3584
3585                 status = vxge_hal_mrpcim_xmac_port_stats_get(hldev,
3586                     i,
3587                     &mrpcim_stats->xgmac_port[i]);
3588
3589                 if (status != VXGE_HAL_OK) {
3590                         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3591                             __FILE__, __func__, __LINE__, status);
3592                         return (status);
3593                 }
3594
3595         }
3596
3597         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
3598             VXGE_HAL_STATS_GLOBAL_PROG_EVENT_GNUM0_OFFSET);
3599
3600         mrpcim_stats->xgmac_global_prog_event_gnum0 =
3601             VXGE_HAL_STATS_GET_GLOBAL_PROG_EVENT_GNUM0(val64);
3602
3603         VXGE_HAL_MRPCIM_STATS_PIO_READ(VXGE_HAL_STATS_LOC_AGGR,
3604             VXGE_HAL_STATS_GLOBAL_PROG_EVENT_GNUM1_OFFSET);
3605
3606         mrpcim_stats->xgmac_global_prog_event_gnum1 =
3607             VXGE_HAL_STATS_GET_GLOBAL_PROG_EVENT_GNUM1(val64);
3608
3609         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3610             hldev->header.regh0,
3611             &hldev->mrpcim_reg->orp_lro_events);
3612
3613         mrpcim_stats->xgmac_orp_lro_events =
3614             VXGE_HAL_ORP_LRO_EVENTS_GET_ORP_LRO_EVENTS(val64);
3615
3616         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3617             hldev->header.regh0,
3618             &hldev->mrpcim_reg->orp_bs_events);
3619
3620         mrpcim_stats->xgmac_orp_bs_events =
3621             VXGE_HAL_ORP_BS_EVENTS_GET_ORP_BS_EVENTS(val64);
3622
3623         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3624             hldev->header.regh0,
3625             &hldev->mrpcim_reg->orp_iwarp_events);
3626
3627         mrpcim_stats->xgmac_orp_iwarp_events =
3628             VXGE_HAL_ORP_IWARP_EVENTS_GET_ORP_IWARP_EVENTS(val64);
3629
3630         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3631             hldev->header.regh0,
3632             &hldev->mrpcim_reg->dbg_stats_tpa_tx_path);
3633
3634         mrpcim_stats->xgmac_tx_permitted_frms =
3635             (u32) VXGE_HAL_DBG_STATS_TPA_TX_PATH_GET_TX_PERMITTED_FRMS(val64);
3636
3637         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3638             hldev->header.regh0,
3639             &hldev->mrpcim_reg->dbg_stat_tx_any_frms);
3640
3641         mrpcim_stats->xgmac_port0_tx_any_frms =
3642             (u8) VXGE_HAL_DBG_STAT_TX_ANY_FRMS_GET_PORT0_TX_ANY_FRMS(val64);
3643
3644         mrpcim_stats->xgmac_port1_tx_any_frms =
3645             (u8) VXGE_HAL_DBG_STAT_TX_ANY_FRMS_GET_PORT1_TX_ANY_FRMS(val64);
3646
3647         mrpcim_stats->xgmac_port2_tx_any_frms =
3648             (u8) VXGE_HAL_DBG_STAT_TX_ANY_FRMS_GET_PORT2_TX_ANY_FRMS(val64);
3649
3650         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3651             hldev->header.regh0,
3652             &hldev->mrpcim_reg->dbg_stat_rx_any_frms);
3653
3654         mrpcim_stats->xgmac_port0_rx_any_frms =
3655             (u8) VXGE_HAL_DBG_STAT_RX_ANY_FRMS_GET_PORT0_RX_ANY_FRMS(val64);
3656
3657         mrpcim_stats->xgmac_port1_rx_any_frms =
3658             (u8) VXGE_HAL_DBG_STAT_RX_ANY_FRMS_GET_PORT1_RX_ANY_FRMS(val64);
3659
3660         mrpcim_stats->xgmac_port2_rx_any_frms =
3661             (u8) VXGE_HAL_DBG_STAT_RX_ANY_FRMS_GET_PORT2_RX_ANY_FRMS(val64);
3662
3663         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3664             __FILE__, __func__, __LINE__, status);
3665         return (status);
3666 }
3667
3668 /*
3669  * vxge_hal_mrpcim_stats_clear - Clear the statistics of the device
3670  * @devh: HAL Device handle.
3671  *
3672  * Clear the statistics of the given Device.
3673  *
3674  */
3675 vxge_hal_status_e
3676 vxge_hal_mrpcim_stats_clear(vxge_hal_device_h devh)
3677 {
3678         u32 i;
3679         u64 stat;
3680         vxge_hal_status_e status;
3681         __hal_device_t *hldev = (__hal_device_t *) devh;
3682
3683         vxge_assert(hldev != NULL);
3684
3685         vxge_hal_trace_log_stats("==> %s:%s:%d",
3686             __FILE__, __func__, __LINE__);
3687
3688         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT,
3689             (ptr_t) devh);
3690
3691         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
3692                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
3693                     __FILE__, __func__, __LINE__,
3694                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3695
3696                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3697         }
3698
3699         vxge_os_memcpy(&hldev->mrpcim->mrpcim_stats_sav,
3700             hldev->mrpcim->mrpcim_stats,
3701             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
3702
3703         vxge_os_memzero(hldev->mrpcim->mrpcim_stats,
3704             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
3705
3706         vxge_os_memzero(&hldev->stats.sw_dev_err_stats,
3707             sizeof(vxge_hal_device_stats_sw_err_t));
3708
3709         hldev->stats.sw_dev_info_stats.soft_reset_cnt = 0;
3710
3711         for (i = 0; i < VXGE_HAL_MAX_VIRTUAL_PATHS; i++) {
3712
3713                 if (!(hldev->vpaths_deployed & mBIT(i)))
3714                         continue;
3715
3716                 (void) vxge_hal_vpath_stats_clear(
3717                     VXGE_HAL_VIRTUAL_PATH_HANDLE(&hldev->virtual_paths[i]));
3718
3719         }
3720
3721         status = vxge_hal_mrpcim_stats_access(
3722             devh,
3723             VXGE_HAL_STATS_OP_CLEAR_ALL_STATS,
3724             0,
3725             0,
3726             &stat);
3727
3728         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3729             __FILE__, __func__, __LINE__, status);
3730
3731         return (status);
3732 }
3733
3734 /*
3735  * vxge_hal_mrpcim_udp_rth_enable - Enable UDP/RTH.
3736  * @devh: HAL device handle.
3737  *
3738  * enable udp rth
3739  *
3740  */
3741 vxge_hal_status_e
3742 vxge_hal_mrpcim_udp_rth_enable(
3743     vxge_hal_device_h devh)
3744 {
3745         vxge_hal_status_e status = VXGE_HAL_OK;
3746         __hal_device_t *hldev = (__hal_device_t *) devh;
3747
3748         vxge_assert(devh != NULL);
3749
3750         vxge_hal_trace_log_stats("==> %s:%s:%d",
3751             __FILE__, __func__, __LINE__);
3752
3753         vxge_hal_trace_log_stats("devh = 0x"VXGE_OS_STXFMT,
3754             (ptr_t) devh);
3755
3756         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
3757
3758                 vxge_hal_trace_log_stats("<== %s:%s:%d  Result: %d",
3759                     __FILE__, __func__, __LINE__,
3760                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3761                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
3762
3763         }
3764
3765         status = __hal_vpath_udp_rth_set(hldev,
3766             hldev->first_vp_id,
3767             TRUE);
3768
3769         vxge_hal_trace_log_stats("<== %s:%s:%d Result = %d",
3770             __FILE__, __func__, __LINE__, status);
3771         return (status);
3772 }
3773
3774 /*
3775  * __hal_mrpcim_mac_configure - Initialize mac
3776  * @hldev: hal device.
3777  *
3778  * Initializes mac
3779  *
3780  */
3781 vxge_hal_status_e
3782 __hal_mrpcim_mac_configure(__hal_device_t *hldev)
3783 {
3784         u64 val64;
3785         u32 i, port_id;
3786         vxge_hal_status_e status = VXGE_HAL_OK;
3787         vxge_hal_mac_config_t *mac_config =
3788         &hldev->header.config.mrpcim_config.mac_config;
3789
3790         vxge_assert(hldev != NULL);
3791
3792         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
3793             __FILE__, __func__, __LINE__);
3794
3795         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
3796             (ptr_t) hldev);
3797
3798         for (i = 0; i < VXGE_HAL_MAC_MAX_WIRE_PORTS; i++) {
3799
3800                 port_id = mac_config->wire_port_config[i].port_id;
3801
3802                 if (mac_config->wire_port_config[i].tmac_en ==
3803                     VXGE_HAL_WIRE_PORT_TMAC_DEFAULT) {
3804                         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3805                             hldev->header.regh0,
3806                             &hldev->mrpcim_reg->txmac_cfg0_port[port_id]);
3807
3808                         if (val64 & VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN) {
3809                                 mac_config->wire_port_config[i].tmac_en =
3810                                     VXGE_HAL_WIRE_PORT_TMAC_ENABLE;
3811                         } else {
3812                                 mac_config->wire_port_config[i].tmac_en =
3813                                     VXGE_HAL_WIRE_PORT_TMAC_DISABLE;
3814                         }
3815
3816                 }
3817
3818                 if (mac_config->wire_port_config[i].rmac_en ==
3819                     VXGE_HAL_WIRE_PORT_RMAC_DEFAULT) {
3820                         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3821                             hldev->header.regh0,
3822                             &hldev->mrpcim_reg->rxmac_cfg0_port[port_id]);
3823
3824                         if (val64 & VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN) {
3825                                 mac_config->wire_port_config[i].rmac_en =
3826                                     VXGE_HAL_WIRE_PORT_RMAC_ENABLE;
3827                         } else {
3828                                 mac_config->wire_port_config[i].rmac_en =
3829                                     VXGE_HAL_WIRE_PORT_RMAC_DISABLE;
3830                         }
3831
3832                 }
3833
3834                 if ((!(mac_config->wire_port_config[i].rmac_en)) &&
3835                     (!(mac_config->wire_port_config[i].tmac_en)))
3836                         val64 = 0;
3837                 else
3838                         val64 = VXGE_HAL_XGMAC_MAIN_CFG_PORT_PORT_EN;
3839
3840                 vxge_os_pio_mem_write64(hldev->header.pdev,
3841                     hldev->header.regh0,
3842                     val64,
3843                     &hldev->mrpcim_reg->xgmac_main_cfg_port[port_id]);
3844
3845                 if (!val64)
3846                         continue;
3847
3848                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3849                     hldev->header.regh0,
3850                     &hldev->mrpcim_reg->rxmac_cfg0_port[port_id]);
3851
3852                 if (mac_config->wire_port_config[i].rmac_en)
3853                         val64 |= VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN;
3854                 else
3855                         val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN;
3856
3857                 if (mac_config->wire_port_config[i].rmac_strip_fcs !=
3858                     VXGE_HAL_WIRE_PORT_RMAC_STRIP_FCS_DEFAULT) {
3859                         if (mac_config->wire_port_config[i].rmac_strip_fcs)
3860                                 val64 |= VXGE_HAL_RXMAC_CFG0_PORT_STRIP_FCS;
3861                         else
3862                                 val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_STRIP_FCS;
3863                 }
3864
3865                 if (mac_config->wire_port_config[i].rmac_discard_pfrm !=
3866                     VXGE_HAL_WIRE_PORT_RMAC_DISCARD_PFRM_DEFAULT) {
3867                         if (mac_config->wire_port_config[i].rmac_discard_pfrm)
3868                                 val64 |= VXGE_HAL_RXMAC_CFG0_PORT_DISCARD_PFRM;
3869                         else
3870                                 val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_DISCARD_PFRM;
3871                 }
3872
3873                 if (mac_config->wire_port_config[i].mtu !=
3874                     VXGE_HAL_WIRE_PORT_DEF_INITIAL_MTU) {
3875
3876                         val64 &=
3877                             ~VXGE_HAL_RXMAC_CFG0_PORT_MAX_PYLD_LEN(0x3fff);
3878
3879                         val64 |= VXGE_HAL_RXMAC_CFG0_PORT_MAX_PYLD_LEN(
3880                             mac_config->wire_port_config[i].mtu);
3881
3882                 }
3883
3884                 vxge_os_pio_mem_write64(hldev->header.pdev,
3885                     hldev->header.regh0,
3886                     val64,
3887                     &hldev->mrpcim_reg->rxmac_cfg0_port[port_id]);
3888
3889                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3890                     hldev->header.regh0,
3891                     &hldev->mrpcim_reg->rxmac_cfg2_port[port_id]);
3892
3893                 if (mac_config->wire_port_config[i].rmac_prom_en !=
3894                     VXGE_HAL_WIRE_PORT_RMAC_PROM_EN_DEFAULT) {
3895                         if (mac_config->wire_port_config[i].rmac_prom_en)
3896                                 val64 |= VXGE_HAL_RXMAC_CFG2_PORT_PROM_EN;
3897                         else
3898                                 val64 &= ~VXGE_HAL_RXMAC_CFG2_PORT_PROM_EN;
3899                 }
3900
3901                 vxge_os_pio_mem_write64(hldev->header.pdev,
3902                     hldev->header.regh0,
3903                     val64,
3904                     &hldev->mrpcim_reg->rxmac_cfg2_port[port_id]);
3905
3906                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3907                     hldev->header.regh0,
3908                     &hldev->mrpcim_reg->rxmac_pause_cfg_port[port_id]);
3909
3910                 if (mac_config->wire_port_config[i].rmac_pause_gen_en !=
3911                     VXGE_HAL_WIRE_PORT_RMAC_PAUSE_GEN_EN_DEFAULT) {
3912                         if (mac_config->wire_port_config[i].rmac_pause_gen_en)
3913                                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
3914                         else
3915                                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
3916
3917                 }
3918
3919                 if (mac_config->wire_port_config[i].rmac_pause_rcv_en !=
3920                     VXGE_HAL_WIRE_PORT_RMAC_PAUSE_RCV_EN_DEFAULT) {
3921                         if (mac_config->wire_port_config[i].rmac_pause_rcv_en)
3922                                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
3923                         else
3924                                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
3925
3926                 }
3927
3928                 if (mac_config->wire_port_config[i].rmac_pause_time !=
3929                     VXGE_HAL_WIRE_PORT_DEF_RMAC_HIGH_PTIME) {
3930                         val64 &=
3931                             ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_HIGH_PTIME(0xffff);
3932
3933                         val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_HIGH_PTIME(
3934                             mac_config->wire_port_config[i].rmac_pause_time);
3935
3936                 }
3937
3938                 if (mac_config->wire_port_config[i].rmac_pause_time !=
3939                     VXGE_HAL_WIRE_PORT_RMAC_PAUSE_LIMITER_DEFAULT) {
3940                         if (mac_config->wire_port_config[i].limiter_en)
3941                                 val64 |=
3942                                     VXGE_HAL_RXMAC_PAUSE_CFG_PORT_LIMITER_EN;
3943                         else
3944                                 val64 &=
3945                                     ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_LIMITER_EN;
3946
3947                 }
3948
3949                 if (mac_config->wire_port_config[i].max_limit !=
3950                     VXGE_HAL_WIRE_PORT_DEF_RMAC_MAX_LIMIT) {
3951                         val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_MAX_LIMIT(0xff);
3952
3953                         val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_MAX_LIMIT(
3954                             mac_config->wire_port_config[i].max_limit);
3955
3956                 }
3957
3958                 vxge_os_pio_mem_write64(hldev->header.pdev,
3959                     hldev->header.regh0,
3960                     val64,
3961                     &hldev->mrpcim_reg->rxmac_pause_cfg_port[port_id]);
3962
3963                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3964                     hldev->header.regh0,
3965                     &hldev->mrpcim_reg->rxmac_link_util_port[port_id]);
3966
3967                 if (mac_config->wire_port_config[i].rmac_util_period !=
3968                     VXGE_HAL_WIRE_PORT_DEF_TMAC_UTIL_PERIOD) {
3969                         val64 &=
3970                             ~VXGE_HAL_RXMAC_LINK_UTIL_PORT_RMAC_UTIL_CFG(0xf);
3971
3972                         val64 |= VXGE_HAL_RXMAC_LINK_UTIL_PORT_RMAC_UTIL_CFG(
3973                             mac_config->wire_port_config[i].rmac_util_period);
3974                 }
3975
3976                 vxge_os_pio_mem_write64(hldev->header.pdev,
3977                     hldev->header.regh0,
3978                     val64,
3979                     &hldev->mrpcim_reg->rxmac_link_util_port[port_id]);
3980
3981                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
3982                     hldev->header.regh0,
3983                     &hldev->mrpcim_reg->xgmac_debounce_port[port_id]);
3984
3985                 if (mac_config->wire_port_config[i].link_stability_period !=
3986                     VXGE_HAL_WIRE_PORT_DEF_LINK_STABILITY_PERIOD) {
3987                         val64 &=
3988                             ~(VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_LINK_UP(0xf) |
3989                             VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_LINK_DOWN(0xf));
3990
3991                         val64 |= VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_LINK_UP(
3992                             mac_config->wire_port_config[i].link_stability_period) |
3993                             VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_LINK_DOWN(
3994                             mac_config->wire_port_config[i].link_stability_period);
3995                 }
3996
3997                 if (mac_config->wire_port_config[i].port_stability_period !=
3998                     VXGE_HAL_WIRE_PORT_DEF_PORT_STABILITY_PERIOD) {
3999                         val64 &=
4000                             ~(VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_PORT_UP(0xf) |
4001                             VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_PORT_DOWN(0xf));
4002
4003                         val64 |= VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_PORT_UP(
4004                             mac_config->wire_port_config[i].port_stability_period) |
4005                             VXGE_HAL_XGMAC_DEBOUNCE_PORT_PERIOD_PORT_DOWN(
4006                             mac_config->wire_port_config[i].port_stability_period);
4007                 }
4008
4009                 vxge_os_pio_mem_write64(hldev->header.pdev,
4010                     hldev->header.regh0,
4011                     val64,
4012                     &hldev->mrpcim_reg->xgmac_debounce_port[port_id]);
4013
4014                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4015                     hldev->header.regh0,
4016                     &hldev->mrpcim_reg->txmac_cfg0_port[port_id]);
4017
4018                 if (mac_config->wire_port_config[i].tmac_en)
4019                         val64 |= VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN;
4020                 else
4021                         val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN;
4022
4023                 if (mac_config->wire_port_config[i].tmac_pad !=
4024                     VXGE_HAL_WIRE_PORT_TMAC_PAD_DEFAULT) {
4025                         if (mac_config->wire_port_config[i].tmac_pad)
4026                                 val64 |= VXGE_HAL_TXMAC_CFG0_PORT_APPEND_PAD;
4027                         else
4028                                 val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_APPEND_PAD;
4029                 }
4030
4031                 if (mac_config->wire_port_config[i].tmac_pad_byte !=
4032                     VXGE_HAL_WIRE_PORT_TMAC_PAD_DEFAULT) {
4033                         val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_PAD_BYTE(0xff);
4034
4035                         val64 |= VXGE_HAL_TXMAC_CFG0_PORT_PAD_BYTE(
4036                             mac_config->wire_port_config[i].tmac_pad_byte);
4037                 }
4038
4039                 vxge_os_pio_mem_write64(hldev->header.pdev,
4040                     hldev->header.regh0,
4041                     val64,
4042                     &hldev->mrpcim_reg->txmac_cfg0_port[port_id]);
4043
4044                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4045                     hldev->header.regh0,
4046                     &hldev->mrpcim_reg->txmac_link_util_port);
4047
4048                 if (mac_config->wire_port_config[i].tmac_util_period !=
4049                     VXGE_HAL_WIRE_PORT_DEF_TMAC_UTIL_PERIOD) {
4050                         val64 &=
4051                             ~VXGE_HAL_TXMAC_LINK_UTIL_PORT_TMAC_UTIL_CFG(0xf);
4052
4053                         val64 |= VXGE_HAL_TXMAC_LINK_UTIL_PORT_TMAC_UTIL_CFG(
4054                             mac_config->wire_port_config[i].tmac_util_period);
4055                 }
4056
4057                 vxge_os_pio_mem_write64(hldev->header.pdev,
4058                     hldev->header.regh0,
4059                     val64,
4060                     &hldev->mrpcim_reg->txmac_link_util_port[port_id]);
4061
4062                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4063                     hldev->header.regh0,
4064                     &hldev->mrpcim_reg->ratemgmt_cfg_port);
4065
4066                 if (mac_config->wire_port_config[i].autoneg_mode !=
4067                     VXGE_HAL_WIRE_PORT_AUTONEG_MODE_DEFAULT) {
4068
4069                         val64 &= ~VXGE_HAL_RATEMGMT_CFG_PORT_MODE(0x3);
4070
4071                         val64 |= VXGE_HAL_RATEMGMT_CFG_PORT_MODE(
4072                             mac_config->wire_port_config[i].autoneg_mode);
4073                 }
4074
4075                 if (mac_config->wire_port_config[i].autoneg_rate !=
4076                     VXGE_HAL_WIRE_PORT_AUTONEG_RATE_DEFAULT) {
4077
4078                         if (mac_config->wire_port_config[i].autoneg_rate)
4079                                 val64 |= VXGE_HAL_RATEMGMT_CFG_PORT_RATE;
4080                         else
4081                                 val64 &= ~VXGE_HAL_RATEMGMT_CFG_PORT_RATE;
4082
4083                 }
4084
4085                 if (mac_config->wire_port_config[i].fixed_use_fsm !=
4086                     VXGE_HAL_WIRE_PORT_FIXED_USE_FSM_DEFAULT) {
4087
4088                         if (mac_config->wire_port_config[i].fixed_use_fsm)
4089                                 val64 |=
4090                                     VXGE_HAL_RATEMGMT_CFG_PORT_FIXED_USE_FSM;
4091                         else
4092                                 val64 &=
4093                                     ~VXGE_HAL_RATEMGMT_CFG_PORT_FIXED_USE_FSM;
4094
4095                 }
4096
4097                 if (mac_config->wire_port_config[i].antp_use_fsm !=
4098                     VXGE_HAL_WIRE_PORT_ANTP_USE_FSM_DEFAULT) {
4099
4100                         if (mac_config->wire_port_config[i].antp_use_fsm)
4101                                 val64 |=
4102                                     VXGE_HAL_RATEMGMT_CFG_PORT_ANTP_USE_FSM;
4103                         else
4104                                 val64 &=
4105                                     ~VXGE_HAL_RATEMGMT_CFG_PORT_ANTP_USE_FSM;
4106
4107                 }
4108
4109                 if (mac_config->wire_port_config[i].anbe_use_fsm !=
4110                     VXGE_HAL_WIRE_PORT_ANBE_USE_FSM_DEFAULT) {
4111
4112                         if (mac_config->wire_port_config[i].anbe_use_fsm)
4113                                 val64 |=
4114                                     VXGE_HAL_RATEMGMT_CFG_PORT_ANBE_USE_FSM;
4115                         else
4116                                 val64 &=
4117                                     ~VXGE_HAL_RATEMGMT_CFG_PORT_ANBE_USE_FSM;
4118
4119                 }
4120
4121                 vxge_os_pio_mem_write64(hldev->header.pdev,
4122                     hldev->header.regh0,
4123                     val64,
4124                     &hldev->mrpcim_reg->ratemgmt_cfg_port[port_id]);
4125
4126         }
4127
4128         if (mac_config->switch_port_config.tmac_en ==
4129             VXGE_HAL_SWITCH_PORT_TMAC_DEFAULT) {
4130                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4131                     hldev->header.regh0,
4132                     &hldev->mrpcim_reg->txmac_cfg0_port[
4133                     VXGE_HAL_MAC_SWITCH_PORT]);
4134
4135                 if (val64 & VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN) {
4136                         mac_config->switch_port_config.tmac_en =
4137                             VXGE_HAL_SWITCH_PORT_TMAC_ENABLE;
4138                 } else {
4139                         mac_config->switch_port_config.tmac_en =
4140                             VXGE_HAL_SWITCH_PORT_TMAC_DISABLE;
4141                 }
4142
4143         }
4144
4145         if (mac_config->switch_port_config.rmac_en ==
4146             VXGE_HAL_SWITCH_PORT_RMAC_DEFAULT) {
4147                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4148                     hldev->header.regh0,
4149                     &hldev->mrpcim_reg->rxmac_cfg0_port[
4150                     VXGE_HAL_MAC_SWITCH_PORT]);
4151
4152                 if (val64 & VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN) {
4153                         mac_config->switch_port_config.rmac_en =
4154                             VXGE_HAL_SWITCH_PORT_RMAC_ENABLE;
4155                 } else {
4156                         mac_config->switch_port_config.rmac_en =
4157                             VXGE_HAL_SWITCH_PORT_RMAC_DISABLE;
4158                 }
4159
4160         }
4161
4162         if (mac_config->switch_port_config.rmac_en ||
4163             mac_config->switch_port_config.tmac_en) {
4164
4165                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4166                     hldev->header.regh0,
4167                     &hldev->mrpcim_reg->rxmac_cfg0_port[
4168                     VXGE_HAL_MAC_SWITCH_PORT]);
4169
4170                 if (mac_config->switch_port_config.rmac_en)
4171                         val64 |= VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN;
4172                 else
4173                         val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_RMAC_EN;
4174
4175                 if (mac_config->switch_port_config.rmac_strip_fcs !=
4176                     VXGE_HAL_SWITCH_PORT_RMAC_STRIP_FCS_DEFAULT) {
4177                         if (mac_config->switch_port_config.rmac_strip_fcs)
4178                                 val64 |= VXGE_HAL_RXMAC_CFG0_PORT_STRIP_FCS;
4179                         else
4180                                 val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_STRIP_FCS;
4181                 }
4182
4183                 if (mac_config->switch_port_config.rmac_discard_pfrm !=
4184                     VXGE_HAL_SWITCH_PORT_RMAC_DISCARD_PFRM_DEFAULT) {
4185                         if (mac_config->switch_port_config.rmac_discard_pfrm)
4186                                 val64 |= VXGE_HAL_RXMAC_CFG0_PORT_DISCARD_PFRM;
4187                         else
4188                                 val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_DISCARD_PFRM;
4189                 }
4190
4191                 if (mac_config->switch_port_config.mtu !=
4192                     VXGE_HAL_SWITCH_PORT_DEF_INITIAL_MTU) {
4193
4194                         val64 &= ~VXGE_HAL_RXMAC_CFG0_PORT_MAX_PYLD_LEN(0x3fff);
4195
4196                         val64 |= VXGE_HAL_RXMAC_CFG0_PORT_MAX_PYLD_LEN(
4197                             mac_config->switch_port_config.mtu);
4198
4199                 }
4200
4201                 vxge_os_pio_mem_write64(hldev->header.pdev,
4202                     hldev->header.regh0,
4203                     val64,
4204                     &hldev->mrpcim_reg->rxmac_cfg0_port[
4205                     VXGE_HAL_MAC_SWITCH_PORT]);
4206
4207                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4208                     hldev->header.regh0,
4209                     &hldev->mrpcim_reg->rxmac_cfg2_port[
4210                     VXGE_HAL_MAC_SWITCH_PORT]);
4211
4212                 if (mac_config->switch_port_config.rmac_prom_en !=
4213                     VXGE_HAL_SWITCH_PORT_RMAC_PROM_EN_DEFAULT) {
4214                         if (mac_config->switch_port_config.rmac_prom_en)
4215                                 val64 |= VXGE_HAL_RXMAC_CFG2_PORT_PROM_EN;
4216                         else
4217                                 val64 &= ~VXGE_HAL_RXMAC_CFG2_PORT_PROM_EN;
4218                 }
4219
4220                 vxge_os_pio_mem_write64(hldev->header.pdev,
4221                     hldev->header.regh0,
4222                     val64,
4223                     &hldev->mrpcim_reg->rxmac_cfg2_port[
4224                     VXGE_HAL_MAC_SWITCH_PORT]);
4225
4226                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4227                     hldev->header.regh0,
4228                     &hldev->mrpcim_reg->rxmac_pause_cfg_port[
4229                     VXGE_HAL_MAC_SWITCH_PORT]);
4230
4231                 if (mac_config->switch_port_config.rmac_pause_gen_en !=
4232                     VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_GEN_EN_DEFAULT) {
4233                         if (mac_config->switch_port_config.rmac_pause_gen_en)
4234                                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
4235                         else
4236                                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
4237
4238                 }
4239
4240                 if (mac_config->switch_port_config.rmac_pause_rcv_en !=
4241                     VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_RCV_EN_DEFAULT) {
4242                         if (mac_config->switch_port_config.rmac_pause_rcv_en)
4243                                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
4244                         else
4245                                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
4246
4247                 }
4248
4249                 if (mac_config->switch_port_config.rmac_pause_time !=
4250                     VXGE_HAL_SWITCH_PORT_DEF_RMAC_HIGH_PTIME) {
4251                         val64 &=
4252                             ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_HIGH_PTIME(0xffff);
4253
4254                         val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_HIGH_PTIME(
4255                             mac_config->switch_port_config.rmac_pause_time);
4256
4257                 }
4258
4259                 if (mac_config->switch_port_config.rmac_pause_time !=
4260                     VXGE_HAL_SWITCH_PORT_RMAC_PAUSE_LIMITER_DEFAULT) {
4261                         if (mac_config->switch_port_config.limiter_en)
4262                                 val64 |=
4263                                     VXGE_HAL_RXMAC_PAUSE_CFG_PORT_LIMITER_EN;
4264                         else
4265                                 val64 &=
4266                                     ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_LIMITER_EN;
4267
4268                 }
4269
4270                 if (mac_config->switch_port_config.max_limit !=
4271                     VXGE_HAL_SWITCH_PORT_DEF_RMAC_MAX_LIMIT) {
4272                         val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_MAX_LIMIT(0xff);
4273
4274                         val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_MAX_LIMIT(
4275                             mac_config->switch_port_config.max_limit);
4276
4277                 }
4278
4279                 vxge_os_pio_mem_write64(hldev->header.pdev,
4280                     hldev->header.regh0,
4281                     val64,
4282                     &hldev->mrpcim_reg->rxmac_pause_cfg_port[
4283                     VXGE_HAL_MAC_SWITCH_PORT]);
4284
4285                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4286                     hldev->header.regh0,
4287                     &hldev->mrpcim_reg->rxmac_link_util_port[
4288                     VXGE_HAL_MAC_SWITCH_PORT]);
4289
4290                 if (mac_config->switch_port_config.rmac_util_period !=
4291                     VXGE_HAL_SWITCH_PORT_DEF_TMAC_UTIL_PERIOD) {
4292                         val64 &=
4293                             ~VXGE_HAL_RXMAC_LINK_UTIL_PORT_RMAC_UTIL_CFG(0xf);
4294
4295                         val64 |= VXGE_HAL_RXMAC_LINK_UTIL_PORT_RMAC_UTIL_CFG(
4296                             mac_config->switch_port_config.rmac_util_period);
4297                 }
4298
4299                 vxge_os_pio_mem_write64(hldev->header.pdev,
4300                     hldev->header.regh0,
4301                     val64,
4302                     &hldev->mrpcim_reg->rxmac_link_util_port[
4303                     VXGE_HAL_MAC_SWITCH_PORT]);
4304
4305                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4306                     hldev->header.regh0,
4307                     &hldev->mrpcim_reg->txmac_cfg0_port[
4308                     VXGE_HAL_MAC_SWITCH_PORT]);
4309
4310                 if (mac_config->switch_port_config.tmac_en)
4311                         val64 |= VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN;
4312                 else
4313                         val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_TMAC_EN;
4314
4315                 if (mac_config->switch_port_config.tmac_pad !=
4316                     VXGE_HAL_SWITCH_PORT_TMAC_PAD_DEFAULT) {
4317                         if (mac_config->switch_port_config.tmac_pad)
4318                                 val64 |= VXGE_HAL_TXMAC_CFG0_PORT_APPEND_PAD;
4319                         else
4320                                 val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_APPEND_PAD;
4321                 }
4322
4323                 if (mac_config->switch_port_config.tmac_pad_byte !=
4324                     VXGE_HAL_SWITCH_PORT_TMAC_PAD_DEFAULT) {
4325                         val64 &= ~VXGE_HAL_TXMAC_CFG0_PORT_PAD_BYTE(0xff);
4326
4327                         val64 |= VXGE_HAL_TXMAC_CFG0_PORT_PAD_BYTE(
4328                             mac_config->switch_port_config.tmac_pad_byte);
4329                 }
4330
4331                 vxge_os_pio_mem_write64(hldev->header.pdev,
4332                     hldev->header.regh0,
4333                     val64,
4334                     &hldev->mrpcim_reg->txmac_cfg0_port[
4335                     VXGE_HAL_MAC_SWITCH_PORT]);
4336
4337                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4338                     hldev->header.regh0,
4339                     &hldev->mrpcim_reg->txmac_link_util_port);
4340
4341                 if (mac_config->switch_port_config.tmac_util_period !=
4342                     VXGE_HAL_SWITCH_PORT_DEF_TMAC_UTIL_PERIOD) {
4343                         val64 &=
4344                             ~VXGE_HAL_TXMAC_LINK_UTIL_PORT_TMAC_UTIL_CFG(0xf);
4345
4346                         val64 |= VXGE_HAL_TXMAC_LINK_UTIL_PORT_TMAC_UTIL_CFG(
4347                             mac_config->switch_port_config.tmac_util_period);
4348                 }
4349
4350                 vxge_os_pio_mem_write64(hldev->header.pdev,
4351                     hldev->header.regh0,
4352                     val64,
4353                     &hldev->mrpcim_reg->txmac_link_util_port[
4354                     VXGE_HAL_MAC_SWITCH_PORT]);
4355
4356         }
4357
4358         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4359             hldev->header.regh0,
4360             &hldev->mrpcim_reg->txmac_gen_cfg1);
4361
4362         if (mac_config->tmac_perma_stop_en !=
4363             VXGE_HAL_MAC_TMAC_PERMA_STOP_DEFAULT) {
4364
4365                 if (mac_config->tmac_perma_stop_en)
4366                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_TMAC_PERMA_STOP_EN;
4367                 else
4368                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_TMAC_PERMA_STOP_EN;
4369
4370         }
4371
4372         if (mac_config->tmac_tx_switch_dis !=
4373             VXGE_HAL_MAC_TMAC_TX_SWITCH_DEFAULT) {
4374
4375                 if (mac_config->tmac_tx_switch_dis)
4376                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_TX_SWITCH_DISABLE;
4377                 else
4378                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_TX_SWITCH_DISABLE;
4379
4380         }
4381
4382         if (mac_config->tmac_lossy_switch_en !=
4383             VXGE_HAL_MAC_TMAC_LOSSY_SWITCH_DEFAULT) {
4384
4385                 if (mac_config->tmac_lossy_switch_en)
4386                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_LOSSY_SWITCH;
4387                 else
4388                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_LOSSY_SWITCH;
4389
4390         }
4391
4392         if (mac_config->tmac_lossy_switch_en !=
4393             VXGE_HAL_MAC_TMAC_LOSSY_WIRE_DEFAULT) {
4394
4395                 if (mac_config->tmac_lossy_wire_en)
4396                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_LOSSY_WIRE;
4397                 else
4398                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_LOSSY_WIRE;
4399
4400         }
4401
4402         if (mac_config->tmac_bcast_to_wire_dis !=
4403             VXGE_HAL_MAC_TMAC_BCAST_TO_WIRE_DEFAULT) {
4404
4405                 if (mac_config->tmac_bcast_to_wire_dis)
4406                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_BLOCK_BCAST_TO_WIRE;
4407                 else
4408                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_BLOCK_BCAST_TO_WIRE;
4409
4410         }
4411
4412         if (mac_config->tmac_bcast_to_wire_dis !=
4413             VXGE_HAL_MAC_TMAC_BCAST_TO_SWITCH_DEFAULT) {
4414
4415                 if (mac_config->tmac_bcast_to_switch_dis)
4416                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_BLOCK_BCAST_TO_SWITCH;
4417                 else
4418                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_BLOCK_BCAST_TO_SWITCH;
4419
4420         }
4421
4422         if (mac_config->tmac_host_append_fcs_en !=
4423             VXGE_HAL_MAC_TMAC_HOST_APPEND_FCS_DEFAULT) {
4424
4425                 if (mac_config->tmac_host_append_fcs_en)
4426                         val64 |= VXGE_HAL_TXMAC_GEN_CFG1_HOST_APPEND_FCS;
4427                 else
4428                         val64 &= ~VXGE_HAL_TXMAC_GEN_CFG1_HOST_APPEND_FCS;
4429
4430         }
4431
4432         vxge_os_pio_mem_write64(hldev->header.pdev,
4433             hldev->header.regh0,
4434             val64,
4435             &hldev->mrpcim_reg->txmac_gen_cfg1);
4436
4437         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4438             hldev->header.regh0,
4439             &hldev->mrpcim_reg->rxmac_rx_pa_cfg0);
4440
4441         if (mac_config->rpa_ignore_frame_err !=
4442             VXGE_HAL_MAC_RPA_IGNORE_FRAME_ERR_DEFAULT) {
4443
4444                 if (mac_config->rpa_ignore_frame_err)
4445                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_IGNORE_FRAME_ERR;
4446                 else
4447                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_IGNORE_FRAME_ERR;
4448
4449         }
4450
4451         if (mac_config->rpa_support_snap_ab_n !=
4452             VXGE_HAL_MAC_RPA_SUPPORT_SNAP_AB_N_DEFAULT) {
4453
4454                 if (mac_config->rpa_support_snap_ab_n)
4455                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_SUPPORT_SNAP_AB_N;
4456                 else
4457                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_SUPPORT_SNAP_AB_N;
4458
4459         }
4460
4461         if (mac_config->rpa_search_for_hao !=
4462             VXGE_HAL_MAC_RPA_SEARCH_FOR_HAO_DEFAULT) {
4463
4464                 if (mac_config->rpa_search_for_hao)
4465                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_SEARCH_FOR_HAO;
4466                 else
4467                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_SEARCH_FOR_HAO;
4468
4469         }
4470
4471         if (mac_config->rpa_support_ipv6_mobile_hdrs !=
4472             VXGE_HAL_MAC_RPA_SUPPORT_IPV6_MOBILE_HDRS_DEFAULT) {
4473
4474                 if (mac_config->rpa_support_ipv6_mobile_hdrs)
4475                         val64 |=
4476                             VXGE_HAL_RXMAC_RX_PA_CFG0_SUPPORT_MOBILE_IPV6_HDRS;
4477                 else
4478                         val64 &=
4479                             ~VXGE_HAL_RXMAC_RX_PA_CFG0_SUPPORT_MOBILE_IPV6_HDRS;
4480
4481         }
4482
4483         if (mac_config->rpa_ipv6_stop_searching !=
4484             VXGE_HAL_MAC_RPA_IPV6_STOP_SEARCHING_DEFAULT) {
4485
4486                 if (mac_config->rpa_ipv6_stop_searching)
4487                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_IPV6_STOP_SEARCHING;
4488                 else
4489                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_IPV6_STOP_SEARCHING;
4490
4491         }
4492
4493         if (mac_config->rpa_no_ps_if_unknown !=
4494             VXGE_HAL_MAC_RPA_NO_PS_IF_UNKNOWN_DEFAULT) {
4495
4496                 if (mac_config->rpa_no_ps_if_unknown)
4497                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_NO_PS_IF_UNKNOWN;
4498                 else
4499                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_NO_PS_IF_UNKNOWN;
4500
4501         }
4502
4503         if (mac_config->rpa_search_for_etype !=
4504             VXGE_HAL_MAC_RPA_SEARCH_FOR_ETYPE_DEFAULT) {
4505
4506                 if (mac_config->rpa_search_for_etype)
4507                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG0_SEARCH_FOR_ETYPE;
4508                 else
4509                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG0_SEARCH_FOR_ETYPE;
4510
4511         }
4512
4513         vxge_os_pio_mem_write64(hldev->header.pdev,
4514             hldev->header.regh0,
4515             val64,
4516             &hldev->mrpcim_reg->rxmac_rx_pa_cfg0);
4517
4518         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4519             hldev->header.regh0,
4520             &hldev->mrpcim_reg->fau_pa_cfg);
4521
4522         if (mac_config->rpa_repl_l4_comp_csum !=
4523             VXGE_HAL_MAC_RPA_REPL_l4_COMP_CSUM_DEFAULT) {
4524
4525                 if (mac_config->rpa_repl_l4_comp_csum)
4526                         val64 |= VXGE_HAL_FAU_PA_CFG_REPL_L4_COMP_CSUM;
4527                 else
4528                         val64 &= ~VXGE_HAL_FAU_PA_CFG_REPL_L4_COMP_CSUM;
4529
4530         }
4531
4532         if (mac_config->rpa_repl_l3_incl_cf !=
4533             VXGE_HAL_MAC_RPA_REPL_L3_INCL_CF_DEFAULT) {
4534
4535                 if (mac_config->rpa_repl_l3_incl_cf)
4536                         val64 |= VXGE_HAL_FAU_PA_CFG_REPL_L3_INCL_CF;
4537                 else
4538                         val64 &= ~VXGE_HAL_FAU_PA_CFG_REPL_L3_INCL_CF;
4539
4540         }
4541
4542         if (mac_config->rpa_repl_l3_comp_csum !=
4543             VXGE_HAL_MAC_RPA_REPL_l3_COMP_CSUM_DEFAULT) {
4544
4545                 if (mac_config->rpa_repl_l3_comp_csum)
4546                         val64 |= VXGE_HAL_FAU_PA_CFG_REPL_L3_COMP_CSUM;
4547                 else
4548                         val64 &= ~VXGE_HAL_FAU_PA_CFG_REPL_L3_COMP_CSUM;
4549
4550         }
4551
4552         vxge_os_pio_mem_write64(hldev->header.pdev,
4553             hldev->header.regh0,
4554             val64,
4555             &hldev->mrpcim_reg->fau_pa_cfg);
4556
4557         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4558             hldev->header.regh0,
4559             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
4560
4561         if (mac_config->rpa_repl_ipv4_tcp_incl_ph !=
4562             VXGE_HAL_MAC_RPA_REPL_IPV4_TCP_INCL_PH_DEFAULT) {
4563
4564                 if (mac_config->rpa_repl_ipv4_tcp_incl_ph)
4565                         val64 |=
4566                             VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV4_TCP_INCL_PH;
4567                 else
4568                         val64 &=
4569                             ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV4_TCP_INCL_PH;
4570
4571         }
4572
4573         if (mac_config->rpa_repl_ipv6_tcp_incl_ph !=
4574             VXGE_HAL_MAC_RPA_REPL_IPV6_TCP_INCL_PH_DEFAULT) {
4575
4576                 if (mac_config->rpa_repl_ipv6_tcp_incl_ph)
4577                         val64 |=
4578                             VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV6_TCP_INCL_PH;
4579                 else
4580                         val64 &=
4581                             ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV6_TCP_INCL_PH;
4582
4583         }
4584
4585         if (mac_config->rpa_repl_ipv4_udp_incl_ph !=
4586             VXGE_HAL_MAC_RPA_REPL_IPV4_UDP_INCL_PH_DEFAULT) {
4587
4588                 if (mac_config->rpa_repl_ipv4_udp_incl_ph)
4589                         val64 |=
4590                             VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV4_UDP_INCL_PH;
4591                 else
4592                         val64 &=
4593                             ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV4_UDP_INCL_PH;
4594
4595         }
4596
4597         if (mac_config->rpa_repl_ipv6_udp_incl_ph !=
4598             VXGE_HAL_MAC_RPA_REPL_IPV6_UDP_INCL_PH_DEFAULT) {
4599
4600                 if (mac_config->rpa_repl_ipv6_udp_incl_ph)
4601                         val64 |=
4602                             VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV6_UDP_INCL_PH;
4603                 else
4604                         val64 &=
4605                             ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_IPV6_UDP_INCL_PH;
4606
4607         }
4608
4609         if (mac_config->rpa_repl_l4_incl_cf !=
4610             VXGE_HAL_MAC_RPA_REPL_L4_INCL_CF_DEFAULT) {
4611
4612                 if (mac_config->rpa_repl_l4_incl_cf)
4613                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_L4_INCL_CF;
4614                 else
4615                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_L4_INCL_CF;
4616
4617         }
4618
4619         if (mac_config->rpa_repl_strip_vlan_tag !=
4620             VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_DEFAULT) {
4621
4622                 if (mac_config->rpa_repl_strip_vlan_tag)
4623                         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_STRIP_VLAN_TAG;
4624                 else
4625                         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_STRIP_VLAN_TAG;
4626
4627
4628         }
4629
4630         vxge_os_pio_mem_write64(hldev->header.pdev,
4631             hldev->header.regh0,
4632             val64,
4633             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
4634
4635         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4636             hldev->header.regh0,
4637             &hldev->mrpcim_reg->xmac_gen_cfg);
4638
4639         if (mac_config->network_stability_period !=
4640             VXGE_HAL_MAC_DEF_NETWORK_STABILITY_PERIOD) {
4641
4642                 val64 &= ~(VXGE_HAL_XMAC_GEN_CFG_PERIOD_NTWK_DOWN(0xf) |
4643                     VXGE_HAL_XMAC_GEN_CFG_PERIOD_NTWK_UP(0xf));
4644
4645                 val64 |= VXGE_HAL_XMAC_GEN_CFG_PERIOD_NTWK_DOWN(
4646                     mac_config->network_stability_period) |
4647                     VXGE_HAL_XMAC_GEN_CFG_PERIOD_NTWK_UP(
4648                     mac_config->network_stability_period);
4649
4650         }
4651
4652         vxge_os_pio_mem_write64(hldev->header.pdev,
4653             hldev->header.regh0,
4654             val64,
4655             &hldev->mrpcim_reg->xmac_gen_cfg);
4656
4657         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4658             hldev->header.regh0,
4659             &hldev->mrpcim_reg->tpa_global_cfg);
4660
4661         if (mac_config->tpa_support_snap_ab_n !=
4662             VXGE_HAL_MAC_TPA_SUPPORT_SNAP_AB_N_DEFAULT) {
4663
4664                 if (mac_config->tpa_support_snap_ab_n)
4665                         val64 |= VXGE_HAL_TPA_GLOBAL_CFG_SUPPORT_SNAP_AB_N;
4666                 else
4667                         val64 &= ~VXGE_HAL_TPA_GLOBAL_CFG_SUPPORT_SNAP_AB_N;
4668
4669         }
4670
4671         if (mac_config->tpa_ecc_enable_n !=
4672             VXGE_HAL_MAC_TPA_ECC_ENABLE_N_DEFAULT) {
4673
4674                 if (mac_config->tpa_ecc_enable_n)
4675                         val64 |= VXGE_HAL_TPA_GLOBAL_CFG_ECC_ENABLE_N;
4676                 else
4677                         val64 &= ~VXGE_HAL_TPA_GLOBAL_CFG_ECC_ENABLE_N;
4678
4679         }
4680
4681         vxge_os_pio_mem_write64(hldev->header.pdev,
4682             hldev->header.regh0,
4683             val64,
4684             &hldev->mrpcim_reg->tpa_global_cfg);
4685
4686         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
4687             __FILE__, __func__, __LINE__, status);
4688         return (status);
4689
4690 }
4691
4692 /*
4693  * __hal_mrpcim_lag_configure - Initialize LAG registers
4694  * @hldev: hal device.
4695  *
4696  * Initializes LAG registers
4697  *
4698  */
4699 vxge_hal_status_e
4700 __hal_mrpcim_lag_configure(__hal_device_t *hldev)
4701 {
4702         u64 val64;
4703         u64 mac_addr;
4704         u32 i, j;
4705         vxge_hal_status_e status = VXGE_HAL_OK;
4706         vxge_hal_lag_config_t *lag_config =
4707         &hldev->header.config.mrpcim_config.lag_config;
4708
4709         vxge_assert(hldev != NULL);
4710
4711         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
4712             __FILE__, __func__, __LINE__);
4713
4714         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
4715             (ptr_t) hldev);
4716
4717
4718         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4719             hldev->header.regh0,
4720             &hldev->mrpcim_reg->lag_cfg);
4721
4722         if (lag_config->lag_en == VXGE_HAL_LAG_LAG_EN_DEFAULT) {
4723
4724                 if (val64 & VXGE_HAL_LAG_CFG_EN)
4725                         lag_config->lag_en = VXGE_HAL_LAG_LAG_EN_ENABLE;
4726                 else
4727                         lag_config->lag_en = VXGE_HAL_LAG_LAG_EN_DISABLE;
4728
4729         }
4730
4731         if (lag_config->lag_en == VXGE_HAL_LAG_LAG_EN_DISABLE) {
4732
4733                 if (val64 & VXGE_HAL_LAG_CFG_EN) {
4734                         val64 &= ~VXGE_HAL_LAG_CFG_EN;
4735                         vxge_os_pio_mem_write64(hldev->header.pdev,
4736                             hldev->header.regh0,
4737                             val64,
4738                             &hldev->mrpcim_reg->lag_cfg);
4739                 }
4740
4741                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
4742                     __FILE__, __func__, __LINE__);
4743
4744                 return (VXGE_HAL_OK);
4745
4746         }
4747
4748         if (lag_config->lag_mode != VXGE_HAL_LAG_LAG_MODE_DEFAULT) {
4749                 val64 &= ~VXGE_HAL_LAG_CFG_MODE(0x3);
4750                 val64 |= VXGE_HAL_LAG_CFG_MODE(lag_config->lag_mode);
4751         } else {
4752                 lag_config->lag_mode = (u32) VXGE_HAL_LAG_CFG_GET_MODE(val64);
4753         }
4754
4755         if (lag_config->la_mode_config.tx_discard !=
4756             VXGE_HAL_LAG_TX_DISCARD_DEFAULT) {
4757                 if (lag_config->la_mode_config.tx_discard ==
4758                     VXGE_HAL_LAG_TX_DISCARD_ENABLE)
4759                         val64 |= VXGE_HAL_LAG_CFG_TX_DISCARD_BEHAV;
4760                 else
4761                         val64 &= ~VXGE_HAL_LAG_CFG_TX_DISCARD_BEHAV;
4762         }
4763
4764         if (lag_config->la_mode_config.rx_discard !=
4765             VXGE_HAL_LAG_RX_DISCARD_DEFAULT) {
4766                 if (lag_config->la_mode_config.rx_discard ==
4767                     VXGE_HAL_LAG_RX_DISCARD_ENABLE)
4768                         val64 |= VXGE_HAL_LAG_CFG_RX_DISCARD_BEHAV;
4769                 else
4770                         val64 &= ~VXGE_HAL_LAG_CFG_RX_DISCARD_BEHAV;
4771         }
4772
4773         if (lag_config->sl_mode_config.pref_indiv_port !=
4774             VXGE_HAL_LAG_PREF_INDIV_PORT_DEFAULT) {
4775                 if (lag_config->sl_mode_config.pref_indiv_port ==
4776                     VXGE_HAL_LAG_RX_DISCARD_ENABLE)
4777                         val64 |= VXGE_HAL_LAG_CFG_PREF_INDIV_PORT_NUM;
4778                 else
4779                         val64 &= ~VXGE_HAL_LAG_CFG_PREF_INDIV_PORT_NUM;
4780         }
4781
4782         vxge_os_pio_mem_write64(hldev->header.pdev,
4783             hldev->header.regh0,
4784             val64,
4785             &hldev->mrpcim_reg->lag_cfg);
4786
4787         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4788             hldev->header.regh0,
4789             &hldev->mrpcim_reg->lag_tx_cfg);
4790
4791         if (lag_config->incr_tx_aggr_stats !=
4792             VXGE_HAL_LAG_INCR_TX_AGGR_STATS_DEFAULT) {
4793                 if (lag_config->incr_tx_aggr_stats ==
4794                     VXGE_HAL_LAG_INCR_TX_AGGR_STATS_ENABLE)
4795                         val64 |= VXGE_HAL_LAG_TX_CFG_INCR_TX_AGGR_STATS;
4796                 else
4797                         val64 &= ~VXGE_HAL_LAG_TX_CFG_INCR_TX_AGGR_STATS;
4798         }
4799
4800         if (lag_config->la_mode_config.distrib_alg_sel !=
4801             VXGE_HAL_LAG_DISTRIB_ALG_SEL_DEFAULT) {
4802                 val64 &= ~VXGE_HAL_LAG_TX_CFG_DISTRIB_ALG_SEL(0x3);
4803                 val64 |= VXGE_HAL_LAG_TX_CFG_DISTRIB_ALG_SEL(
4804                     lag_config->la_mode_config.distrib_alg_sel);
4805                 vxge_os_pio_mem_write64(hldev->header.pdev,
4806                     hldev->header.regh0,
4807                     lag_config->la_mode_config.distrib_dest,
4808                     &hldev->mrpcim_reg->lag_distrib_dest);
4809         } else {
4810                 lag_config->la_mode_config.distrib_alg_sel =
4811                     (u32) VXGE_HAL_LAG_TX_CFG_GET_DISTRIB_ALG_SEL(val64);
4812                 lag_config->la_mode_config.distrib_dest =
4813                     vxge_os_pio_mem_read64(hldev->header.pdev,
4814                     hldev->header.regh0,
4815                     &hldev->mrpcim_reg->lag_distrib_dest);
4816         }
4817
4818         if (lag_config->la_mode_config.distrib_remap_if_fail !=
4819             VXGE_HAL_LAG_DISTRIB_REMAP_IF_FAIL_DEFAULT) {
4820                 if (lag_config->la_mode_config.distrib_remap_if_fail ==
4821                     VXGE_HAL_LAG_DISTRIB_REMAP_IF_FAIL_ENABLE)
4822                         val64 |= VXGE_HAL_LAG_TX_CFG_DISTRIB_REMAP_IF_FAIL;
4823                 else
4824                         val64 &= ~VXGE_HAL_LAG_TX_CFG_DISTRIB_REMAP_IF_FAIL;
4825         }
4826
4827         if (lag_config->la_mode_config.coll_max_delay !=
4828             VXGE_HAL_LAG_DEF_COLL_MAX_DELAY) {
4829                 val64 &= ~VXGE_HAL_LAG_TX_CFG_COLL_MAX_DELAY(0xffff);
4830                 val64 |= VXGE_HAL_LAG_TX_CFG_DISTRIB_ALG_SEL(
4831                     lag_config->la_mode_config.coll_max_delay);
4832         }
4833
4834         vxge_os_pio_mem_write64(hldev->header.pdev,
4835             hldev->header.regh0,
4836             val64,
4837             &hldev->mrpcim_reg->lag_tx_cfg);
4838
4839         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4840             hldev->header.regh0,
4841             &hldev->mrpcim_reg->lag_active_passive_cfg);
4842
4843         if (lag_config->ap_mode_config.hot_standby !=
4844             VXGE_HAL_LAG_HOT_STANDBY_DEFAULT) {
4845                 if (lag_config->ap_mode_config.hot_standby ==
4846                     VXGE_HAL_LAG_HOT_STANDBY_KEEP_UP_PORT)
4847                         val64 |= VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_HOT_STANDBY;
4848                 else
4849                         val64 &= ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_HOT_STANDBY;
4850         }
4851
4852         if (lag_config->ap_mode_config.lacp_decides !=
4853             VXGE_HAL_LAG_LACP_DECIDES_DEFAULT) {
4854                 if (lag_config->ap_mode_config.lacp_decides ==
4855                     VXGE_HAL_LAG_LACP_DECIDES_ENBALE)
4856                         val64 |= VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_LACP_DECIDES;
4857                 else
4858                         val64 &= ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_LACP_DECIDES;
4859         }
4860
4861         if (lag_config->ap_mode_config.pref_active_port !=
4862             VXGE_HAL_LAG_PREF_ACTIVE_PORT_DEFAULT) {
4863                 if (lag_config->ap_mode_config.pref_active_port ==
4864                     VXGE_HAL_LAG_PREF_ACTIVE_PORT_1)
4865                         val64 |=
4866                             VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_PREF_ACTIVE_PORT_NUM;
4867                 else
4868                         val64 &=
4869                             ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_PREF_ACTIVE_PORT_NUM;
4870         }
4871
4872         if (lag_config->ap_mode_config.auto_failback !=
4873             VXGE_HAL_LAG_AUTO_FAILBACK_DEFAULT) {
4874                 if (lag_config->ap_mode_config.auto_failback ==
4875                     VXGE_HAL_LAG_AUTO_FAILBACK_ENBALE)
4876                         val64 |= VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_AUTO_FAILBACK;
4877                 else
4878                         val64 &= ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_AUTO_FAILBACK;
4879         }
4880
4881         if (lag_config->ap_mode_config.failback_en !=
4882             VXGE_HAL_LAG_FAILBACK_EN_DEFAULT) {
4883                 if (lag_config->ap_mode_config.failback_en ==
4884                     VXGE_HAL_LAG_FAILBACK_EN_ENBALE)
4885                         val64 |= VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_FAILBACK_EN;
4886                 else
4887                         val64 &= ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_FAILBACK_EN;
4888         }
4889
4890         if (lag_config->ap_mode_config.cold_failover_timeout !=
4891             VXGE_HAL_LAG_DEF_COLD_FAILOVER_TIMEOUT) {
4892                 val64 &= ~VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_COLD_FAILOVER_TIMEOUT(
4893                     0xffff);
4894                 val64 |= VXGE_HAL_LAG_ACTIVE_PASSIVE_CFG_COLD_FAILOVER_TIMEOUT(
4895                     lag_config->ap_mode_config.cold_failover_timeout);
4896         }
4897
4898         vxge_os_pio_mem_write64(hldev->header.pdev,
4899             hldev->header.regh0,
4900             val64,
4901             &hldev->mrpcim_reg->lag_active_passive_cfg);
4902
4903         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4904             hldev->header.regh0,
4905             &hldev->mrpcim_reg->lag_lacp_cfg);
4906
4907         if (lag_config->lacp_config.lacp_en !=
4908             VXGE_HAL_LAG_LACP_EN_DEFAULT) {
4909                 if (lag_config->lacp_config.lacp_en ==
4910                     VXGE_HAL_LAG_LACP_EN_ENABLE)
4911                         val64 |= VXGE_HAL_LAG_LACP_CFG_EN;
4912                 else
4913                         val64 &= ~VXGE_HAL_LAG_LACP_CFG_EN;
4914         }
4915
4916         if (lag_config->lacp_config.lacp_begin !=
4917             VXGE_HAL_LAG_LACP_BEGIN_DEFAULT) {
4918                 if (lag_config->lacp_config.lacp_begin ==
4919                     VXGE_HAL_LAG_LACP_BEGIN_RESET)
4920                         val64 |= VXGE_HAL_LAG_LACP_CFG_LACP_BEGIN;
4921                 else
4922                         val64 &= ~VXGE_HAL_LAG_LACP_CFG_LACP_BEGIN;
4923         }
4924
4925         if (lag_config->lacp_config.discard_lacp !=
4926             VXGE_HAL_LAG_DISCARD_LACP_DEFAULT) {
4927                 if (lag_config->lacp_config.discard_lacp ==
4928                     VXGE_HAL_LAG_DISCARD_LACP_ENABLE)
4929                         val64 |= VXGE_HAL_LAG_LACP_CFG_DISCARD_LACP;
4930                 else
4931                         val64 &= ~VXGE_HAL_LAG_LACP_CFG_DISCARD_LACP;
4932         }
4933
4934         if (lag_config->lacp_config.liberal_len_chk !=
4935             VXGE_HAL_LAG_LIBERAL_LEN_CHK_DEFAULT) {
4936                 if (lag_config->lacp_config.liberal_len_chk ==
4937                     VXGE_HAL_LAG_LIBERAL_LEN_CHK_ENABLE)
4938                         val64 |= VXGE_HAL_LAG_LACP_CFG_LIBERAL_LEN_CHK;
4939                 else
4940                         val64 &= ~VXGE_HAL_LAG_LACP_CFG_LIBERAL_LEN_CHK;
4941         }
4942
4943         vxge_os_pio_mem_write64(hldev->header.pdev,
4944             hldev->header.regh0,
4945             val64,
4946             &hldev->mrpcim_reg->lag_lacp_cfg);
4947
4948         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
4949             hldev->header.regh0,
4950             &hldev->mrpcim_reg->lag_marker_cfg);
4951
4952         if (lag_config->lacp_config.marker_gen_recv_en !=
4953             VXGE_HAL_LAG_MARKER_GEN_RECV_EN_DEFAULT) {
4954                 if (lag_config->lacp_config.marker_gen_recv_en ==
4955                     VXGE_HAL_LAG_MARKER_GEN_RECV_EN_ENABLE)
4956                         val64 |= VXGE_HAL_LAG_MARKER_CFG_GEN_RCVR_EN;
4957                 else
4958                         val64 &= ~VXGE_HAL_LAG_MARKER_CFG_GEN_RCVR_EN;
4959         }
4960
4961         if (lag_config->lacp_config.marker_resp_en !=
4962             VXGE_HAL_LAG_MARKER_RESP_EN_DEFAULT) {
4963                 if (lag_config->lacp_config.marker_resp_en ==
4964                     VXGE_HAL_LAG_MARKER_RESP_EN_ENABLE)
4965                         val64 |= VXGE_HAL_LAG_MARKER_CFG_RESP_EN;
4966                 else
4967                         val64 &= ~VXGE_HAL_LAG_MARKER_CFG_RESP_EN;
4968         }
4969
4970         if (lag_config->lacp_config.marker_resp_timeout !=
4971             VXGE_HAL_LAG_DEF_MARKER_RESP_TIMEOUT) {
4972                 val64 &= ~VXGE_HAL_LAG_MARKER_CFG_RESP_TIMEOUT(0xffff);
4973                 val64 |= VXGE_HAL_LAG_MARKER_CFG_RESP_TIMEOUT(
4974                     lag_config->lacp_config.marker_resp_timeout);
4975         }
4976
4977         if (lag_config->lacp_config.slow_proto_mrkr_min_interval !=
4978             VXGE_HAL_LAG_DEF_SLOW_PROTO_MRKR_MIN_INTERVAL) {
4979                 val64 &= ~VXGE_HAL_LAG_MARKER_CFG_SLOW_PROTO_MRKR_MIN_INTERVAL(
4980                     0xffff);
4981                 val64 |= VXGE_HAL_LAG_MARKER_CFG_SLOW_PROTO_MRKR_MIN_INTERVAL(
4982                     lag_config->lacp_config.slow_proto_mrkr_min_interval);
4983         }
4984
4985         if (lag_config->lacp_config.throttle_mrkr_resp !=
4986             VXGE_HAL_LAG_THROTTLE_MRKR_RESP_DEFAULT) {
4987                 if (lag_config->lacp_config.throttle_mrkr_resp ==
4988                     VXGE_HAL_LAG_THROTTLE_MRKR_RESP_ENABLE)
4989                         val64 |= VXGE_HAL_LAG_MARKER_CFG_THROTTLE_MRKR_RESP;
4990                 else
4991                         val64 &= ~VXGE_HAL_LAG_MARKER_CFG_THROTTLE_MRKR_RESP;
4992         }
4993
4994         vxge_os_pio_mem_write64(hldev->header.pdev,
4995             hldev->header.regh0,
4996             val64,
4997             &hldev->mrpcim_reg->lag_marker_cfg);
4998
4999         for (i = 0; i < VXGE_HAL_LAG_PORT_MAX_PORTS; i++) {
5000
5001                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5002                     hldev->header.regh0,
5003                     &hldev->mrpcim_reg->lag_port_cfg[i]);
5004
5005                 if (lag_config->port_config[i].lag_en !=
5006                     VXGE_HAL_LAG_PORT_LAG_EN_DEFAULT) {
5007                         if (lag_config->port_config[i].lag_en ==
5008                             VXGE_HAL_LAG_PORT_LAG_EN_ENABLE)
5009                                 val64 |= VXGE_HAL_LAG_PORT_CFG_EN;
5010                         else
5011                                 val64 &= ~VXGE_HAL_LAG_PORT_CFG_EN;
5012                 }
5013
5014                 if (lag_config->port_config[i].discard_slow_proto !=
5015                     VXGE_HAL_LAG_PORT_DISCARD_SLOW_PROTO_DEFAULT) {
5016                         if (lag_config->port_config[i].discard_slow_proto ==
5017                             VXGE_HAL_LAG_PORT_DISCARD_SLOW_PROTO_ENABLE)
5018                                 val64 |=
5019                                     VXGE_HAL_LAG_PORT_CFG_DISCARD_SLOW_PROTO;
5020                         else
5021                                 val64 &=
5022                                     ~VXGE_HAL_LAG_PORT_CFG_DISCARD_SLOW_PROTO;
5023                 }
5024
5025                 if (lag_config->port_config[i].host_chosen_aggr !=
5026                     VXGE_HAL_LAG_PORT_HOST_CHOSEN_AGGR_DEFAULT) {
5027                         if (lag_config->port_config[i].host_chosen_aggr ==
5028                             VXGE_HAL_LAG_PORT_HOST_CHOSEN_AGGR_1)
5029                                 val64 |=
5030                                     VXGE_HAL_LAG_PORT_CFG_HOST_CHOSEN_AGGR;
5031                         else
5032                                 val64 &=
5033                                     ~VXGE_HAL_LAG_PORT_CFG_HOST_CHOSEN_AGGR;
5034                 }
5035
5036                 if (lag_config->port_config[i].discard_unknown_slow_proto !=
5037                     VXGE_HAL_LAG_PORT_DISCARD_UNKNOWN_SLOW_PROTO_DEFAULT) {
5038                         if (lag_config->port_config[i].discard_unknown_slow_proto ==
5039                             VXGE_HAL_LAG_PORT_DISCARD_UNKNOWN_SLOW_PROTO_ENABLE)
5040                                 val64 |=
5041                                     VXGE_HAL_LAG_PORT_CFG_DISCARD_UNKNOWN_SLOW_PROTO;
5042                         else
5043                                 val64 &=
5044                                     ~VXGE_HAL_LAG_PORT_CFG_DISCARD_UNKNOWN_SLOW_PROTO;
5045                 }
5046
5047                 vxge_os_pio_mem_write64(hldev->header.pdev,
5048                     hldev->header.regh0,
5049                     val64,
5050                     &hldev->mrpcim_reg->lag_port_cfg[i]);
5051
5052                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5053                     hldev->header.regh0,
5054                     &hldev->mrpcim_reg->lag_port_actor_admin_cfg[i]);
5055
5056                 if (lag_config->port_config[i].actor_port_num !=
5057                     VXGE_HAL_LAG_PORT_DEF_ACTOR_PORT_NUM) {
5058                         val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_PORT_NUM(
5059                             0xffff);
5060                         val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_PORT_NUM(
5061                             lag_config->port_config[i].actor_port_num);
5062                 }
5063
5064                 if (lag_config->port_config[i].actor_port_priority !=
5065                     VXGE_HAL_LAG_PORT_DEF_ACTOR_PORT_PRIORITY) {
5066                         val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_PORT_PRI(
5067                             0xffff);
5068                         val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_PORT_PRI(
5069                             lag_config->port_config[i].actor_port_priority);
5070                 }
5071
5072                 if (lag_config->port_config[i].actor_key_10g !=
5073                     VXGE_HAL_LAG_PORT_DEF_ACTOR_KEY_10G) {
5074                         val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_KEY_10G(
5075                             0xffff);
5076                         val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_KEY_10G(
5077                             lag_config->port_config[i].actor_key_10g);
5078                 }
5079
5080                 if (lag_config->port_config[i].actor_key_1g !=
5081                     VXGE_HAL_LAG_PORT_DEF_ACTOR_KEY_1G) {
5082                         val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_KEY_1G(
5083                             0xffff);
5084                         val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_CFG_KEY_1G(
5085                             lag_config->port_config[i].actor_key_1g);
5086                 }
5087
5088                 vxge_os_pio_mem_write64(hldev->header.pdev,
5089                     hldev->header.regh0,
5090                     val64,
5091                     &hldev->mrpcim_reg->lag_port_actor_admin_cfg[i]);
5092
5093                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5094                     hldev->header.regh0,
5095                     &hldev->mrpcim_reg->lag_port_actor_admin_state[i]);
5096
5097                 if (lag_config->port_config[i].actor_lacp_activity !=
5098                     VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_DEFAULT) {
5099                         if (lag_config->port_config[i].actor_lacp_activity ==
5100                             VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_ACTIVE)
5101                                 val64 |=
5102                                     VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_LACP_ACTIVITY;
5103                         else
5104                                 val64 &=
5105                                     ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_LACP_ACTIVITY;
5106                 }
5107
5108                 if (lag_config->port_config[i].actor_lacp_timeout !=
5109                     VXGE_HAL_LAG_PORT_ACTOR_LACP_ACTIVITY_DEFAULT) {
5110                         if (lag_config->port_config[i].actor_lacp_timeout ==
5111                             VXGE_HAL_LAG_PORT_ACTOR_LACP_TIMEOUT_SHORT)
5112                                 val64 |=
5113                                     VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_LACP_TIMEOUT;
5114                         else
5115                                 val64 &=
5116                                     ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_LACP_TIMEOUT;
5117                 }
5118
5119                 if (lag_config->port_config[i].actor_aggregation !=
5120                     VXGE_HAL_LAG_PORT_ACTOR_AGGREGATION_DEFAULT) {
5121                         if (lag_config->port_config[i].actor_aggregation ==
5122                             VXGE_HAL_LAG_PORT_ACTOR_AGGREGATION_AGGREGATEABLE)
5123                                 val64 |=
5124                                     VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_AGGREGATION;
5125                         else
5126                                 val64 &=
5127                                     ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_AGGREGATION;
5128                 }
5129
5130                 if (lag_config->port_config[i].actor_synchronization !=
5131                     VXGE_HAL_LAG_PORT_ACTOR_SYNCHRONIZATION_DEFAULT) {
5132                         if (lag_config->port_config[i].actor_aggregation ==
5133                             VXGE_HAL_LAG_PORT_ACTOR_SYNCHRONIZATION_IN_SYNC)
5134                                 val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_SYNCHRONIZATION;
5135                         else
5136                                 val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_SYNCHRONIZATION;
5137                 }
5138
5139                 if (lag_config->port_config[i].actor_collecting !=
5140                     VXGE_HAL_LAG_PORT_ACTOR_COLLECTING_DEFAULT) {
5141                         if (lag_config->port_config[i].actor_collecting ==
5142                             VXGE_HAL_LAG_PORT_ACTOR_COLLECTING_ENABLE)
5143                                 val64 |=
5144                                     VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_COLLECTING;
5145                         else
5146                                 val64 &=
5147                                     ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_COLLECTING;
5148                 }
5149
5150                 if (lag_config->port_config[i].actor_distributing !=
5151                     VXGE_HAL_LAG_PORT_ACTOR_DISTRIBUTING_DEFAULT) {
5152                         if (lag_config->port_config[i].actor_distributing ==
5153                             VXGE_HAL_LAG_PORT_ACTOR_DISTRIBUTING_ENABLE)
5154                                 val64 |=
5155                                     VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_DISTRIBUTING;
5156                         else
5157                                 val64 &=
5158                                     ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_DISTRIBUTING;
5159                 }
5160
5161                 if (lag_config->port_config[i].actor_defaulted !=
5162                     VXGE_HAL_LAG_PORT_ACTOR_DEFAULTED_DEFAULT) {
5163                         if (lag_config->port_config[i].actor_defaulted ==
5164                             VXGE_HAL_LAG_PORT_ACTOR_NOT_DEFAULTED)
5165                                 val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_DEFAULTED;
5166                         else
5167                                 val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_DEFAULTED;
5168                 }
5169
5170                 if (lag_config->port_config[i].actor_expired !=
5171                     VXGE_HAL_LAG_PORT_ACTOR_EXPIRED_DEFAULT) {
5172                         if (lag_config->port_config[i].actor_expired ==
5173                             VXGE_HAL_LAG_PORT_ACTOR_NOT_EXPIRED)
5174                                 val64 |= VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_EXPIRED;
5175                         else
5176                                 val64 &= ~VXGE_HAL_LAG_PORT_ACTOR_ADMIN_STATE_EXPIRED;
5177                 }
5178
5179                 vxge_os_pio_mem_write64(hldev->header.pdev,
5180                     hldev->header.regh0,
5181                     val64,
5182                     &hldev->mrpcim_reg->lag_port_actor_admin_state[i]);
5183
5184                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5185                     hldev->header.regh0,
5186                     &hldev->mrpcim_reg->lag_port_partner_admin_cfg[i]);
5187
5188                 if (lag_config->port_config[i].partner_sys_pri !=
5189                     VXGE_HAL_LAG_PORT_DEF_PARTNER_SYS_PRI) {
5190                         val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_SYS_PRI(
5191                             0xffff);
5192                         val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_SYS_PRI(
5193                             lag_config->port_config[i].partner_sys_pri);
5194                 }
5195
5196                 if (lag_config->port_config[i].partner_key !=
5197                     VXGE_HAL_LAG_PORT_DEF_PARTNER_KEY) {
5198                         val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_KEY(
5199                             0xffff);
5200                         val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_KEY(
5201                             lag_config->port_config[i].partner_key);
5202                 }
5203
5204                 if (lag_config->port_config[i].partner_port_num !=
5205                     VXGE_HAL_LAG_PORT_DEF_PARTNER_PORT_NUM) {
5206                         val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_PORT_NUM(
5207                             0xffff);
5208                         val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_PORT_NUM(
5209                             lag_config->port_config[i].partner_port_num);
5210                 }
5211
5212                 if (lag_config->port_config[i].partner_port_priority !=
5213                     VXGE_HAL_LAG_PORT_DEF_PARTNER_PORT_PRIORITY) {
5214                         val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_PORT_PRI(
5215                             0xffff);
5216                         val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_CFG_PORT_PRI(
5217                             lag_config->port_config[i].actor_port_priority);
5218                 }
5219
5220                 vxge_os_pio_mem_write64(hldev->header.pdev,
5221                     hldev->header.regh0,
5222                     val64,
5223                     &hldev->mrpcim_reg->lag_port_partner_admin_cfg[i]);
5224
5225                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5226                     hldev->header.regh0,
5227                     &hldev->mrpcim_reg->lag_port_partner_admin_state[i]);
5228
5229                 if (lag_config->port_config[i].partner_lacp_activity !=
5230                     VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_DEFAULT) {
5231                         if (lag_config->port_config[i].partner_lacp_activity ==
5232                             VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_ACTIVE)
5233                                 val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_LACP_ACTIVITY;
5234                         else
5235                                 val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_LACP_ACTIVITY;
5236                 }
5237
5238                 if (lag_config->port_config[i].partner_lacp_timeout !=
5239                     VXGE_HAL_LAG_PORT_PARTNER_LACP_ACTIVITY_DEFAULT) {
5240                         if (lag_config->port_config[i].partner_lacp_timeout ==
5241                             VXGE_HAL_LAG_PORT_PARTNER_LACP_TIMEOUT_SHORT)
5242                                 val64 |=
5243                                     VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_LACP_TIMEOUT;
5244                         else
5245                                 val64 &=
5246                                     ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_LACP_TIMEOUT;
5247                 }
5248
5249                 if (lag_config->port_config[i].partner_aggregation !=
5250                     VXGE_HAL_LAG_PORT_PARTNER_AGGREGATION_DEFAULT) {
5251                         if (lag_config->port_config[i].partner_aggregation ==
5252                             VXGE_HAL_LAG_PORT_PARTNER_AGGREGATION_AGGREGATEABLE)
5253                                 val64 |=
5254                                     VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_AGGREGATION;
5255                         else
5256                                 val64 &=
5257                                     ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_AGGREGATION;
5258                 }
5259
5260                 if (lag_config->port_config[i].partner_synchronization !=
5261                     VXGE_HAL_LAG_PORT_PARTNER_SYNCHRONIZATION_DEFAULT) {
5262                         if (lag_config->port_config[i].partner_aggregation ==
5263                             VXGE_HAL_LAG_PORT_PARTNER_SYNCHRONIZATION_IN_SYNC)
5264                                 val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_SYNCHRONIZATION;
5265                         else
5266                                 val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_SYNCHRONIZATION;
5267                 }
5268
5269                 if (lag_config->port_config[i].partner_collecting !=
5270                     VXGE_HAL_LAG_PORT_PARTNER_COLLECTING_DEFAULT) {
5271                         if (lag_config->port_config[i].partner_collecting ==
5272                             VXGE_HAL_LAG_PORT_PARTNER_COLLECTING_ENABLE)
5273                                 val64 |=
5274                                     VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_COLLECTING;
5275                         else
5276                                 val64 &=
5277                                     ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_COLLECTING;
5278                 }
5279
5280                 if (lag_config->port_config[i].partner_distributing !=
5281                     VXGE_HAL_LAG_PORT_PARTNER_DISTRIBUTING_DEFAULT) {
5282                         if (lag_config->port_config[i].partner_distributing ==
5283                             VXGE_HAL_LAG_PORT_PARTNER_DISTRIBUTING_ENABLE)
5284                                 val64 |=
5285                                     VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_DISTRIBUTING;
5286                         else
5287                                 val64 &=
5288                                     ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_DISTRIBUTING;
5289                 }
5290
5291                 if (lag_config->port_config[i].partner_defaulted !=
5292                     VXGE_HAL_LAG_PORT_PARTNER_DEFAULTED_DEFAULT) {
5293                         if (lag_config->port_config[i].partner_defaulted ==
5294                             VXGE_HAL_LAG_PORT_PARTNER_NOT_DEFAULTED)
5295                                 val64 |=
5296                                     VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_DEFAULTED;
5297                         else
5298                                 val64 &=
5299                                     ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_DEFAULTED;
5300                 }
5301
5302                 if (lag_config->port_config[i].partner_expired !=
5303                     VXGE_HAL_LAG_PORT_PARTNER_EXPIRED_DEFAULT) {
5304                         if (lag_config->port_config[i].partner_expired ==
5305                             VXGE_HAL_LAG_PORT_PARTNER_NOT_EXPIRED)
5306                                 val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_EXPIRED;
5307                         else
5308                                 val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_STATE_EXPIRED;
5309                 }
5310
5311                 vxge_os_pio_mem_write64(hldev->header.pdev,
5312                     hldev->header.regh0,
5313                     val64,
5314                     &hldev->mrpcim_reg->lag_port_partner_admin_state[i]);
5315
5316                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5317                     hldev->header.regh0,
5318                     &hldev->mrpcim_reg->lag_port_partner_admin_sys_id[i]);
5319
5320                 mac_addr = 0;
5321
5322                 for (j = 0; j < VXGE_HAL_ETH_ALEN; j++) {
5323                         mac_addr <<= 8;
5324                         mac_addr |=
5325                             (u8) lag_config->port_config[i].partner_mac_addr[j];
5326                 }
5327
5328                 if (mac_addr != 0xffffffffffffULL) {
5329                         val64 &= ~VXGE_HAL_LAG_PORT_PARTNER_ADMIN_SYS_ID_ADDR(
5330                             0xffffffffffffULL);
5331                         val64 |= VXGE_HAL_LAG_PORT_PARTNER_ADMIN_SYS_ID_ADDR(
5332                             mac_addr);
5333                 }
5334
5335                 vxge_os_pio_mem_write64(hldev->header.pdev,
5336                     hldev->header.regh0,
5337                     val64,
5338                     &hldev->mrpcim_reg->lag_port_partner_admin_sys_id[i]);
5339
5340         }
5341
5342         for (i = 0; i < VXGE_HAL_LAG_AGGR_MAX_PORTS; i++) {
5343
5344                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5345                     hldev->header.regh0,
5346                     &hldev->mrpcim_reg->lag_aggr_id_cfg[i]);
5347
5348                 val64 &= ~VXGE_HAL_LAG_AGGR_ID_CFG_ID(0xffff);
5349                 val64 |= VXGE_HAL_LAG_AGGR_ID_CFG_ID(
5350                     lag_config->aggr_config[i].aggr_id);
5351
5352                 vxge_os_pio_mem_write64(hldev->header.pdev,
5353                     hldev->header.regh0,
5354                     val64,
5355                     &hldev->mrpcim_reg->lag_aggr_id_cfg[i]);
5356
5357                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5358                     hldev->header.regh0,
5359                     &hldev->mrpcim_reg->lag_aggr_addr_cfg[i]);
5360
5361                 mac_addr = 0;
5362
5363                 for (j = 0; j < VXGE_HAL_ETH_ALEN; j++) {
5364                         mac_addr <<= 8;
5365                         mac_addr |= (u8) lag_config->aggr_config[i].mac_addr[j];
5366                 }
5367
5368                 if (mac_addr != 0xffffffffffffULL) {
5369                         val64 &=
5370                             ~VXGE_HAL_LAG_AGGR_ADDR_CFG_ADDR(0xffffffffffffULL);
5371                         val64 |= VXGE_HAL_LAG_AGGR_ADDR_CFG_ADDR(mac_addr);
5372                 }
5373
5374                 if (lag_config->aggr_config[i].use_port_mac_addr !=
5375                     VXGE_HAL_LAG_AGGR_USE_PORT_MAC_ADDR_DEFAULT) {
5376                         if (lag_config->aggr_config[i].use_port_mac_addr ==
5377                             VXGE_HAL_LAG_AGGR_USE_PORT_MAC_ADDR_ENABLE)
5378                                 val64 |=
5379                                     VXGE_HAL_LAG_AGGR_ADDR_CFG_USE_PORT_ADDR;
5380                         else
5381                                 val64 &=
5382                                     ~VXGE_HAL_LAG_AGGR_ADDR_CFG_USE_PORT_ADDR;
5383                 }
5384
5385                 if (lag_config->aggr_config[i].mac_addr_sel !=
5386                     VXGE_HAL_LAG_AGGR_MAC_ADDR_SEL_DEFAULT) {
5387                         if (lag_config->aggr_config[i].mac_addr_sel ==
5388                             VXGE_HAL_LAG_AGGR_MAC_ADDR_SEL_PORT_1)
5389                                 val64 |= VXGE_HAL_LAG_AGGR_ADDR_CFG_ADDR_SEL;
5390                         else
5391                                 val64 &= ~VXGE_HAL_LAG_AGGR_ADDR_CFG_ADDR_SEL;
5392                 }
5393
5394                 vxge_os_pio_mem_write64(hldev->header.pdev,
5395                     hldev->header.regh0,
5396                     val64,
5397                     &hldev->mrpcim_reg->lag_aggr_addr_cfg[i]);
5398
5399                 if (lag_config->aggr_config[i].admin_key ==
5400                     VXGE_HAL_LAG_AGGR_DEF_ADMIN_KEY) {
5401                         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5402                             hldev->header.regh0,
5403                             &hldev->mrpcim_reg->lag_aggr_admin_key[i]);
5404
5405                         val64 &= ~VXGE_HAL_LAG_AGGR_ADMIN_KEY_KEY(0xffff);
5406                         val64 |= VXGE_HAL_LAG_AGGR_ADMIN_KEY_KEY(
5407                             lag_config->aggr_config[i].admin_key);
5408
5409                         vxge_os_pio_mem_write64(hldev->header.pdev,
5410                             hldev->header.regh0,
5411                             val64,
5412                             &hldev->mrpcim_reg->lag_aggr_admin_key[i]);
5413                 }
5414         }
5415
5416         if (lag_config->sys_pri != VXGE_HAL_LAG_DEF_SYS_PRI) {
5417                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5418                     hldev->header.regh0,
5419                     &hldev->mrpcim_reg->lag_sys_cfg);
5420
5421                 val64 &= ~VXGE_HAL_LAG_SYS_CFG_SYS_PRI(0xffff);
5422                 val64 |= VXGE_HAL_LAG_SYS_CFG_SYS_PRI(
5423                     lag_config->sys_pri);
5424
5425                 vxge_os_pio_mem_write64(hldev->header.pdev,
5426                     hldev->header.regh0,
5427                     val64,
5428                     &hldev->mrpcim_reg->lag_sys_cfg);
5429         }
5430
5431         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5432             hldev->header.regh0,
5433             &hldev->mrpcim_reg->lag_sys_id);
5434
5435         mac_addr = 0;
5436
5437         for (j = 0; j < VXGE_HAL_ETH_ALEN; j++) {
5438                 mac_addr <<= 8;
5439                 mac_addr |= (u8) lag_config->mac_addr[j];
5440         }
5441
5442         if (mac_addr != 0xffffffffffffULL) {
5443                 val64 &= ~VXGE_HAL_LAG_SYS_ID_ADDR(0xffffffffffffULL);
5444                 val64 |= VXGE_HAL_LAG_SYS_ID_ADDR(mac_addr);
5445         }
5446
5447         if (lag_config->use_port_mac_addr !=
5448             VXGE_HAL_LAG_USE_PORT_MAC_ADDR_DEFAULT) {
5449                 if (lag_config->use_port_mac_addr ==
5450                     VXGE_HAL_LAG_USE_PORT_MAC_ADDR_ENABLE)
5451                         val64 |= VXGE_HAL_LAG_SYS_ID_USE_PORT_ADDR;
5452                 else
5453                         val64 &= ~VXGE_HAL_LAG_SYS_ID_USE_PORT_ADDR;
5454         }
5455
5456         if (lag_config->mac_addr_sel != VXGE_HAL_LAG_MAC_ADDR_SEL_DEFAULT) {
5457                 if (lag_config->mac_addr_sel ==
5458                     VXGE_HAL_LAG_MAC_ADDR_SEL_PORT_1)
5459                         val64 |= VXGE_HAL_LAG_SYS_ID_ADDR_SEL;
5460                 else
5461                         val64 &= ~VXGE_HAL_LAG_SYS_ID_ADDR_SEL;
5462         }
5463
5464         vxge_os_pio_mem_write64(hldev->header.pdev,
5465             hldev->header.regh0,
5466             val64,
5467             &hldev->mrpcim_reg->lag_sys_id);
5468
5469
5470         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5471             hldev->header.regh0,
5472             &hldev->mrpcim_reg->lag_aggr_alt_admin_key);
5473
5474         if (lag_config->ap_mode_config.alt_admin_key !=
5475             VXGE_HAL_LAG_DEF_ALT_ADMIN_KEY) {
5476                 val64 &= ~VXGE_HAL_LAG_AGGR_ALT_ADMIN_KEY_KEY(0xffff);
5477                 val64 |= VXGE_HAL_LAG_AGGR_ALT_ADMIN_KEY_KEY(
5478                     lag_config->ap_mode_config.alt_admin_key);
5479         }
5480
5481         if (lag_config->ap_mode_config.alt_aggr !=
5482             VXGE_HAL_LAG_ALT_AGGR_DEFAULT) {
5483                 if (lag_config->ap_mode_config.alt_aggr ==
5484                     VXGE_HAL_LAG_ALT_AGGR_1)
5485                         val64 |= VXGE_HAL_LAG_AGGR_ALT_ADMIN_KEY_ALT_AGGR;
5486                 else
5487                         val64 &= ~VXGE_HAL_LAG_AGGR_ALT_ADMIN_KEY_ALT_AGGR;
5488         }
5489
5490         vxge_os_pio_mem_write64(hldev->header.pdev,
5491             hldev->header.regh0,
5492             val64,
5493             &hldev->mrpcim_reg->lag_aggr_alt_admin_key);
5494
5495         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5496             hldev->header.regh0,
5497             &hldev->mrpcim_reg->lag_timer_cfg_1);
5498
5499         if (lag_config->fast_per_time != VXGE_HAL_LAG_DEF_FAST_PER_TIME) {
5500                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_1_FAST_PER(0xffff);
5501                 val64 |= VXGE_HAL_LAG_TIMER_CFG_1_FAST_PER(
5502                     lag_config->fast_per_time);
5503         }
5504
5505         if (lag_config->slow_per_time != VXGE_HAL_LAG_DEF_SLOW_PER_TIME) {
5506                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_1_SLOW_PER(0xffff);
5507                 val64 |= VXGE_HAL_LAG_TIMER_CFG_1_SLOW_PER(
5508                     lag_config->slow_per_time);
5509         }
5510
5511         if (lag_config->short_timeout != VXGE_HAL_LAG_DEF_SHORT_TIMEOUT) {
5512                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_1_SHORT_TIMEOUT(0xffff);
5513                 val64 |= VXGE_HAL_LAG_TIMER_CFG_1_SHORT_TIMEOUT(
5514                     lag_config->short_timeout);
5515         }
5516
5517         if (lag_config->long_timeout != VXGE_HAL_LAG_DEF_LONG_TIMEOUT) {
5518                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_1_LONG_TIMEOUT(0xffff);
5519                 val64 |= VXGE_HAL_LAG_TIMER_CFG_1_LONG_TIMEOUT(
5520                     lag_config->short_timeout);
5521         }
5522
5523         vxge_os_pio_mem_write64(hldev->header.pdev,
5524             hldev->header.regh0,
5525             val64,
5526             &hldev->mrpcim_reg->lag_timer_cfg_1);
5527
5528         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
5529             hldev->header.regh0,
5530             &hldev->mrpcim_reg->lag_timer_cfg_2);
5531
5532         if (lag_config->churn_det_time != VXGE_HAL_LAG_DEF_CHURN_DET_TIME) {
5533                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_2_CHURN_DET(0xffff);
5534                 val64 |= VXGE_HAL_LAG_TIMER_CFG_2_CHURN_DET(
5535                     lag_config->churn_det_time);
5536         }
5537
5538         if (lag_config->aggr_wait_time != VXGE_HAL_LAG_DEF_AGGR_WAIT_TIME) {
5539                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_2_AGGR_WAIT(0xffff);
5540                 val64 |= VXGE_HAL_LAG_TIMER_CFG_2_AGGR_WAIT(
5541                     lag_config->slow_per_time);
5542         }
5543
5544         if (lag_config->short_timer_scale !=
5545             VXGE_HAL_LAG_SHORT_TIMER_SCALE_DEFAULT) {
5546                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_2_SHORT_TIMER_SCALE(0xffff);
5547                 val64 |= VXGE_HAL_LAG_TIMER_CFG_2_SHORT_TIMER_SCALE(
5548                     lag_config->short_timer_scale);
5549         }
5550
5551         if (lag_config->long_timer_scale !=
5552             VXGE_HAL_LAG_LONG_TIMER_SCALE_DEFAULT) {
5553                 val64 &= ~VXGE_HAL_LAG_TIMER_CFG_2_LONG_TIMER_SCALE(0xffff);
5554                 val64 |= VXGE_HAL_LAG_TIMER_CFG_2_LONG_TIMER_SCALE(
5555                     lag_config->long_timer_scale);
5556         }
5557
5558         vxge_os_pio_mem_write64(hldev->header.pdev,
5559             hldev->header.regh0,
5560             val64,
5561             &hldev->mrpcim_reg->lag_timer_cfg_2);
5562
5563         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
5564             __FILE__, __func__, __LINE__, status);
5565         return (status);
5566
5567 }
5568
5569 /*
5570  * __hal_mrpcim_get_vpd_data - Getting vpd_data.
5571  *
5572  * @hldev: HAL device handle.
5573  *
5574  * Getting  product name and serial number from vpd capabilites structure
5575  *
5576  */
5577 void
5578 __hal_mrpcim_get_vpd_data(__hal_device_t *hldev)
5579 {
5580         u8 *vpd_data;
5581         u16 data;
5582         u32 data32;
5583         u32 i, j, count, fail = 0;
5584         u32 addr_offset, data_offset;
5585         u32 max_count = hldev->header.config.device_poll_millis * 10;
5586
5587         vxge_assert(hldev);
5588
5589         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
5590             __FILE__, __func__, __LINE__);
5591
5592         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
5593             (ptr_t) hldev);
5594
5595         addr_offset = hldev->pci_caps.vpd_cap_offset +
5596             vxge_offsetof(vxge_hal_vpid_capability_le_t, vpd_address);
5597
5598         data_offset = hldev->pci_caps.vpd_cap_offset +
5599             vxge_offsetof(vxge_hal_vpid_capability_le_t, vpd_data);
5600
5601         vxge_os_strlcpy((char *) hldev->mrpcim->vpd_data.product_name,
5602             "10 Gigabit Ethernet Adapter",
5603             sizeof(hldev->mrpcim->vpd_data.product_name));
5604         vxge_os_strlcpy((char *) hldev->mrpcim->vpd_data.serial_num,
5605             "not available",
5606             sizeof(hldev->mrpcim->vpd_data.serial_num));
5607
5608         if (hldev->func_id != 0) {
5609                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
5610                     __FILE__, __func__, __LINE__,
5611                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
5612                 return;
5613         }
5614         vpd_data = (u8 *) vxge_os_malloc(hldev->header.pdev,
5615             VXGE_HAL_VPD_BUFFER_SIZE + 16);
5616         if (vpd_data == 0)
5617                 return;
5618
5619         for (i = 0; i < VXGE_HAL_VPD_BUFFER_SIZE; i += 4) {
5620                 vxge_os_pci_write16(hldev->header.pdev,
5621                     hldev->header.cfgh,
5622                     addr_offset, (u16) i);
5623                 for (count = 0; count < max_count; count++) {
5624                         vxge_os_udelay(100);
5625                         (void) __hal_vpath_pci_read(hldev,
5626                             hldev->first_vp_id,
5627                             addr_offset, 2, &data);
5628                         if (data & VXGE_HAL_PCI_VPID_COMPL_FALG)
5629                                 break;
5630                 }
5631
5632                 if (count >= max_count) {
5633                         vxge_hal_info_log_device("%s:ERR, \
5634                             Reading VPD data failed", __func__);
5635                         fail = 1;
5636                         break;
5637                 }
5638                 (void) __hal_vpath_pci_read(hldev,
5639                     hldev->first_vp_id,
5640                     data_offset,
5641                     4,
5642                     &data32);
5643
5644                 for (j = 0; j < 4; j++) {
5645                         vpd_data[i + j] = (u8) (data32 & 0xff);
5646                         data32 >>= 8;
5647                 }
5648         }
5649
5650         if (!fail) {
5651
5652                 /* read serial number of adapter */
5653                 for (count = 0; count < VXGE_HAL_VPD_BUFFER_SIZE; count++) {
5654                         if ((vpd_data[count] == 'S') &&
5655                             (vpd_data[count + 1] == 'N') &&
5656                             (vpd_data[count + 2] < VXGE_HAL_VPD_LENGTH)) {
5657                                 (void) vxge_os_memzero(
5658                                     hldev->mrpcim->vpd_data.serial_num,
5659                                     VXGE_HAL_VPD_LENGTH);
5660                                 (void) vxge_os_memcpy(
5661                                     hldev->mrpcim->vpd_data.serial_num,
5662                                     &vpd_data[count + 3],
5663                                     vpd_data[count + 2]);
5664                                 break;
5665                         }
5666                 }
5667
5668                 if (vpd_data[1] < VXGE_HAL_VPD_LENGTH) {
5669                         (void) vxge_os_memzero(
5670                             hldev->mrpcim->vpd_data.product_name, vpd_data[1]);
5671                         (void) vxge_os_memcpy(hldev->mrpcim->vpd_data.product_name,
5672                             &vpd_data[3], vpd_data[1]);
5673                 }
5674         }
5675
5676         vxge_os_free(hldev->header.pdev,
5677             vpd_data,
5678             VXGE_HAL_VPD_BUFFER_SIZE + 16);
5679
5680         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
5681             __FILE__, __func__, __LINE__, fail);
5682 }
5683
5684 /*
5685  * __hal_mrpcim_rts_table_access - Get/Set the entries from RTS access tables
5686  * @devh: Device handle.
5687  * @action: Write Enable. 0 - Read Operation; 1 - Write Operation
5688  * @rts_table: Data structure select. Identifies the RTS data structure
5689  *              (i.e. lookup table) to access.
5690  *              0; DA; Destination Address
5691  *              1; VID; VLAN ID
5692  *              2; ETYPE; Ethertype
5693  *              3; PN; Layer 4 Port Number
5694  *              4; RANGE_PN; Range of Layer 4 Port Numbers
5695  *              5; RTH_GEN_CFG; Receive-Traffic Hashing General Configuration
5696  *              6; RTH_SOLO_IT; Receive-Traffic Hashing Indirection Table
5697  *              (Single Bucket Programming)
5698  *              7; RTH_JHASH_CFG; Receive-Traffic Hashing Jenkins Hash Config
5699  *              8; RTH_MASK; Receive-Traffic Hashing Mask
5700  *              9; RTH_KEY; Receive-Traffic Hashing Key
5701  *              10; QOS; VLAN Quality of Service
5702  *              11; DS; IP Differentiated Services
5703  * @offset: Offset (into the data structure) to execute the command on.
5704  * @data1: Pointer to the data 1 to be read from the table
5705  * @data2: Pointer to the data 2 to be read from the table
5706  * @vpath_vector: Identifies the candidate VPATH(s) for the given entry.
5707  *              These VPATH(s) determine the set of target destinations for
5708  *              a frame that matches this steering entry. Any or all bits
5709  *              can be set, which handles 16+1 virtual paths in an 'n-hot'
5710  *              basis. VPATH 0 is the MSbit.
5711  *
5712  * Read from the RTS table
5713  *
5714  */
5715 vxge_hal_status_e
5716 __hal_mrpcim_rts_table_access(
5717     vxge_hal_device_h devh,
5718     u32 action,
5719     u32 rts_table,
5720     u32 offset,
5721     u64 *data1,
5722     u64 *data2,
5723     u64 *vpath_vector)
5724 {
5725         u64 val64;
5726         __hal_device_t *hldev;
5727         vxge_hal_status_e status = VXGE_HAL_OK;
5728
5729         vxge_assert((devh != NULL) && (data1 != NULL) &&
5730             (data2 != NULL) && (vpath_vector != NULL));
5731
5732         hldev = (__hal_device_t *) devh;
5733
5734         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
5735             __FILE__, __func__, __LINE__);
5736
5737         vxge_hal_trace_log_mrpcim(
5738             "devh = 0x"VXGE_OS_STXFMT", action = %d, rts_table = %d, "
5739             "offset = %d, data1 = 0x"VXGE_OS_STXFMT", "
5740             "data2 = 0x"VXGE_OS_STXFMT", vpath_vector = 0x"VXGE_OS_STXFMT,
5741             (ptr_t) devh, action, rts_table, offset, (ptr_t) data1,
5742             (ptr_t) data2, (ptr_t) vpath_vector);
5743
5744         val64 = VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL(rts_table) |
5745             VXGE_HAL_RTS_MGR_STEER_CTRL_STROBE |
5746             VXGE_HAL_RTS_MGR_STEER_CTRL_OFFSET(offset);
5747
5748         if (action == VXGE_HAL_RTS_MGR_STEER_CTRL_WE_WRITE)
5749                 val64 = VXGE_HAL_RTS_MGR_STEER_CTRL_WE;
5750
5751         if ((rts_table ==
5752             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_RTH_SOLO_IT) ||
5753             (rts_table ==
5754             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_RTH_MULTI_IT) ||
5755             (rts_table ==
5756             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_RTH_MASK) ||
5757             (rts_table ==
5758             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_RTH_KEY)) {
5759                 val64 |= VXGE_HAL_RTS_MGR_STEER_CTRL_TABLE_SEL;
5760         }
5761
5762         vxge_hal_pio_mem_write32_lower(hldev->header.pdev,
5763             hldev->header.regh0,
5764             (u32) bVAL32(val64, 32),
5765             &hldev->mrpcim_reg->rts_mgr_steer_ctrl);
5766
5767         vxge_os_wmb();
5768
5769         vxge_hal_pio_mem_write32_upper(hldev->header.pdev,
5770             hldev->header.regh0,
5771             (u32) bVAL32(val64, 0),
5772             &hldev->mrpcim_reg->rts_mgr_steer_ctrl);
5773
5774         vxge_os_wmb();
5775
5776         status = vxge_hal_device_register_poll(
5777             hldev->header.pdev,
5778             hldev->header.regh0,
5779             &hldev->mrpcim_reg->rts_mgr_steer_ctrl, 0,
5780             VXGE_HAL_RTS_MGR_STEER_CTRL_STROBE,
5781             WAIT_FACTOR * hldev->header.config.device_poll_millis);
5782
5783         if (status != VXGE_HAL_OK) {
5784
5785                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
5786                     __FILE__, __func__, __LINE__, status);
5787                 return (status);
5788         }
5789
5790         val64 = vxge_os_pio_mem_read64(
5791             hldev->header.pdev,
5792             hldev->header.regh0,
5793             &hldev->mrpcim_reg->rts_mgr_steer_ctrl);
5794
5795         if ((val64 & VXGE_HAL_RTS_MGR_STEER_CTRL_RMACJ_STATUS) &&
5796             (action == VXGE_HAL_RTS_MGR_STEER_CTRL_WE_READ)) {
5797
5798                 *data1 = vxge_os_pio_mem_read64(
5799                     hldev->header.pdev,
5800                     hldev->header.regh0,
5801                     &hldev->mrpcim_reg->rts_mgr_steer_data0);
5802
5803                 *data2 = vxge_os_pio_mem_read64(
5804                     hldev->header.pdev,
5805                     hldev->header.regh0,
5806                     &hldev->mrpcim_reg->rts_mgr_steer_data1);
5807
5808                 *vpath_vector = vxge_os_pio_mem_read64(
5809                     hldev->header.pdev,
5810                     hldev->header.regh0,
5811                     &hldev->mrpcim_reg->rts_mgr_steer_vpath_vector);
5812
5813                 status = VXGE_HAL_OK;
5814
5815         } else {
5816                 status = VXGE_HAL_FAIL;
5817         }
5818
5819
5820         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
5821             __FILE__, __func__, __LINE__,
5822             status);
5823         return (status);
5824 }
5825
5826 /*
5827  * vxge_hal_mrpcim_mac_addr_add - Add the mac address entry
5828  *                              into MAC address table.
5829  * @devh: Device handle.
5830  * @offset: Index into the DA table to add the mac address.
5831  * @macaddr: MAC address to be added for this vpath into the list
5832  * @macaddr_mask: MAC address mask for macaddr
5833  * @vpath_vector: Bit mask specifying the vpaths to which
5834  *              the mac address applies
5835  * @duplicate_mode: Duplicate MAC address add mode. Please see
5836  *              vxge_hal_vpath_mac_addr_add_mode_e {}
5837  *
5838  * Adds the given mac address, mac address mask and vpath vector into the list
5839  *
5840  * see also: vxge_hal_mrpcim_mac_addr_get
5841  *
5842  */
5843 vxge_hal_status_e
5844 vxge_hal_mrpcim_mac_addr_add(
5845     vxge_hal_device_h devh,
5846     u32 offset,
5847     macaddr_t macaddr,
5848     macaddr_t macaddr_mask,
5849     u64 vpath_vector,
5850     u32 duplicate_mode)
5851 {
5852         u32 i;
5853         u64 data1 = 0ULL;
5854         u64 data2 = 0ULL;
5855         __hal_device_t *hldev;
5856         vxge_hal_status_e status = VXGE_HAL_OK;
5857
5858         vxge_assert(devh != NULL);
5859
5860         hldev = (__hal_device_t *) devh;
5861
5862         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
5863             __FILE__, __func__, __LINE__);
5864
5865         vxge_hal_trace_log_mrpcim(
5866             "devh = 0x"VXGE_OS_STXFMT", offset = %d, "
5867             "macaddr = %02x-%02x-%02x-%02x-%02x-%02x, "
5868             "macaddr_mask = %02x-%02x-%02x-%02x-%02x-%02x, "
5869             "vpath_vector = 0x"VXGE_OS_LLXFMT,
5870             (ptr_t) devh, offset, macaddr[0], macaddr[1], macaddr[2],
5871             macaddr[3], macaddr[4], macaddr[5], macaddr_mask[0],
5872             macaddr_mask[1], macaddr_mask[2], macaddr_mask[3],
5873             macaddr_mask[4], macaddr_mask[5], vpath_vector);
5874
5875         for (i = 0; i < VXGE_HAL_ETH_ALEN; i++) {
5876                 data1 <<= 8;
5877                 data1 |= (u8) macaddr[i];
5878         }
5879
5880         data1 = VXGE_HAL_RTS_MGR_STEER_DATA0_DA_MAC_ADDR(data1);
5881
5882         for (i = 0; i < VXGE_HAL_ETH_ALEN; i++) {
5883                 data2 <<= 8;
5884                 data2 |= (u8) macaddr_mask[i];
5885         }
5886
5887         switch (duplicate_mode) {
5888         case VXGE_HAL_VPATH_MAC_ADDR_ADD_DUPLICATE:
5889                 i = 0;
5890                 break;
5891         case VXGE_HAL_VPATH_MAC_ADDR_DISCARD_DUPLICATE:
5892                 i = 1;
5893                 break;
5894         case VXGE_HAL_VPATH_MAC_ADDR_REPLACE_DUPLICATE:
5895                 i = 2;
5896                 break;
5897         default:
5898                 i = 0;
5899                 break;
5900         }
5901
5902         data2 = VXGE_HAL_RTS_MGR_STEER_DATA1_DA_MAC_ADDR_MASK(data2) |
5903             VXGE_HAL_RTS_MGR_STEER_DATA1_DA_MAC_ADDR_MODE(i);
5904
5905         status = __hal_mrpcim_rts_table_access(devh,
5906             VXGE_HAL_RTS_MGR_STEER_CTRL_WE_WRITE,
5907             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_DA,
5908             offset,
5909             &data1,
5910             &data2,
5911             &vpath_vector);
5912
5913         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
5914             __FILE__, __func__, __LINE__, status);
5915
5916         return (status);
5917 }
5918
5919 /*
5920  * vxge_hal_mrpcim_mac_addr_get - Read the mac address entry into
5921  *                              MAC address table.
5922  * @devh: Device handle.
5923  * @offset: Index into the DA table to execute the command on.
5924  * @macaddr: Buffer to return MAC address to be added for this vpath
5925  *              into the list
5926  * @macaddr_mask: Buffer to return MAC address mask for macaddr
5927  * @vpath_vector: Buffer to return Bit mask specifying the vpaths
5928  *              to which the mac address applies
5929  *
5930  * Reads the mac address, mac address mask and vpath vector from
5931  *              the given offset
5932  *
5933  * see also: vxge_hal_mrpcim_mac_addr_add
5934  *
5935  */
5936 vxge_hal_status_e
5937 vxge_hal_mrpcim_mac_addr_get(
5938     vxge_hal_device_h devh,
5939     u32 offset,
5940     macaddr_t macaddr,
5941     macaddr_t macaddr_mask,
5942     u64 *vpath_vector)
5943 {
5944         u32 i;
5945         u64 data1 = 0ULL;
5946         u64 data2 = 0ULL;
5947         __hal_device_t *hldev;
5948         vxge_hal_status_e status = VXGE_HAL_OK;
5949
5950         vxge_assert(devh != NULL);
5951
5952         hldev = (__hal_device_t *) devh;
5953
5954         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
5955             __FILE__, __func__, __LINE__);
5956
5957         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
5958             (ptr_t) hldev);
5959
5960         status = __hal_mrpcim_rts_table_access(devh,
5961             VXGE_HAL_RTS_MGR_STEER_CTRL_WE_WRITE,
5962             VXGE_HAL_RTS_MGR_STEER_CTRL_DATA_STRUCT_SEL_DA,
5963             offset,
5964             &data1,
5965             &data2,
5966             vpath_vector);
5967
5968         if (status != VXGE_HAL_OK) {
5969
5970                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
5971                     __FILE__, __func__, __LINE__, status);
5972                 return (status);
5973         }
5974
5975         data1 = VXGE_HAL_RTS_MGR_STEER_DATA0_GET_DA_MAC_ADDR(data1);
5976
5977         data2 = VXGE_HAL_RTS_MGR_STEER_DATA1_GET_DA_MAC_ADDR_MASK(data2);
5978
5979         for (i = VXGE_HAL_ETH_ALEN; i > 0; i--) {
5980                 macaddr[i - 1] = (u8) (data1 & 0xFF);
5981                 data1 >>= 8;
5982         }
5983
5984         for (i = VXGE_HAL_ETH_ALEN; i > 0; i--) {
5985                 macaddr_mask[i - 1] = (u8) (data2 & 0xFF);
5986                 data2 >>= 8;
5987         }
5988
5989         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
5990             __FILE__, __func__, __LINE__, status);
5991
5992         return (status);
5993 }
5994
5995 /*
5996  * vxge_hal_mrpcim_strip_repl_vlan_tag_enable - Enable strip Repl vlan tag.
5997  * @devh: Device handle.
5998  *
5999  * Enable X3100 strip Repl vlan tag.
6000  * Returns: VXGE_HAL_OK on success.
6001  *
6002  */
6003 vxge_hal_status_e
6004 vxge_hal_mrpcim_strip_repl_vlan_tag_enable(
6005     vxge_hal_device_h devh)
6006 {
6007         u64 val64;
6008         __hal_device_t *hldev = (__hal_device_t *) devh;
6009
6010         vxge_assert(hldev != NULL);
6011
6012         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6013             __FILE__, __func__, __LINE__);
6014
6015         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
6016             (ptr_t) devh);
6017
6018         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6019                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6020                     __FILE__, __func__, __LINE__,
6021                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6022
6023                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6024         }
6025
6026         if (hldev->header.config.mrpcim_config.mac_config.
6027             rpa_repl_strip_vlan_tag ==
6028             VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_ENABLE) {
6029                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6030                     __FILE__, __func__, __LINE__);
6031                 return (VXGE_HAL_OK);
6032         }
6033
6034         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6035             hldev->header.regh0,
6036             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
6037
6038         val64 |= VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_STRIP_VLAN_TAG;
6039
6040         vxge_os_pio_mem_write64(hldev->header.pdev,
6041             hldev->header.regh0,
6042             val64,
6043             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
6044
6045         hldev->header.config.mrpcim_config.mac_config.rpa_repl_strip_vlan_tag =
6046             VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_ENABLE;
6047
6048         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6049             __FILE__, __func__, __LINE__);
6050
6051         return (VXGE_HAL_OK);
6052 }
6053
6054 /*
6055  * vxge_hal_mrpcim_strip_repl_vlan_tag_disable - Disable strip Repl vlan tag.
6056  * @devh: Device handle.
6057  *
6058  * Disable X3100 strip Repl vlan tag.
6059  * Returns: VXGE_HAL_OK on success.
6060  *
6061  */
6062 vxge_hal_status_e
6063 vxge_hal_mrpcim_strip_repl_vlan_tag_disable(
6064     vxge_hal_device_h devh)
6065 {
6066         u64 val64;
6067         __hal_device_t *hldev = (__hal_device_t *) devh;
6068
6069         vxge_assert(hldev != NULL);
6070
6071         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6072             __FILE__, __func__, __LINE__);
6073
6074         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
6075             (ptr_t) devh);
6076
6077         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6078                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6079                     __FILE__, __func__, __LINE__,
6080                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6081
6082                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6083         }
6084
6085         if (hldev->header.config.mrpcim_config.mac_config.
6086             rpa_repl_strip_vlan_tag ==
6087             VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_DISABLE) {
6088                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6089                     __FILE__, __func__, __LINE__);
6090                 return (VXGE_HAL_OK);
6091         }
6092
6093         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6094             hldev->header.regh0,
6095             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
6096
6097         val64 &= ~VXGE_HAL_RXMAC_RX_PA_CFG1_REPL_STRIP_VLAN_TAG;
6098
6099         vxge_os_pio_mem_write64(hldev->header.pdev,
6100             hldev->header.regh0,
6101             val64,
6102             &hldev->mrpcim_reg->rxmac_rx_pa_cfg1);
6103
6104         hldev->header.config.mrpcim_config.mac_config.rpa_repl_strip_vlan_tag =
6105             VXGE_HAL_MAC_RPA_REPL_STRIP_VLAN_TAG_DISABLE;
6106
6107         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6108             __FILE__, __func__, __LINE__);
6109
6110         return (VXGE_HAL_OK);
6111 }
6112
6113 /*
6114  * vxge_hal_mrpcim_lag_config_get - Get the LAG config.
6115  * @devh: Device handle.
6116  * @lconfig: LAG Configuration
6117  *
6118  * Returns the current LAG configuration.
6119  * Returns: VXGE_HAL_OK on success.
6120  *
6121  */
6122 vxge_hal_status_e
6123 vxge_hal_mrpcim_lag_config_get(
6124     vxge_hal_device_h devh,
6125     vxge_hal_lag_config_t *lconfig)
6126 {
6127         __hal_device_t *hldev = (__hal_device_t *) devh;
6128
6129         vxge_assert(hldev != NULL);
6130
6131         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6132             __FILE__, __func__, __LINE__);
6133
6134         vxge_hal_trace_log_mrpcim(
6135             "devh = 0x"VXGE_OS_STXFMT", lconfig = 0x"VXGE_OS_STXFMT,
6136             (ptr_t) devh, (ptr_t) lconfig);
6137
6138         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6139                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6140                     __FILE__, __func__, __LINE__,
6141                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6142
6143                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6144         }
6145
6146         vxge_os_memcpy(lconfig,
6147             &hldev->header.config.mrpcim_config.lag_config,
6148             sizeof(vxge_hal_lag_config_t));
6149
6150         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6151             __FILE__, __func__, __LINE__);
6152
6153         return (VXGE_HAL_OK);
6154 }
6155
6156 /*
6157  * vxge_hal_mrpcim_lag_config_set - Set the LAG config.
6158  * @devh: Device handle.
6159  * @lconfig: LAG Configuration
6160  *
6161  * Sets the LAG configuration.
6162  * Returns: VXGE_HAL_OK on success.
6163  *
6164  */
6165 vxge_hal_status_e
6166 vxge_hal_mrpcim_lag_config_set(
6167     vxge_hal_device_h devh,
6168     vxge_hal_lag_config_t *lconfig)
6169 {
6170         vxge_hal_status_e status;
6171         __hal_device_t *hldev = (__hal_device_t *) devh;
6172
6173         vxge_assert(hldev != NULL);
6174
6175         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6176             __FILE__, __func__, __LINE__);
6177
6178         vxge_hal_trace_log_mrpcim(
6179             "devh = 0x"VXGE_OS_STXFMT", lconfig = 0x"VXGE_OS_STXFMT,
6180             (ptr_t) devh, (ptr_t) lconfig);
6181
6182         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6183                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6184                     __FILE__, __func__, __LINE__,
6185                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6186
6187                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6188         }
6189
6190         status = __hal_device_lag_config_check(lconfig);
6191
6192         if (status != VXGE_HAL_OK) {
6193                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6194                     __FILE__, __func__, __LINE__, status);
6195                 return (status);
6196         }
6197
6198         vxge_os_memcpy(&hldev->header.config.mrpcim_config.lag_config,
6199             lconfig,
6200             sizeof(vxge_hal_lag_config_t));
6201
6202         status = __hal_mrpcim_lag_configure(hldev);
6203
6204         if (status != VXGE_HAL_OK) {
6205                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6206                     __FILE__, __func__, __LINE__, status);
6207                 return (status);
6208         }
6209
6210         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = 0",
6211             __FILE__, __func__, __LINE__);
6212
6213         return (VXGE_HAL_OK);
6214 }
6215
6216 /*
6217  * vxge_hal_mrpcim_getpause_data -Pause frame frame generation and reception.
6218  * @devh: HAL device handle.
6219  * @port : Port number 0, 1, or 2
6220  * @tx : A field to return the pause generation capability of the NIC.
6221  * @rx : A field to return the pause reception capability of the NIC.
6222  *
6223  * Returns the Pause frame generation and reception capability of the NIC.
6224  * Return value:
6225  * status
6226  */
6227 vxge_hal_status_e
6228 vxge_hal_mrpcim_getpause_data(
6229     vxge_hal_device_h devh,
6230     u32 port,
6231     u32 *tx,
6232     u32 *rx)
6233 {
6234         u64 val64;
6235         __hal_device_t *hldev = (__hal_device_t *) devh;
6236
6237         vxge_assert(devh != NULL);
6238
6239         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6240             __FILE__, __func__, __LINE__);
6241
6242         vxge_hal_trace_log_mrpcim(
6243             "devh = 0x"VXGE_OS_STXFMT", port = %d, tx = 0x"VXGE_OS_STXFMT", "
6244             "rx = 0x"VXGE_OS_STXFMT, (ptr_t) devh, port, (ptr_t) tx,
6245             (ptr_t) rx);
6246
6247         if (hldev->header.magic != VXGE_HAL_DEVICE_MAGIC) {
6248                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6249                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_INVALID_DEVICE);
6250                 return (VXGE_HAL_ERR_INVALID_DEVICE);
6251         }
6252
6253         if (port >= VXGE_HAL_MAC_MAX_PORTS) {
6254                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6255                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_INVALID_PORT);
6256                 return (VXGE_HAL_ERR_INVALID_PORT);
6257         }
6258
6259         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6260                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6261                     __FILE__, __func__, __LINE__,
6262                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6263                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6264         }
6265
6266         val64 = vxge_os_pio_mem_read64(hldev->header.pdev, hldev->header.regh0,
6267             &hldev->mrpcim_reg->rxmac_pause_cfg_port[port]);
6268
6269         if (val64 & VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN)
6270                 *tx = 1;
6271
6272         if (val64 & VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN)
6273                 *rx = 1;
6274
6275
6276         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: 0",
6277             __FILE__, __func__, __LINE__);
6278
6279         return (VXGE_HAL_OK);
6280 }
6281
6282 /*
6283  * vxge_hal_mrpcim_setpause_data -  set/reset pause frame generation.
6284  * @devh: HAL device handle.
6285  * @port : Port number 0, 1, or 2
6286  * @tx: A field that indicates the pause generation capability to be
6287  * set on the NIC.
6288  * @rx: A field that indicates the pause reception capability to be
6289  * set on the NIC.
6290  *
6291  * It can be used to set or reset Pause frame generation or reception
6292  * support of the NIC.
6293  * Return value:
6294  * int, returns 0 on Success
6295  */
6296
6297 vxge_hal_status_e
6298 vxge_hal_mrpcim_setpause_data(
6299     vxge_hal_device_h devh,
6300     u32 port,
6301     u32 tx,
6302     u32 rx)
6303 {
6304         u64 val64;
6305         __hal_device_t *hldev = (__hal_device_t *) devh;
6306
6307         vxge_assert(devh != NULL);
6308
6309         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6310             __FILE__, __func__, __LINE__);
6311
6312         vxge_hal_trace_log_mrpcim(
6313             "devh = 0x"VXGE_OS_STXFMT", port = %d, tx = %d, rx = %d",
6314             (ptr_t) devh, port, tx, rx);
6315
6316         if (hldev->header.magic != VXGE_HAL_DEVICE_MAGIC) {
6317                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6318                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_INVALID_DEVICE);
6319                 return (VXGE_HAL_ERR_INVALID_DEVICE);
6320         }
6321
6322         if (port >= VXGE_HAL_MAC_MAX_PORTS) {
6323                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6324                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_INVALID_PORT);
6325                 return (VXGE_HAL_ERR_INVALID_PORT);
6326         }
6327
6328         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6329                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6330                     __FILE__, __func__, __LINE__,
6331                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6332                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6333         }
6334
6335         val64 = vxge_os_pio_mem_read64(hldev->header.pdev, hldev->header.regh0,
6336             &hldev->mrpcim_reg->rxmac_pause_cfg_port[port]);
6337         if (tx)
6338                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
6339         else
6340                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_GEN_EN;
6341         if (rx)
6342                 val64 |= VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
6343         else
6344                 val64 &= ~VXGE_HAL_RXMAC_PAUSE_CFG_PORT_RCV_EN;
6345
6346         vxge_os_pio_mem_write64(hldev->header.pdev, hldev->header.regh0,
6347             val64, &hldev->mrpcim_reg->rxmac_pause_cfg_port[port]);
6348
6349         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: 0",
6350             __FILE__, __func__, __LINE__);
6351         return (VXGE_HAL_OK);
6352 }
6353
6354 /*
6355  * vxge_hal_mrpcim_bist_test - invokes the MemBist test of the card .
6356  * @devh: HAL device handle.
6357  * vxge_nic structure.
6358  * @data:variable that returns the result of each of the test conducted by
6359  * the driver.
6360  *
6361  * This invokes the MemBist test of the card. We give around
6362  * 2 secs time for the Test to complete. If it's still not complete
6363  * within this peiod, we consider that the test failed.
6364  * Return value:
6365  * 0 on success and -1 on failure.
6366  */
6367 vxge_hal_status_e
6368 vxge_hal_mrpcim_bist_test(vxge_hal_device_h devh, u64 *data)
6369 {
6370         __hal_device_t *hldev = (__hal_device_t *) devh;
6371         u8 bist = 0;
6372         int retry = 0;
6373         vxge_hal_status_e status = VXGE_HAL_FAIL;
6374
6375         vxge_assert(devh != NULL);
6376
6377         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6378             __FILE__, __func__, __LINE__);
6379
6380         vxge_hal_trace_log_mrpcim("devh = 0x"VXGE_OS_STXFMT,
6381                         (ptr_t)devh);
6382
6383         if (hldev->header.magic != VXGE_HAL_DEVICE_MAGIC) {
6384                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6385                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_INVALID_DEVICE);
6386                 return (VXGE_HAL_ERR_INVALID_DEVICE);
6387         }
6388
6389         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6390                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6391                     __FILE__, __func__, __LINE__,
6392                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6393                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6394         }
6395
6396         (void) __hal_vpath_pci_read(hldev,
6397             hldev->first_vp_id,
6398             vxge_offsetof(vxge_hal_pci_config_le_t, bist),
6399             1,
6400             &bist);
6401         bist |= 0x40;
6402         vxge_os_pci_write8(hldev->header.pdev, hldev->header.cfgh,
6403             vxge_offsetof(vxge_hal_pci_config_le_t, bist), bist);
6404
6405         while (retry < 20) {
6406                 (void) __hal_vpath_pci_read(hldev,
6407                     hldev->first_vp_id,
6408                     vxge_offsetof(vxge_hal_pci_config_le_t, bist),
6409                     1,
6410                     &bist);
6411                 if (!(bist & 0x40)) {
6412                         *data = (bist & 0x0f);
6413                         status = VXGE_HAL_OK;
6414                         break;
6415                 }
6416                 vxge_os_mdelay(100);
6417                 retry++;
6418         }
6419
6420         vxge_hal_trace_log_mrpcim("<== %s:%s:%d  Result: %d",
6421             __FILE__, __func__, __LINE__, status);
6422         return (status);
6423 }
6424
6425 /*
6426  * __hal_mrpcim_initialize - Initialize mrpcim
6427  * @hldev: hal device.
6428  *
6429  * Initializes mrpcim
6430  *
6431  * See also: __hal_mrpcim_terminate()
6432  */
6433 vxge_hal_status_e
6434 __hal_mrpcim_initialize(__hal_device_t *hldev)
6435 {
6436         u64 val64;
6437         vxge_hal_status_e status = VXGE_HAL_OK;
6438
6439         vxge_assert(hldev != NULL);
6440
6441         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6442             __FILE__, __func__, __LINE__);
6443
6444         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
6445                         (ptr_t)hldev);
6446
6447         if (!(hldev->access_rights & VXGE_HAL_DEVICE_ACCESS_RIGHT_MRPCIM)) {
6448                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6449                     __FILE__, __func__, __LINE__,
6450                     VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6451                 return (VXGE_HAL_ERR_PRIVILAGED_OPEARATION);
6452         }
6453
6454         hldev->mrpcim = (__hal_mrpcim_t *)
6455             vxge_os_malloc(hldev->header.pdev, sizeof(__hal_mrpcim_t));
6456
6457         if (hldev->mrpcim == NULL) {
6458                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6459                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_OUT_OF_MEMORY);
6460                 return (VXGE_HAL_ERR_OUT_OF_MEMORY);
6461         }
6462
6463         vxge_os_memzero(hldev->mrpcim, sizeof(__hal_mrpcim_t));
6464
6465         __hal_mrpcim_get_vpd_data(hldev);
6466
6467         hldev->mrpcim->mrpcim_stats_block =
6468             __hal_blockpool_block_allocate(hldev, VXGE_OS_HOST_PAGE_SIZE);
6469
6470         if (hldev->mrpcim->mrpcim_stats_block == NULL) {
6471
6472                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6473                     __FILE__, __func__, __LINE__, VXGE_HAL_ERR_OUT_OF_MEMORY);
6474
6475                 return (VXGE_HAL_ERR_OUT_OF_MEMORY);
6476
6477         }
6478
6479         hldev->mrpcim->mrpcim_stats = (vxge_hal_mrpcim_stats_hw_info_t *)
6480             hldev->mrpcim->mrpcim_stats_block->memblock;
6481
6482         vxge_os_memzero(hldev->mrpcim->mrpcim_stats,
6483             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
6484
6485         vxge_os_memzero(&hldev->mrpcim->mrpcim_stats_sav,
6486             sizeof(vxge_hal_mrpcim_stats_hw_info_t));
6487
6488         status = __hal_mrpcim_mac_configure(hldev);
6489
6490         if (status != VXGE_HAL_OK) {
6491                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6492                     __FILE__, __func__, __LINE__, status);
6493                 return (status);
6494         }
6495
6496         status = __hal_mrpcim_lag_configure(hldev);
6497
6498         if (status != VXGE_HAL_OK) {
6499                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6500                     __FILE__, __func__, __LINE__, status);
6501                 return (status);
6502         }
6503
6504         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6505             hldev->header.regh0,
6506             &hldev->mrpcim_reg->mdio_gen_cfg_port[0]);
6507
6508         hldev->mrpcim->mdio_phy_prtad0 =
6509             (u32) VXGE_HAL_MDIO_GEN_CFG_PORT_GET_MDIO_PHY_PRTAD(val64);
6510
6511         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6512             hldev->header.regh0,
6513             &hldev->mrpcim_reg->mdio_gen_cfg_port[1]);
6514
6515         hldev->mrpcim->mdio_phy_prtad1 =
6516             (u32) VXGE_HAL_MDIO_GEN_CFG_PORT_GET_MDIO_PHY_PRTAD(val64);
6517
6518         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6519             hldev->header.regh0,
6520             &hldev->mrpcim_reg->xgxs_static_cfg_port[0]);
6521
6522         hldev->mrpcim->mdio_dte_prtad0 =
6523             (u32) VXGE_HAL_XGXS_STATIC_CFG_PORT_GET_MDIO_DTE_PRTAD(val64);
6524
6525         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6526             hldev->header.regh0,
6527             &hldev->mrpcim_reg->xgxs_static_cfg_port[1]);
6528
6529         hldev->mrpcim->mdio_dte_prtad1 =
6530             (u32) VXGE_HAL_XGXS_STATIC_CFG_PORT_GET_MDIO_DTE_PRTAD(val64);
6531
6532         vxge_os_pio_mem_write64(hldev->header.pdev,
6533             hldev->header.regh0,
6534             hldev->mrpcim->mrpcim_stats_block->dma_addr,
6535             &hldev->mrpcim_reg->mrpcim_stats_start_host_addr);
6536
6537         val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6538             hldev->header.regh0,
6539             &hldev->mrpcim_reg->mrpcim_general_cfg2);
6540
6541         val64 &= ~VXGE_HAL_MRPCIM_GENERAL_CFG2_MRPCIM_STATS_MAP_TO_VPATH(0x1f);
6542         val64 |= VXGE_HAL_MRPCIM_GENERAL_CFG2_MRPCIM_STATS_MAP_TO_VPATH(
6543             hldev->first_vp_id);
6544
6545         vxge_os_pio_mem_write64(hldev->header.pdev,
6546             hldev->header.regh0,
6547             val64,
6548             &hldev->mrpcim_reg->mrpcim_general_cfg2);
6549
6550         vxge_os_pio_mem_write64(hldev->header.pdev,
6551             hldev->header.regh0,
6552             vBIT(0xFFFFFFFFFFFFFFFFULL, 0, VXGE_HAL_MAX_VIRTUAL_PATHS),
6553             &hldev->mrpcim_reg->rxmac_authorize_all_addr);
6554
6555         vxge_os_pio_mem_write64(hldev->header.pdev,
6556             hldev->header.regh0,
6557             vBIT(0xFFFFFFFFFFFFFFFFULL, 0, VXGE_HAL_MAX_VIRTUAL_PATHS),
6558             &hldev->mrpcim_reg->rxmac_authorize_all_vid);
6559
6560         if (hldev->header.config.intr_mode ==
6561             VXGE_HAL_INTR_MODE_EMULATED_INTA) {
6562
6563                 val64 = vxge_os_pio_mem_read64(hldev->header.pdev,
6564                     hldev->header.regh0,
6565                     &hldev->mrpcim_reg->rdcrdtarb_cfg0);
6566
6567                 /* Set MOST to 8 for HP-ISS platform */
6568                 val64 &= ~VXGE_HAL_RDCRDTARB_CFG0_MAX_OUTSTANDING_RDS(0x3f);
6569
6570                 val64 |= VXGE_HAL_RDCRDTARB_CFG0_MAX_OUTSTANDING_RDS(8);
6571
6572                 vxge_os_pio_mem_write64(hldev->header.pdev,
6573                     hldev->header.regh0,
6574                     val64,
6575                     &hldev->mrpcim_reg->rdcrdtarb_cfg0);
6576         }
6577
6578         (void) __hal_ifmsg_wmsg_post(hldev,
6579             hldev->first_vp_id,
6580             VXGE_HAL_RTS_ACCESS_STEER_MSG_DEST_BROADCAST,
6581             VXGE_HAL_RTS_ACCESS_STEER_DATA0_MSG_TYPE_PRIV_DRIVER_UP,
6582             0);
6583
6584         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6585             __FILE__, __func__, __LINE__, status);
6586         return (status);
6587
6588 }
6589
6590 /*
6591  * __hal_mrpcim_terminate - Terminates mrpcim
6592  * @hldev: hal device.
6593  *
6594  * Terminates mrpcim.
6595  *
6596  * See also: __hal_mrpcim_initialize()
6597  */
6598 vxge_hal_status_e
6599 __hal_mrpcim_terminate(__hal_device_t *hldev)
6600 {
6601         vxge_hal_device_h devh = (vxge_hal_device_h) hldev;
6602         vxge_hal_status_e status = VXGE_HAL_OK;
6603
6604         vxge_assert((hldev != NULL) && (hldev->mrpcim != NULL));
6605
6606         vxge_hal_trace_log_mrpcim("==> %s:%s:%d",
6607             __FILE__, __func__, __LINE__);
6608
6609         vxge_hal_trace_log_mrpcim("hldev = 0x"VXGE_OS_STXFMT,
6610             (ptr_t) hldev);
6611
6612         if (hldev->mrpcim == NULL) {
6613                 vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6614                     __FILE__, __func__, __LINE__, status);
6615                 return (status);
6616         }
6617
6618         (void) __hal_ifmsg_wmsg_post(hldev,
6619             hldev->first_vp_id,
6620             VXGE_HAL_RTS_ACCESS_STEER_MSG_DEST_BROADCAST,
6621             VXGE_HAL_RTS_ACCESS_STEER_DATA0_MSG_TYPE_PRIV_DRIVER_DOWN,
6622             0);
6623
6624         if (hldev->mrpcim->mrpcim_stats_block != NULL) {
6625                 __hal_blockpool_block_free(devh,
6626                     hldev->mrpcim->mrpcim_stats_block);
6627                 hldev->mrpcim->mrpcim_stats_block = NULL;
6628         }
6629
6630         vxge_os_free(hldev->header.pdev,
6631             hldev->mrpcim, sizeof(__hal_mrpcim_t));
6632
6633         hldev->mrpcim = NULL;
6634
6635         vxge_hal_trace_log_mrpcim("<== %s:%s:%d Result = %d",
6636             __FILE__, __func__, __LINE__, status);
6637         return (status);
6638 }