vxgehal-mrpcim.c revision 256281
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: stable/10/sys/dev/vxge/vxgehal/vxgehal-mrpcim.c 221167 2011-04-28 14:33:15Z gnn $*/ 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 */ 41const u8 * 42vxge_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 */ 78u64 79vxge_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 */ 129vxge_hal_status_e 130vxge_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 */ 231vxge_hal_status_e 232vxge_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 */ 359vxge_hal_status_e 360vxge_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 */ 432vxge_hal_status_e 433vxge_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 */ 490vxge_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 */ 590vxge_hal_status_e 591vxge_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 */ 1656vxge_hal_status_e 1657vxge_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 */ 1876vxge_hal_status_e 1877vxge_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 */ 1959vxge_hal_status_e 1960vxge_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 */ 2094void 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 */ 2179vxge_hal_status_e 2180vxge_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 */ 2337vxge_hal_status_e 2338vxge_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 */ 2411vxge_hal_status_e 2412vxge_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 */ 2460vxge_hal_status_e 2461vxge_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 */ 2533vxge_hal_status_e 2534vxge_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 */ 2613vxge_hal_status_e 2614vxge_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 */ 2732vxge_hal_status_e 2733vxge_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 */ 3332vxge_hal_status_e 3333vxge_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 */ 3406vxge_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 */ 3675vxge_hal_status_e 3676vxge_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 */ 3741vxge_hal_status_e 3742vxge_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 */ 3781vxge_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 */ 4699vxge_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 */ 5577void 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 */ 5715vxge_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 */ 5843vxge_hal_status_e 5844vxge_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 */ 5936vxge_hal_status_e 5937vxge_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 */ 6003vxge_hal_status_e 6004vxge_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 */ 6062vxge_hal_status_e 6063vxge_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 */ 6122vxge_hal_status_e 6123vxge_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 */ 6165vxge_hal_status_e 6166vxge_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 */ 6227vxge_hal_status_e 6228vxge_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 6297vxge_hal_status_e 6298vxge_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 */ 6367vxge_hal_status_e 6368vxge_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 */ 6433vxge_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 */ 6598vxge_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} 6639