Deleted Added
sdiff udiff text old ( 252869 ) new ( 257007 )
full compact
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
40
41/* $FreeBSD: head/sys/dev/oce/oce_mbox.c 252869 2013-07-06 08:30:45Z delphij $ */
42
43
44#include "oce_if.h"
45extern uint32_t sfp_vpd_dump_buffer[TRANSCEIVER_DATA_NUM_ELE];
46
47/**
48 * @brief Reset (firmware) common function
49 * @param sc software handle to the device
50 * @returns 0 on success, ETIMEDOUT on failure
51 */

--- 224 unchanged lines hidden (view full) ---

276 mbx.u0.s.embedded = 1;
277 mbx.payload_length = sizeof(struct mbx_get_common_fw_version);
278 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
279
280 ret = oce_mbox_post(sc, &mbx, NULL);
281 if (!ret)
282 ret = fwcmd->hdr.u0.rsp.status;
283 if (ret) {
284 device_printf(sc->dev,"%s failed - cmd status: %d\n",
285 __FUNCTION__, ret);
286 goto error;
287 }
288
289 bcopy(fwcmd->params.rsp.fw_ver_str, sc->fw_version, 32);
290error:
291 return ret;
292}
293

--- 139 unchanged lines hidden (view full) ---

433 mbx.u0.s.embedded = 1;
434 mbx.payload_length = sizeof(struct mbx_query_common_iface_mac);
435 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
436
437 ret = oce_mbox_post(sc, &mbx, NULL);
438 if (!ret)
439 ret = fwcmd->hdr.u0.rsp.status;
440 if (ret) {
441 device_printf(sc->dev,"%s failed - cmd status: %d\n",
442 __FUNCTION__, ret);
443 goto error;
444 }
445
446 /* copy the mac addres in the output parameter */
447 mac->size_of_struct = fwcmd->params.rsp.mac.size_of_struct;
448 bcopy(&fwcmd->params.rsp.mac.mac_addr[0], &mac->mac_addr[0],
449 mac->size_of_struct);
450error:

--- 25 unchanged lines hidden (view full) ---

