mirror of https://gitee.com/openkylin/linux.git
Merge branch 'net-atlantic-various-non-functional-changes'
Igor Russkikh says: ==================== net: atlantic: various non-functional changes This patchset contains several non-functional changes, which were made in out of tree driver over the time. Mostly typos, checkpatch findings and comment fixes. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
b08866f42a
|
@ -124,21 +124,21 @@ static const char aq_macsec_stat_names[][ETH_GSTRING_LEN] = {
|
||||||
"MACSec OutUnctrlHitDropRedir",
|
"MACSec OutUnctrlHitDropRedir",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *aq_macsec_txsc_stat_names[] = {
|
static const char * const aq_macsec_txsc_stat_names[] = {
|
||||||
"MACSecTXSC%d ProtectedPkts",
|
"MACSecTXSC%d ProtectedPkts",
|
||||||
"MACSecTXSC%d EncryptedPkts",
|
"MACSecTXSC%d EncryptedPkts",
|
||||||
"MACSecTXSC%d ProtectedOctets",
|
"MACSecTXSC%d ProtectedOctets",
|
||||||
"MACSecTXSC%d EncryptedOctets",
|
"MACSecTXSC%d EncryptedOctets",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *aq_macsec_txsa_stat_names[] = {
|
static const char * const aq_macsec_txsa_stat_names[] = {
|
||||||
"MACSecTXSC%dSA%d HitDropRedirect",
|
"MACSecTXSC%dSA%d HitDropRedirect",
|
||||||
"MACSecTXSC%dSA%d Protected2Pkts",
|
"MACSecTXSC%dSA%d Protected2Pkts",
|
||||||
"MACSecTXSC%dSA%d ProtectedPkts",
|
"MACSecTXSC%dSA%d ProtectedPkts",
|
||||||
"MACSecTXSC%dSA%d EncryptedPkts",
|
"MACSecTXSC%dSA%d EncryptedPkts",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *aq_macsec_rxsa_stat_names[] = {
|
static const char * const aq_macsec_rxsa_stat_names[] = {
|
||||||
"MACSecRXSC%dSA%d UntaggedHitPkts",
|
"MACSecRXSC%dSA%d UntaggedHitPkts",
|
||||||
"MACSecRXSC%dSA%d CtrlHitDrpRedir",
|
"MACSecRXSC%dSA%d CtrlHitDrpRedir",
|
||||||
"MACSecRXSC%dSA%d NotUsingSa",
|
"MACSecRXSC%dSA%d NotUsingSa",
|
||||||
|
@ -607,7 +607,9 @@ static int aq_ethtool_get_ts_info(struct net_device *ndev,
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
|
BIT(HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
|
||||||
BIT(HWTSTAMP_FILTER_PTP_V2_EVENT);
|
BIT(HWTSTAMP_FILTER_PTP_V2_EVENT);
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
info->phc_index = ptp_clock_index(aq_ptp_get_ptp_clock(aq_nic->aq_ptp));
|
info->phc_index = ptp_clock_index(aq_ptp_get_ptp_clock(aq_nic->aq_ptp));
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -716,13 +718,12 @@ static void aq_ethtool_get_pauseparam(struct net_device *ndev,
|
||||||
struct ethtool_pauseparam *pause)
|
struct ethtool_pauseparam *pause)
|
||||||
{
|
{
|
||||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||||
u32 fc = aq_nic->aq_nic_cfg.fc.req;
|
int fc = aq_nic->aq_nic_cfg.fc.req;
|
||||||
|
|
||||||
pause->autoneg = 0;
|
pause->autoneg = 0;
|
||||||
|
|
||||||
pause->rx_pause = !!(fc & AQ_NIC_FC_RX);
|
pause->rx_pause = !!(fc & AQ_NIC_FC_RX);
|
||||||
pause->tx_pause = !!(fc & AQ_NIC_FC_TX);
|
pause->tx_pause = !!(fc & AQ_NIC_FC_TX);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int aq_ethtool_set_pauseparam(struct net_device *ndev,
|
static int aq_ethtool_set_pauseparam(struct net_device *ndev,
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/* Atlantic Network Driver
|
||||||
* aQuantia Corporation Network Driver
|
*
|
||||||
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_main.c: Main file for aQuantia Linux driver. */
|
/* File aq_main.c: Main file for aQuantia Linux driver. */
|
||||||
|
@ -98,6 +99,7 @@ static int aq_ndev_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||||
{
|
{
|
||||||
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
struct aq_nic_s *aq_nic = netdev_priv(ndev);
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
if (unlikely(aq_utils_obj_test(&aq_nic->flags, AQ_NIC_PTP_DPATH_UP))) {
|
if (unlikely(aq_utils_obj_test(&aq_nic->flags, AQ_NIC_PTP_DPATH_UP))) {
|
||||||
/* Hardware adds the Timestamp for PTPv2 802.AS1
|
/* Hardware adds the Timestamp for PTPv2 802.AS1
|
||||||
* and PTPv2 IPv4 UDP.
|
* and PTPv2 IPv4 UDP.
|
||||||
|
@ -114,6 +116,7 @@ static int aq_ndev_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||||
unlikely(eth_hdr(skb)->h_proto == htons(ETH_P_1588)))
|
unlikely(eth_hdr(skb)->h_proto == htons(ETH_P_1588)))
|
||||||
return aq_ptp_xmit(aq_nic, skb);
|
return aq_ptp_xmit(aq_nic, skb);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
skb_tx_timestamp(skb);
|
skb_tx_timestamp(skb);
|
||||||
return aq_nic_xmit(aq_nic, skb);
|
return aq_nic_xmit(aq_nic, skb);
|
||||||
|
@ -222,6 +225,7 @@ static void aq_ndev_set_multicast_settings(struct net_device *ndev)
|
||||||
(void)aq_nic_set_multicast_list(aq_nic, ndev);
|
(void)aq_nic_set_multicast_list(aq_nic, ndev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
static int aq_ndev_config_hwtstamp(struct aq_nic_s *aq_nic,
|
static int aq_ndev_config_hwtstamp(struct aq_nic_s *aq_nic,
|
||||||
struct hwtstamp_config *config)
|
struct hwtstamp_config *config)
|
||||||
{
|
{
|
||||||
|
@ -256,26 +260,31 @@ static int aq_ndev_config_hwtstamp(struct aq_nic_s *aq_nic,
|
||||||
|
|
||||||
return aq_ptp_hwtstamp_config_set(aq_nic->aq_ptp, config);
|
return aq_ptp_hwtstamp_config_set(aq_nic->aq_ptp, config);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int aq_ndev_hwtstamp_set(struct aq_nic_s *aq_nic, struct ifreq *ifr)
|
static int aq_ndev_hwtstamp_set(struct aq_nic_s *aq_nic, struct ifreq *ifr)
|
||||||
{
|
{
|
||||||
struct hwtstamp_config config;
|
struct hwtstamp_config config;
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
int ret_val;
|
int ret_val;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!aq_nic->aq_ptp)
|
if (!aq_nic->aq_ptp)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
ret_val = aq_ndev_config_hwtstamp(aq_nic, &config);
|
ret_val = aq_ndev_config_hwtstamp(aq_nic, &config);
|
||||||
if (ret_val)
|
if (ret_val)
|
||||||
return ret_val;
|
return ret_val;
|
||||||
|
#endif
|
||||||
|
|
||||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
||||||
-EFAULT : 0;
|
-EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
static int aq_ndev_hwtstamp_get(struct aq_nic_s *aq_nic, struct ifreq *ifr)
|
static int aq_ndev_hwtstamp_get(struct aq_nic_s *aq_nic, struct ifreq *ifr)
|
||||||
{
|
{
|
||||||
struct hwtstamp_config config;
|
struct hwtstamp_config config;
|
||||||
|
@ -287,6 +296,7 @@ static int aq_ndev_hwtstamp_get(struct aq_nic_s *aq_nic, struct ifreq *ifr)
|
||||||
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
|
||||||
-EFAULT : 0;
|
-EFAULT : 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int aq_ndev_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
static int aq_ndev_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||||
{
|
{
|
||||||
|
@ -296,8 +306,10 @@ static int aq_ndev_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
||||||
case SIOCSHWTSTAMP:
|
case SIOCSHWTSTAMP:
|
||||||
return aq_ndev_hwtstamp_set(aq_nic, ifr);
|
return aq_ndev_hwtstamp_set(aq_nic, ifr);
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
case SIOCGHWTSTAMP:
|
case SIOCGHWTSTAMP:
|
||||||
return aq_ndev_hwtstamp_get(aq_nic, ifr);
|
return aq_ndev_hwtstamp_get(aq_nic, ifr);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
|
@ -1188,7 +1188,7 @@ int aq_nic_set_loopback(struct aq_nic_s *self)
|
||||||
|
|
||||||
if (!self->aq_hw_ops->hw_set_loopback ||
|
if (!self->aq_hw_ops->hw_set_loopback ||
|
||||||
!self->aq_fw_ops->set_phyloopback)
|
!self->aq_fw_ops->set_phyloopback)
|
||||||
return -ENOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
mutex_lock(&self->fwreq_mutex);
|
mutex_lock(&self->fwreq_mutex);
|
||||||
self->aq_hw_ops->hw_set_loopback(self->aq_hw,
|
self->aq_hw_ops->hw_set_loopback(self->aq_hw,
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/* Atlantic Network Driver
|
||||||
* aQuantia Corporation Network Driver
|
*
|
||||||
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_nic.h: Declaration of common code for NIC. */
|
/* File aq_nic.h: Declaration of common code for NIC. */
|
||||||
|
@ -111,7 +112,7 @@ struct aq_hw_rx_fltrs_s {
|
||||||
u16 active_filters;
|
u16 active_filters;
|
||||||
struct aq_hw_rx_fl2 fl2;
|
struct aq_hw_rx_fl2 fl2;
|
||||||
struct aq_hw_rx_fl3l4 fl3l4;
|
struct aq_hw_rx_fl3l4 fl3l4;
|
||||||
/*filter ether type */
|
/* filter ether type */
|
||||||
u8 fet_reserved_count;
|
u8 fet_reserved_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/* Atlantic Network Driver
|
||||||
* aQuantia Corporation Network Driver
|
*
|
||||||
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_pci_func.c: Definition of PCI functions. */
|
/* File aq_pci_func.c: Definition of PCI functions. */
|
||||||
|
@ -114,7 +115,7 @@ static int aq_pci_probe_get_hw_by_id(struct pci_dev *pdev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int aq_pci_func_init(struct pci_dev *pdev)
|
static int aq_pci_func_init(struct pci_dev *pdev)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/* Atlantic Network Driver
|
||||||
* aQuantia Corporation Network Driver
|
*
|
||||||
* Copyright (C) 2014-2017 aQuantia Corporation. All rights reserved
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_pci_func.h: Declaration of PCI functions. */
|
/* File aq_pci_func.h: Declaration of PCI functions. */
|
||||||
|
@ -19,7 +20,6 @@ struct aq_board_revision_s {
|
||||||
const struct aq_hw_caps_s *caps;
|
const struct aq_hw_caps_s *caps;
|
||||||
};
|
};
|
||||||
|
|
||||||
int aq_pci_func_init(struct pci_dev *pdev);
|
|
||||||
int aq_pci_func_alloc_irq(struct aq_nic_s *self, unsigned int i,
|
int aq_pci_func_alloc_irq(struct aq_nic_s *self, unsigned int i,
|
||||||
char *name, irq_handler_t irq_handler,
|
char *name, irq_handler_t irq_handler,
|
||||||
void *irq_arg, cpumask_t *affinity_mask);
|
void *irq_arg, cpumask_t *affinity_mask);
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/* Aquantia Corporation Network Driver
|
/* Atlantic Network Driver
|
||||||
* Copyright (C) 2014-2019 Aquantia Corporation. All rights reserved
|
*
|
||||||
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_ptp.c:
|
/* File aq_ptp.c:
|
||||||
|
@ -18,6 +20,8 @@
|
||||||
#include "aq_phy.h"
|
#include "aq_phy.h"
|
||||||
#include "aq_filters.h"
|
#include "aq_filters.h"
|
||||||
|
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
|
|
||||||
#define AQ_PTP_TX_TIMEOUT (HZ * 10)
|
#define AQ_PTP_TX_TIMEOUT (HZ * 10)
|
||||||
|
|
||||||
#define POLL_SYNC_TIMER_MS 15
|
#define POLL_SYNC_TIMER_MS 15
|
||||||
|
@ -1389,3 +1393,4 @@ static void aq_ptp_poll_sync_work_cb(struct work_struct *w)
|
||||||
schedule_delayed_work(&aq_ptp->poll_sync, timeout);
|
schedule_delayed_work(&aq_ptp->poll_sync, timeout);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/* Atlantic Network Driver
|
||||||
* aQuantia Corporation Network Driver
|
*
|
||||||
* Copyright (C) 2014-2019 aQuantia Corporation. All rights reserved
|
* Copyright (C) 2014-2019 aQuantia Corporation
|
||||||
|
* Copyright (C) 2019-2020 Marvell International Ltd.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* File aq_ring.c: Definition of functions for Rx/Tx rings. */
|
/* File aq_ring.c: Definition of functions for Rx/Tx rings. */
|
||||||
|
@ -279,7 +280,7 @@ bool aq_ring_tx_clean(struct aq_ring_s *self)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(buff->is_eop)) {
|
if (unlikely(buff->is_eop)) {
|
||||||
++self->stats.rx.packets;
|
++self->stats.tx.packets;
|
||||||
self->stats.tx.bytes += buff->skb->len;
|
self->stats.tx.bytes += buff->skb->len;
|
||||||
|
|
||||||
dev_kfree_skb_any(buff->skb);
|
dev_kfree_skb_any(buff->skb);
|
||||||
|
@ -489,6 +490,7 @@ int aq_ring_rx_clean(struct aq_ring_s *self,
|
||||||
|
|
||||||
void aq_ring_hwts_rx_clean(struct aq_ring_s *self, struct aq_nic_s *aq_nic)
|
void aq_ring_hwts_rx_clean(struct aq_ring_s *self, struct aq_nic_s *aq_nic)
|
||||||
{
|
{
|
||||||
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
||||||
while (self->sw_head != self->hw_head) {
|
while (self->sw_head != self->hw_head) {
|
||||||
u64 ns;
|
u64 ns;
|
||||||
|
|
||||||
|
@ -500,6 +502,7 @@ void aq_ring_hwts_rx_clean(struct aq_ring_s *self, struct aq_nic_s *aq_nic)
|
||||||
|
|
||||||
self->sw_head = aq_ring_next_dx(self, self->sw_head);
|
self->sw_head = aq_ring_next_dx(self, self->sw_head);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int aq_ring_rx_fill(struct aq_ring_s *self)
|
int aq_ring_rx_fill(struct aq_ring_s *self)
|
||||||
|
|
|
@ -217,7 +217,7 @@ static int hw_atl_utils_soft_reset_rbl(struct aq_hw_s *self)
|
||||||
|
|
||||||
if (rbl_status == 0xF1A7) {
|
if (rbl_status == 0xF1A7) {
|
||||||
aq_pr_err("No FW detected. Dynamic FW load not implemented\n");
|
aq_pr_err("No FW detected. Dynamic FW load not implemented\n");
|
||||||
return -ENOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = 0; k < 1000; k++) {
|
for (k = 0; k < 1000; k++) {
|
||||||
|
|
|
@ -16,15 +16,29 @@
|
||||||
#define AQ_A2_FW_READ_TRY_MAX 1000
|
#define AQ_A2_FW_READ_TRY_MAX 1000
|
||||||
|
|
||||||
#define hw_atl2_shared_buffer_write(HW, ITEM, VARIABLE) \
|
#define hw_atl2_shared_buffer_write(HW, ITEM, VARIABLE) \
|
||||||
|
{\
|
||||||
|
BUILD_BUG_ON_MSG((offsetof(struct fw_interface_in, ITEM) % \
|
||||||
|
sizeof(u32)) != 0,\
|
||||||
|
"Unaligned write " # ITEM);\
|
||||||
|
BUILD_BUG_ON_MSG((sizeof(VARIABLE) % sizeof(u32)) != 0,\
|
||||||
|
"Unaligned write length " # ITEM);\
|
||||||
hw_atl2_mif_shared_buf_write(HW,\
|
hw_atl2_mif_shared_buf_write(HW,\
|
||||||
(offsetof(struct fw_interface_in, ITEM) / sizeof(u32)),\
|
(offsetof(struct fw_interface_in, ITEM) / sizeof(u32)),\
|
||||||
(u32 *)&(VARIABLE), sizeof(VARIABLE) / sizeof(u32))
|
(u32 *)&(VARIABLE), sizeof(VARIABLE) / sizeof(u32));\
|
||||||
|
}
|
||||||
|
|
||||||
#define hw_atl2_shared_buffer_get(HW, ITEM, VARIABLE) \
|
#define hw_atl2_shared_buffer_get(HW, ITEM, VARIABLE) \
|
||||||
|
{\
|
||||||
|
BUILD_BUG_ON_MSG((offsetof(struct fw_interface_in, ITEM) % \
|
||||||
|
sizeof(u32)) != 0,\
|
||||||
|
"Unaligned get " # ITEM);\
|
||||||
|
BUILD_BUG_ON_MSG((sizeof(VARIABLE) % sizeof(u32)) != 0,\
|
||||||
|
"Unaligned get length " # ITEM);\
|
||||||
hw_atl2_mif_shared_buf_get(HW, \
|
hw_atl2_mif_shared_buf_get(HW, \
|
||||||
(offsetof(struct fw_interface_in, ITEM) / sizeof(u32)),\
|
(offsetof(struct fw_interface_in, ITEM) / sizeof(u32)),\
|
||||||
(u32 *)&(VARIABLE), \
|
(u32 *)&(VARIABLE), \
|
||||||
sizeof(VARIABLE) / sizeof(u32))
|
sizeof(VARIABLE) / sizeof(u32));\
|
||||||
|
}
|
||||||
|
|
||||||
/* This should never be used on non atomic fields,
|
/* This should never be used on non atomic fields,
|
||||||
* treat any > u32 read as non atomic.
|
* treat any > u32 read as non atomic.
|
||||||
|
@ -33,7 +47,9 @@
|
||||||
{\
|
{\
|
||||||
BUILD_BUG_ON_MSG((offsetof(struct fw_interface_out, ITEM) % \
|
BUILD_BUG_ON_MSG((offsetof(struct fw_interface_out, ITEM) % \
|
||||||
sizeof(u32)) != 0,\
|
sizeof(u32)) != 0,\
|
||||||
"Non aligned read " # ITEM);\
|
"Unaligned read " # ITEM);\
|
||||||
|
BUILD_BUG_ON_MSG((sizeof(VARIABLE) % sizeof(u32)) != 0,\
|
||||||
|
"Unaligned read length " # ITEM);\
|
||||||
BUILD_BUG_ON_MSG(sizeof(VARIABLE) > sizeof(u32),\
|
BUILD_BUG_ON_MSG(sizeof(VARIABLE) > sizeof(u32),\
|
||||||
"Non atomic read " # ITEM);\
|
"Non atomic read " # ITEM);\
|
||||||
hw_atl2_mif_shared_buf_read(HW, \
|
hw_atl2_mif_shared_buf_read(HW, \
|
||||||
|
@ -42,10 +58,18 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#define hw_atl2_shared_buffer_read_safe(HW, ITEM, DATA) \
|
#define hw_atl2_shared_buffer_read_safe(HW, ITEM, DATA) \
|
||||||
|
({\
|
||||||
|
BUILD_BUG_ON_MSG((offsetof(struct fw_interface_out, ITEM) % \
|
||||||
|
sizeof(u32)) != 0,\
|
||||||
|
"Unaligned read_safe " # ITEM);\
|
||||||
|
BUILD_BUG_ON_MSG((sizeof(((struct fw_interface_out *)0)->ITEM) % \
|
||||||
|
sizeof(u32)) != 0,\
|
||||||
|
"Unaligned read_safe length " # ITEM);\
|
||||||
hw_atl2_shared_buffer_read_block((HW), \
|
hw_atl2_shared_buffer_read_block((HW), \
|
||||||
(offsetof(struct fw_interface_out, ITEM) / sizeof(u32)),\
|
(offsetof(struct fw_interface_out, ITEM) / sizeof(u32)),\
|
||||||
sizeof(((struct fw_interface_out *)0)->ITEM) / sizeof(u32),\
|
sizeof(((struct fw_interface_out *)0)->ITEM) / sizeof(u32),\
|
||||||
(DATA))
|
(DATA));\
|
||||||
|
})
|
||||||
|
|
||||||
static int hw_atl2_shared_buffer_read_block(struct aq_hw_s *self,
|
static int hw_atl2_shared_buffer_read_block(struct aq_hw_s *self,
|
||||||
u32 offset, u32 dwords, void *data)
|
u32 offset, u32 dwords, void *data)
|
||||||
|
|
Loading…
Reference in New Issue