更新PCIE
This commit is contained in:
parent
53354cc881
commit
050e1102f2
@ -177,11 +177,16 @@ static int mhi_init_pci_dev(struct mhi_controller *mhi_cntrl)
|
||||
|
||||
#if 1 //some SOC like rpi_4b need next codes
|
||||
ret = -EIO;
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
if((ret = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(64))))
|
||||
ret = dma_set_mask_and_coherent(&pci_dev->dev, DMA_BIT_MASK(32));
|
||||
#else
|
||||
if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(64))) {
|
||||
ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(64));
|
||||
} else if (!pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32))) {
|
||||
ret = pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(32));
|
||||
}
|
||||
#endif
|
||||
if (ret) {
|
||||
MHI_ERR("Error dma mask\n");
|
||||
}
|
||||
|
@ -200,8 +200,11 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
|
||||
lower_32_bits(mhi_buf->dma_addr));
|
||||
|
||||
mhi_write_reg(mhi_cntrl, base, BHIE_RXVECSIZE_OFFS, mhi_buf->len);
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
sequence_id = get_random_u32() & BHIE_RXVECSTATUS_SEQNUM_BMSK;
|
||||
#else
|
||||
sequence_id = prandom_u32() & BHIE_RXVECSTATUS_SEQNUM_BMSK;
|
||||
|
||||
#endif
|
||||
if (unlikely(!sequence_id))
|
||||
sequence_id = 1;
|
||||
|
||||
@ -312,8 +315,11 @@ int mhi_download_rddm_img(struct mhi_controller *mhi_cntrl, bool in_panic)
|
||||
lower_32_bits(mhi_buf->dma_addr));
|
||||
|
||||
mhi_write_reg(mhi_cntrl, base, BHIE_RXVECSIZE_OFFS, mhi_buf->len);
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
sequence_id = get_random_u32() & BHIE_RXVECSTATUS_SEQNUM_BMSK;
|
||||
#else
|
||||
sequence_id = prandom_u32() & BHIE_RXVECSTATUS_SEQNUM_BMSK;
|
||||
#endif
|
||||
mhi_write_reg_field(mhi_cntrl, base, BHIE_RXVECDB_OFFS,
|
||||
BHIE_RXVECDB_SEQNUM_BMSK, BHIE_RXVECDB_SEQNUM_SHFT,
|
||||
sequence_id);
|
||||
@ -364,8 +370,12 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl,
|
||||
lower_32_bits(mhi_buf->dma_addr));
|
||||
|
||||
mhi_write_reg(mhi_cntrl, base, BHIE_TXVECSIZE_OFFS, mhi_buf->len);
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
mhi_cntrl->sequence_id = get_random_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK;
|
||||
#else
|
||||
mhi_cntrl->sequence_id = prandom_u32() & BHIE_TXVECSTATUS_SEQNUM_BMSK;
|
||||
#endif
|
||||
|
||||
mhi_write_reg_field(mhi_cntrl, base, BHIE_TXVECDB_OFFS,
|
||||
BHIE_TXVECDB_SEQNUM_BMSK, BHIE_TXVECDB_SEQNUM_SHFT,
|
||||
mhi_cntrl->sequence_id);
|
||||
|
@ -449,8 +449,11 @@ static int bridge_arp_reply(struct net_device *net, struct sk_buff *skb, uint br
|
||||
__skb_pull(reply, skb_network_offset(reply));
|
||||
reply->ip_summed = CHECKSUM_UNNECESSARY;
|
||||
reply->pkt_type = PACKET_HOST;
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
netif_rx_ni(reply);
|
||||
#else
|
||||
netif_rx(reply);
|
||||
#endif
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -840,8 +843,13 @@ static void rmnet_vnd_upate_rx_stats(struct net_device *net,
|
||||
struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64);
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
stats64->rx_packets += rx_packets;
|
||||
stats64->rx_bytes += rx_bytes;
|
||||
#else
|
||||
u64_stats_add(&stats64->rx_packets, rx_packets);
|
||||
u64_stats_add(&stats64->rx_bytes,rx_bytes);
|
||||
#endif
|
||||
u64_stats_update_end(&stats64->syncp);
|
||||
#else
|
||||
priv->self_dev->stats.rx_packets += rx_packets;
|
||||
@ -856,8 +864,13 @@ static void rmnet_vnd_upate_tx_stats(struct net_device *net,
|
||||
struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64);
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
stats64->tx_packets += tx_packets;
|
||||
stats64->tx_bytes += tx_bytes;
|
||||
#else
|
||||
u64_stats_add(&stats64->tx_packets, tx_packets);
|
||||
u64_stats_add(&stats64->tx_bytes,tx_bytes);
|
||||
#endif
|
||||
u64_stats_update_end(&stats64->syncp);
|
||||
#else
|
||||
net->stats.rx_packets += tx_packets;
|
||||
@ -888,10 +901,17 @@ static struct rtnl_link_stats64 *_rmnet_vnd_get_stats64(struct net_device *net,
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin_irq(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
rx_packets = stats64->rx_packets;
|
||||
rx_bytes = stats64->rx_bytes;
|
||||
tx_packets = stats64->tx_packets;
|
||||
tx_bytes = stats64->tx_bytes;
|
||||
#else
|
||||
rx_packets = u64_stats_read(&stats64->rx_packets);
|
||||
rx_bytes = u64_stats_read(&stats64->rx_bytes);
|
||||
tx_packets = u64_stats_read(&stats64->tx_packets);
|
||||
tx_bytes = u64_stats_read(&stats64->tx_bytes);
|
||||
#endif
|
||||
} while (u64_stats_fetch_retry_irq(&stats64->syncp, start));
|
||||
|
||||
stats->rx_packets += rx_packets;
|
||||
@ -1485,7 +1505,7 @@ static struct net_device * rmnet_vnd_register_device(struct mhi_netdev *pQmapDev
|
||||
struct qmap_priv *priv;
|
||||
int err;
|
||||
int use_qca_nss = !!nss_cb;
|
||||
|
||||
u8 maddr[ETH_ALEN];
|
||||
qmap_net = alloc_etherdev(sizeof(*priv));
|
||||
if (!qmap_net)
|
||||
return NULL;
|
||||
@ -1499,8 +1519,9 @@ static struct net_device * rmnet_vnd_register_device(struct mhi_netdev *pQmapDev
|
||||
priv->qmap_version = pQmapDev->qmap_version;
|
||||
priv->mux_id = mux_id;
|
||||
sprintf(qmap_net->name, "%s.%d", real_dev->name, offset_id + 1);
|
||||
memcpy (qmap_net->dev_addr, real_dev->dev_addr, ETH_ALEN);
|
||||
qmap_net->dev_addr[5] = offset_id + 1;
|
||||
ether_addr_copy(maddr, real_dev->dev_addr);
|
||||
maddr[5]= offset_id + 1;
|
||||
ether_addr_copy((u8*)qmap_net->dev_addr, maddr);
|
||||
//eth_random_addr(qmap_net->dev_addr);
|
||||
#if defined(MHI_NETDEV_STATUS64)
|
||||
priv->stats64 = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
|
||||
@ -1705,8 +1726,14 @@ static void mhi_netdev_upate_rx_stats(struct mhi_netdev *mhi_netdev,
|
||||
struct pcpu_sw_netstats *stats64 = this_cpu_ptr(mhi_netdev->stats64);
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
stats64->rx_packets += rx_packets;
|
||||
stats64->rx_bytes += rx_bytes;
|
||||
#else
|
||||
u64_stats_add(&stats64->rx_packets, rx_packets);
|
||||
u64_stats_add(&stats64->rx_bytes,rx_bytes);
|
||||
#endif
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#else
|
||||
mhi_netdev->ndev->stats.rx_packets += rx_packets;
|
||||
@ -1720,8 +1747,14 @@ static void mhi_netdev_upate_tx_stats(struct mhi_netdev *mhi_netdev,
|
||||
struct pcpu_sw_netstats *stats64 = this_cpu_ptr(mhi_netdev->stats64);
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
stats64->tx_packets += tx_packets;
|
||||
stats64->tx_bytes += tx_bytes;
|
||||
#else
|
||||
u64_stats_add(&stats64->tx_packets, tx_packets);
|
||||
u64_stats_add(&stats64->tx_bytes,tx_bytes);
|
||||
#endif
|
||||
|
||||
u64_stats_update_begin(&stats64->syncp);
|
||||
#else
|
||||
mhi_netdev->ndev->stats.tx_packets += tx_packets;
|
||||
@ -2064,10 +2097,17 @@ static struct rtnl_link_stats64 * _mhi_netdev_get_stats64(struct net_device *nde
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin_irq(&stats64->syncp);
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,18,0)
|
||||
rx_packets = stats64->rx_packets;
|
||||
rx_bytes = stats64->rx_bytes;
|
||||
tx_packets = stats64->tx_packets;
|
||||
tx_bytes = stats64->tx_bytes;
|
||||
#else
|
||||
rx_packets = u64_stats_read(&stats64->rx_packets);
|
||||
rx_bytes = u64_stats_read(&stats64->rx_bytes);
|
||||
tx_packets = u64_stats_read(&stats64->tx_packets);
|
||||
tx_bytes = u64_stats_read(&stats64->tx_bytes);
|
||||
#endif
|
||||
} while (u64_stats_fetch_retry_irq(&stats64->syncp, start));
|
||||
|
||||
stats->rx_packets += rx_packets;
|
||||
@ -2269,8 +2309,11 @@ static int mhi_netdev_enable_iface(struct mhi_netdev *mhi_netdev)
|
||||
mhi_netdev->ndev->mtu = mhi_netdev->mru;
|
||||
}
|
||||
rtnl_unlock();
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
netif_napi_add_weight(mhi_netdev->ndev, &mhi_netdev->napi, mhi_netdev_poll, poll_weight);
|
||||
#else
|
||||
netif_napi_add(mhi_netdev->ndev, &mhi_netdev->napi, mhi_netdev_poll, poll_weight);
|
||||
#endif
|
||||
ret = register_netdev(mhi_netdev->ndev);
|
||||
if (ret) {
|
||||
MSG_ERR("Network device registration failed\n");
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#if 1
|
||||
static inline void *ipc_log_context_create(int max_num_pages,
|
||||
const char *modname, uint16_t user_version)
|
||||
@ -158,7 +160,20 @@ static int mhi_queue_inbound(struct uci_dev *uci_dev)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
|
||||
#ifdef TCGETS2
|
||||
static int kernel_termios_to_user_termios_1(struct termios __user *u,
|
||||
struct ktermios *k)
|
||||
{
|
||||
return copy_to_user(u, k, sizeof(struct termios));
|
||||
}
|
||||
static int user_termios_to_kernel_termios_1(struct ktermios *k,
|
||||
struct termios __user *u)
|
||||
{
|
||||
return copy_from_user(k, u, sizeof(struct termios));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
static long mhi_uci_ioctl(struct file *file,
|
||||
unsigned int cmd,
|
||||
unsigned long arg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user