476 mbx.u0.s.embedded = 1;
477 mbx.payload_length = sizeof(struct mbx_common_query_fw_config);
478 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
479
480 ret = oce_mbox_post(sc, &mbx, NULL);
481 if (!ret)
482 ret = fwcmd->hdr.u0.rsp.status;
483 if (ret) {
484 device_printf(sc->dev,"%s failed - cmd status: %d\n",
485 __FUNCTION__, ret);
486 goto error;
487 }
488
489 DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config));
490
491 sc->config_number = fwcmd->params.rsp.config_number;
492 sc->asic_revision = fwcmd->params.rsp.asic_revision;
493 sc->port_id = fwcmd->params.rsp.port_id;
494 sc->function_mode = fwcmd->params.rsp.function_mode;
495 sc->function_caps = fwcmd->params.rsp.function_caps;
496
497 if (fwcmd->params.rsp.ulp[0].ulp_mode & ULP_NIC_MODE) {
498 sc->max_tx_rings = fwcmd->params.rsp.ulp[0].nic_wq_tot;
499 sc->max_rx_rings = fwcmd->params.rsp.ulp[0].lro_rqid_tot;
500 } else {
501 sc->max_tx_rings = fwcmd->params.rsp.ulp[1].nic_wq_tot;
502 sc->max_rx_rings = fwcmd->params.rsp.ulp[1].lro_rqid_tot;
503 }
504
505error:
506 return ret;
507
508}
509
510/**

--- 45 unchanged lines hidden (view full) ---

556 mbx.u0.s.embedded = 1;
557 mbx.payload_length = sizeof(struct mbx_create_common_iface);
558 DW_SWAP(u32ptr(&mbx), OCE_BMBX_RHDR_SZ);
559
560 rc = oce_mbox_post(sc, &mbx, NULL);
561 if (!rc)
562 rc = fwcmd->hdr.u0.rsp.status;
563 if (rc) {
564 device_printf(sc->dev,"%s failed - cmd status: %d\n",
565 __FUNCTION__, rc);
566 goto error;
567 }
568
569 *if_id = LE_32(fwcmd->params.rsp.if_id);
570
571 if (mac_addr != NULL)
572 sc->pmac_id = LE_32(fwcmd->params.rsp.pmac_id);
573error:
574 return rc;
575}
576
577/**
578 * @brief Function to delete an interface
579 * @param sc software handle to the device
580 * @param if_id ID of the interface to delete

--- 21 unchanged lines hidden (view full) ---

602 mbx.u0.s.embedded = 1;
603 mbx.payload_length = sizeof(struct mbx_destroy_common_iface);
604 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
605
606 rc = oce_mbox_post(sc, &mbx, NULL);
607 if (!rc)
608 rc = fwcmd->hdr.u0.rsp.status;
609 if (rc)
610 device_printf(sc->dev,"%s failed - cmd status: %d\n",
611 __FUNCTION__, rc);
612 return rc;
613}
614
615/**
616 * @brief Function to send the mbx command to configure vlan
617 * @param sc software handle to the device
618 * @param if_id interface identifier index
619 * @param vtag_arr array of vlan tags

--- 5 unchanged lines hidden (view full) ---

625int
626oce_config_vlan(POCE_SOFTC sc,
627 uint32_t if_id,
628 struct normal_vlan *vtag_arr,
629 uint8_t vtag_cnt, uint32_t untagged, uint32_t enable_promisc)
630{
631 struct oce_mbx mbx;
632 struct mbx_common_config_vlan *fwcmd;
633 int rc;
634
635 bzero(&mbx, sizeof(struct oce_mbx));
636 fwcmd = (struct mbx_common_config_vlan *)&mbx.payload;
637
638 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
639 MBX_SUBSYSTEM_COMMON,
640 OPCODE_COMMON_CONFIG_IFACE_VLAN,
641 MBX_TIMEOUT_SEC,
642 sizeof(struct mbx_common_config_vlan),

--- 11 unchanged lines hidden (view full) ---

654 mbx.u0.s.embedded = 1;
655 mbx.payload_length = sizeof(struct mbx_common_config_vlan);
656 DW_SWAP(u32ptr(&mbx), (OCE_BMBX_RHDR_SZ + mbx.payload_length));
657
658 rc = oce_mbox_post(sc, &mbx, NULL);
659 if (!rc)
660 rc = fwcmd->hdr.u0.rsp.status;
661 if (rc)
662 device_printf(sc->dev,"%s failed - cmd status: %d\n",
663 __FUNCTION__, rc);
664 return 0;
665
666}
667
668/**
669 * @brief Function to set flow control capability in the hardware
670 * @param sc software handle to the device
671 * @param flow_control flow control flags to set
672 * @returns 0 on success, EIO on failure
673 */

--- 23 unchanged lines hidden (view full) ---

697 mbx.u0.s.embedded = 1;
698 mbx.payload_length = sizeof(struct mbx_common_get_set_flow_control);
699 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
700
701 rc = oce_mbox_post(sc, &mbx, NULL);
702 if (!rc)
703 rc = fwcmd->hdr.u0.rsp.status;
704 if (rc)
705 device_printf(sc->dev,"%s failed - cmd status: %d\n",
706 __FUNCTION__, rc);
707 return rc;
708}
709
710/**
711 * @brief Initialize the RSS CPU indirection table
712 *
713 * The table is used to choose the queue to place the incomming packets.
714 * Incomming packets are hashed. The lowest bits in the hash result

--- 82 unchanged lines hidden (view full) ---

797 mbx.u0.s.embedded = 1;
798 mbx.payload_length = sizeof(struct mbx_config_nic_rss);
799 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
800
801 rc = oce_mbox_post(sc, &mbx, NULL);
802 if (!rc)
803 rc = fwcmd->hdr.u0.rsp.status;
804 if (rc)
805 device_printf(sc->dev,"%s failed - cmd status: %d\n",
806 __FUNCTION__, rc);
807 }
808 return rc;
809}
810
811/**
812 * @brief RXF function to enable/disable device promiscuous mode
813 * @param sc software handle to the device
814 * @param enable enable/disable flag
815 * @returns 0 on success, EIO on failure
816 * @note
817 * The NIC_CONFIG_PROMISCUOUS command deprecated for Lancer.
818 * This function uses the COMMON_SET_IFACE_RX_FILTER command instead.
819 */
820int
821oce_rxf_set_promiscuous(POCE_SOFTC sc, uint32_t enable)
822{
823 struct mbx_set_common_iface_rx_filter *fwcmd;
824 int sz = sizeof(struct mbx_set_common_iface_rx_filter);
825 iface_rx_filter_ctx_t *req;
826 OCE_DMA_MEM sgl;
827 int rc;
828
829 /* allocate mbx payload's dma scatter/gather memory */
830 rc = oce_dma_alloc(sc, sz, &sgl, 0);
831 if (rc)
832 return rc;
833
834 fwcmd = OCE_DMAPTR(&sgl, struct mbx_set_common_iface_rx_filter);
835
836 req = &fwcmd->params.req;
837 req->iface_flags_mask = MBX_RX_IFACE_FLAGS_PROMISCUOUS |
838 MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS;
839 if (enable) {
840 req->iface_flags = MBX_RX_IFACE_FLAGS_PROMISCUOUS |
841 MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS;
842 }
843 req->if_id = sc->if_id;
844
845 rc = oce_set_common_iface_rx_filter(sc, &sgl);
846 oce_dma_free(sc, &sgl);
847
848 return rc;
849}
850

