oce_mbox.c (231879) | oce_mbox.c (247880) |
---|---|
1/*- 2 * Copyright (C) 2012 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, --- 23 unchanged lines hidden (view full) --- 32 * freebsd-drivers@emulex.com 33 * 34 * Emulex 35 * 3333 Susan Street 36 * Costa Mesa, CA 92626 37 */ 38 39 | 1/*- 2 * Copyright (C) 2012 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, --- 23 unchanged lines hidden (view full) --- 32 * freebsd-drivers@emulex.com 33 * 34 * Emulex 35 * 3333 Susan Street 36 * Costa Mesa, CA 92626 37 */ 38 39 |
40/* $FreeBSD: head/sys/dev/oce/oce_mbox.c 231879 2012-02-17 13:55:17Z luigi $ */ | |
41 | 40 |
42#include "oce_if.h" | 41/* $FreeBSD: head/sys/dev/oce/oce_mbox.c 247880 2013-03-06 09:53:38Z delphij $ */ |
43 44 | 42 43 |
44#include "oce_if.h" 45extern uint32_t sfp_vpd_dump_buffer[TRANSCEIVER_DATA_NUM_ELE]; 46 |
|
45/** 46 * @brief Reset (firmware) common function 47 * @param sc software handle to the device 48 * @returns 0 on success, ETIMEDOUT on failure 49 */ 50int 51oce_reset_fun(POCE_SOFTC sc) 52{ --- 218 unchanged lines hidden (view full) --- 271 sizeof(struct mbx_get_common_fw_version), 272 OCE_MBX_VER_V0); 273 274 mbx.u0.s.embedded = 1; 275 mbx.payload_length = sizeof(struct mbx_get_common_fw_version); 276 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 277 278 ret = oce_mbox_post(sc, &mbx, NULL); | 47/** 48 * @brief Reset (firmware) common function 49 * @param sc software handle to the device 50 * @returns 0 on success, ETIMEDOUT on failure 51 */ 52int 53oce_reset_fun(POCE_SOFTC sc) 54{ --- 218 unchanged lines hidden (view full) --- 273 sizeof(struct mbx_get_common_fw_version), 274 OCE_MBX_VER_V0); 275 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); |
279 if (ret) 280 return ret; | 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 } |
281 282 bcopy(fwcmd->params.rsp.fw_ver_str, sc->fw_version, 32); | 288 289 bcopy(fwcmd->params.rsp.fw_ver_str, sc->fw_version, 32); |
283 284 return 0; | 290error: 291 return ret; |
285} 286 287 288/** 289 * @brief Firmware will send gracious notifications during 290 * attach only after sending first mcc commnad. We 291 * use MCC queue only for getting async and mailbox 292 * for sending cmds. So to get gracious notifications --- 130 unchanged lines hidden (view full) --- 423 424 fwcmd->params.req.type = type; 425 426 mbx.u0.s.embedded = 1; 427 mbx.payload_length = sizeof(struct mbx_query_common_iface_mac); 428 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 429 430 ret = oce_mbox_post(sc, &mbx, NULL); | 292} 293 294 295/** 296 * @brief Firmware will send gracious notifications during 297 * attach only after sending first mcc commnad. We 298 * use MCC queue only for getting async and mailbox 299 * for sending cmds. So to get gracious notifications --- 130 unchanged lines hidden (view full) --- 430 431 fwcmd->params.req.type = type; 432 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); |
431 if (ret) 432 return ret; | 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 } |
433 434 /* copy the mac addres in the output parameter */ 435 mac->size_of_struct = fwcmd->params.rsp.mac.size_of_struct; 436 bcopy(&fwcmd->params.rsp.mac.mac_addr[0], &mac->mac_addr[0], 437 mac->size_of_struct); | 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); |
438 439 return 0; | 450error: 451 return ret; |
440} 441 442/** 443 * @brief Function to query the fw attributes from the hw 444 * @param sc software handle to the device 445 * @returns 0 on success, EIO on failure 446 */ 447int --- 13 unchanged lines hidden (view full) --- 461 sizeof(struct mbx_common_query_fw_config), 462 OCE_MBX_VER_V0); 463 464 mbx.u0.s.embedded = 1; 465 mbx.payload_length = sizeof(struct mbx_common_query_fw_config); 466 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 467 468 ret = oce_mbox_post(sc, &mbx, NULL); | 452} 453 454/** 455 * @brief Function to query the fw attributes from the hw 456 * @param sc software handle to the device 457 * @returns 0 on success, EIO on failure 458 */ 459int --- 13 unchanged lines hidden (view full) --- 473 sizeof(struct mbx_common_query_fw_config), 474 OCE_MBX_VER_V0); 475 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); |
469 if (ret) 470 return ret; | 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 } |
471 472 DW_SWAP(u32ptr(fwcmd), sizeof(struct mbx_common_query_fw_config)); 473 474 sc->config_number = fwcmd->params.rsp.config_number; 475 sc->asic_revision = fwcmd->params.rsp.asic_revision; 476 sc->port_id = fwcmd->params.rsp.port_id; 477 sc->function_mode = fwcmd->params.rsp.function_mode; 478 sc->function_caps = fwcmd->params.rsp.function_caps; 479 480 if (fwcmd->params.rsp.ulp[0].ulp_mode & ULP_NIC_MODE) { 481 sc->max_tx_rings = fwcmd->params.rsp.ulp[0].nic_wq_tot; 482 sc->max_rx_rings = fwcmd->params.rsp.ulp[0].lro_rqid_tot; 483 } else { 484 sc->max_tx_rings = fwcmd->params.rsp.ulp[1].nic_wq_tot; 485 sc->max_rx_rings = fwcmd->params.rsp.ulp[1].lro_rqid_tot; 486 } 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 |
488 return 0; | 505error: 506 return ret; |
489 490} 491 492/** 493 * 494 * @brief function to create a device interface 495 * @param sc software handle to the device 496 * @param cap_flags capability flags --- 38 unchanged lines hidden (view full) --- 535 fwcmd->params.req.mac_invalid = 1; 536 } 537 538 mbx.u0.s.embedded = 1; 539 mbx.payload_length = sizeof(struct mbx_create_common_iface); 540 DW_SWAP(u32ptr(&mbx), OCE_BMBX_RHDR_SZ); 541 542 rc = oce_mbox_post(sc, &mbx, NULL); | 507 508} 509 510/** 511 * 512 * @brief function to create a device interface 513 * @param sc software handle to the device 514 * @param cap_flags capability flags --- 38 unchanged lines hidden (view full) --- 553 fwcmd->params.req.mac_invalid = 1; 554 } 555 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); |
543 if (rc) 544 return rc; | 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 } |
545 546 *if_id = LE_32(fwcmd->params.rsp.if_id); 547 548 if (mac_addr != NULL) 549 sc->pmac_id = LE_32(fwcmd->params.rsp.pmac_id); | 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); |
550 551 return 0; | 573error: 574 return rc; |
552} 553 554/** 555 * @brief Function to delete an interface 556 * @param sc software handle to the device 557 * @param if_id ID of the interface to delete 558 * @returns 0 on success, EIO on failure 559 */ --- 16 unchanged lines hidden (view full) --- 576 577 fwcmd->params.req.if_id = if_id; 578 579 mbx.u0.s.embedded = 1; 580 mbx.payload_length = sizeof(struct mbx_destroy_common_iface); 581 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 582 583 rc = oce_mbox_post(sc, &mbx, NULL); | 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 581 * @returns 0 on success, EIO on failure 582 */ --- 16 unchanged lines hidden (view full) --- 599 600 fwcmd->params.req.if_id = if_id; 601 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); |
|
584 return rc; 585} 586 587/** 588 * @brief Function to send the mbx command to configure vlan 589 * @param sc software handle to the device 590 * @param if_id interface identifier index 591 * @param vtag_arr array of vlan tags --- 31 unchanged lines hidden (view full) --- 623 bcopy(vtag_arr, fwcmd->params.req.tags.normal_vlans, 624 vtag_cnt * sizeof(struct normal_vlan)); 625 } 626 mbx.u0.s.embedded = 1; 627 mbx.payload_length = sizeof(struct mbx_common_config_vlan); 628 DW_SWAP(u32ptr(&mbx), (OCE_BMBX_RHDR_SZ + mbx.payload_length)); 629 630 rc = oce_mbox_post(sc, &mbx, NULL); | 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 --- 31 unchanged lines hidden (view full) --- 651 bcopy(vtag_arr, fwcmd->params.req.tags.normal_vlans, 652 vtag_cnt * sizeof(struct normal_vlan)); 653 } 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; |
|
631 | 665 |
632 return rc; 633 | |
634} 635 636/** 637 * @brief Function to set flow control capability in the hardware 638 * @param sc software handle to the device 639 * @param flow_control flow control flags to set 640 * @returns 0 on success, EIO on failure 641 */ --- 20 unchanged lines hidden (view full) --- 662 if (flow_control & OCE_FC_RX) 663 fwcmd->rx_flow_control = 1; 664 665 mbx.u0.s.embedded = 1; 666 mbx.payload_length = sizeof(struct mbx_common_get_set_flow_control); 667 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 668 669 rc = oce_mbox_post(sc, &mbx, NULL); | 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 */ --- 20 unchanged lines hidden (view full) --- 694 if (flow_control & OCE_FC_RX) 695 fwcmd->rx_flow_control = 1; 696 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); |
670 | 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); |
671 return rc; 672} 673 674/** 675 * @brief Initialize the RSS CPU indirection table 676 * 677 * The table is used to choose the queue to place the incomming packets. 678 * Incomming packets are hashed. The lowest bits in the hash result --- 42 unchanged lines hidden (view full) --- 721 */ 722int 723oce_config_nic_rss(POCE_SOFTC sc, uint32_t if_id, uint16_t enable_rss) 724{ 725 int rc; 726 struct oce_mbx mbx; 727 struct mbx_config_nic_rss *fwcmd = 728 (struct mbx_config_nic_rss *)&mbx.payload; | 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 --- 42 unchanged lines hidden (view full) --- 757 */ 758int 759oce_config_nic_rss(POCE_SOFTC sc, uint32_t if_id, uint16_t enable_rss) 760{ 761 int rc; 762 struct oce_mbx mbx; 763 struct mbx_config_nic_rss *fwcmd = 764 (struct mbx_config_nic_rss *)&mbx.payload; |
765 int version; |
|
729 730 bzero(&mbx, sizeof(struct oce_mbx)); 731 | 766 767 bzero(&mbx, sizeof(struct oce_mbx)); 768 |
769 if (IS_XE201(sc)) { 770 version = OCE_MBX_VER_V1; 771 fwcmd->params.req.enable_rss = RSS_ENABLE_UDP_IPV4 | 772 RSS_ENABLE_UDP_IPV6; 773 } else 774 version = OCE_MBX_VER_V0; 775 |
|
732 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 733 MBX_SUBSYSTEM_NIC, 734 NIC_CONFIG_RSS, 735 MBX_TIMEOUT_SEC, 736 sizeof(struct mbx_config_nic_rss), | 776 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 777 MBX_SUBSYSTEM_NIC, 778 NIC_CONFIG_RSS, 779 MBX_TIMEOUT_SEC, 780 sizeof(struct mbx_config_nic_rss), |
737 OCE_MBX_VER_V0); | 781 version); |
738 if (enable_rss) | 782 if (enable_rss) |
739 fwcmd->params.req.enable_rss = (RSS_ENABLE_IPV4 | 740 RSS_ENABLE_TCP_IPV4 | 741 RSS_ENABLE_IPV6 | 742 RSS_ENABLE_TCP_IPV6); | 783 fwcmd->params.req.enable_rss |= (RSS_ENABLE_IPV4 | 784 RSS_ENABLE_TCP_IPV4 | 785 RSS_ENABLE_IPV6 | 786 RSS_ENABLE_TCP_IPV6); |
743 fwcmd->params.req.flush = OCE_FLUSH; 744 fwcmd->params.req.if_id = LE_32(if_id); 745 746 srandom(arc4random()); /* random entropy seed */ 747 read_random(fwcmd->params.req.hash, sizeof(fwcmd->params.req.hash)); 748 749 rc = oce_rss_itbl_init(sc, fwcmd); 750 if (rc == 0) { 751 mbx.u0.s.embedded = 1; 752 mbx.payload_length = sizeof(struct mbx_config_nic_rss); 753 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 754 755 rc = oce_mbox_post(sc, &mbx, NULL); | 787 fwcmd->params.req.flush = OCE_FLUSH; 788 fwcmd->params.req.if_id = LE_32(if_id); 789 790 srandom(arc4random()); /* random entropy seed */ 791 read_random(fwcmd->params.req.hash, sizeof(fwcmd->params.req.hash)); 792 793 rc = oce_rss_itbl_init(sc, fwcmd); 794 if (rc == 0) { 795 mbx.u0.s.embedded = 1; 796 mbx.payload_length = sizeof(struct mbx_config_nic_rss); 797 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 798 799 rc = oce_mbox_post(sc, &mbx, NULL); |
756 | 800 if (!rc) 801 rc = fwcmd->hdr.u0.rsp.status; 802 if (rc) 803 device_printf(sc->dev,"%s failed - cmd status: %d\n", 804 __FUNCTION__, rc); |
757 } | 805 } |
758 | |
759 return rc; 760} 761 762/** 763 * @brief RXF function to enable/disable device promiscuous mode 764 * @param sc software handle to the device 765 * @param enable enable/disable flag 766 * @returns 0 on success, EIO on failure --- 62 unchanged lines hidden (view full) --- 829 mbx.u0.s.sge_count = 1; 830 mbx.payload.u0.u1.sgl[0].pa_lo = ADDR_LO(sgl->paddr); 831 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(sgl->paddr); 832 mbx.payload.u0.u1.sgl[0].length = mbx_sz; 833 mbx.payload_length = mbx_sz; 834 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 835 836 rc = oce_mbox_post(sc, &mbx, NULL); | 806 return rc; 807} 808 809/** 810 * @brief RXF function to enable/disable device promiscuous mode 811 * @param sc software handle to the device 812 * @param enable enable/disable flag 813 * @returns 0 on success, EIO on failure --- 62 unchanged lines hidden (view full) --- 876 mbx.u0.s.sge_count = 1; 877 mbx.payload.u0.u1.sgl[0].pa_lo = ADDR_LO(sgl->paddr); 878 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(sgl->paddr); 879 mbx.payload.u0.u1.sgl[0].length = mbx_sz; 880 mbx.payload_length = mbx_sz; 881 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 882 883 rc = oce_mbox_post(sc, &mbx, NULL); |
837 return rc; | 884 if (!rc) 885 rc = fwcmd->hdr.u0.rsp.status; 886 if (rc) 887 device_printf(sc->dev,"%s failed - cmd status: %d\n", 888 __FUNCTION__, rc); 889 return 0; |
838} 839 840/** 841 * @brief Function to query the link status from the hardware 842 * @param sc software handle to the device 843 * @param[out] link pointer to the structure returning link attributes 844 * @returns 0 on success, EIO on failure 845 */ 846int 847oce_get_link_status(POCE_SOFTC sc, struct link_status *link) 848{ 849 struct oce_mbx mbx; 850 struct mbx_query_common_link_config *fwcmd; | 890} 891 892/** 893 * @brief Function to query the link status from the hardware 894 * @param sc software handle to the device 895 * @param[out] link pointer to the structure returning link attributes 896 * @returns 0 on success, EIO on failure 897 */ 898int 899oce_get_link_status(POCE_SOFTC sc, struct link_status *link) 900{ 901 struct oce_mbx mbx; 902 struct mbx_query_common_link_config *fwcmd; |
851 int rc = 0; | 903 int rc = 0, version; |
852 853 bzero(&mbx, sizeof(struct oce_mbx)); 854 | 904 905 bzero(&mbx, sizeof(struct oce_mbx)); 906 |
907 IS_XE201(sc) ? (version = OCE_MBX_VER_V1) : (version = OCE_MBX_VER_V0); 908 |
|
855 fwcmd = (struct mbx_query_common_link_config *)&mbx.payload; 856 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 857 MBX_SUBSYSTEM_COMMON, 858 OPCODE_COMMON_QUERY_LINK_CONFIG, 859 MBX_TIMEOUT_SEC, 860 sizeof(struct mbx_query_common_link_config), | 909 fwcmd = (struct mbx_query_common_link_config *)&mbx.payload; 910 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 911 MBX_SUBSYSTEM_COMMON, 912 OPCODE_COMMON_QUERY_LINK_CONFIG, 913 MBX_TIMEOUT_SEC, 914 sizeof(struct mbx_query_common_link_config), |
861 OCE_MBX_VER_V0); | 915 version); |
862 863 mbx.u0.s.embedded = 1; 864 mbx.payload_length = sizeof(struct mbx_query_common_link_config); 865 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 866 867 rc = oce_mbox_post(sc, &mbx, NULL); 868 | 916 917 mbx.u0.s.embedded = 1; 918 mbx.payload_length = sizeof(struct mbx_query_common_link_config); 919 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 920 921 rc = oce_mbox_post(sc, &mbx, NULL); 922 |
923 if (!rc) 924 rc = fwcmd->hdr.u0.rsp.status; |
|
869 if (rc) { | 925 if (rc) { |
870 device_printf(sc->dev, "Could not get link speed: %d\n", rc); 871 } else { 872 /* interpret response */ 873 bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status)); 874 link->logical_link_status = LE_32(link->logical_link_status); 875 link->qos_link_speed = LE_16(link->qos_link_speed); | 926 device_printf(sc->dev,"%s failed - cmd status: %d\n", 927 __FUNCTION__, rc); 928 goto error; |
876 } | 929 } |
877 | 930 /* interpret response */ 931 bcopy(&fwcmd->params.rsp, link, sizeof(struct link_status)); 932 link->logical_link_status = LE_32(link->logical_link_status); 933 link->qos_link_speed = LE_16(link->qos_link_speed); 934error: |
878 return rc; 879} 880 881 882 883int 884oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, POCE_DMA_MEM pstats_dma_mem) 885{ --- 25 unchanged lines hidden (view full) --- 911 mbx.payload_length = sizeof(struct mbx_get_nic_stats_v0); 912 913 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 914 915 rc = oce_mbox_post(sc, &mbx, NULL); 916 917 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 918 | 935 return rc; 936} 937 938 939 940int 941oce_mbox_get_nic_stats_v0(POCE_SOFTC sc, POCE_DMA_MEM pstats_dma_mem) 942{ --- 25 unchanged lines hidden (view full) --- 968 mbx.payload_length = sizeof(struct mbx_get_nic_stats_v0); 969 970 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 971 972 rc = oce_mbox_post(sc, &mbx, NULL); 973 974 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 975 |
919 if (rc) { 920 device_printf(sc->dev, 921 "Could not get nic statistics: %d\n", rc); 922 } 923 | 976 if (!rc) 977 rc = fwcmd->hdr.u0.rsp.status; 978 if (rc) 979 device_printf(sc->dev,"%s failed - cmd status: %d\n", 980 __FUNCTION__, rc); |
924 return rc; 925} 926 927 928 929/** 930 * @brief Function to get NIC statistics 931 * @param sc software handle to the device --- 29 unchanged lines hidden (view full) --- 961 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(pstats_dma_mem->paddr); 962 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_nic_stats); 963 964 mbx.payload_length = sizeof(struct mbx_get_nic_stats); 965 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 966 967 rc = oce_mbox_post(sc, &mbx, NULL); 968 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); | 981 return rc; 982} 983 984 985 986/** 987 * @brief Function to get NIC statistics 988 * @param sc software handle to the device --- 29 unchanged lines hidden (view full) --- 1018 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(pstats_dma_mem->paddr); 1019 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_nic_stats); 1020 1021 mbx.payload_length = sizeof(struct mbx_get_nic_stats); 1022 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1023 1024 rc = oce_mbox_post(sc, &mbx, NULL); 1025 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); |
969 if (rc) { 970 device_printf(sc->dev, 971 "Could not get nic statistics: %d\n", rc); 972 } | 1026 if (!rc) 1027 rc = fwcmd->hdr.u0.rsp.status; 1028 if (rc) 1029 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1030 __FUNCTION__, rc); |
973 return rc; 974} 975 976 977/** 978 * @brief Function to get pport (physical port) statistics 979 * @param sc software handle to the device 980 * @param *stats pointer to where to store statistics --- 15 unchanged lines hidden (view full) --- 996 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 997 MBX_SUBSYSTEM_NIC, 998 NIC_GET_PPORT_STATS, 999 MBX_TIMEOUT_SEC, 1000 sizeof(struct mbx_get_pport_stats), 1001 OCE_MBX_VER_V0); 1002 1003 fwcmd->params.req.reset_stats = reset_stats; | 1031 return rc; 1032} 1033 1034 1035/** 1036 * @brief Function to get pport (physical port) statistics 1037 * @param sc software handle to the device 1038 * @param *stats pointer to where to store statistics --- 15 unchanged lines hidden (view full) --- 1054 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 1055 MBX_SUBSYSTEM_NIC, 1056 NIC_GET_PPORT_STATS, 1057 MBX_TIMEOUT_SEC, 1058 sizeof(struct mbx_get_pport_stats), 1059 OCE_MBX_VER_V0); 1060 1061 fwcmd->params.req.reset_stats = reset_stats; |
1004 fwcmd->params.req.port_number = sc->if_id; | 1062 fwcmd->params.req.port_number = sc->port_id; |
1005 1006 mbx.u0.s.embedded = 0; /* stats too large for embedded mbx rsp */ 1007 mbx.u0.s.sge_count = 1; /* using scatter gather instead */ 1008 1009 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_PREWRITE); 1010 mbx.payload.u0.u1.sgl[0].pa_lo = ADDR_LO(pstats_dma_mem->paddr); 1011 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(pstats_dma_mem->paddr); 1012 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_pport_stats); 1013 1014 mbx.payload_length = sizeof(struct mbx_get_pport_stats); 1015 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1016 1017 rc = oce_mbox_post(sc, &mbx, NULL); 1018 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1019 | 1063 1064 mbx.u0.s.embedded = 0; /* stats too large for embedded mbx rsp */ 1065 mbx.u0.s.sge_count = 1; /* using scatter gather instead */ 1066 1067 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_PREWRITE); 1068 mbx.payload.u0.u1.sgl[0].pa_lo = ADDR_LO(pstats_dma_mem->paddr); 1069 mbx.payload.u0.u1.sgl[0].pa_hi = ADDR_HI(pstats_dma_mem->paddr); 1070 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_pport_stats); 1071 1072 mbx.payload_length = sizeof(struct mbx_get_pport_stats); 1073 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1074 1075 rc = oce_mbox_post(sc, &mbx, NULL); 1076 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1077 |
1020 if (rc != 0) { 1021 device_printf(sc->dev, 1022 "Could not get physical port statistics: %d\n", rc); 1023 } 1024 | 1078 if (!rc) 1079 rc = fwcmd->hdr.u0.rsp.status; 1080 if (rc) 1081 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1082 __FUNCTION__, rc); |
1025 return rc; 1026} 1027 1028 1029/** 1030 * @brief Function to get vport (virtual port) statistics 1031 * @param sc software handle to the device 1032 * @param *stats pointer to where to store statistics --- 32 unchanged lines hidden (view full) --- 1065 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_vport_stats); 1066 1067 mbx.payload_length = sizeof(struct mbx_get_vport_stats); 1068 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1069 1070 rc = oce_mbox_post(sc, &mbx, NULL); 1071 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1072 | 1083 return rc; 1084} 1085 1086 1087/** 1088 * @brief Function to get vport (virtual port) statistics 1089 * @param sc software handle to the device 1090 * @param *stats pointer to where to store statistics --- 32 unchanged lines hidden (view full) --- 1123 mbx.payload.u0.u1.sgl[0].length = sizeof(struct mbx_get_vport_stats); 1124 1125 mbx.payload_length = sizeof(struct mbx_get_vport_stats); 1126 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1127 1128 rc = oce_mbox_post(sc, &mbx, NULL); 1129 oce_dma_sync(pstats_dma_mem, BUS_DMASYNC_POSTWRITE); 1130 |
1073 if (rc != 0) { 1074 device_printf(sc->dev, 1075 "Could not get physical port statistics: %d\n", rc); 1076 } 1077 | 1131 if (!rc) 1132 rc = fwcmd->hdr.u0.rsp.status; 1133 if (rc) 1134 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1135 __FUNCTION__, rc); |
1078 return rc; 1079} 1080 1081 1082/** 1083 * @brief Function to update the muticast filter with 1084 * values in dma_mem 1085 * @param sc software handle to the device --- 24 unchanged lines hidden (view full) --- 1110 sgl = &mbx.payload.u0.u1.sgl[0]; 1111 sgl->pa_hi = htole32(upper_32_bits(pdma_mem->paddr)); 1112 sgl->pa_lo = htole32((pdma_mem->paddr) & 0xFFFFFFFF); 1113 sgl->length = htole32(mbx.payload_length); 1114 1115 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1116 1117 rc = oce_mbox_post(sc, &mbx, NULL); | 1136 return rc; 1137} 1138 1139 1140/** 1141 * @brief Function to update the muticast filter with 1142 * values in dma_mem 1143 * @param sc software handle to the device --- 24 unchanged lines hidden (view full) --- 1168 sgl = &mbx.payload.u0.u1.sgl[0]; 1169 sgl->pa_hi = htole32(upper_32_bits(pdma_mem->paddr)); 1170 sgl->pa_lo = htole32((pdma_mem->paddr) & 0xFFFFFFFF); 1171 sgl->length = htole32(mbx.payload_length); 1172 1173 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1174 1175 rc = oce_mbox_post(sc, &mbx, NULL); |
1118 | 1176 if (!rc) 1177 rc = req->hdr.u0.rsp.status; 1178 if (rc) 1179 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1180 __FUNCTION__, rc); |
1119 return rc; 1120} 1121 1122 1123/** 1124 * @brief Function to send passthrough Ioctls 1125 * @param sc software handle to the device 1126 * @param dma_mem pointer to dma memory region --- 44 unchanged lines hidden (view full) --- 1171 1172 fwcmd->params.req.if_id = (uint16_t) if_id; 1173 bcopy(mac_addr, fwcmd->params.req.mac_address, 6); 1174 1175 mbx.u0.s.embedded = 1; 1176 mbx.payload_length = sizeof(struct mbx_add_common_iface_mac); 1177 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1178 rc = oce_mbox_post(sc, &mbx, NULL); | 1181 return rc; 1182} 1183 1184 1185/** 1186 * @brief Function to send passthrough Ioctls 1187 * @param sc software handle to the device 1188 * @param dma_mem pointer to dma memory region --- 44 unchanged lines hidden (view full) --- 1233 1234 fwcmd->params.req.if_id = (uint16_t) if_id; 1235 bcopy(mac_addr, fwcmd->params.req.mac_address, 6); 1236 1237 mbx.u0.s.embedded = 1; 1238 mbx.payload_length = sizeof(struct mbx_add_common_iface_mac); 1239 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1240 rc = oce_mbox_post(sc, &mbx, NULL); |
1179 if (rc) 1180 return rc; 1181 | 1241 if (!rc) 1242 rc = fwcmd->hdr.u0.rsp.status; 1243 if (rc) { 1244 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1245 __FUNCTION__, rc); 1246 goto error; 1247 } |
1182 *pmac_id = fwcmd->params.rsp.pmac_id; | 1248 *pmac_id = fwcmd->params.rsp.pmac_id; |
1183 | 1249error: |
1184 return rc; 1185} 1186 1187 1188int 1189oce_mbox_macaddr_del(POCE_SOFTC sc, uint32_t if_id, uint32_t pmac_id) 1190{ 1191 struct oce_mbx mbx; --- 13 unchanged lines hidden (view full) --- 1205 fwcmd->params.req.if_id = (uint16_t)if_id; 1206 fwcmd->params.req.pmac_id = pmac_id; 1207 1208 mbx.u0.s.embedded = 1; 1209 mbx.payload_length = sizeof(struct mbx_del_common_iface_mac); 1210 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1211 1212 rc = oce_mbox_post(sc, &mbx, NULL); | 1250 return rc; 1251} 1252 1253 1254int 1255oce_mbox_macaddr_del(POCE_SOFTC sc, uint32_t if_id, uint32_t pmac_id) 1256{ 1257 struct oce_mbx mbx; --- 13 unchanged lines hidden (view full) --- 1271 fwcmd->params.req.if_id = (uint16_t)if_id; 1272 fwcmd->params.req.pmac_id = pmac_id; 1273 1274 mbx.u0.s.embedded = 1; 1275 mbx.payload_length = sizeof(struct mbx_del_common_iface_mac); 1276 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1277 1278 rc = oce_mbox_post(sc, &mbx, NULL); |
1279 if (!rc) 1280 rc = fwcmd->hdr.u0.rsp.status; 1281 if (rc) 1282 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1283 __FUNCTION__, rc); |
|
1213 return rc; 1214} 1215 1216 1217 1218int 1219oce_mbox_check_native_mode(POCE_SOFTC sc) 1220{ --- 16 unchanged lines hidden (view full) --- 1237 1238 fwcmd->params.req.capability_flags = CAP_BE3_NATIVE_ERX_API; 1239 1240 mbx.u0.s.embedded = 1; 1241 mbx.payload_length = sizeof(struct mbx_common_set_function_cap); 1242 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1243 1244 rc = oce_mbox_post(sc, &mbx, NULL); | 1284 return rc; 1285} 1286 1287 1288 1289int 1290oce_mbox_check_native_mode(POCE_SOFTC sc) 1291{ --- 16 unchanged lines hidden (view full) --- 1308 1309 fwcmd->params.req.capability_flags = CAP_BE3_NATIVE_ERX_API; 1310 1311 mbx.u0.s.embedded = 1; 1312 mbx.payload_length = sizeof(struct mbx_common_set_function_cap); 1313 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1314 1315 rc = oce_mbox_post(sc, &mbx, NULL); |
1245 //if (rc != 0) This can fail in legacy mode. So skip 1246 // FN_LEAVE(rc); 1247 | 1316 if (!rc) 1317 rc = fwcmd->hdr.u0.rsp.status; 1318 if (rc) { 1319 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1320 __FUNCTION__, rc); 1321 goto error; 1322 } |
1248 sc->be3_native = fwcmd->params.rsp.capability_flags 1249 & CAP_BE3_NATIVE_ERX_API; 1250 | 1323 sc->be3_native = fwcmd->params.rsp.capability_flags 1324 & CAP_BE3_NATIVE_ERX_API; 1325 |
1326error: |
|
1251 return 0; 1252} 1253 1254 1255 1256int 1257oce_mbox_cmd_set_loopback(POCE_SOFTC sc, uint8_t port_num, 1258 uint8_t loopback_type, uint8_t enable) --- 18 unchanged lines hidden (view full) --- 1277 fwcmd->params.req.loopback_type = loopback_type; 1278 fwcmd->params.req.loopback_state = enable; 1279 1280 mbx.u0.s.embedded = 1; 1281 mbx.payload_length = sizeof(struct mbx_lowlevel_set_loopback_mode); 1282 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1283 1284 rc = oce_mbox_post(sc, &mbx, NULL); | 1327 return 0; 1328} 1329 1330 1331 1332int 1333oce_mbox_cmd_set_loopback(POCE_SOFTC sc, uint8_t port_num, 1334 uint8_t loopback_type, uint8_t enable) --- 18 unchanged lines hidden (view full) --- 1353 fwcmd->params.req.loopback_type = loopback_type; 1354 fwcmd->params.req.loopback_state = enable; 1355 1356 mbx.u0.s.embedded = 1; 1357 mbx.payload_length = sizeof(struct mbx_lowlevel_set_loopback_mode); 1358 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1359 1360 rc = oce_mbox_post(sc, &mbx, NULL); |
1361 if (!rc) 1362 rc = fwcmd->hdr.u0.rsp.status; 1363 if (rc) 1364 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1365 __FUNCTION__, rc); |
|
1285 1286 return rc; 1287 1288} 1289 1290int 1291oce_mbox_cmd_test_loopback(POCE_SOFTC sc, uint32_t port_num, 1292 uint32_t loopback_type, uint32_t pkt_size, uint32_t num_pkts, --- 22 unchanged lines hidden (view full) --- 1315 fwcmd->params.req.num_pkts = num_pkts; 1316 fwcmd->params.req.loopback_type = loopback_type; 1317 1318 mbx.u0.s.embedded = 1; 1319 mbx.payload_length = sizeof(struct mbx_lowlevel_test_loopback_mode); 1320 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1321 1322 rc = oce_mbox_post(sc, &mbx, NULL); | 1366 1367 return rc; 1368 1369} 1370 1371int 1372oce_mbox_cmd_test_loopback(POCE_SOFTC sc, uint32_t port_num, 1373 uint32_t loopback_type, uint32_t pkt_size, uint32_t num_pkts, --- 22 unchanged lines hidden (view full) --- 1396 fwcmd->params.req.num_pkts = num_pkts; 1397 fwcmd->params.req.loopback_type = loopback_type; 1398 1399 mbx.u0.s.embedded = 1; 1400 mbx.payload_length = sizeof(struct mbx_lowlevel_test_loopback_mode); 1401 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1402 1403 rc = oce_mbox_post(sc, &mbx, NULL); |
1404 if (!rc) 1405 rc = fwcmd->hdr.u0.rsp.status; |
|
1323 if (rc) | 1406 if (rc) |
1324 return rc; | 1407 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1408 __FUNCTION__, rc); |
1325 | 1409 |
1326 return(fwcmd->params.rsp.status); | 1410 return rc; |
1327} 1328 1329int 1330oce_mbox_write_flashrom(POCE_SOFTC sc, uint32_t optype,uint32_t opcode, 1331 POCE_DMA_MEM pdma_mem, uint32_t num_bytes) 1332{ 1333 1334 struct oce_mbx mbx; --- 22 unchanged lines hidden (view full) --- 1357 1358 sgl = &mbx.payload.u0.u1.sgl[0]; 1359 sgl->pa_hi = upper_32_bits(pdma_mem->paddr); 1360 sgl->pa_lo = pdma_mem->paddr & 0xFFFFFFFF; 1361 sgl->length = payload_len; 1362 1363 /* post the command */ 1364 rc = oce_mbox_post(sc, &mbx, NULL); | 1411} 1412 1413int 1414oce_mbox_write_flashrom(POCE_SOFTC sc, uint32_t optype,uint32_t opcode, 1415 POCE_DMA_MEM pdma_mem, uint32_t num_bytes) 1416{ 1417 1418 struct oce_mbx mbx; --- 22 unchanged lines hidden (view full) --- 1441 1442 sgl = &mbx.payload.u0.u1.sgl[0]; 1443 sgl->pa_hi = upper_32_bits(pdma_mem->paddr); 1444 sgl->pa_lo = pdma_mem->paddr & 0xFFFFFFFF; 1445 sgl->length = payload_len; 1446 1447 /* post the command */ 1448 rc = oce_mbox_post(sc, &mbx, NULL); |
1365 if (rc) { 1366 device_printf(sc->dev, "Write FlashROM mbox post failed\n"); 1367 } else { 1368 rc = fwcmd->hdr.u0.rsp.status; 1369 } | 1449 if (!rc) 1450 rc = fwcmd->hdr.u0.rsp.status; 1451 if (rc) 1452 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1453 __FUNCTION__, rc); |
1370 1371 return rc; 1372 1373} 1374 1375int 1376oce_mbox_get_flashrom_crc(POCE_SOFTC sc, uint8_t *flash_crc, 1377 uint32_t offset, uint32_t optype) --- 25 unchanged lines hidden (view full) --- 1403 fwcmd->data_offset = offset; 1404 fwcmd->data_buffer_size = 0x4; 1405 1406 mbx.u0.s.embedded = 1; 1407 mbx.payload_length = payload_len; 1408 1409 /* post the command */ 1410 rc = oce_mbox_post(sc, &mbx, NULL); | 1454 1455 return rc; 1456 1457} 1458 1459int 1460oce_mbox_get_flashrom_crc(POCE_SOFTC sc, uint8_t *flash_crc, 1461 uint32_t offset, uint32_t optype) --- 25 unchanged lines hidden (view full) --- 1487 fwcmd->data_offset = offset; 1488 fwcmd->data_buffer_size = 0x4; 1489 1490 mbx.u0.s.embedded = 1; 1491 mbx.payload_length = payload_len; 1492 1493 /* post the command */ 1494 rc = oce_mbox_post(sc, &mbx, NULL); |
1495 if (!rc) 1496 rc = fwcmd->hdr.u0.rsp.status; |
|
1411 if (rc) { | 1497 if (rc) { |
1412 device_printf(sc->dev, "Read FlashROM CRC mbox post failed\n"); 1413 } else { 1414 bcopy(fwcmd->data_buffer, flash_crc, 4); 1415 rc = fwcmd->hdr.u0.rsp.status; | 1498 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1499 __FUNCTION__, rc); 1500 goto error; |
1416 } | 1501 } |
1502 bcopy(fwcmd->data_buffer, flash_crc, 4); 1503error: |
|
1417 return rc; 1418} 1419 1420int 1421oce_mbox_get_phy_info(POCE_SOFTC sc, struct oce_phy_info *phy_info) 1422{ 1423 1424 struct oce_mbx mbx; --- 10 unchanged lines hidden (view full) --- 1435 sizeof(struct mbx_common_phy_info), 1436 OCE_MBX_VER_V0); 1437 1438 mbx.u0.s.embedded = 1; 1439 mbx.payload_length = sizeof(struct mbx_common_phy_info); 1440 1441 /* now post the command */ 1442 rc = oce_mbox_post(sc, &mbx, NULL); | 1504 return rc; 1505} 1506 1507int 1508oce_mbox_get_phy_info(POCE_SOFTC sc, struct oce_phy_info *phy_info) 1509{ 1510 1511 struct oce_mbx mbx; --- 10 unchanged lines hidden (view full) --- 1522 sizeof(struct mbx_common_phy_info), 1523 OCE_MBX_VER_V0); 1524 1525 mbx.u0.s.embedded = 1; 1526 mbx.payload_length = sizeof(struct mbx_common_phy_info); 1527 1528 /* now post the command */ 1529 rc = oce_mbox_post(sc, &mbx, NULL); |
1530 if (!rc) 1531 rc = fwcmd->hdr.u0.rsp.status; |
|
1443 if (rc) { | 1532 if (rc) { |
1444 device_printf(sc->dev, "Read PHY info mbox post failed\n"); 1445 } else { 1446 rc = fwcmd->hdr.u0.rsp.status; 1447 phy_info->phy_type = fwcmd->params.rsp.phy_info.phy_type; 1448 phy_info->interface_type = 1449 fwcmd->params.rsp.phy_info.interface_type; 1450 phy_info->auto_speeds_supported = 1451 fwcmd->params.rsp.phy_info.auto_speeds_supported; 1452 phy_info->fixed_speeds_supported = 1453 fwcmd->params.rsp.phy_info.fixed_speeds_supported; 1454 phy_info->misc_params =fwcmd->params.rsp.phy_info.misc_params; 1455 | 1533 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1534 __FUNCTION__, rc); 1535 goto error; |
1456 } | 1536 } |
1537 phy_info->phy_type = fwcmd->params.rsp.phy_info.phy_type; 1538 phy_info->interface_type = 1539 fwcmd->params.rsp.phy_info.interface_type; 1540 phy_info->auto_speeds_supported = 1541 fwcmd->params.rsp.phy_info.auto_speeds_supported; 1542 phy_info->fixed_speeds_supported = 1543 fwcmd->params.rsp.phy_info.fixed_speeds_supported; 1544 phy_info->misc_params =fwcmd->params.rsp.phy_info.misc_params; 1545error: |
|
1457 return rc; 1458 1459} 1460 1461 1462int 1463oce_mbox_lancer_write_flashrom(POCE_SOFTC sc, uint32_t data_size, 1464 uint32_t data_offset, POCE_DMA_MEM pdma_mem, --- 29 unchanged lines hidden (view full) --- 1494 fwcmd->params.req.descriptor_count = 1; 1495 fwcmd->params.req.write_offset = data_offset; 1496 fwcmd->params.req.buffer_length = data_size; 1497 fwcmd->params.req.address_lower = pdma_mem->paddr & 0xFFFFFFFF; 1498 fwcmd->params.req.address_upper = upper_32_bits(pdma_mem->paddr); 1499 1500 /* post the command */ 1501 rc = oce_mbox_post(sc, &mbx, NULL); | 1546 return rc; 1547 1548} 1549 1550 1551int 1552oce_mbox_lancer_write_flashrom(POCE_SOFTC sc, uint32_t data_size, 1553 uint32_t data_offset, POCE_DMA_MEM pdma_mem, --- 29 unchanged lines hidden (view full) --- 1583 fwcmd->params.req.descriptor_count = 1; 1584 fwcmd->params.req.write_offset = data_offset; 1585 fwcmd->params.req.buffer_length = data_size; 1586 fwcmd->params.req.address_lower = pdma_mem->paddr & 0xFFFFFFFF; 1587 fwcmd->params.req.address_upper = upper_32_bits(pdma_mem->paddr); 1588 1589 /* post the command */ 1590 rc = oce_mbox_post(sc, &mbx, NULL); |
1591 if (!rc) 1592 rc = fwcmd->params.rsp.status; |
|
1502 if (rc) { | 1593 if (rc) { |
1503 device_printf(sc->dev, 1504 "Write Lancer FlashROM mbox post failed\n"); 1505 } else { 1506 *written_data = fwcmd->params.rsp.actual_write_length; 1507 *additional_status = fwcmd->params.rsp.additional_status; 1508 rc = fwcmd->params.rsp.status; | 1594 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1595 __FUNCTION__, rc); 1596 goto error; |
1509 } | 1597 } |
1598 *written_data = fwcmd->params.rsp.actual_write_length; 1599 *additional_status = fwcmd->params.rsp.additional_status; 1600error: |
|
1510 return rc; 1511 1512} 1513 1514 1515 1516int 1517oce_mbox_create_rq(struct oce_rq *rq) --- 30 unchanged lines hidden (view full) --- 1548 fwcmd->params.req.if_id = sc->if_id; 1549 fwcmd->params.req.max_frame_size = rq->cfg.mtu; 1550 fwcmd->params.req.is_rss_queue = rq->cfg.is_rss_queue; 1551 1552 mbx.u0.s.embedded = 1; 1553 mbx.payload_length = sizeof(struct mbx_create_nic_rq); 1554 1555 rc = oce_mbox_post(sc, &mbx, NULL); | 1601 return rc; 1602 1603} 1604 1605 1606 1607int 1608oce_mbox_create_rq(struct oce_rq *rq) --- 30 unchanged lines hidden (view full) --- 1639 fwcmd->params.req.if_id = sc->if_id; 1640 fwcmd->params.req.max_frame_size = rq->cfg.mtu; 1641 fwcmd->params.req.is_rss_queue = rq->cfg.is_rss_queue; 1642 1643 mbx.u0.s.embedded = 1; 1644 mbx.payload_length = sizeof(struct mbx_create_nic_rq); 1645 1646 rc = oce_mbox_post(sc, &mbx, NULL); |
1556 if (rc) | 1647 if (!rc) 1648 rc = fwcmd->hdr.u0.rsp.status; 1649 if (rc) { 1650 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1651 __FUNCTION__, rc); |
1557 goto error; | 1652 goto error; |
1558 | 1653 } |
1559 rq->rq_id = fwcmd->params.rsp.rq_id; 1560 rq->rss_cpuid = fwcmd->params.rsp.rss_cpuid; | 1654 rq->rq_id = fwcmd->params.rsp.rq_id; 1655 rq->rss_cpuid = fwcmd->params.rsp.rss_cpuid; |
1561 1562 return 0; | |
1563error: | 1656error: |
1564 device_printf(sc->dev, "Mbox Create RQ failed\n"); | |
1565 return rc; 1566 1567} 1568 1569 1570 1571int 1572oce_mbox_create_wq(struct oce_wq *wq) --- 25 unchanged lines hidden (view full) --- 1598 fwcmd->params.req.wq_size = OCE_LOG2(wq->cfg.q_len) + 1; 1599 fwcmd->params.req.cq_id = wq->cq->cq_id; 1600 fwcmd->params.req.ulp_num = 1; 1601 1602 mbx.u0.s.embedded = 1; 1603 mbx.payload_length = sizeof(struct mbx_create_nic_wq); 1604 1605 rc = oce_mbox_post(sc, &mbx, NULL); | 1657 return rc; 1658 1659} 1660 1661 1662 1663int 1664oce_mbox_create_wq(struct oce_wq *wq) --- 25 unchanged lines hidden (view full) --- 1690 fwcmd->params.req.wq_size = OCE_LOG2(wq->cfg.q_len) + 1; 1691 fwcmd->params.req.cq_id = wq->cq->cq_id; 1692 fwcmd->params.req.ulp_num = 1; 1693 1694 mbx.u0.s.embedded = 1; 1695 mbx.payload_length = sizeof(struct mbx_create_nic_wq); 1696 1697 rc = oce_mbox_post(sc, &mbx, NULL); |
1606 if (rc) | 1698 if (!rc) 1699 rc = fwcmd->hdr.u0.rsp.status; 1700 if (rc) { 1701 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1702 __FUNCTION__, rc); |
1607 goto error; | 1703 goto error; |
1608 | 1704 } |
1609 wq->wq_id = LE_16(fwcmd->params.rsp.wq_id); | 1705 wq->wq_id = LE_16(fwcmd->params.rsp.wq_id); |
1610 1611 return 0; | |
1612error: | 1706error: |
1613 device_printf(sc->dev, "Mbox Create WQ failed\n"); | |
1614 return rc; 1615 1616} 1617 1618 1619 1620int 1621oce_mbox_create_eq(struct oce_eq *eq) --- 22 unchanged lines hidden (view full) --- 1644 fwcmd->params.req.ctx.armed = 0; 1645 fwcmd->params.req.ctx.delay_mult = eq->eq_cfg.cur_eqd; 1646 1647 1648 mbx.u0.s.embedded = 1; 1649 mbx.payload_length = sizeof(struct mbx_create_common_eq); 1650 1651 rc = oce_mbox_post(sc, &mbx, NULL); | 1707 return rc; 1708 1709} 1710 1711 1712 1713int 1714oce_mbox_create_eq(struct oce_eq *eq) --- 22 unchanged lines hidden (view full) --- 1737 fwcmd->params.req.ctx.armed = 0; 1738 fwcmd->params.req.ctx.delay_mult = eq->eq_cfg.cur_eqd; 1739 1740 1741 mbx.u0.s.embedded = 1; 1742 mbx.payload_length = sizeof(struct mbx_create_common_eq); 1743 1744 rc = oce_mbox_post(sc, &mbx, NULL); |
1652 if (rc) | 1745 if (!rc) 1746 rc = fwcmd->hdr.u0.rsp.status; 1747 if (rc) { 1748 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1749 __FUNCTION__, rc); |
1653 goto error; | 1750 goto error; |
1654 | 1751 } |
1655 eq->eq_id = LE_16(fwcmd->params.rsp.eq_id); | 1752 eq->eq_id = LE_16(fwcmd->params.rsp.eq_id); |
1656 1657 return 0; | |
1658error: | 1753error: |
1659 device_printf(sc->dev, "Mbox Create EQ failed\n"); | |
1660 return rc; 1661} 1662 1663 1664 1665int 1666oce_mbox_cq_create(struct oce_cq *cq, uint32_t ncoalesce, uint32_t is_eventable) 1667{ --- 53 unchanged lines hidden (view full) --- 1721 ctx->v0.armed = 0; 1722 ctx->v0.eq_id = cq->eq->eq_id; 1723 } 1724 1725 mbx.u0.s.embedded = 1; 1726 mbx.payload_length = sizeof(struct mbx_create_common_cq); 1727 1728 rc = oce_mbox_post(sc, &mbx, NULL); | 1754 return rc; 1755} 1756 1757 1758 1759int 1760oce_mbox_cq_create(struct oce_cq *cq, uint32_t ncoalesce, uint32_t is_eventable) 1761{ --- 53 unchanged lines hidden (view full) --- 1815 ctx->v0.armed = 0; 1816 ctx->v0.eq_id = cq->eq->eq_id; 1817 } 1818 1819 mbx.u0.s.embedded = 1; 1820 mbx.payload_length = sizeof(struct mbx_create_common_cq); 1821 1822 rc = oce_mbox_post(sc, &mbx, NULL); |
1729 if (rc) | 1823 if (!rc) 1824 rc = fwcmd->hdr.u0.rsp.status; 1825 if (rc) { 1826 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1827 __FUNCTION__, rc); |
1730 goto error; | 1828 goto error; |
1731 | 1829 } |
1732 cq->cq_id = LE_16(fwcmd->params.rsp.cq_id); | 1830 cq->cq_id = LE_16(fwcmd->params.rsp.cq_id); |
1831error: 1832 return rc; |
|
1733 | 1833 |
1734 return 0; | 1834} 1835 1836int 1837oce_mbox_read_transrecv_data(POCE_SOFTC sc, uint32_t page_num) 1838{ 1839 int rc = 0; 1840 struct oce_mbx mbx; 1841 struct mbx_read_common_transrecv_data *fwcmd; 1842 struct oce_mq_sge *sgl; 1843 OCE_DMA_MEM dma; 1844 1845 /* Allocate DMA mem*/ 1846 if (oce_dma_alloc(sc, sizeof(struct mbx_read_common_transrecv_data), 1847 &dma, 0)) 1848 return ENOMEM; 1849 1850 fwcmd = OCE_DMAPTR(&dma, struct mbx_read_common_transrecv_data); 1851 bzero(fwcmd, sizeof(struct mbx_read_common_transrecv_data)); 1852 1853 bzero(&mbx, sizeof(struct oce_mbx)); 1854 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 1855 MBX_SUBSYSTEM_COMMON, 1856 OPCODE_COMMON_READ_TRANSRECEIVER_DATA, 1857 MBX_TIMEOUT_SEC, 1858 sizeof(struct mbx_read_common_transrecv_data), 1859 OCE_MBX_VER_V0); 1860 1861 /* fill rest of mbx */ 1862 mbx.u0.s.embedded = 0; 1863 mbx.payload_length = sizeof(struct mbx_read_common_transrecv_data); 1864 mbx.u0.s.sge_count = 1; 1865 sgl = &mbx.payload.u0.u1.sgl[0]; 1866 sgl->pa_hi = htole32(upper_32_bits(dma.paddr)); 1867 sgl->pa_lo = htole32((dma.paddr) & 0xFFFFFFFF); 1868 sgl->length = htole32(mbx.payload_length); 1869 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1870 1871 fwcmd->params.req.port = LE_32(sc->port_id); 1872 fwcmd->params.req.page_num = LE_32(page_num); 1873 1874 /* command post */ 1875 rc = oce_mbox_post(sc, &mbx, NULL); 1876 if (!rc) 1877 rc = fwcmd->hdr.u0.rsp.status; 1878 if (rc) { 1879 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1880 __FUNCTION__, rc); 1881 goto error; 1882 } 1883 if(fwcmd->params.rsp.page_num == PAGE_NUM_A0) 1884 { 1885 bcopy((char *)fwcmd->params.rsp.page_data, 1886 (char *)&sfp_vpd_dump_buffer[0], 1887 TRANSCEIVER_A0_SIZE); 1888 } 1889 1890 if(fwcmd->params.rsp.page_num == PAGE_NUM_A2) 1891 { 1892 bcopy((char *)fwcmd->params.rsp.page_data, 1893 (char *)&sfp_vpd_dump_buffer[32], 1894 TRANSCEIVER_A2_SIZE); 1895 } |
1735error: | 1896error: |
1736 device_printf(sc->dev, "Mbox Create CQ failed\n"); | |
1737 return rc; | 1897 return rc; |
1898} |
|
1738 | 1899 |
1900void 1901oce_mbox_eqd_modify_periodic(POCE_SOFTC sc, struct oce_set_eqd *set_eqd, 1902 int num) 1903{ 1904 struct oce_mbx mbx; 1905 struct mbx_modify_common_eq_delay *fwcmd; 1906 int rc = 0; 1907 int i = 0; 1908 1909 bzero(&mbx, sizeof(struct oce_mbx)); 1910 1911 /* Initialize MODIFY_EQ_DELAY ioctl header */ 1912 fwcmd = (struct mbx_modify_common_eq_delay *)&mbx.payload; 1913 mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, 1914 MBX_SUBSYSTEM_COMMON, 1915 OPCODE_COMMON_MODIFY_EQ_DELAY, 1916 MBX_TIMEOUT_SEC, 1917 sizeof(struct mbx_modify_common_eq_delay), 1918 OCE_MBX_VER_V0); 1919 /* fill rest of mbx */ 1920 mbx.u0.s.embedded = 1; 1921 mbx.payload_length = sizeof(struct mbx_modify_common_eq_delay); 1922 DW_SWAP(u32ptr(&mbx), mbx.payload_length + OCE_BMBX_RHDR_SZ); 1923 1924 fwcmd->params.req.num_eq = num; 1925 for (i = 0; i < num; i++) { 1926 fwcmd->params.req.delay[i].eq_id = 1927 htole32(set_eqd[i].eq_id); 1928 fwcmd->params.req.delay[i].phase = 0; 1929 fwcmd->params.req.delay[i].dm = 1930 htole32(set_eqd[i].delay_multiplier); 1931 } 1932 1933 1934 /* command post */ 1935 rc = oce_mbox_post(sc, &mbx, NULL); 1936 1937 if (!rc) 1938 rc = fwcmd->hdr.u0.rsp.status; 1939 if (rc) 1940 device_printf(sc->dev,"%s failed - cmd status: %d\n", 1941 __FUNCTION__, rc); |
|
1739} | 1942} |
1943 1944 |
|