@@ -611,22 +611,35 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
611
611
return 0 ;
612
612
}
613
613
614
- /* Response handler for Mellanox command Get Mac Address */
615
- static int ncsi_rsp_handler_oem_mlx_gma (struct ncsi_request * nr )
614
+ /* Response handler for Get Mac Address command */
615
+ static int ncsi_rsp_handler_oem_gma (struct ncsi_request * nr , int mfr_id )
616
616
{
617
617
struct ncsi_dev_priv * ndp = nr -> ndp ;
618
618
struct net_device * ndev = ndp -> ndev .dev ;
619
619
const struct net_device_ops * ops = ndev -> netdev_ops ;
620
620
struct ncsi_rsp_oem_pkt * rsp ;
621
621
struct sockaddr saddr ;
622
+ u32 mac_addr_off = 0 ;
622
623
int ret = 0 ;
623
624
624
625
/* Get the response header */
625
626
rsp = (struct ncsi_rsp_oem_pkt * )skb_network_header (nr -> rsp );
626
627
627
628
saddr .sa_family = ndev -> type ;
628
629
ndev -> priv_flags |= IFF_LIVE_ADDR_CHANGE ;
629
- memcpy (saddr .sa_data , & rsp -> data [MLX_MAC_ADDR_OFFSET ], ETH_ALEN );
630
+ if (mfr_id == NCSI_OEM_MFR_BCM_ID )
631
+ mac_addr_off = BCM_MAC_ADDR_OFFSET ;
632
+ else if (mfr_id == NCSI_OEM_MFR_MLX_ID )
633
+ mac_addr_off = MLX_MAC_ADDR_OFFSET ;
634
+ else if (mfr_id == NCSI_OEM_MFR_INTEL_ID )
635
+ mac_addr_off = INTEL_MAC_ADDR_OFFSET ;
636
+
637
+ memcpy (saddr .sa_data , & rsp -> data [mac_addr_off ], ETH_ALEN );
638
+ if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID )
639
+ eth_addr_inc ((u8 * )saddr .sa_data );
640
+ if (!is_valid_ether_addr ((const u8 * )saddr .sa_data ))
641
+ return - ENXIO ;
642
+
630
643
/* Set the flag for GMA command which should only be called once */
631
644
ndp -> gma_flag = 1 ;
632
645
@@ -649,41 +662,10 @@ static int ncsi_rsp_handler_oem_mlx(struct ncsi_request *nr)
649
662
650
663
if (mlx -> cmd == NCSI_OEM_MLX_CMD_GMA &&
651
664
mlx -> param == NCSI_OEM_MLX_CMD_GMA_PARAM )
652
- return ncsi_rsp_handler_oem_mlx_gma (nr );
665
+ return ncsi_rsp_handler_oem_gma (nr , NCSI_OEM_MFR_MLX_ID );
653
666
return 0 ;
654
667
}
655
668
656
- /* Response handler for Broadcom command Get Mac Address */
657
- static int ncsi_rsp_handler_oem_bcm_gma (struct ncsi_request * nr )
658
- {
659
- struct ncsi_dev_priv * ndp = nr -> ndp ;
660
- struct net_device * ndev = ndp -> ndev .dev ;
661
- const struct net_device_ops * ops = ndev -> netdev_ops ;
662
- struct ncsi_rsp_oem_pkt * rsp ;
663
- struct sockaddr saddr ;
664
- int ret = 0 ;
665
-
666
- /* Get the response header */
667
- rsp = (struct ncsi_rsp_oem_pkt * )skb_network_header (nr -> rsp );
668
-
669
- saddr .sa_family = ndev -> type ;
670
- ndev -> priv_flags |= IFF_LIVE_ADDR_CHANGE ;
671
- memcpy (saddr .sa_data , & rsp -> data [BCM_MAC_ADDR_OFFSET ], ETH_ALEN );
672
- /* Increase mac address by 1 for BMC's address */
673
- eth_addr_inc ((u8 * )saddr .sa_data );
674
- if (!is_valid_ether_addr ((const u8 * )saddr .sa_data ))
675
- return - ENXIO ;
676
-
677
- /* Set the flag for GMA command which should only be called once */
678
- ndp -> gma_flag = 1 ;
679
-
680
- ret = ops -> ndo_set_mac_address (ndev , & saddr );
681
- if (ret < 0 )
682
- netdev_warn (ndev , "NCSI: 'Writing mac address to device failed\n" );
683
-
684
- return ret ;
685
- }
686
-
687
669
/* Response handler for Broadcom card */
688
670
static int ncsi_rsp_handler_oem_bcm (struct ncsi_request * nr )
689
671
{
@@ -695,42 +677,10 @@ static int ncsi_rsp_handler_oem_bcm(struct ncsi_request *nr)
695
677
bcm = (struct ncsi_rsp_oem_bcm_pkt * )(rsp -> data );
696
678
697
679
if (bcm -> type == NCSI_OEM_BCM_CMD_GMA )
698
- return ncsi_rsp_handler_oem_bcm_gma (nr );
680
+ return ncsi_rsp_handler_oem_gma (nr , NCSI_OEM_MFR_BCM_ID );
699
681
return 0 ;
700
682
}
701
683
702
- /* Response handler for Intel command Get Mac Address */
703
- static int ncsi_rsp_handler_oem_intel_gma (struct ncsi_request * nr )
704
- {
705
- struct ncsi_dev_priv * ndp = nr -> ndp ;
706
- struct net_device * ndev = ndp -> ndev .dev ;
707
- const struct net_device_ops * ops = ndev -> netdev_ops ;
708
- struct ncsi_rsp_oem_pkt * rsp ;
709
- struct sockaddr saddr ;
710
- int ret = 0 ;
711
-
712
- /* Get the response header */
713
- rsp = (struct ncsi_rsp_oem_pkt * )skb_network_header (nr -> rsp );
714
-
715
- saddr .sa_family = ndev -> type ;
716
- ndev -> priv_flags |= IFF_LIVE_ADDR_CHANGE ;
717
- memcpy (saddr .sa_data , & rsp -> data [INTEL_MAC_ADDR_OFFSET ], ETH_ALEN );
718
- /* Increase mac address by 1 for BMC's address */
719
- eth_addr_inc ((u8 * )saddr .sa_data );
720
- if (!is_valid_ether_addr ((const u8 * )saddr .sa_data ))
721
- return - ENXIO ;
722
-
723
- /* Set the flag for GMA command which should only be called once */
724
- ndp -> gma_flag = 1 ;
725
-
726
- ret = ops -> ndo_set_mac_address (ndev , & saddr );
727
- if (ret < 0 )
728
- netdev_warn (ndev ,
729
- "NCSI: 'Writing mac address to device failed\n" );
730
-
731
- return ret ;
732
- }
733
-
734
684
/* Response handler for Intel card */
735
685
static int ncsi_rsp_handler_oem_intel (struct ncsi_request * nr )
736
686
{
@@ -742,7 +692,7 @@ static int ncsi_rsp_handler_oem_intel(struct ncsi_request *nr)
742
692
intel = (struct ncsi_rsp_oem_intel_pkt * )(rsp -> data );
743
693
744
694
if (intel -> cmd == NCSI_OEM_INTEL_CMD_GMA )
745
- return ncsi_rsp_handler_oem_intel_gma (nr );
695
+ return ncsi_rsp_handler_oem_gma (nr , NCSI_OEM_MFR_INTEL_ID );
746
696
747
697
return 0 ;
748
698
}
0 commit comments