--- 30 unchanged lines hidden (view full) ---

881 mbx.payload.u0.u1.sgl[0].length = mbx_sz;
882 mbx.payload_length = mbx_sz;
883 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
884
885 rc = oce_mbox_post(sc, &mbx, NULL);
886 if (!rc)
887 rc = fwcmd->hdr.u0.rsp.status;
888 if (rc)
889 device_printf(sc->dev,"%s failed - cmd status: %d\n",
890 __FUNCTION__, rc);
891 return 0;
892}
893
894/**
895 * @brief Function to query the link status from the hardware
896 * @param sc software handle to the device
897 * @param[out] link pointer to the structure returning link attributes
898 * @returns 0 on success, EIO on failure
899 */

--- 20 unchanged lines hidden (view full) ---

920 mbx.payload_length = sizeof(struct mbx_query_common_link_config);
921 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
922
923 rc = oce_mbox_post(sc, &mbx, NULL);
924
925 if (!rc)
926 rc = fwcmd->hdr.u0.rsp.status;
927 if (rc) {
928 device_printf(sc->dev,"%s failed - cmd status: %d\n",
929 __FUNCTION__, rc);
930 goto error;
931 }
932 /* interpret response */
933 bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status));
934 link->logical_link_status = LE_32(link->logical_link_status);
935 link->qos_link_speed = LE_16(link->qos_link_speed);
936error:
937 return rc;
938}
939
940
941
942int
943oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, POCE_DMA_MEM pstats_dma_mem)

--- 29 unchanged lines hidden (view full) ---

