qcacmn: add a new function to update net_device->dev_addr
In kernel 5.17, net_device->dev_addr is changed to const unsigned char* and can only be updated via dev_addr_mod(). Add a new function qdf_net_update_net_device_dev_addr() to call kernel API dev_addr_mod(). Change-Id: Ifecfb453f5dc6b066892c04f4bdbec3759e32c53 CRs-Fixed: 3298120
This commit is contained in:

zatwierdzone przez
Madan Koyyalamudi

rodzic
1cb111d3bc
commit
e895717ffb
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -63,7 +64,22 @@ qdf_net_if_get_dev_by_name(char *nif_name);
|
||||
*/
|
||||
QDF_STATUS
|
||||
qdf_net_if_release_dev(struct qdf_net_if *nif);
|
||||
#else
|
||||
|
||||
/**
|
||||
* qdf_net_update_net_device_dev_addr() - update net_device dev_addr
|
||||
* @ndev: net_device
|
||||
* @src_addr: source mac address
|
||||
* @len: length
|
||||
*
|
||||
* This function updates dev_addr in net_device
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void
|
||||
qdf_net_update_net_device_dev_addr(struct net_device *ndev,
|
||||
const void *src_addr,
|
||||
size_t len);
|
||||
#else /* ENHANCED_OS_ABSTRACTION */
|
||||
static inline QDF_STATUS
|
||||
qdf_net_if_create_dummy_if(struct qdf_net_if *nif)
|
||||
{
|
||||
@@ -81,7 +97,25 @@ qdf_net_if_release_dev(struct qdf_net_if *nif)
|
||||
{
|
||||
return __qdf_net_if_release_dev(nif);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* qdf_net_update_net_device_dev_addr() - update net_device dev_addr
|
||||
* @ndev: net_device
|
||||
* @src_addr: source mac address
|
||||
* @len: length
|
||||
*
|
||||
* This function updates dev_addr in net_device
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
qdf_net_update_net_device_dev_addr(struct net_device *ndev,
|
||||
const void *src_addr,
|
||||
size_t len)
|
||||
{
|
||||
__qdf_net_update_net_device_dev_addr(ndev, src_addr, len);
|
||||
}
|
||||
#endif /* ENHANCED_OS_ABSTRACTION */
|
||||
|
||||
/**
|
||||
* qdf_net_if_get_devname() - Retrieve netdevice name
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -84,4 +85,44 @@ __qdf_net_if_release_dev(struct qdf_net_if *nif)
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0))
|
||||
/**
|
||||
* qdf_net_update_net_device_dev_addr() - update net_device dev_addr
|
||||
* @ndev: net_device
|
||||
* @src_addr: source mac address
|
||||
* @len: length
|
||||
*
|
||||
* kernel version 5.17 onwards made net_device->dev_addr as const unsigned char*
|
||||
* so to update dev_addr, this function calls kernel api dev_addr_mod.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
__qdf_net_update_net_device_dev_addr(struct net_device *ndev,
|
||||
const void *src_addr,
|
||||
size_t len)
|
||||
{
|
||||
dev_addr_mod(ndev, 0, src_addr, len);
|
||||
}
|
||||
#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)) */
|
||||
/**
|
||||
* qdf_net_update_net_device_dev_addr() - update net_device dev_addr
|
||||
* @ndev: net_device
|
||||
* @src_addr: source mac address
|
||||
* @len: length
|
||||
*
|
||||
* This function updates dev_addr in net_device using mem copy.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static inline void
|
||||
__qdf_net_update_net_device_dev_addr(struct net_device *ndev,
|
||||
const void *src_addr,
|
||||
size_t len)
|
||||
{
|
||||
memcpy(ndev->dev_addr, src_addr, len);
|
||||
}
|
||||
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 17, 0)) */
|
||||
|
||||
#endif /*__I_QDF_NET_IF_H */
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2018,2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -87,3 +88,24 @@ qdf_net_if_release_dev(struct qdf_net_if *nif)
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_net_if_release_dev);
|
||||
|
||||
/**
|
||||
* qdf_net_update_net_device_dev_addr() - update net_device dev_addr
|
||||
* @ndev: net_device
|
||||
* @src_addr: source mac address
|
||||
* @len: length
|
||||
*
|
||||
* kernel version 5.17 onwards made net_device->dev_addr as const unsigned char*
|
||||
* so to update dev_addr, this function calls kernel api dev_addr_mod.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void
|
||||
qdf_net_update_net_device_dev_addr(struct net_device *ndev,
|
||||
const void *src_addr,
|
||||
size_t len)
|
||||
{
|
||||
__qdf_net_update_net_device_dev_addr(ndev, src_addr, len);
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_net_update_net_device_dev_addr);
|
||||
|
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@@ -41,6 +42,7 @@
|
||||
#include <linux/ctype.h>
|
||||
#include "epping_main.h"
|
||||
#include "epping_internal.h"
|
||||
#include "qdf_net_if.h"
|
||||
|
||||
static int epping_start_adapter(epping_adapter_t *adapter);
|
||||
static void epping_stop_adapter(epping_adapter_t *adapter);
|
||||
@@ -220,7 +222,8 @@ static int epping_set_mac_address(struct net_device *dev, void *addr)
|
||||
struct sockaddr *psta_mac_addr = addr;
|
||||
qdf_mem_copy(&adapter->macAddressCurrent,
|
||||
psta_mac_addr->sa_data, ETH_ALEN);
|
||||
qdf_mem_copy(dev->dev_addr, psta_mac_addr->sa_data, ETH_ALEN);
|
||||
qdf_net_update_net_device_dev_addr(dev, psta_mac_addr->sa_data,
|
||||
ETH_ALEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -379,7 +382,9 @@ epping_adapter_t *epping_add_adapter(epping_context_t *pEpping_ctx,
|
||||
adapter->dev = dev;
|
||||
adapter->pEpping_ctx = pEpping_ctx;
|
||||
adapter->device_mode = device_mode; /* station, SAP, etc */
|
||||
qdf_mem_copy(dev->dev_addr, (void *)macAddr, sizeof(tSirMacAddr));
|
||||
qdf_net_update_net_device_dev_addr(dev,
|
||||
(void *)macAddr,
|
||||
sizeof(tSirMacAddr));
|
||||
qdf_mem_copy(adapter->macAddressCurrent.bytes,
|
||||
macAddr, sizeof(tSirMacAddr));
|
||||
qdf_spinlock_create(&adapter->data_lock);
|
||||
|
Reference in New Issue
Block a user