From b427be9267d55bcde7f3643b9e2fe7ea35800788 Mon Sep 17 00:00:00 2001 From: Bhadram Varka Date: Wed, 10 Feb 2021 20:33:38 +0530 Subject: [PATCH] nvethernet: assign OSD ops Bug 200620687 Change-Id: I9e0b9b87ba425b446b60576a1ddae938ff514a2f Signed-off-by: Bhadram Varka Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2483069 Reviewed-by: Nagarjuna Kristam Reviewed-by: Narayan Reddy Reviewed-by: Srinivas Ramachandran Reviewed-by: mobile promotions Tested-by: mobile promotions GVS: Gerrit_Virtual_Submit --- .../ethernet/nvidia/nvethernet/ether_linux.c | 5 +-- .../ethernet/nvidia/nvethernet/ether_linux.h | 17 ++++---- drivers/net/ethernet/nvidia/nvethernet/osd.c | 42 ++++++++++++------- 3 files changed, 40 insertions(+), 24 deletions(-) diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c index 15713801..23c317cf 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.c @@ -4301,15 +4301,14 @@ static int ether_probe(struct platform_device *pdev) goto err_parse_dt; } + ether_assign_osd_ops(osi_core, osi_dma); + /* Initialize core and DMA ops based on MAC type */ if (osi_init_core_ops(osi_core) != 0) { dev_err(&pdev->dev, "failed to get osi_init_core_ops\n"); goto err_core_ops; } - /* Define re-allocation routine */ - osi_dma->osd_ops.realloc_buf = osd_realloc_buf; - if (osi_init_dma_ops(osi_dma) != 0) { dev_err(&pdev->dev, "failed to get osi_init_dma_ops\n"); goto err_dma_ops; diff --git a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h index 448530a8..f1bdec04 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h +++ b/drivers/net/ethernet/nvidia/nvethernet/ether_linux.h @@ -484,16 +484,19 @@ static inline int ether_selftest_get_count(struct ether_priv_data *pdata) #endif /* CONFIG_NVETHERNET_SELFTESTS */ /** - * @brief osd_realloc_buf - Allocate RX sk_buffer + * @brief ether_assign_osd_ops - Assigns OSD ops for OSI * - * Algorithm: Call ether_realloc_rx_skb for re-allocation - * - * @param[in] priv: OSD private data structure. - * @param[in] rxring: Pointer to DMA channel Rx ring. - * @param[in] chan: DMA Rx channel number. + * @param[in] osi_core: OSI CORE data structure + * @param[in] osi_dma: OSI DMA data structure. * + * @note + * API Group: + * - Initialization: Yes + * - Run time: No + * - De-initialization: No */ -void osd_realloc_buf(void *priv, void *rxring, unsigned int chan); +void ether_assign_osd_ops(struct osi_core_priv_data *osi_core, + struct osi_dma_priv_data *osi_dma); /** * @brief osd_send_cmd - OSD ivc send cmd diff --git a/drivers/net/ethernet/nvidia/nvethernet/osd.c b/drivers/net/ethernet/nvidia/nvethernet/osd.c index 1d8f3cf2..0dab97d0 100644 --- a/drivers/net/ethernet/nvidia/nvethernet/osd.c +++ b/drivers/net/ethernet/nvidia/nvethernet/osd.c @@ -15,7 +15,6 @@ */ #include "ether_linux.h" -#include #include #define IVC_WAIT_TIMEOUT (msecs_to_jiffies(1000)) @@ -27,7 +26,7 @@ * * @param[in] usec: Delay number in micro seconds. */ -void osd_udelay(unsigned long usec) +static void osd_udelay(unsigned long usec) { udelay(usec); } @@ -40,7 +39,7 @@ void osd_udelay(unsigned long usec) * @param[in] umin: Minimum sleep required in micro seconds. * @param[in] umax: Maximum sleep required in micro seconds. */ -void osd_usleep_range(unsigned long umin, unsigned long umax) +static void osd_usleep_range(unsigned long umin, unsigned long umax) { usleep_range(umin, umax); } @@ -52,7 +51,7 @@ void osd_usleep_range(unsigned long umin, unsigned long umax) * * @param[in] msec: Minimum sleep required in milli seconds. */ -void osd_msleep(unsigned int msec) +static void osd_msleep(unsigned int msec) { msleep(msec); } @@ -69,13 +68,13 @@ void osd_msleep(unsigned int msec) * @param[in] loga: error additional information * */ -void osd_log(void *priv, - const char *func, - unsigned int line, - unsigned int level, - unsigned int type, - const char *err, - unsigned long long loga) +static void osd_log(void *priv, + const char *func, + unsigned int line, + unsigned int level, + unsigned int type, + const char *err, + unsigned long long loga) { if (priv) { switch (level) { @@ -229,7 +228,7 @@ static void ether_realloc_rx_skb(struct ether_priv_data *pdata, * @param[in] chan: DMA Rx channel number. * */ -void osd_realloc_buf(void *priv, void *rxring, unsigned int chan) +static void osd_realloc_buf(void *priv, void *rxring, unsigned int chan) { struct ether_priv_data *pdata = (struct ether_priv_data *)priv; struct osi_rx_ring *rx_ring = (struct osi_rx_ring *)rxring; @@ -346,8 +345,8 @@ void osd_receive_packet(void *priv, void *rxring, unsigned int chan, * * @note Tx completion need to make sure that Tx descriptors processed properly. */ -void osd_transmit_complete(void *priv, void *buffer, unsigned long dmaaddr, - unsigned int len, void *tx_done_pkt_cx) +static void osd_transmit_complete(void *priv, void *buffer, unsigned long dmaaddr, + unsigned int len, void *tx_done_pkt_cx) { struct osi_txdone_pkt_cx *txdone_pkt_cx = (struct osi_txdone_pkt_cx *) tx_done_pkt_cx; @@ -402,6 +401,21 @@ void osd_transmit_complete(void *priv, void *buffer, unsigned long dmaaddr, } } +void ether_assign_osd_ops(struct osi_core_priv_data *osi_core, + struct osi_dma_priv_data *osi_dma) +{ + osi_core->osd_ops.ops_log = osd_log; + osi_core->osd_ops.udelay = osd_udelay; + osi_core->osd_ops.usleep_range = osd_usleep_range; + osi_core->osd_ops.msleep = osd_msleep; + + osi_dma->osd_ops.transmit_complete = osd_transmit_complete; + osi_dma->osd_ops.receive_packet = osd_receive_packet; + osi_dma->osd_ops.realloc_buf = osd_realloc_buf; + osi_dma->osd_ops.ops_log = osd_log; + osi_dma->osd_ops.udelay = osd_udelay; +} + /** * @brief osd_send_cmd - OSD ivc send cmd *