973
974 rc = oce_mbox_post(sc, &mbx, NULL);
975
976 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE);
977
978 if (!rc)
979 rc = fwcmd->hdr.u0.rsp.status;
980 if (rc)
981 device_printf(sc->dev,"%s failed - cmd status: %d\n",
982 __FUNCTION__, rc);
983 return rc;
984}
985
986
987
988/**
989 * @brief Function to get NIC statistics
990 * @param sc software handle to the device

--- 32 unchanged lines hidden (view full) ---

1023 mbx.payload_length = sizeof(struct mbx_get_nic_stats);
1024 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1025
1026 rc = oce_mbox_post(sc, &mbx, NULL);
1027 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE);
1028 if (!rc)
1029 rc = fwcmd->hdr.u0.rsp.status;
1030 if (rc)
1031 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1032 __FUNCTION__, rc);
1033 return rc;
1034}
1035
1036
1037/**
1038 * @brief Function to get pport (physical port) statistics
1039 * @param sc software handle to the device
1040 * @param *stats pointer to where to store statistics

--- 34 unchanged lines hidden (view full) ---

1075 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1076
1077 rc = oce_mbox_post(sc, &mbx, NULL);
1078 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE);
1079
1080 if (!rc)
1081 rc = fwcmd->hdr.u0.rsp.status;
1082 if (rc)
1083 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1084 __FUNCTION__, rc);
1085 return rc;
1086}
1087
1088
1089/**
1090 * @brief Function to get vport (virtual port) statistics
1091 * @param sc software handle to the device
1092 * @param *stats pointer to where to store statistics

--- 35 unchanged lines hidden (view full) ---

1128 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1129
1130 rc = oce_mbox_post(sc, &mbx, NULL);
1131 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE);
1132
1133 if (!rc)
1134 rc = fwcmd->hdr.u0.rsp.status;
1135 if (rc)
1136 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1137 __FUNCTION__, rc);
1138 return rc;
1139}
1140
1141
1142/**
1143 * @brief Function to update the muticast filter with
1144 * values in dma_mem
1145 * @param sc software handle to the device

--- 27 unchanged lines hidden (view full) ---

1173 sgl->length = htole32(mbx.payload_length);
1174
1175 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1176
1177 rc = oce_mbox_post(sc, &mbx, NULL);
1178 if (!rc)
1179 rc = req->hdr.u0.rsp.status;
1180 if (rc)
1181 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1182 __FUNCTION__, rc);
1183 return rc;
1184}
1185
1186
1187/**
1188 * @brief Function to send passthrough Ioctls
1189 * @param sc software handle to the device
1190 * @param dma_mem pointer to dma memory region

--- 47 unchanged lines hidden (view full) ---

1238
1239 mbx.u0.s.embedded = 1;
1240 mbx.payload_length = sizeof(struct mbx_add_common_iface_mac);
1241 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1242 rc = oce_mbox_post(sc, &mbx, NULL);
1243 if (!rc)
1244 rc = fwcmd->hdr.u0.rsp.status;
1245 if (rc) {
1246 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1247 __FUNCTION__, rc);
1248 goto error;
1249 }
1250 *pmac_id = fwcmd->params.rsp.pmac_id;
1251error:
1252 return rc;
1253}
1254
1255

--- 20 unchanged lines hidden (view full) ---

1276 mbx.u0.s.embedded = 1;
1277 mbx.payload_length = sizeof(struct mbx_del_common_iface_mac);
1278 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1279
1280 rc = oce_mbox_post(sc, &mbx, NULL);
1281 if (!rc)
1282 rc = fwcmd->hdr.u0.rsp.status;
1283 if (rc)
1284 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1285 __FUNCTION__, rc);
1286 return rc;
1287}
1288
1289
1290
1291int
1292oce_mbox_check_native_mode(POCE_SOFTC sc)
1293{

--- 19 unchanged lines hidden (view full) ---

1313 mbx.u0.s.embedded = 1;
1314 mbx.payload_length = sizeof(struct mbx_common_set_function_cap);
1315 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1316
1317 rc = oce_mbox_post(sc, &mbx, NULL);
1318 if (!rc)
1319 rc = fwcmd->hdr.u0.rsp.status;
1320 if (rc) {
1321 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1322 __FUNCTION__, rc);
1323 goto error;
1324 }
1325 sc->be3_native = fwcmd->params.rsp.capability_flags
1326 & CAP_BE3_NATIVE_ERX_API;
1327
1328error:
1329 return 0;
1330}
1331
1332
1333

--- 24 unchanged lines hidden (view full) ---

1358 mbx.u0.s.embedded = 1;
1359 mbx.payload_length = sizeof(struct mbx_lowlevel_set_loopback_mode);
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,"%s failed - cmd status: %d\n",
1367 __FUNCTION__, rc);
1368
1369 return rc;
1370
1371}
1372
1373int
1374oce_mbox_cmd_test_loopback(POCE_SOFTC sc, uint32_t port_num,
1375 uint32_t loopback_type, uint32_t pkt_size, uint32_t num_pkts,

--- 25 unchanged lines hidden (view full) ---

1401 mbx.u0.s.embedded = 1;
1402 mbx.payload_length = sizeof(struct mbx_lowlevel_test_loopback_mode);
1403 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
1404
1405 rc = oce_mbox_post(sc, &mbx, NULL);
1406 if (!rc)
1407 rc = fwcmd->hdr.u0.rsp.status;
1408 if (rc)
1409 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1410 __FUNCTION__, rc);
1411
1412 return rc;
1413}
1414
1415int
1416oce_mbox_write_flashrom(POCE_SOFTC sc, uint32_t optype,uint32_t opcode,
1417 POCE_DMA_MEM pdma_mem, uint32_t num_bytes)
1418{

--- 9 unchanged lines hidden (view full) ---

1428
1429 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
1430 MBX_SUBSYSTEM_COMMON,
1431 OPCODE_COMMON_WRITE_FLASHROM,
1432 LONG_TIMEOUT,
1433 payload_len,
1434 OCE_MBX_VER_V0);
1435
1436 fwcmd->flash_op_type = optype;
1437 fwcmd->flash_op_code = opcode;
1438 fwcmd->data_buffer_size = num_bytes;
1439
1440 mbx.u0.s.embedded = 0; /*Non embeded*/
1441 mbx.payload_length = payload_len;
1442 mbx.u0.s.sge_count = 1;
1443
1444 sgl = &mbx.payload.u0.u1.sgl[0];
1445 sgl->pa_hi = upper_32_bits(pdma_mem->paddr);
1446 sgl->pa_lo = pdma_mem->paddr & 0xFFFFFFFF;
1447 sgl->length = payload_len;
1448
1449 /* post the command */
1450 rc = oce_mbox_post(sc, &mbx, NULL);
1451 if (!rc)
1452 rc = fwcmd->hdr.u0.rsp.status;
1453 if (rc)
1454 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1455 __FUNCTION__, rc);
1456
1457 return rc;
1458
1459}
1460
1461int
1462oce_mbox_get_flashrom_crc(POCE_SOFTC sc, uint8_t *flash_crc,
1463 uint32_t offset, uint32_t optype)

