@@ -611,22 +611,35 @@ static int ncsi_rsp_handler_snfc(struct ncsi_request *nr)
611611 return 0 ;
612612}
613613
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 )
616616{
617617 struct ncsi_dev_priv * ndp = nr -> ndp ;
618618 struct net_device * ndev = ndp -> ndev .dev ;
619619 const struct net_device_ops * ops = ndev -> netdev_ops ;
620620 struct ncsi_rsp_oem_pkt * rsp ;
621621 struct sockaddr saddr ;
622+ u32 mac_addr_off = 0 ;
622623 int ret = 0 ;
623624
624625 /* Get the response header */
625626 rsp = (struct ncsi_rsp_oem_pkt * )skb_network_header (nr -> rsp );
626627
627628 saddr .sa_family = ndev -> type ;
628629 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+
630643 /* Set the flag for GMA command which should only be called once */
631644 ndp -> gma_flag = 1 ;
632645
@@ -649,41 +662,10 @@ static int ncsi_rsp_handler_oem_mlx(struct ncsi_request *nr)
649662
650663 if (mlx -> cmd == NCSI_OEM_MLX_CMD_GMA &&
651664 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 );
653666 return 0 ;
654667}
655668
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-
687669/* Response handler for Broadcom card */
688670static int ncsi_rsp_handler_oem_bcm (struct ncsi_request * nr )
689671{
@@ -695,42 +677,10 @@ static int ncsi_rsp_handler_oem_bcm(struct ncsi_request *nr)
695677 bcm = (struct ncsi_rsp_oem_bcm_pkt * )(rsp -> data );
696678
697679 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 );
699681 return 0 ;
700682}
701683
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-
734684/* Response handler for Intel card */
735685static int ncsi_rsp_handler_oem_intel (struct ncsi_request * nr )
736686{
@@ -742,7 +692,7 @@ static int ncsi_rsp_handler_oem_intel(struct ncsi_request *nr)
742692 intel = (struct ncsi_rsp_oem_intel_pkt * )(rsp -> data );
743693
744694 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 );
746696
747697 return 0 ;
748698}
0 commit comments