Deleted Added
full compact
oce_mbox.c (252869) oce_mbox.c (257007)
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
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 $ */
39
40
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) {
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) {
284 device_printf(sc->dev,"%s failed - cmd status: %d\n",
285 __FUNCTION__, 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);
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) {
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) {
441 device_printf(sc->dev,"%s failed - cmd status: %d\n",
442 __FUNCTION__, 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);
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) {
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) {
484 device_printf(sc->dev,"%s failed - cmd status: %d\n",
485 __FUNCTION__, 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);
486 goto error;
487 }
488
489 DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config));
490
489 goto error;
490 }
491
492 DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config));
493
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;
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);
496
497 if (fwcmd->params.rsp.ulp[0].ulp_mode & ULP_NIC_MODE) {
499
500 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;
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);
500 } else {
503 } 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;
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);
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) {
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) {
564 device_printf(sc->dev,"%s failed - cmd status: %d\n",
565 __FUNCTION__, 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);
566 goto error;
567 }
568
571 goto error;
572 }
573
569 *if_id = LE_32(fwcmd->params.rsp.if_id);
574 *if_id = HOST_32(fwcmd->params.rsp.if_id);
570
571 if (mac_addr != NULL)
575
576 if (mac_addr != NULL)
572 sc->pmac_id = LE_32(fwcmd->params.rsp.pmac_id);
577 sc->pmac_id = HOST_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)
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)
610 device_printf(sc->dev,"%s failed - cmd status: %d\n",
611 __FUNCTION__, 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);
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;
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;
633 int rc;
640 int rc = 0;
634
641
642 if (sc->vlans_added > sc->max_vlans)
643 goto vlan_promisc;
644
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)
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)
662 device_printf(sc->dev,"%s failed - cmd status: %d\n",
663 __FUNCTION__, rc);
664 return 0;
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);
665
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
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)
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)
705 device_printf(sc->dev,"%s failed - cmd status: %d\n",
706 __FUNCTION__, 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);
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)
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)
805 device_printf(sc->dev,"%s failed - cmd status: %d\n",
806 __FUNCTION__, 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);
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
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
821oce_rxf_set_promiscuous(POCE_SOFTC sc, uint32_t enable)
845oce_rxf_set_promiscuous(POCE_SOFTC sc, uint8_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;
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;
839 if (enable) {
840 req->iface_flags = MBX_RX_IFACE_FLAGS_PROMISCUOUS |
841 MBX_RX_IFACE_FLAGS_VLAN_PROMISCUOUS;
842 }
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
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)
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)
889 device_printf(sc->dev,"%s failed - cmd status: %d\n",
890 __FUNCTION__, rc);
891 return 0;
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;
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) {
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) {
928 device_printf(sc->dev,"%s failed - cmd status: %d\n",
929 __FUNCTION__, 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);
930 goto error;
931 }
932 /* interpret response */
933 bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status));
961 goto error;
962 }
963 /* interpret response */
964 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);
965 link->logical_link_status = HOST_32(link->logical_link_status);
966 link->qos_link_speed = HOST_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)
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)
981 device_printf(sc->dev,"%s failed - cmd status: %d\n",
982 __FUNCTION__, 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);
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)
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)
1031 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1032 __FUNCTION__, 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);
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)
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)
1083 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1084 __FUNCTION__, 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);
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)
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)
1136 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1137 __FUNCTION__, 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);
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)
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)
1181 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1182 __FUNCTION__, 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);
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) {
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) {
1246 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1247 __FUNCTION__, 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);
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)
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)
1284 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1285 __FUNCTION__, 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);
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) {
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) {
1321 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1322 __FUNCTION__, 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);
1323 goto error;
1324 }
1370 goto error;
1371 }
1325 sc->be3_native = fwcmd->params.rsp.capability_flags
1372 sc->be3_native = HOST_32(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)
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)
1366 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1367 __FUNCTION__, 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);
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)
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)
1409 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1410 __FUNCTION__, 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);
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
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
1436 fwcmd->flash_op_type = optype;
1437 fwcmd->flash_op_code = opcode;
1438 fwcmd->data_buffer_size = num_bytes;
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);
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)
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)
1454 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1455 __FUNCTION__, 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);
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) {
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) {
1500 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1501 __FUNCTION__, 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);
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) {
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) {
1535 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1536 __FUNCTION__, 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);
1537 goto error;
1538 }
1594 goto error;
1595 }
1539 phy_info->phy_type = fwcmd->params.rsp.phy_info.phy_type;
1596 phy_info->phy_type = HOST_16(fwcmd->params.rsp.phy_info.phy_type);
1540 phy_info->interface_type =
1597 phy_info->interface_type =
1541 fwcmd->params.rsp.phy_info.interface_type;
1598 HOST_16(fwcmd->params.rsp.phy_info.interface_type);
1542 phy_info->auto_speeds_supported =
1599 phy_info->auto_speeds_supported =
1543 fwcmd->params.rsp.phy_info.auto_speeds_supported;
1600 HOST_16(fwcmd->params.rsp.phy_info.auto_speeds_supported);
1544 phy_info->fixed_speeds_supported =
1601 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;
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);
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) {
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) {
1596 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1597 __FUNCTION__, 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);
1598 goto error;
1599 }
1657 goto error;
1658 }
1600 *written_data = fwcmd->params.rsp.actual_write_length;
1659 *written_data = HOST_32(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) {
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) {
1652 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1653 __FUNCTION__, 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);
1654 goto error;
1655 }
1715 goto error;
1716 }
1656 rq->rq_id = fwcmd->params.rsp.rq_id;
1717 rq->rq_id = HOST_16(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;
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;
1676 if (IS_XE201(sc)) {
1737 if (IS_XE201(sc))
1677 version = OCE_MBX_VER_V1;
1738 version = OCE_MBX_VER_V1;
1678 fwcmd->params.req.if_id = sc->if_id;
1679 } else if(IS_BE(sc))
1739 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
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
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) {
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) {
1706 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1707 __FUNCTION__, 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);
1708 goto error;
1709 }
1773 goto error;
1774 }
1710 wq->wq_id = LE_16(fwcmd->params.rsp.wq_id);
1775 wq->wq_id = HOST_16(fwcmd->params.rsp.wq_id);
1711 if (version == OCE_MBX_VER_V2)
1776 if (version == OCE_MBX_VER_V2)
1712 wq->db_offset = LE_32(fwcmd->params.rsp.db_offset);
1777 wq->db_offset = HOST_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) {
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) {
1757 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1758 __FUNCTION__, 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);
1759 goto error;
1760 }
1826 goto error;
1827 }
1761 eq->eq_id = LE_16(fwcmd->params.rsp.eq_id);
1828 eq->eq_id = HOST_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) {
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) {
1835 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1836 __FUNCTION__, 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);
1837 goto error;
1838 }
1906 goto error;
1907 }
1839 cq->cq_id = LE_16(fwcmd->params.rsp.cq_id);
1908 cq->cq_id = HOST_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) {
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) {
1888 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1889 __FUNCTION__, 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);
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)
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)
1950 device_printf(sc->dev,"%s failed - cmd status: %d\n",
1951 __FUNCTION__, 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);
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) {
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) {
2009 device_printf(sc->dev,"%s failed - cmd status: %d\n",
2010 __FUNCTION__, 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);
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 {
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;
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) {
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) {
2099 device_printf(sc->dev,"%s failed - cmd status: %d\n",
2100 __FUNCTION__, 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);
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 {
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;
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}
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}