--- 28 unchanged lines hidden (view full) ---

1492 mbx.u0.s.embedded = 1;
1493 mbx.payload_length = payload_len;
1494
1495 /* post the command */
1496 rc = oce_mbox_post(sc, &mbx, NULL);
1497 if (!rc)
1498 rc = fwcmd->hdr.u0.rsp.status;
1499 if (rc) {
1500 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1501 __FUNCTION__, rc);
1502 goto error;
1503 }
1504 bcopy(fwcmd->data_buffer, flash_crc, 4);
1505error:
1506 return rc;
1507}
1508
1509int

--- 17 unchanged lines hidden (view full) ---

1527 mbx.u0.s.embedded = 1;
1528 mbx.payload_length = sizeof(struct mbx_common_phy_info);
1529
1530 /* now post the command */
1531 rc = oce_mbox_post(sc, &mbx, NULL);
1532 if (!rc)
1533 rc = fwcmd->hdr.u0.rsp.status;
1534 if (rc) {
1535 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1536 __FUNCTION__, rc);
1537 goto error;
1538 }
1539 phy_info->phy_type = fwcmd->params.rsp.phy_info.phy_type;
1540 phy_info->interface_type =
1541 fwcmd->params.rsp.phy_info.interface_type;
1542 phy_info->auto_speeds_supported =
1543 fwcmd->params.rsp.phy_info.auto_speeds_supported;
1544 phy_info->fixed_speeds_supported =
1545 fwcmd->params.rsp.phy_info.fixed_speeds_supported;
1546 phy_info->misc_params =fwcmd->params.rsp.phy_info.misc_params;
1547error:
1548 return rc;
1549
1550}
1551
1552
1553int
1554oce_mbox_lancer_write_flashrom(POCE_SOFTC sc, uint32_t data_size,

--- 33 unchanged lines hidden (view full) ---

1588 fwcmd->params.req.address_lower = pdma_mem->paddr & 0xFFFFFFFF;
1589 fwcmd->params.req.address_upper = upper_32_bits(pdma_mem->paddr);
1590
1591 /* post the command */
1592 rc = oce_mbox_post(sc, &mbx, NULL);
1593 if (!rc)
1594 rc = fwcmd->params.rsp.status;
1595 if (rc) {
1596 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1597 __FUNCTION__, rc);
1598 goto error;
1599 }
1600 *written_data = fwcmd->params.rsp.actual_write_length;
1601 *additional_status = fwcmd->params.rsp.additional_status;
1602error:
1603 return rc;
1604
1605}
1606
1607
1608

--- 35 unchanged lines hidden (view full) ---

