1/*- 2 * Copyright (C) 2013 Emulex 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, --- 22 unchanged lines hidden (view full) --- 31 * Contact Information: 32 * freebsd-drivers@emulex.com 33 * 34 * Emulex 35 * 3333 Susan Street 36 * Costa Mesa, CA 92626 37 */ 38 |
39/* $FreeBSD: head/sys/dev/oce/oce_mbox.c 257007 2013-10-23 18:58:38Z delphij $ */ |
40 |
41#include "oce_if.h" 42extern uint32_t sfp_vpd_dump_buffer[TRANSCEIVER_DATA_NUM_ELE]; 43 44/** 45 * @brief Reset (firmware) common function 46 * @param sc software handle to the device 47 * @returns 0 on success, ETIMEDOUT on failure 48 */ --- 224 unchanged lines hidden (view full) --- 273 mbx.u0.s.embedded = 1; 274 mbx.payload_length = sizeof(struct mbx_get_common_fw_version); 275 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 276 277 ret = oce_mbox_post(sc, &mbx, NULL); 278 if (!ret) 279 ret = fwcmd->hdr.u0.rsp.status; 280 if (ret) { |
281 device_printf(sc->dev, 282 "%s failed - cmd status: %d addi status: %d\n", 283 __FUNCTION__, ret, 284 fwcmd->hdr.u0.rsp.additional_status); |
285 goto error; 286 } 287 288 bcopy(fwcmd->params.rsp.fw_ver_str, sc->fw_version, 32); 289error: 290 return ret; 291} 292 --- 139 unchanged lines hidden (view full) --- 432 mbx.u0.s.embedded = 1; 433 mbx.payload_length = sizeof(struct mbx_query_common_iface_mac); 434 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 435 436 ret = oce_mbox_post(sc, &mbx, NULL); 437 if (!ret) 438 ret = fwcmd->hdr.u0.rsp.status; 439 if (ret) { |
440 device_printf(sc->dev, 441 "%s failed - cmd status: %d addi status: %d\n", 442 __FUNCTION__, ret, 443 fwcmd->hdr.u0.rsp.additional_status); |
444 goto error; 445 } 446 447 /* copy the mac addres in the output parameter */ 448 mac->size_of_struct = fwcmd->params.rsp.mac.size_of_struct; 449 bcopy(&fwcmd->params.rsp.mac.mac_addr[0], &mac->mac_addr[0], 450 mac->size_of_struct); 451error: --- 25 unchanged lines hidden (view full) --- 477 mbx.u0.s.embedded = 1; 478 mbx.payload_length = sizeof(struct mbx_common_query_fw_config); 479 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 480 481 ret = oce_mbox_post(sc, &mbx, NULL); 482 if (!ret) 483 ret = fwcmd->hdr.u0.rsp.status; 484 if (ret) { |
485 device_printf(sc->dev, 486 "%s failed - cmd status: %d addi status: %d\n", 487 __FUNCTION__, ret, 488 fwcmd->hdr.u0.rsp.additional_status); |
489 goto error; 490 } 491 492 DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config)); 493 |
494 sc->config_number = HOST_32(fwcmd->params.rsp.config_number); 495 sc->asic_revision = HOST_32(fwcmd->params.rsp.asic_revision); 496 sc->port_id = HOST_32(fwcmd->params.rsp.port_id); 497 sc->function_mode = HOST_32(fwcmd->params.rsp.function_mode); 498 sc->function_caps = HOST_32(fwcmd->params.rsp.function_caps); |
499 500 if (fwcmd->params.rsp.ulp[0].ulp_mode & ULP_NIC_MODE) { |
501 sc->max_tx_rings = HOST_32(fwcmd->params.rsp.ulp[0].nic_wq_tot); 502 sc->max_rx_rings = HOST_32(fwcmd->params.rsp.ulp[0].lro_rqid_tot); |
503 } else { |
504 sc->max_tx_rings = HOST_32(fwcmd->params.rsp.ulp[1].nic_wq_tot); 505 sc->max_rx_rings = HOST_32(fwcmd->params.rsp.ulp[1].lro_rqid_tot); |
506 } 507 508error: 509 return ret; 510 511} 512 513/** --- 45 unchanged lines hidden (view full) --- 559 mbx.u0.s.embedded = 1; 560 mbx.payload_length = sizeof(struct mbx_create_common_iface); 561 DW_SWAP(u32ptr(&mbx), OCE_BMBX_RHDR_SZ); 562 563 rc = oce_mbox_post(sc, &mbx, NULL); 564 if (!rc) 565 rc = fwcmd->hdr.u0.rsp.status; 566 if (rc) { |
567 device_printf(sc->dev, 568 "%s failed - cmd status: %d addi status: %d\n", 569 __FUNCTION__, rc, 570 fwcmd->hdr.u0.rsp.additional_status); |
571 goto error; 572 } 573 |
574 *if_id = HOST_32(fwcmd->params.rsp.if_id); |
575 576 if (mac_addr != NULL) |
577 sc->pmac_id = HOST_32(fwcmd->params.rsp.pmac_id); |
578error: 579 return rc; 580} 581 582/** 583 * @brief Function to delete an interface 584 * @param sc software handle to the device 585 * @param if_id ID of the interface to delete --- 21 unchanged lines hidden (view full) --- 607 mbx.u0.s.embedded = 1; 608 mbx.payload_length = sizeof(struct mbx_destroy_common_iface); 609 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 610 611 rc = oce_mbox_post(sc, &mbx, NULL); 612 if (!rc) 613 rc = fwcmd->hdr.u0.rsp.status; 614 if (rc) |
615 device_printf(sc->dev, 616 "%s failed - cmd status: %d addi status: %d\n", 617 __FUNCTION__, rc, 618 fwcmd->hdr.u0.rsp.additional_status); |
619 return rc; 620} 621 622/** 623 * @brief Function to send the mbx command to configure vlan 624 * @param sc software handle to the device 625 * @param if_id interface identifier index 626 * @param vtag_arr array of vlan tags --- 5 unchanged lines hidden (view full) --- 632int 633oce_config_vlan(POCE_SOFTC sc, 634 uint32_t if_id, 635 struct normal_vlan *vtag_arr, 636 uint8_t vtag_cnt, uint32_t untagged, uint32_t enable_promisc) 637{ 638 struct oce_mbx mbx; 639 struct mbx_common_config_vlan *fwcmd; |
640 int rc = 0; |
641 |
642 if (sc->vlans_added > sc->max_vlans) 643 goto vlan_promisc; 644 |
645 bzero(&mbx, sizeof(struct oce_mbx)); 646 fwcmd = (struct mbx_common_config_vlan *)&mbx.payload; 647 648 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 649 MBX_SUBSYSTEM_COMMON, 650 OPCODE_COMMON_CONFIG_IFACE_VLAN, 651 MBX_TIMEOUT_SEC, 652 sizeof(struct mbx_common_config_vlan), --- 11 unchanged lines hidden (view full) --- 664 mbx.u0.s.embedded = 1; 665 mbx.payload_length = sizeof(struct mbx_common_config_vlan); 666 DW_SWAP(u32ptr(&mbx), (OCE_BMBX_RHDR_SZ + mbx.payload_length)); 667 668 rc = oce_mbox_post(sc, &mbx, NULL); 669 if (!rc) 670 rc = fwcmd->hdr.u0.rsp.status; 671 if (rc) |
672 device_printf(sc->dev, 673 "%s failed - cmd status: %d addi status: %d\n", 674 __FUNCTION__, rc, 675 fwcmd->hdr.u0.rsp.additional_status); |
676 |
677 goto done; 678 679vlan_promisc: 680 /* Enable Vlan Promis */ 681 oce_rxf_set_promiscuous(sc, (1 << 1)); 682 device_printf(sc->dev,"Enabling Vlan Promisc Mode\n"); 683done: 684 return rc; 685 |
686} 687 688/** 689 * @brief Function to set flow control capability in the hardware 690 * @param sc software handle to the device 691 * @param flow_control flow control flags to set 692 * @returns 0 on success, EIO on failure 693 */ --- 23 unchanged lines hidden (view full) --- 717 mbx.u0.s.embedded = 1; 718 mbx.payload_length = sizeof(struct mbx_common_get_set_flow_control); 719 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 720 721 rc = oce_mbox_post(sc, &mbx, NULL); 722 if (!rc) 723 rc = fwcmd->hdr.u0.rsp.status; 724 if (rc) |
725 device_printf(sc->dev, 726 "%s failed - cmd status: %d addi status: %d\n", 727 __FUNCTION__, rc, 728 fwcmd->hdr.u0.rsp.additional_status); |
729 return rc; 730} 731 732/** 733 * @brief Initialize the RSS CPU indirection table 734 * 735 * The table is used to choose the queue to place the incomming packets. 736 * Incomming packets are hashed. The lowest bits in the hash result --- 82 unchanged lines hidden (view full) --- 819 mbx.u0.s.embedded = 1; 820 mbx.payload_length = sizeof(struct mbx_config_nic_rss); 821 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 822 823 rc = oce_mbox_post(sc, &mbx, NULL); 824 if (!rc) 825 rc = fwcmd->hdr.u0.rsp.status; 826 if (rc) |
827 device_printf(sc->dev, 828 "%s failed - cmd status: %d addi status: %d\n", 829 __FUNCTION__, rc, 830 fwcmd->hdr.u0.rsp.additional_status); |
831 } 832 return rc; 833} 834 835/** 836 * @brief RXF function to enable/disable device promiscuous mode 837 * @param sc software handle to the device 838 * @param enable enable/disable flag 839 * @returns 0 on success, EIO on failure 840 * @note 841 * The NIC_CONFIG_PROMISCUOUS command deprecated for Lancer. 842 * This function uses the COMMON_SET_IFACE_RX_FILTER command instead. 843 */ 844int |
845oce_rxf_set_promiscuous(POCE_SOFTC sc, uint8_t enable) |
846{ 847 struct mbx_set_common_iface_rx_filter *fwcmd; 848 int sz = sizeof(struct mbx_set_common_iface_rx_filter); 849 iface_rx_filter_ctx_t *req; 850 OCE_DMA_MEM sgl; 851 int rc; 852 853 /* allocate mbx payload's dma scatter/gather memory */ 854 rc = oce_dma_alloc(sc, sz, &sgl, 0); 855 if (rc) 856 return rc; 857 858 fwcmd = OCE_DMAPTR(&sgl, struct mbx_set_common_iface_rx_filter); 859 860 req = &fwcmd->params.req; 861 req->iface_flags_mask = MBX_RX_IFACE_FLAGS_PROMISCUOUS | 862 MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS; |
863 /* Bit 0 Mac promisc, Bit 1 Vlan promisc */ 864 if (enable & 0x01) 865 req->iface_flags = MBX_RX_IFACE_FLAGS_PROMISCUOUS; 866 867 if (enable & 0x02) 868 req->iface_flags = MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS; 869 |
870 req->if_id = sc->if_id; 871 872 rc = oce_set_common_iface_rx_filter(sc, &sgl); 873 oce_dma_free(sc, &sgl); 874 875 return rc; 876} 877 --- 30 unchanged lines hidden (view full) --- 908 mbx.payload.u0.u1.sgl[0].length = mbx_sz; 909 mbx.payload_length = mbx_sz; 910 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 911 912 rc = oce_mbox_post(sc, &mbx, NULL); 913 if (!rc) 914 rc = fwcmd->hdr.u0.rsp.status; 915 if (rc) |
916 device_printf(sc->dev, 917 "%s failed - cmd status: %d addi status: %d\n", 918 __FUNCTION__, rc, 919 fwcmd->hdr.u0.rsp.additional_status); 920 return rc; |
921} 922 923/** 924 * @brief Function to query the link status from the hardware 925 * @param sc software handle to the device 926 * @param[out] link pointer to the structure returning link attributes 927 * @returns 0 on success, EIO on failure 928 */ --- 20 unchanged lines hidden (view full) --- 949 mbx.payload_length = sizeof(struct mbx_query_common_link_config); 950 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 951 952 rc = oce_mbox_post(sc, &mbx, NULL); 953 954 if (!rc) 955 rc = fwcmd->hdr.u0.rsp.status; 956 if (rc) { |
957 device_printf(sc->dev, 958 "%s failed - cmd status: %d addi status: %d\n", 959 __FUNCTION__, rc, 960 fwcmd->hdr.u0.rsp.additional_status); |
961 goto error; 962 } 963 /* interpret response */ 964 bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status)); |
965 link->logical_link_status = HOST_32(link->logical_link_status); 966 link->qos_link_speed = HOST_16(link->qos_link_speed); |
967error: 968 return rc; 969} 970 971 972 973int 974oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, POCE_DMA_MEM pstats_dma_mem) --- 29 unchanged lines hidden (view full) --- 1004 1005 rc = oce_mbox_post(sc, &mbx, NULL); 1006 1007 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1008 1009 if (!rc) 1010 rc = fwcmd->hdr.u0.rsp.status; 1011 if (rc) |
1012 device_printf(sc->dev, 1013 "%s failed - cmd status: %d addi status: %d\n", 1014 __FUNCTION__, rc, 1015 fwcmd->hdr.u0.rsp.additional_status); |
1016 return rc; 1017} 1018 1019 1020 1021/** 1022 * @brief Function to get NIC statistics 1023 * @param sc software handle to the device --- 32 unchanged lines hidden (view full) --- 1056 mbx.payload_length = sizeof(struct mbx_get_nic_stats); 1057 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1058 1059 rc = oce_mbox_post(sc, &mbx, NULL); 1060 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1061 if (!rc) 1062 rc = fwcmd->hdr.u0.rsp.status; 1063 if (rc) |
1064 device_printf(sc->dev, 1065 "%s failed - cmd status: %d addi status: %d\n", 1066 __FUNCTION__, rc, 1067 fwcmd->hdr.u0.rsp.additional_status); |
1068 return rc; 1069} 1070 1071 1072/** 1073 * @brief Function to get pport (physical port) statistics 1074 * @param sc software handle to the device 1075 * @param *stats pointer to where to store statistics --- 34 unchanged lines hidden (view full) --- 1110 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1111 1112 rc = oce_mbox_post(sc, &mbx, NULL); 1113 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1114 1115 if (!rc) 1116 rc = fwcmd->hdr.u0.rsp.status; 1117 if (rc) |
1118 device_printf(sc->dev, 1119 "%s failed - cmd status: %d addi status: %d\n", 1120 __FUNCTION__, rc, 1121 fwcmd->hdr.u0.rsp.additional_status); |
1122 return rc; 1123} 1124 1125 1126/** 1127 * @brief Function to get vport (virtual port) statistics 1128 * @param sc software handle to the device 1129 * @param *stats pointer to where to store statistics --- 35 unchanged lines hidden (view full) --- 1165 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1166 1167 rc = oce_mbox_post(sc, &mbx, NULL); 1168 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1169 1170 if (!rc) 1171 rc = fwcmd->hdr.u0.rsp.status; 1172 if (rc) |
1173 device_printf(sc->dev, 1174 "%s failed - cmd status: %d addi status: %d\n", 1175 __FUNCTION__, rc, 1176 fwcmd->hdr.u0.rsp.additional_status); |
1177 return rc; 1178} 1179 1180 1181/** 1182 * @brief Function to update the muticast filter with 1183 * values in dma_mem 1184 * @param sc software handle to the device --- 27 unchanged lines hidden (view full) --- 1212 sgl->length = htole32(mbx.payload_length); 1213 1214 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1215 1216 rc = oce_mbox_post(sc, &mbx, NULL); 1217 if (!rc) 1218 rc = req->hdr.u0.rsp.status; 1219 if (rc) |
1220 device_printf(sc->dev, 1221 "%s failed - cmd status: %d addi status: %d\n", 1222 __FUNCTION__, rc, 1223 req->hdr.u0.rsp.additional_status); |
1224 return rc; 1225} 1226 1227 1228/** 1229 * @brief Function to send passthrough Ioctls 1230 * @param sc software handle to the device 1231 * @param dma_mem pointer to dma memory region --- 47 unchanged lines hidden (view full) --- 1279 1280 mbx.u0.s.embedded = 1; 1281 mbx.payload_length = sizeof(struct mbx_add_common_iface_mac); 1282 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1283 rc = oce_mbox_post(sc, &mbx, NULL); 1284 if (!rc) 1285 rc = fwcmd->hdr.u0.rsp.status; 1286 if (rc) { |
1287 device_printf(sc->dev, 1288 "%s failed - cmd status: %d addi status: %d\n", 1289 __FUNCTION__, rc, 1290 fwcmd->hdr.u0.rsp.additional_status); |
1291 goto error; 1292 } 1293 *pmac_id = fwcmd->params.rsp.pmac_id; 1294error: 1295 return rc; 1296} 1297 1298 --- 20 unchanged lines hidden (view full) --- 1319 mbx.u0.s.embedded = 1; 1320 mbx.payload_length = sizeof(struct mbx_del_common_iface_mac); 1321 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1322 1323 rc = oce_mbox_post(sc, &mbx, NULL); 1324 if (!rc) 1325 rc = fwcmd->hdr.u0.rsp.status; 1326 if (rc) |
1327 device_printf(sc->dev, 1328 "%s failed - cmd status: %d addi status: %d\n", 1329 __FUNCTION__, rc, 1330 fwcmd->hdr.u0.rsp.additional_status); |
1331 return rc; 1332} 1333 1334 1335 1336int 1337oce_mbox_check_native_mode(POCE_SOFTC sc) 1338{ --- 19 unchanged lines hidden (view full) --- 1358 mbx.u0.s.embedded = 1; 1359 mbx.payload_length = sizeof(struct mbx_common_set_function_cap); 1360 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1361 1362 rc = oce_mbox_post(sc, &mbx, NULL); 1363 if (!rc) 1364 rc = fwcmd->hdr.u0.rsp.status; 1365 if (rc) { |
1366 device_printf(sc->dev, 1367 "%s failed - cmd status: %d addi status: %d\n", 1368 __FUNCTION__, rc, 1369 fwcmd->hdr.u0.rsp.additional_status); |
1370 goto error; 1371 } |
1372 sc->be3_native = HOST_32(fwcmd->params.rsp.capability_flags) |
1373 & CAP_BE3_NATIVE_ERX_API; 1374 1375error: 1376 return 0; 1377} 1378 1379 1380 --- 24 unchanged lines hidden (view full) --- 1405 mbx.u0.s.embedded = 1; 1406 mbx.payload_length = sizeof(struct mbx_lowlevel_set_loopback_mode); 1407 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1408 1409 rc = oce_mbox_post(sc, &mbx, NULL); 1410 if (!rc) 1411 rc = fwcmd->hdr.u0.rsp.status; 1412 if (rc) |
1413 device_printf(sc->dev, 1414 "%s failed - cmd status: %d addi status: %d\n", 1415 __FUNCTION__, rc, 1416 fwcmd->hdr.u0.rsp.additional_status); |
1417 1418 return rc; 1419 1420} 1421 1422int 1423oce_mbox_cmd_test_loopback(POCE_SOFTC sc, uint32_t port_num, 1424 uint32_t loopback_type, uint32_t pkt_size, uint32_t num_pkts, --- 25 unchanged lines hidden (view full) --- 1450 mbx.u0.s.embedded = 1; 1451 mbx.payload_length = sizeof(struct mbx_lowlevel_test_loopback_mode); 1452 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1453 1454 rc = oce_mbox_post(sc, &mbx, NULL); 1455 if (!rc) 1456 rc = fwcmd->hdr.u0.rsp.status; 1457 if (rc) |
1458 device_printf(sc->dev, 1459 "%s failed - cmd status: %d addi status: %d\n", 1460 __FUNCTION__, rc, 1461 fwcmd->hdr.u0.rsp.additional_status); |
1462 1463 return rc; 1464} 1465 1466int 1467oce_mbox_write_flashrom(POCE_SOFTC sc, uint32_t optype,uint32_t opcode, 1468 POCE_DMA_MEM pdma_mem, uint32_t num_bytes) 1469{ --- 9 unchanged lines hidden (view full) --- 1479 1480 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 1481 MBX_SUBSYSTEM_COMMON, 1482 OPCODE_COMMON_WRITE_FLASHROM, 1483 LONG_TIMEOUT, 1484 payload_len, 1485 OCE_MBX_VER_V0); 1486 |
1487 fwcmd->flash_op_type = LE_32(optype); 1488 fwcmd->flash_op_code = LE_32(opcode); 1489 fwcmd->data_buffer_size = LE_32(num_bytes); |
1490 1491 mbx.u0.s.embedded = 0; /*Non embeded*/ 1492 mbx.payload_length = payload_len; 1493 mbx.u0.s.sge_count = 1; 1494 1495 sgl = &mbx.payload.u0.u1.sgl[0]; 1496 sgl->pa_hi = upper_32_bits(pdma_mem->paddr); 1497 sgl->pa_lo = pdma_mem->paddr & 0xFFFFFFFF; 1498 sgl->length = payload_len; 1499 1500 /* post the command */ 1501 rc = oce_mbox_post(sc, &mbx, NULL); 1502 if (!rc) 1503 rc = fwcmd->hdr.u0.rsp.status; 1504 if (rc) |
1505 device_printf(sc->dev, 1506 "%s failed - cmd status: %d addi status: %d\n", 1507 __FUNCTION__, rc, 1508 fwcmd->hdr.u0.rsp.additional_status); |
1509 1510 return rc; 1511 1512} 1513 1514int 1515oce_mbox_get_flashrom_crc(POCE_SOFTC sc, uint8_t *flash_crc, 1516 uint32_t offset, uint32_t optype) --- 28 unchanged lines hidden (view full) --- 1545 mbx.u0.s.embedded = 1; 1546 mbx.payload_length = payload_len; 1547 1548 /* post the command */ 1549 rc = oce_mbox_post(sc, &mbx, NULL); 1550 if (!rc) 1551 rc = fwcmd->hdr.u0.rsp.status; 1552 if (rc) { |
1553 device_printf(sc->dev, 1554 "%s failed - cmd status: %d addi status: %d\n", 1555 __FUNCTION__, rc, 1556 fwcmd->hdr.u0.rsp.additional_status); |
1557 goto error; 1558 } 1559 bcopy(fwcmd->data_buffer, flash_crc, 4); 1560error: 1561 return rc; 1562} 1563 1564int --- 17 unchanged lines hidden (view full) --- 1582 mbx.u0.s.embedded = 1; 1583 mbx.payload_length = sizeof(struct mbx_common_phy_info); 1584 1585 /* now post the command */ 1586 rc = oce_mbox_post(sc, &mbx, NULL); 1587 if (!rc) 1588 rc = fwcmd->hdr.u0.rsp.status; 1589 if (rc) { |
1590 device_printf(sc->dev, 1591 "%s failed - cmd status: %d addi status: %d\n", 1592 __FUNCTION__, rc, 1593 fwcmd->hdr.u0.rsp.additional_status); |
1594 goto error; 1595 } |
1596 phy_info->phy_type = HOST_16(fwcmd->params.rsp.phy_info.phy_type); |
1597 phy_info->interface_type = |
1598 HOST_16(fwcmd->params.rsp.phy_info.interface_type); |
1599 phy_info->auto_speeds_supported = |
1600 HOST_16(fwcmd->params.rsp.phy_info.auto_speeds_supported); |
1601 phy_info->fixed_speeds_supported = |
1602 HOST_16(fwcmd->params.rsp.phy_info.fixed_speeds_supported); 1603 phy_info->misc_params = HOST_32(fwcmd->params.rsp.phy_info.misc_params); |
1604error: 1605 return rc; 1606 1607} 1608 1609 1610int 1611oce_mbox_lancer_write_flashrom(POCE_SOFTC sc, uint32_t data_size, --- 33 unchanged lines hidden (view full) --- 1645 fwcmd->params.req.address_lower = pdma_mem->paddr & 0xFFFFFFFF; 1646 fwcmd->params.req.address_upper = upper_32_bits(pdma_mem->paddr); 1647 1648 /* post the command */ 1649 rc = oce_mbox_post(sc, &mbx, NULL); 1650 if (!rc) 1651 rc = fwcmd->params.rsp.status; 1652 if (rc) { |
1653 device_printf(sc->dev, 1654 "%s failed - cmd status: %d addi status: %d\n", 1655 __FUNCTION__, rc, 1656 fwcmd->params.rsp.additional_status); |
1657 goto error; 1658 } |
1659 *written_data = HOST_32(fwcmd->params.rsp.actual_write_length); |
1660 *additional_status = fwcmd->params.rsp.additional_status; 1661error: 1662 return rc; 1663 1664} 1665 1666 1667 --- 35 unchanged lines hidden (view full) --- 1703 1704 mbx.u0.s.embedded = 1; 1705 mbx.payload_length = sizeof(struct mbx_create_nic_rq); 1706 1707 rc = oce_mbox_post(sc, &mbx, NULL); 1708 if (!rc) 1709 rc = fwcmd->hdr.u0.rsp.status; 1710 if (rc) { |
1711 device_printf(sc->dev, 1712 "%s failed - cmd status: %d addi status: %d\n", 1713 __FUNCTION__, rc, 1714 fwcmd->hdr.u0.rsp.additional_status); |
1715 goto error; 1716 } |
1717 rq->rq_id = HOST_16(fwcmd->params.rsp.rq_id); |
1718 rq->rss_cpuid = fwcmd->params.rsp.rss_cpuid; 1719error: 1720 return rc; 1721 1722} 1723 1724 1725 1726int 1727oce_mbox_create_wq(struct oce_wq *wq) 1728{ 1729 struct oce_mbx mbx; 1730 struct mbx_create_nic_wq *fwcmd; 1731 POCE_SOFTC sc = wq->parent; 1732 int rc = 0, version, num_pages; 1733 1734 bzero(&mbx, sizeof(struct oce_mbx)); 1735 1736 fwcmd = (struct mbx_create_nic_wq *)&mbx.payload; |
1737 if (IS_XE201(sc)) |
1738 version = OCE_MBX_VER_V1; |
1739 else if(IS_BE(sc)) |
1740 IS_PROFILE_SUPER_NIC(sc) ? (version = OCE_MBX_VER_V2) 1741 : (version = OCE_MBX_VER_V0); 1742 else 1743 version = OCE_MBX_VER_V2; 1744 |
1745 if (version > OCE_MBX_VER_V0) 1746 fwcmd->params.req.if_id = sc->if_id; 1747 |
1748 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 1749 MBX_SUBSYSTEM_NIC, 1750 NIC_CREATE_WQ, MBX_TIMEOUT_SEC, 1751 sizeof(struct mbx_create_nic_wq), 1752 version); 1753 1754 num_pages = oce_page_list(wq->ring, &fwcmd->params.req.pages[0]); 1755 --- 5 unchanged lines hidden (view full) --- 1761 1762 mbx.u0.s.embedded = 1; 1763 mbx.payload_length = sizeof(struct mbx_create_nic_wq); 1764 1765 rc = oce_mbox_post(sc, &mbx, NULL); 1766 if (!rc) 1767 rc = fwcmd->hdr.u0.rsp.status; 1768 if (rc) { |
1769 device_printf(sc->dev, 1770 "%s failed - cmd status: %d addi status: %d\n", 1771 __FUNCTION__, rc, 1772 fwcmd->hdr.u0.rsp.additional_status); |
1773 goto error; 1774 } |
1775 wq->wq_id = HOST_16(fwcmd->params.rsp.wq_id); |
1776 if (version == OCE_MBX_VER_V2) |
1777 wq->db_offset = HOST_32(fwcmd->params.rsp.db_offset); |
1778 else 1779 wq->db_offset = PD_TXULP_DB; 1780error: 1781 return rc; 1782 1783} 1784 1785 --- 28 unchanged lines hidden (view full) --- 1814 1815 mbx.u0.s.embedded = 1; 1816 mbx.payload_length = sizeof(struct mbx_create_common_eq); 1817 1818 rc = oce_mbox_post(sc, &mbx, NULL); 1819 if (!rc) 1820 rc = fwcmd->hdr.u0.rsp.status; 1821 if (rc) { |
1822 device_printf(sc->dev, 1823 "%s failed - cmd status: %d addi status: %d\n", 1824 __FUNCTION__, rc, 1825 fwcmd->hdr.u0.rsp.additional_status); |
1826 goto error; 1827 } |
1828 eq->eq_id = HOST_16(fwcmd->params.rsp.eq_id); |
1829error: 1830 return rc; 1831} 1832 1833 1834 1835int 1836oce_mbox_cq_create(struct oce_cq *cq, uint32_t ncoalesce, uint32_t is_eventable) --- 57 unchanged lines hidden (view full) --- 1894 1895 mbx.u0.s.embedded = 1; 1896 mbx.payload_length = sizeof(struct mbx_create_common_cq); 1897 1898 rc = oce_mbox_post(sc, &mbx, NULL); 1899 if (!rc) 1900 rc = fwcmd->hdr.u0.rsp.status; 1901 if (rc) { |
1902 device_printf(sc->dev, 1903 "%s failed - cmd status: %d addi status: %d\n", 1904 __FUNCTION__, rc, 1905 fwcmd->hdr.u0.rsp.additional_status); |
1906 goto error; 1907 } |
1908 cq->cq_id = HOST_16(fwcmd->params.rsp.cq_id); |
1909error: 1910 return rc; 1911 1912} 1913 1914int 1915oce_mbox_read_transrecv_data(POCE_SOFTC sc, uint32_t page_num) 1916{ --- 32 unchanged lines hidden (view full) --- 1949 fwcmd->params.req.port = LE_32(sc->port_id); 1950 fwcmd->params.req.page_num = LE_32(page_num); 1951 1952 /* command post */ 1953 rc = oce_mbox_post(sc, &mbx, NULL); 1954 if (!rc) 1955 rc = fwcmd->hdr.u0.rsp.status; 1956 if (rc) { |
1957 device_printf(sc->dev, 1958 "%s failed - cmd status: %d addi status: %d\n", 1959 __FUNCTION__, rc, 1960 fwcmd->hdr.u0.rsp.additional_status); |
1961 goto error; 1962 } 1963 if(fwcmd->params.rsp.page_num == PAGE_NUM_A0) 1964 { 1965 bcopy((char *)fwcmd->params.rsp.page_data, 1966 (char *)&sfp_vpd_dump_buffer[0], 1967 TRANSCEIVER_A0_SIZE); 1968 } --- 44 unchanged lines hidden (view full) --- 2013 2014 2015 /* command post */ 2016 rc = oce_mbox_post(sc, &mbx, NULL); 2017 2018 if (!rc) 2019 rc = fwcmd->hdr.u0.rsp.status; 2020 if (rc) |
2021 device_printf(sc->dev, 2022 "%s failed - cmd status: %d addi status: %d\n", 2023 __FUNCTION__, rc, 2024 fwcmd->hdr.u0.rsp.additional_status); |
2025} 2026 2027int 2028oce_get_profile_config(POCE_SOFTC sc) 2029{ 2030 struct oce_mbx mbx; 2031 struct mbx_common_get_profile_config *fwcmd; 2032 int rc = 0; --- 41 unchanged lines hidden (view full) --- 2074 2075 fwcmd->params.req.type = ACTIVE_PROFILE; 2076 2077 /* command post */ 2078 rc = oce_mbox_post(sc, &mbx, NULL); 2079 if (!rc) 2080 rc = fwcmd->hdr.u0.rsp.status; 2081 if (rc) { |
2082 device_printf(sc->dev, 2083 "%s failed - cmd status: %d addi status: %d\n", 2084 __FUNCTION__, rc, 2085 fwcmd->hdr.u0.rsp.additional_status); |
2086 goto error; 2087 } 2088 2089 nic_desc = (struct oce_nic_resc_desc *) fwcmd->params.rsp.resources; 2090 desc_count = HOST_32(fwcmd->params.rsp.desc_count); 2091 for (i = 0; i < desc_count; i++) { 2092 if ((nic_desc->desc_type == NIC_RESC_DESC_TYPE_V0) || 2093 (nic_desc->desc_type == NIC_RESC_DESC_TYPE_V1)) { 2094 nic_desc_valid = TRUE; 2095 break; 2096 } 2097 nic_desc = (struct oce_nic_resc_desc *) \ 2098 ((char *)nic_desc + nic_desc->desc_len); 2099 } 2100 if (!nic_desc_valid) { 2101 rc = -1; 2102 goto error; 2103 } 2104 else { |
2105 sc->max_vlans = nic_desc->vlan_count; |
2106 sc->nwqs = HOST_32(nic_desc->txq_count); 2107 if (sc->nwqs) 2108 sc->nwqs = MIN(sc->nwqs, OCE_MAX_WQ); 2109 else 2110 sc->nwqs = OCE_MAX_WQ; 2111 2112 } 2113error: --- 53 unchanged lines hidden (view full) --- 2167 sgl->length = htole32(mbx.payload_length); 2168 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 2169 2170 /* command post */ 2171 rc = oce_mbox_post(sc, &mbx, NULL); 2172 if (!rc) 2173 rc = fwcmd->hdr.u0.rsp.status; 2174 if (rc) { |
2175 device_printf(sc->dev, 2176 "%s failed - cmd status: %d addi status: %d\n", 2177 __FUNCTION__, rc, 2178 fwcmd->hdr.u0.rsp.additional_status); |
2179 goto error; 2180 } 2181 2182 nic_desc = (struct oce_nic_resc_desc *) fwcmd->params.rsp.resources; 2183 desc_count = HOST_32(fwcmd->params.rsp.desc_count); 2184 for (i = 0; i < desc_count; i++) { 2185 if ((nic_desc->desc_type == NIC_RESC_DESC_TYPE_V0) || 2186 (nic_desc->desc_type == NIC_RESC_DESC_TYPE_V1)) { 2187 nic_desc_valid = TRUE; 2188 break; 2189 } 2190 nic_desc = (struct oce_nic_resc_desc *) \ 2191 ((char *)nic_desc + nic_desc->desc_len); 2192 } 2193 if (!nic_desc_valid) { 2194 rc = -1; 2195 goto error; 2196 } 2197 else { |
2198 sc->max_vlans = nic_desc->vlan_count; |
2199 sc->nwqs = HOST_32(nic_desc->txq_count); 2200 if (sc->nwqs) 2201 sc->nwqs = MIN(sc->nwqs, OCE_MAX_WQ); 2202 else 2203 sc->nwqs = OCE_MAX_WQ; 2204 2205 sc->nrssqs = HOST_32(nic_desc->rssq_count); 2206 if (sc->nrssqs) 2207 sc->nrssqs = MIN(sc->nrssqs, max_rss); 2208 else 2209 sc->nrssqs = max_rss; 2210 sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */; 2211 } 2212error: 2213 oce_dma_free(sc, &dma); 2214 return rc; 2215 2216} |