[4/4] net/ncsi: add shift MAC address property
Commit Message
Add the shift MAC address property for GMA command which provides which
shift should be used but keep old one values for backward compatibility.
Signed-off-by: Ivan Mikhaylov <fr0st61te@gmail.com>
---
net/ncsi/ncsi-rsp.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
@@ -9,6 +9,8 @@
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/skbuff.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
#include <net/ncsi.h>
#include <net/net_namespace.h>
@@ -616,9 +618,12 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
{
struct ncsi_dev_priv *ndp = nr->ndp;
struct net_device *ndev = ndp->ndev.dev;
+ struct platform_device *pdev;
struct ncsi_rsp_oem_pkt *rsp;
struct sockaddr saddr;
u32 mac_addr_off = 0;
+ s32 shift_mac_addr = 0;
+ u64 mac_addr;
int ret = 0;
/* Get the response header */
@@ -635,7 +640,17 @@ static int ncsi_rsp_handler_oem_gma(struct ncsi_request *nr, int mfr_id)
memcpy(saddr.sa_data, &rsp->data[mac_addr_off], ETH_ALEN);
if (mfr_id == NCSI_OEM_MFR_BCM_ID || mfr_id == NCSI_OEM_MFR_INTEL_ID)
- eth_addr_inc((u8 *)saddr.sa_data);
+ shift_mac_addr = 1;
+
+ pdev = to_platform_device(ndev->dev.parent);
+ if (pdev)
+ of_property_read_s32(pdev->dev.of_node,
+ "mac-address-increment", &shift_mac_addr);
+
+ /* Increase mac address by shift value for BMC's address */
+ mac_addr = ether_addr_to_u64((u8 *)saddr.sa_data);
+ mac_addr += shift_mac_addr;
+ u64_to_ether_addr(mac_addr, (u8 *)saddr.sa_data);
if (!is_valid_ether_addr((const u8 *)saddr.sa_data))
return -ENXIO;