1644
1645 mbx.u0.s.embedded = 1;
1646 mbx.payload_length = sizeof(struct mbx_create_nic_rq);
1647
1648 rc = oce_mbox_post(sc, &mbx, NULL);
1649 if (!rc)
1650 rc = fwcmd->hdr.u0.rsp.status;
1651 if (rc) {
1652 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1653 __FUNCTION__, rc);
1654 goto error;
1655 }
1656 rq->rq_id = fwcmd->params.rsp.rq_id;
1657 rq->rss_cpuid = fwcmd->params.rsp.rss_cpuid;
1658error:
1659 return rc;
1660
1661}
1662
1663
1664
1665int
1666oce_mbox_create_wq(struct oce_wq *wq)
1667{
1668 struct oce_mbx mbx;
1669 struct mbx_create_nic_wq *fwcmd;
1670 POCE_SOFTC sc = wq->parent;
1671 int rc = 0, version, num_pages;
1672
1673 bzero(&mbx, sizeof(struct oce_mbx));
1674
1675 fwcmd = (struct mbx_create_nic_wq *)&mbx.payload;
1676 if (IS_XE201(sc)) {
1677 version = OCE_MBX_VER_V1;
1678 fwcmd->params.req.if_id = sc->if_id;
1679 } else if(IS_BE(sc))
1680 IS_PROFILE_SUPER_NIC(sc) ? (version = OCE_MBX_VER_V2)
1681 : (version = OCE_MBX_VER_V0);
1682 else
1683 version = OCE_MBX_VER_V2;
1684
1685 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0,
1686 MBX_SUBSYSTEM_NIC,
1687 NIC_CREATE_WQ, MBX_TIMEOUT_SEC,
1688 sizeof(struct mbx_create_nic_wq),
1689 version);
1690
1691 num_pages = oce_page_list(wq->ring, &fwcmd->params.req.pages[0]);
1692

--- 5 unchanged lines hidden (view full) ---

1698
1699 mbx.u0.s.embedded = 1;
1700 mbx.payload_length = sizeof(struct mbx_create_nic_wq);
1701
1702 rc = oce_mbox_post(sc, &mbx, NULL);
1703 if (!rc)
1704 rc = fwcmd->hdr.u0.rsp.status;
1705 if (rc) {
1706 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1707 __FUNCTION__, rc);
1708 goto error;
1709 }
1710 wq->wq_id = LE_16(fwcmd->params.rsp.wq_id);
1711 if (version == OCE_MBX_VER_V2)
1712 wq->db_offset = LE_32(fwcmd->params.rsp.db_offset);
1713 else
1714 wq->db_offset = PD_TXULP_DB;
1715error:
1716 return rc;
1717
1718}
1719
1720

--- 28 unchanged lines hidden (view full) ---

1749
1750 mbx.u0.s.embedded = 1;
1751 mbx.payload_length = sizeof(struct mbx_create_common_eq);
1752
1753 rc = oce_mbox_post(sc, &mbx, NULL);
1754 if (!rc)
1755 rc = fwcmd->hdr.u0.rsp.status;
1756 if (rc) {
1757 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1758 __FUNCTION__, rc);
1759 goto error;
1760 }
1761 eq->eq_id = LE_16(fwcmd->params.rsp.eq_id);
1762error:
1763 return rc;
1764}
1765
1766
1767
1768int
1769oce_mbox_cq_create(struct oce_cq *cq, uint32_t ncoalesce, uint32_t is_eventable)

--- 57 unchanged lines hidden (view full) ---

1827
1828 mbx.u0.s.embedded = 1;
1829 mbx.payload_length = sizeof(struct mbx_create_common_cq);
1830
1831 rc = oce_mbox_post(sc, &mbx, NULL);
1832 if (!rc)
1833 rc = fwcmd->hdr.u0.rsp.status;
1834 if (rc) {
1835 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1836 __FUNCTION__, rc);
1837 goto error;
1838 }
1839 cq->cq_id = LE_16(fwcmd->params.rsp.cq_id);
1840error:
1841 return rc;
1842
1843}
1844
1845int
1846oce_mbox_read_transrecv_data(POCE_SOFTC sc, uint32_t page_num)
1847{

--- 32 unchanged lines hidden (view full) ---

1880 fwcmd->params.req.port = LE_32(sc->port_id);
1881 fwcmd->params.req.page_num = LE_32(page_num);
1882
1883 /* command post */
1884 rc = oce_mbox_post(sc, &mbx, NULL);
1885 if (!rc)
1886 rc = fwcmd->hdr.u0.rsp.status;
1887 if (rc) {
1888 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1889 __FUNCTION__, rc);
1890 goto error;
1891 }
1892 if(fwcmd->params.rsp.page_num == PAGE_NUM_A0)
1893 {
1894 bcopy((char *)fwcmd->params.rsp.page_data,
1895 (char *)&sfp_vpd_dump_buffer[0],
1896 TRANSCEIVER_A0_SIZE);
1897 }

