Skip to content

Commit 74b449b

Browse files
fr0st61tedavem330
authored andcommitted
net/ncsi: make one oem_gma function for all mfr id
Make the one Get Mac Address function for all manufacturers and change this call in handlers accordingly. Reviewed-by: Simon Horman <[email protected]> Signed-off-by: Ivan Mikhaylov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 0c6e9d3 commit 74b449b

File tree

1 file changed

+19
-69
lines changed

1 file changed

+19
-69
lines changed

net/ncsi/ncsi-rsp.c

Lines changed: 19 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -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 */
688670
static 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 */
735685
static 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

Comments
 (0)