--- 44 unchanged lines hidden (view full) ---

1942
1943
1944 /* command post */
1945 rc = oce_mbox_post(sc, &mbx, NULL);
1946
1947 if (!rc)
1948 rc = fwcmd->hdr.u0.rsp.status;
1949 if (rc)
1950 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1951 __FUNCTION__, rc);
1952}
1953
1954int
1955oce_get_profile_config(POCE_SOFTC sc)
1956{
1957 struct oce_mbx mbx;
1958 struct mbx_common_get_profile_config *fwcmd;
1959 int rc = 0;

--- 41 unchanged lines hidden (view full) ---

2001
2002 fwcmd->params.req.type = ACTIVE_PROFILE;
2003
2004 /* command post */
2005 rc = oce_mbox_post(sc, &mbx, NULL);
2006 if (!rc)
2007 rc = fwcmd->hdr.u0.rsp.status;
2008 if (rc) {
2009 device_printf(sc->dev,"%s failed - cmd status: %d\n",
2010 __FUNCTION__, rc);
2011 goto error;
2012 }
2013
2014 nic_desc = (struct oce_nic_resc_desc *) fwcmd->params.rsp.resources;
2015 desc_count = HOST_32(fwcmd->params.rsp.desc_count);
2016 for (i = 0; i < desc_count; i++) {
2017 if ((nic_desc->desc_type == NIC_RESC_DESC_TYPE_V0) ||
2018 (nic_desc->desc_type == NIC_RESC_DESC_TYPE_V1)) {
2019 nic_desc_valid = TRUE;
2020 break;
2021 }
2022 nic_desc = (struct oce_nic_resc_desc *) \
2023 ((char *)nic_desc + nic_desc->desc_len);
2024 }
2025 if (!nic_desc_valid) {
2026 rc = -1;
2027 goto error;
2028 }
2029 else {
2030 sc->nwqs = HOST_32(nic_desc->txq_count);
2031 if (sc->nwqs)
2032 sc->nwqs = MIN(sc->nwqs, OCE_MAX_WQ);
2033 else
2034 sc->nwqs = OCE_MAX_WQ;
2035
2036 }
2037error:

--- 53 unchanged lines hidden (view full) ---

2091 sgl->length = htole32(mbx.payload_length);
2092 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ);
2093
2094 /* command post */
2095 rc = oce_mbox_post(sc, &mbx, NULL);
2096 if (!rc)
2097 rc = fwcmd->hdr.u0.rsp.status;
2098 if (rc) {
2099 device_printf(sc->dev,"%s failed - cmd status: %d\n",
2100 __FUNCTION__, rc);
2101 goto error;
2102 }
2103
2104 nic_desc = (struct oce_nic_resc_desc *) fwcmd->params.rsp.resources;
2105 desc_count = HOST_32(fwcmd->params.rsp.desc_count);
2106 for (i = 0; i < desc_count; i++) {
2107 if ((nic_desc->desc_type == NIC_RESC_DESC_TYPE_V0) ||
2108 (nic_desc->desc_type == NIC_RESC_DESC_TYPE_V1)) {
2109 nic_desc_valid = TRUE;
2110 break;
2111 }
2112 nic_desc = (struct oce_nic_resc_desc *) \
2113 ((char *)nic_desc + nic_desc->desc_len);
2114 }
2115 if (!nic_desc_valid) {
2116 rc = -1;
2117 goto error;
2118 }
2119 else {
2120 sc->nwqs = HOST_32(nic_desc->txq_count);
2121 if (sc->nwqs)
2122 sc->nwqs = MIN(sc->nwqs, OCE_MAX_WQ);
2123 else
2124 sc->nwqs = OCE_MAX_WQ;
2125
2126 sc->nrssqs = HOST_32(nic_desc->rssq_count);
2127 if (sc->nrssqs)
2128 sc->nrssqs = MIN(sc->nrssqs, max_rss);
2129 else
2130 sc->nrssqs = max_rss;
2131 sc->nrqs = sc->nrssqs + 1; /* 1 for def RX */;
2132 }
2133error:
2134 oce_dma_free(sc, &dma);
2135 return rc;
2136
2137}