osi: create stripped library for MCAL/QNX

Update common library to export only API
used in QNX/MCAL driver if OSI_STRIPPED_LIB
is defined.

Bug 200671362

Change-Id: Ide3a5d9a60228b5d07355b58e26f509245db4144
Signed-off-by: rakesh goyal <rgoyal@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/2410877
Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/2422285
Reviewed-by: automaticguardword <automaticguardword@nvidia.com>
Reviewed-by: Mahesh Patil <maheshp@nvidia.com>
Reviewed-by: Bhadram Varka <vbhadram@nvidia.com>
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
rakesh goyal
2020-09-09 15:29:22 +05:30
committed by Bhadram Varka
parent ae58a6993c
commit 228703f6cf
12 changed files with 1591 additions and 1628 deletions

View File

@@ -125,7 +125,7 @@
/** /**
* @addtogroup EQOS_PTP PTP Helper MACROS * @addtogroup EQOS_PTP PTP Helper MACROS
* *
* @brief EQOS PTP MAC Time stamp contorl reg bit fields * @brief EQOS PTP MAC Time stamp control reg bit fields
* @{ * @{
*/ */
#define OSI_MAC_TCR_TSENA OSI_BIT(0) #define OSI_MAC_TCR_TSENA OSI_BIT(0)
@@ -200,7 +200,7 @@
OSI_LOG_WARN, type, err, loga); \ OSI_LOG_WARN, type, err, loga); \
} }
/* Default maximum Gaint Packet Size Limit is 16K */ /* Default maximum Giant Packet Size Limit is 16K */
#define OSI_MAX_MTU_SIZE 16383U #define OSI_MAX_MTU_SIZE 16383U
#define OSI_MTU_SIZE_9000 9000U #define OSI_MTU_SIZE_9000 9000U
#define OSI_DFLT_MTU_SIZE 1500U #define OSI_DFLT_MTU_SIZE 1500U
@@ -609,7 +609,7 @@ struct osi_hw_features {
* feature */ * feature */
unsigned int auto_safety_pkg; unsigned int auto_safety_pkg;
/** Tx Timestamp FIFO Depth /** Tx Timestamp FIFO Depth
* This value indicates the depth of the Tx Timetamp FIFO * This value indicates the depth of the Tx Timestamp FIFO
* 3'b000: Reserved * 3'b000: Reserved
* 3'b001: 1 * 3'b001: 1
* 3'b010: 2 * 3'b010: 2
@@ -746,7 +746,7 @@ static inline void osi_unlock_irq_enabled(unsigned int *lock)
* *
* @param[in] addr: Memory mapped address. * @param[in] addr: Memory mapped address.
* *
* @pre Physical address has to be memmory mapped. * @pre Physical address has to be memory mapped.
* *
* @return Data from memory mapped register - success. * @return Data from memory mapped register - success.
*/ */
@@ -761,7 +761,7 @@ static inline unsigned int osi_readl(void *addr)
* @param[in] val: Value to be written. * @param[in] val: Value to be written.
* @param[in] addr: Memory mapped address. * @param[in] addr: Memory mapped address.
* *
* @pre Physical address has to be memmory mapped. * @pre Physical address has to be memory mapped.
*/ */
static inline void osi_writel(unsigned int val, void *addr) static inline void osi_writel(unsigned int val, void *addr)
{ {
@@ -831,7 +831,7 @@ static inline unsigned long osi_update_stats_counter(unsigned long last_value,
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETRM_020 * - SWUD_ID: ETHERNET_NVETHERNETRM_015
* *
* @note * @note
* Classification: * Classification:
@@ -861,7 +861,7 @@ int osi_get_mac_version(void *addr, unsigned int *mac_ver);
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETRM_021 * - SWUD_ID: ETHERNET_NVETHERNETRM_016
* *
* @note * @note
* Classification: * Classification:

View File

File diff suppressed because it is too large Load Diff

View File

@@ -73,8 +73,8 @@
* @addtogroup EQOS-TX Tx done packet context fields * @addtogroup EQOS-TX Tx done packet context fields
* *
* @brief These flags used to convey transmit done packet context information, * @brief These flags used to convey transmit done packet context information,
* whether transmitted packet used a pagged buffer, whether transmitted packet * whether transmitted packet used a paged buffer, whether transmitted packet
* has an tx error, whether tranmitted packet has an TS * has an tx error, whether transmitted packet has an TS
* *
* @{ * @{
*/ */
@@ -360,6 +360,7 @@ struct osi_dma_chan_ops {
void (*init_dma_channel) (struct osi_dma_priv_data *osi_dma); void (*init_dma_channel) (struct osi_dma_priv_data *osi_dma);
/** Called to set Rx buffer length */ /** Called to set Rx buffer length */
void (*set_rx_buf_len)(struct osi_dma_priv_data *osi_dma); void (*set_rx_buf_len)(struct osi_dma_priv_data *osi_dma);
#ifndef OSI_STRIPPED_LIB
/** Called periodically to read and validate safety critical /** Called periodically to read and validate safety critical
* registers against last written value */ * registers against last written value */
int (*validate_regs)(struct osi_dma_priv_data *osi_dma); int (*validate_regs)(struct osi_dma_priv_data *osi_dma);
@@ -368,6 +369,7 @@ struct osi_dma_chan_ops {
unsigned int chan, unsigned int chan,
unsigned int set, unsigned int set,
unsigned int interval); unsigned int interval);
#endif /* !OSI_STRIPPED_LIB */
/** Called to get Global DMA status */ /** Called to get Global DMA status */
unsigned int (*get_global_dma_status)(void *addr); unsigned int (*get_global_dma_status)(void *addr);
/** Called to clear VM Tx interrupt */ /** Called to clear VM Tx interrupt */
@@ -467,44 +469,6 @@ struct osi_dma_priv_data {
unsigned long resv_buf_phy_addr; unsigned long resv_buf_phy_addr;
}; };
/**
* @brief - Read-validate HW registers for func safety.
*
* @note
* Algorithm:
* - Reads pre-configured list of DMA configuration registers
* and compares with last written value for any modifications.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre
* - MAC has to be out of reset.
* - osi_hw_dma_init has to be called. Internally this would initialize
* the safety_config (see osi_dma_priv_data) based on MAC version and
* which specific registers needs to be validated periodically.
* - Invoke this call iff (osi_dma_priv_data->safety_config != OSI_NULL)
*
* @note
* Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_016
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: No
* - Run time: Yes
* - De-initialization: No
*
* @retval 0 on success
* @retval -1 on failure.
*/
int osi_validate_dma_regs(struct osi_dma_priv_data *osi_dma);
/** /**
* @brief osi_disable_chan_tx_intr - Disables DMA Tx channel interrupts. * @brief osi_disable_chan_tx_intr - Disables DMA Tx channel interrupts.
@@ -662,6 +626,22 @@ int osi_disable_chan_rx_intr(struct osi_dma_priv_data *osi_dma,
int osi_enable_chan_rx_intr(struct osi_dma_priv_data *osi_dma, int osi_enable_chan_rx_intr(struct osi_dma_priv_data *osi_dma,
unsigned int chan); unsigned int chan);
/**
* @brief osi_get_global_dma_status - Gets DMA status.
*
* Algorithm: Returns global DMA Tx/Rx interrupt status
*
* @param[in] osi_dma: DMA private data.
* @param[in] chan: DMA tx channel number.
*
* @note
* Dependencies: None.
* Protection: None.
*
* @retval status
*/
unsigned int osi_get_global_dma_status(struct osi_dma_priv_data *osi_dma);
/** /**
* @brief osi_clear_vm_tx_intr - Handles VM Tx interrupt source. * @brief osi_clear_vm_tx_intr - Handles VM Tx interrupt source.
* *
@@ -786,7 +766,7 @@ int osi_stop_dma(struct osi_dma_priv_data *osi_dma,
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_008 * - SWUD_ID: ETHERNET_NVETHERNETCL_007
* *
* @note * @note
* Classification: * Classification:
@@ -810,9 +790,9 @@ unsigned int osi_get_refill_rx_desc_cnt(struct osi_rx_ring *rx_ring);
* *
* @note * @note
* Algorithm: * Algorithm:
* - Initialise a Rx DMA descriptor. * - Initialize a Rx DMA descriptor.
* *
* @param[in] osi_dma: OSI DMA private data struture. * @param[in] osi_dma: OSI DMA private data structure.
* @param[in] rx_ring: HW ring corresponding to Rx DMA channel. * @param[in] rx_ring: HW ring corresponding to Rx DMA channel.
* @param[in] chan: Rx DMA channel number * @param[in] chan: Rx DMA channel number
* *
@@ -823,7 +803,7 @@ unsigned int osi_get_refill_rx_desc_cnt(struct osi_rx_ring *rx_ring);
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_007 * - SWUD_ID: ETHERNET_NVETHERNETCL_008
* *
* @note * @note
* Classification: * Classification:
@@ -847,7 +827,7 @@ int osi_rx_dma_desc_init(struct osi_dma_priv_data *osi_dma,
/** /**
* @brief Updates rx buffer length. * @brief Updates rx buffer length.
* *
* @param[in] osi_dma: OSI DMA private data struture. * @param[in] osi_dma: OSI DMA private data structure.
* *
* @pre * @pre
* - MAC needs to be out of reset and proper clocks need to be configured. * - MAC needs to be out of reset and proper clocks need to be configured.
@@ -961,7 +941,7 @@ void osi_hw_transmit(struct osi_dma_priv_data *osi, unsigned int chan);
* - Run time: Yes * - Run time: Yes
* - De-initialization: No * - De-initialization: No
* *
* @returns Number of decriptors (buffers) proccessed. * @returns Number of descriptors (buffers) processed.
*/ */
int osi_process_tx_completions(struct osi_dma_priv_data *osi, int osi_process_tx_completions(struct osi_dma_priv_data *osi,
unsigned int chan, int budget); unsigned int chan, int budget);
@@ -983,7 +963,7 @@ int osi_process_tx_completions(struct osi_dma_priv_data *osi,
* *
* @param[in] osi: OSI private data structure. * @param[in] osi: OSI private data structure.
* @param[in] chan: Rx DMA channel number * @param[in] chan: Rx DMA channel number
* @param[in] budget: Threshould for reading the packets at a time. * @param[in] budget: Threshold for reading the packets at a time.
* @param[in] more_data_avail: Pointer to more data available flag. OSI fills * @param[in] more_data_avail: Pointer to more data available flag. OSI fills
* this flag if more rx packets available to read(1) or not(0). * this flag if more rx packets available to read(1) or not(0).
* *
@@ -1009,7 +989,7 @@ int osi_process_tx_completions(struct osi_dma_priv_data *osi,
* - Run time: Yes * - Run time: Yes
* - De-initialization: No * - De-initialization: No
* *
* @returns Number of decriptors (buffers) proccessed. * @returns Number of descriptors (buffers) processed.
*/ */
int osi_process_rx_completions(struct osi_dma_priv_data *osi, int osi_process_rx_completions(struct osi_dma_priv_data *osi,
unsigned int chan, int budget, unsigned int chan, int budget,
@@ -1029,7 +1009,7 @@ int osi_process_rx_completions(struct osi_dma_priv_data *osi,
* @pre * @pre
* - Allocate memory for osi_dma * - Allocate memory for osi_dma
* - MAC needs to be out of reset and proper clocks need to be configured. * - MAC needs to be out of reset and proper clocks need to be configured.
* - Numer of dma channels osi_dma->num_dma_chans * - Number of dma channels osi_dma->num_dma_chans
* - channel list osi_dma->dma_chan * - channel list osi_dma->dma_chan
* - base address osi_dma->base * - base address osi_dma->base
* - allocate tx ring osi_dma->tx_ring[chan] for each channel * - allocate tx ring osi_dma->tx_ring[chan] for each channel
@@ -1134,6 +1114,116 @@ int osi_hw_dma_deinit(struct osi_dma_priv_data *osi_dma);
*/ */
int osi_init_dma_ops(struct osi_dma_priv_data *osi_dma); int osi_init_dma_ops(struct osi_dma_priv_data *osi_dma);
/**
* @brief osi_dma_get_systime_from_mac - Get system time
*
* @note
* Algorithm:
* - Gets the current system time
*
* @param[in] osi_dma: OSI DMA private data structure.
* @param[out] sec: Value read in Seconds
* @param[out] nsec: Value read in Nano seconds
*
* @pre MAC should be init and started. see osi_start_mac()
*
* @note
* Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_016
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: No
* - Run time: Yes
* - De-initialization: No
*
* @retval 0 on success
* @retval -1 on failure.
*/
int osi_dma_get_systime_from_mac(
struct osi_dma_priv_data *const osi_dma,
unsigned int *sec,
unsigned int *nsec);
/**
* @brief osi_is_mac_enabled - Checks if MAC is enabled.
*
* @note
* Algorithm:
* - Reads MAC MCR register for Tx and Rx enabled bits.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre MAC should be init and started. see osi_start_mac()
*
* @note
* Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_017
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: Yes
* - Run time: No
* - De-initialization: No
*
* @retval OSI_ENABLE if MAC enabled.
* @retval OSI_DISABLE otherwise.
*/
unsigned int osi_is_mac_enabled(struct osi_dma_priv_data *const osi_dma);
#ifndef OSI_STRIPPED_LIB
/**
* @brief - Read-validate HW registers for func safety.
*
* @note
* Algorithm:
* - Reads pre-configured list of DMA configuration registers
* and compares with last written value for any modifications.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre
* - MAC has to be out of reset.
* - osi_hw_dma_init has to be called. Internally this would initialize
* the safety_config (see osi_dma_priv_data) based on MAC version and
* which specific registers needs to be validated periodically.
* - Invoke this call if (osi_dma_priv_data->safety_config != OSI_NULL)
*
* @note
* Traceability Details:
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: No
* - Run time: Yes
* - De-initialization: No
*
* @retval 0 on success
* @retval -1 on failure.
*/
int osi_validate_dma_regs(struct osi_dma_priv_data *osi_dma);
/** /**
* @brief osi_clear_tx_pkt_err_stats - Clear tx packet error stats. * @brief osi_clear_tx_pkt_err_stats - Clear tx packet error stats.
* *
@@ -1150,7 +1240,6 @@ int osi_init_dma_ops(struct osi_dma_priv_data *osi_dma);
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_018
* *
* @note * @note
* Classification: * Classification:
@@ -1184,7 +1273,6 @@ int osi_clear_tx_pkt_err_stats(struct osi_dma_priv_data *osi_dma);
* *
* @note * @note
* Traceability Details: * Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_017
* *
* @note * @note
* Classification: * Classification:
@@ -1204,7 +1292,6 @@ int osi_clear_tx_pkt_err_stats(struct osi_dma_priv_data *osi_dma);
*/ */
int osi_config_slot_function(struct osi_dma_priv_data *osi_dma, int osi_config_slot_function(struct osi_dma_priv_data *osi_dma,
unsigned int set); unsigned int set);
/** /**
* @brief osi_clear_rx_pkt_err_stats - Clear rx packet error stats. * @brief osi_clear_rx_pkt_err_stats - Clear rx packet error stats.
* *
@@ -1244,90 +1331,5 @@ int osi_clear_rx_pkt_err_stats(struct osi_dma_priv_data *osi_dma);
* @retval 0 if ring has outstanding packets. * @retval 0 if ring has outstanding packets.
*/ */
int osi_txring_empty(struct osi_dma_priv_data *osi_dma, unsigned int chan); int osi_txring_empty(struct osi_dma_priv_data *osi_dma, unsigned int chan);
#endif /* !OSI_STRIPPED_LIB */
/**
* @brief osi_get_global_dma_status - Gets DMA status.
*
* Algorithm: Returns global DMA Tx/Rx interrupt status
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @note
* Dependencies: None.
* Protection: None.
*
* @retval status
*/
unsigned int osi_get_global_dma_status(struct osi_dma_priv_data *osi_dma);
/**
* @brief osi_dma_get_systime_from_mac - Get system time
*
* @note
* Algorithm:
* - Gets the current system time
*
* @param[in] osi_dma: OSI DMA private data structure.
* @param[out] sec: Value read in Seconds
* @param[out] nsec: Value read in Nano seconds
*
* @pre MAC should be init and started. see osi_start_mac()
*
* @note
* Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_019
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: No
* - Run time: Yes
* - De-initialization: No
*
* @retval 0 on success
* @retval -1 on failure.
*/
int osi_dma_get_systime_from_mac(
struct osi_dma_priv_data *const osi_dma,
unsigned int *sec,
unsigned int *nsec);
/**
* @brief osi_is_mac_enabled - Checks if MAC is enabled.
*
* @note
* Algorithm:
* - Reads MAC MCR register for Tx and Rx enabled bits.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre MAC should be init and started. see osi_start_mac()
*
* @note
* Traceability Details:
* - SWUD_ID: ETHERNET_NVETHERNETCL_020
*
* @note
* Classification:
* - Interrupt: No
* - Signal handler: No
* - Thread safe: No
* - Required Privileges: None
*
* @note
* API Group:
* - Initialization: Yes
* - Run time: No
* - De-initialization: No
*
* @retval OSI_ENABLE if MAC enabled.
* @retval OSI_DISABLE otherwise.
*/
unsigned int osi_is_mac_enabled(struct osi_dma_priv_data *const osi_dma);
#endif /* OSI_DMA_H */ #endif /* OSI_DMA_H */

View File

@@ -26,6 +26,7 @@ ifdef NV_COMPONENT_FLAG_SHARED_LIBRARY_SECTION
include $(NV_BUILD_START_COMPONENT) include $(NV_BUILD_START_COMPONENT)
NV_COMPONENT_STRICT_WARNINGS_qnx_64 := 1 NV_COMPONENT_STRICT_WARNINGS_qnx_64 := 1
NV_COMPONENT_CFLAGS := -DOSI_STRIPPED_LIB
NV_COMPONENT_NAME := nvethernetrm NV_COMPONENT_NAME := nvethernetrm
NV_COMPONENT_OWN_INTERFACE_DIR := . NV_COMPONENT_OWN_INTERFACE_DIR := .

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
################################### tell Emacs this is a -*- makefile-gmake -*- ################################### tell Emacs this is a -*- makefile-gmake -*-
# #
# Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved. # Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved.
# #
# Permission is hereby granted, free of charge, to any person obtaining a # Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"), # copy of this software and associated documentation files (the "Software"),
@@ -36,28 +36,15 @@ osi_common_isr
osi_set_mode osi_set_mode
osi_set_speed osi_set_speed
osi_pad_calibrate osi_pad_calibrate
osi_flush_mtl_tx_queue
osi_config_mac_loopback osi_config_mac_loopback
osi_set_avb
osi_get_avb
osi_configure_txstatus
osi_config_rx_crc_check
osi_get_mac_version osi_get_mac_version
osi_get_hw_features osi_get_hw_features
osi_config_arp_offload
osi_config_rxcsum_offload osi_config_rxcsum_offload
osi_configure_flow_control
osi_l2_filter osi_l2_filter
osi_l3l4_filter osi_l3l4_filter
osi_config_vlan_filtering
osi_update_vlan_id
osi_config_fw_err_pkts osi_config_fw_err_pkts
osi_ptp_configuration osi_ptp_configuration
osi_get_systime_from_mac
osi_adjust_time osi_adjust_time
osi_adjust_freq osi_adjust_freq
osi_set_systime_to_mac osi_set_systime_to_mac
osi_read_mmc osi_read_mmc
osi_reset_mmc
osi_validate_core_regs
osi_configure_eee

View File

@@ -111,19 +111,6 @@ int osi_hw_core_deinit(struct osi_core_priv_data *const osi_core)
return -1; return -1;
} }
int osi_validate_core_regs(struct osi_core_priv_data *const osi_core)
{
int ret = -1;
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->validate_regs != OSI_NULL) &&
(osi_core->safety_config != OSI_NULL)) {
ret = osi_core->ops->validate_regs(osi_core);
}
return ret;
}
int osi_start_mac(struct osi_core_priv_data *const osi_core) int osi_start_mac(struct osi_core_priv_data *const osi_core)
{ {
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) && if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
@@ -190,21 +177,10 @@ int osi_pad_calibrate(struct osi_core_priv_data *const osi_core)
return -1; return -1;
} }
int osi_flush_mtl_tx_queue(struct osi_core_priv_data *const osi_core,
const unsigned int qinx)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->flush_mtl_tx_queue != OSI_NULL)) {
return osi_core->ops->flush_mtl_tx_queue(osi_core->base, qinx);
}
return -1;
}
int osi_config_mac_loopback(struct osi_core_priv_data *const osi_core, int osi_config_mac_loopback(struct osi_core_priv_data *const osi_core,
const unsigned int lb_mode) const unsigned int lb_mode)
{ {
/* Configure MAC LoopBack */ /* Configure MAC loopback */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) && if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_mac_loopback != OSI_NULL)) { (osi_core->ops->config_mac_loopback != OSI_NULL)) {
return osi_core->ops->config_mac_loopback(osi_core->base, return osi_core->ops->config_mac_loopback(osi_core->base,
@@ -214,41 +190,6 @@ int osi_config_mac_loopback(struct osi_core_priv_data *const osi_core,
return -1; return -1;
} }
int osi_set_avb(struct osi_core_priv_data *const osi_core,
const struct osi_core_avb_algorithm *avb)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->set_avb_algorithm != OSI_NULL)) {
return osi_core->ops->set_avb_algorithm(osi_core, avb);
}
return -1;
}
int osi_get_avb(struct osi_core_priv_data *const osi_core,
struct osi_core_avb_algorithm *avb)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->get_avb_algorithm != OSI_NULL)) {
return osi_core->ops->get_avb_algorithm(osi_core, avb);
}
return -1;
}
int osi_configure_txstatus(struct osi_core_priv_data *const osi_core,
const unsigned int tx_status)
{
/* Configure Drop Transmit Status */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_tx_status != OSI_NULL)) {
return osi_core->ops->config_tx_status(osi_core->base,
tx_status);
}
return -1;
}
int osi_config_fw_err_pkts(struct osi_core_priv_data *const osi_core, int osi_config_fw_err_pkts(struct osi_core_priv_data *const osi_core,
const unsigned int qinx, const unsigned int fw_err) const unsigned int qinx, const unsigned int fw_err)
{ {
@@ -262,47 +203,6 @@ int osi_config_fw_err_pkts(struct osi_core_priv_data *const osi_core,
return -1; return -1;
} }
int osi_config_rx_crc_check(struct osi_core_priv_data *const osi_core,
const unsigned int crc_chk)
{
/* Configure CRC Checking for Received Packets */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_rx_crc_check != OSI_NULL)) {
return osi_core->ops->config_rx_crc_check(osi_core->base,
crc_chk);
}
return -1;
}
int osi_configure_flow_control(
struct osi_core_priv_data *const osi_core,
const unsigned int flw_ctrl)
{
/* Configure Flow control settings */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_flow_control != OSI_NULL)) {
return osi_core->ops->config_flow_control(osi_core->base,
flw_ctrl);
}
return -1;
}
int osi_config_arp_offload(struct osi_core_priv_data *const osi_core,
const unsigned int flags,
const unsigned char *ip_addr)
{
if (osi_core != OSI_NULL && osi_core->ops != OSI_NULL &&
osi_core->ops->config_arp_offload != OSI_NULL) {
return osi_core->ops->config_arp_offload(osi_core->mac_ver,
osi_core->base,
flags, ip_addr);
}
return -1;
}
int osi_l2_filter(struct osi_core_priv_data *const osi_core, int osi_l2_filter(struct osi_core_priv_data *const osi_core,
const struct osi_filter *filter) const struct osi_filter *filter)
{ {
@@ -521,24 +421,6 @@ int osi_l3l4_filter(struct osi_core_priv_data *const osi_core,
return ret; return ret;
} }
int osi_config_vlan_filtering(
struct osi_core_priv_data *const osi_core,
const unsigned int filter_enb_dis,
const unsigned int perfect_hash_filtering,
const unsigned int perfect_inverse_match)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_vlan_filtering != OSI_NULL)) {
return osi_core->ops->config_vlan_filtering(
osi_core,
filter_enb_dis,
perfect_hash_filtering,
perfect_inverse_match);
}
return -1;
}
int osi_config_rxcsum_offload( int osi_config_rxcsum_offload(
struct osi_core_priv_data *const osi_core, struct osi_core_priv_data *const osi_core,
const unsigned int enable) const unsigned int enable)
@@ -552,18 +434,6 @@ int osi_config_rxcsum_offload(
return -1; return -1;
} }
int osi_update_vlan_id(struct osi_core_priv_data *const osi_core,
const unsigned int vid)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->update_vlan_id != OSI_NULL)) {
return osi_core->ops->update_vlan_id(osi_core->base,
vid);
}
return -1;
}
int osi_set_systime_to_mac(struct osi_core_priv_data *const osi_core, int osi_set_systime_to_mac(struct osi_core_priv_data *const osi_core,
const unsigned int sec, const unsigned int nsec) const unsigned int sec, const unsigned int nsec)
{ {
@@ -721,21 +591,6 @@ int osi_adjust_time(struct osi_core_priv_data *const osi_core,
return ret; return ret;
} }
int osi_get_systime_from_mac(
struct osi_core_priv_data *const osi_core,
unsigned int *sec,
unsigned int *nsec)
{
if ((osi_core != OSI_NULL) && (osi_core->base != OSI_NULL)) {
common_get_systime_from_mac(osi_core->base, osi_core->mac, sec,
nsec);
} else {
return -1;
}
return 0;
}
int osi_ptp_configuration(struct osi_core_priv_data *const osi_core, int osi_ptp_configuration(struct osi_core_priv_data *const osi_core,
const unsigned int enable) const unsigned int enable)
{ {
@@ -814,6 +669,124 @@ int osi_read_mmc(struct osi_core_priv_data *const osi_core)
return -1; return -1;
} }
#ifndef OSI_STRIPPED_LIB
int osi_validate_core_regs(struct osi_core_priv_data *const osi_core)
{
int ret = -1;
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->validate_regs != OSI_NULL) &&
(osi_core->safety_config != OSI_NULL)) {
ret = osi_core->ops->validate_regs(osi_core);
}
return ret;
}
int osi_flush_mtl_tx_queue(struct osi_core_priv_data *const osi_core,
const unsigned int qinx)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->flush_mtl_tx_queue != OSI_NULL)) {
return osi_core->ops->flush_mtl_tx_queue(osi_core->base, qinx);
}
return -1;
}
int osi_set_avb(struct osi_core_priv_data *const osi_core,
const struct osi_core_avb_algorithm *avb)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->set_avb_algorithm != OSI_NULL)) {
return osi_core->ops->set_avb_algorithm(osi_core, avb);
}
return -1;
}
int osi_get_avb(struct osi_core_priv_data *const osi_core,
struct osi_core_avb_algorithm *avb)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->get_avb_algorithm != OSI_NULL)) {
return osi_core->ops->get_avb_algorithm(osi_core, avb);
}
return -1;
}
int osi_configure_txstatus(struct osi_core_priv_data *const osi_core,
const unsigned int tx_status)
{
/* Configure Drop Transmit Status */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_tx_status != OSI_NULL)) {
return osi_core->ops->config_tx_status(osi_core->base,
tx_status);
}
return -1;
}
int osi_config_rx_crc_check(struct osi_core_priv_data *const osi_core,
const unsigned int crc_chk)
{
/* Configure CRC Checking for Received Packets */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_rx_crc_check != OSI_NULL)) {
return osi_core->ops->config_rx_crc_check(osi_core->base,
crc_chk);
}
return -1;
}
int osi_config_vlan_filtering(
struct osi_core_priv_data *const osi_core,
const unsigned int filter_enb_dis,
const unsigned int perfect_hash_filtering,
const unsigned int perfect_inverse_match)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_vlan_filtering != OSI_NULL)) {
return osi_core->ops->config_vlan_filtering(
osi_core,
filter_enb_dis,
perfect_hash_filtering,
perfect_inverse_match);
}
return -1;
}
int osi_update_vlan_id(struct osi_core_priv_data *const osi_core,
const unsigned int vid)
{
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->update_vlan_id != OSI_NULL)) {
return osi_core->ops->update_vlan_id(osi_core->base,
vid);
}
return -1;
}
int osi_get_systime_from_mac(
struct osi_core_priv_data *const osi_core,
unsigned int *sec,
unsigned int *nsec)
{
if ((osi_core != OSI_NULL) && (osi_core->base != OSI_NULL)) {
common_get_systime_from_mac(osi_core->base, osi_core->mac, sec,
nsec);
} else {
return -1;
}
return 0;
}
int osi_reset_mmc(struct osi_core_priv_data *const osi_core) int osi_reset_mmc(struct osi_core_priv_data *const osi_core)
{ {
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) && if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
@@ -862,3 +835,32 @@ int osi_restore_registers(struct osi_core_priv_data *const osi_core)
return -1; return -1;
} }
int osi_configure_flow_control(
struct osi_core_priv_data *const osi_core,
const unsigned int flw_ctrl)
{
/* Configure Flow control settings */
if ((osi_core != OSI_NULL) && (osi_core->ops != OSI_NULL) &&
(osi_core->ops->config_flow_control != OSI_NULL)) {
return osi_core->ops->config_flow_control(osi_core->base,
flw_ctrl);
}
return -1;
}
int osi_config_arp_offload(struct osi_core_priv_data *const osi_core,
const unsigned int flags,
const unsigned char *ip_addr)
{
if (osi_core != OSI_NULL && osi_core->ops != OSI_NULL &&
osi_core->ops->config_arp_offload != OSI_NULL) {
return osi_core->ops->config_arp_offload(osi_core->mac_ver,
osi_core->base,
flags, ip_addr);
}
return -1;
}
#endif /* !OSI_STRIPPED_LIB */

View File

@@ -26,6 +26,7 @@ ifdef NV_COMPONENT_FLAG_SHARED_LIBRARY_SECTION
include $(NV_BUILD_START_COMPONENT) include $(NV_BUILD_START_COMPONENT)
NV_COMPONENT_STRICT_WARNINGS_qnx_64 := 1 NV_COMPONENT_STRICT_WARNINGS_qnx_64 := 1
NV_COMPONENT_CFLAGS := -DOSI_STRIPPED_LIB
NV_COMPONENT_NAME := nvethernetcl NV_COMPONENT_NAME := nvethernetcl
NV_COMPONENT_OWN_INTERFACE_DIR := . NV_COMPONENT_OWN_INTERFACE_DIR := .

View File

@@ -68,7 +68,7 @@ static inline void eqos_dma_safety_writel(unsigned int val, void *addr,
* - Populate the list of safety critical registers and provide * - Populate the list of safety critical registers and provide
* - the address of the register * - the address of the register
* - Register mask (to ignore reserved/self-critical bits in the reg). * - Register mask (to ignore reserved/self-critical bits in the reg).
* See eqos_validate_dma_regs which can be ivoked periodically to compare * See eqos_validate_dma_regs which can be invoked periodically to compare
* the last written value to this register vs the actual value read when * the last written value to this register vs the actual value read when
* eqos_validate_dma_regs is scheduled. * eqos_validate_dma_regs is scheduled.
*/ */
@@ -128,70 +128,6 @@ static void eqos_dma_safety_init(struct osi_dma_priv_data *osi_dma)
osi_lock_init(&config->dma_safety_lock); osi_lock_init(&config->dma_safety_lock);
} }
/**
* @brief Read-validate HW registers for functional safety.
*
* @note
* Algorithm:
* - Reads pre-configured list of MAC/MTL configuration registers
* and compares with last written value for any modifications.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre
* - MAC has to be out of reset.
* - osi_hw_dma_init has to be called. Internally this would initialize
* the safety_config (see osi_dma_priv_data) based on MAC version and
* which specific registers needs to be validated periodically.
* - Invoke this call iff (osi_dma_priv_data->safety_config != OSI_NULL)
*
* @retval 0 on success
* @retval -1 on failure.
*/
static int eqos_validate_dma_regs(struct osi_dma_priv_data *osi_dma)
{
struct dma_func_safety *config =
(struct dma_func_safety *)osi_dma->safety_config;
unsigned int cur_val;
unsigned int i;
osi_lock_irq_enabled(&config->dma_safety_lock);
for (i = EQOS_DMA_CH0_CTRL_IDX; i < EQOS_MAX_DMA_SAFETY_REGS; i++) {
if (config->reg_addr[i] == OSI_NULL) {
continue;
}
/* FIXME
* QNX OSD currently overwrites following registers and
* therefore validation fails using this API. Add an
* exception for following registers until QNX OSD completely
* moves to common library.
*/
if ((i == EQOS_DMA_CH0_TDRL_IDX) ||
(i == EQOS_DMA_CH0_RDRL_IDX))
{
continue;
}
cur_val = osi_readl((unsigned char *)config->reg_addr[i]);
cur_val &= config->reg_mask[i];
if (cur_val == config->reg_val[i]) {
continue;
} else {
/* Register content differs from what was written.
* Return error and let safety manager (NVGaurd etc.)
* take care of corrective action.
*/
osi_unlock_irq_enabled(&config->dma_safety_lock);
return -1;
}
}
osi_unlock_irq_enabled(&config->dma_safety_lock);
return 0;
}
/** /**
* @brief eqos_disable_chan_tx_intr - Disables DMA Tx channel interrupts. * @brief eqos_disable_chan_tx_intr - Disables DMA Tx channel interrupts.
* *
@@ -351,7 +287,7 @@ static void eqos_set_tx_ring_len(void *addr, unsigned int chan,
* @param[in] addr: Base address indicating the start of * @param[in] addr: Base address indicating the start of
* memory mapped IO region of the MAC. * memory mapped IO region of the MAC.
* @param[in] chan: DMA Tx channel number. * @param[in] chan: DMA Tx channel number.
* @param[in] tx_desc: Tx desc base addess. * @param[in] tx_desc: Tx desc base address.
*/ */
static void eqos_set_tx_ring_start_addr(void *addr, unsigned int chan, static void eqos_set_tx_ring_start_addr(void *addr, unsigned int chan,
unsigned long tx_desc) unsigned long tx_desc)
@@ -559,56 +495,6 @@ static void eqos_stop_dma(void *addr, unsigned int chan)
EQOS_DMA_CH0_RX_CTRL_IDX + chan); EQOS_DMA_CH0_RX_CTRL_IDX + chan);
} }
/**
* @brief eqos_config_slot - Configure slot Checking for DMA channel
*
* @note
* Algorithm:
* - Set/Reset the slot function of DMA channel based on given inputs
*
* @param[in] osi_dma: OSI DMA private data structure.
* @param[in] chan: DMA channel number to enable slot function
* @param[in] set: flag for set/reset with value OSI_ENABLE/OSI_DISABLE
* @param[in] interval: slot interval from 0usec to 4095usec
*
* @pre
& - MAC should be init and started. see osi_start_mac()
* - OSD should be initialized
*
* @retval none
*/
static void eqos_config_slot(struct osi_dma_priv_data *osi_dma,
unsigned int chan,
unsigned int set,
unsigned int interval)
{
unsigned int value;
CHECK_CHAN_BOUND(chan);
if (set == OSI_ENABLE) {
/* Program SLOT CTRL register SIV and set ESC bit */
value = osi_readl((unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
value &= ~EQOS_DMA_CHX_SLOT_SIV_MASK;
/* remove overflow bits of interval */
interval &= EQOS_DMA_CHX_SLOT_SIV_MASK;
value |= (interval << EQOS_DMA_CHX_SLOT_SIV_SHIFT);
/* Set ESC bit */
value |= EQOS_DMA_CHX_SLOT_ESC;
osi_writel(value, (unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
} else {
/* Clear ESC bit of SLOT CTRL register */
value = osi_readl((unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
value &= ~EQOS_DMA_CHX_SLOT_ESC;
osi_writel(value, (unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
}
}
/** /**
* @brief eqos_configure_dma_channel - Configure DMA channel * @brief eqos_configure_dma_channel - Configure DMA channel
* *
@@ -805,6 +691,110 @@ static void eqos_set_rx_buf_len(struct osi_dma_priv_data *osi_dma)
~(EQOS_AXI_BUS_WIDTH - 1U)); ~(EQOS_AXI_BUS_WIDTH - 1U));
} }
#ifndef OSI_STRIPPED_LIB
/**
* @brief Read-validate HW registers for functional safety.
*
* @note
* Algorithm:
* - Reads pre-configured list of MAC/MTL configuration registers
* and compares with last written value for any modifications.
*
* @param[in] osi_dma: OSI DMA private data structure.
*
* @pre
* - MAC has to be out of reset.
* - osi_hw_dma_init has to be called. Internally this would initialize
* the safety_config (see osi_dma_priv_data) based on MAC version and
* which specific registers needs to be validated periodically.
* - Invoke this call if (osi_dma_priv_data->safety_config != OSI_NULL)
*
* @retval 0 on success
* @retval -1 on failure.
*/
static int eqos_validate_dma_regs(struct osi_dma_priv_data *osi_dma)
{
struct dma_func_safety *config =
(struct dma_func_safety *)osi_dma->safety_config;
unsigned int cur_val;
unsigned int i;
osi_lock_irq_enabled(&config->dma_safety_lock);
for (i = EQOS_DMA_CH0_CTRL_IDX; i < EQOS_MAX_DMA_SAFETY_REGS; i++) {
if (config->reg_addr[i] == OSI_NULL) {
continue;
}
cur_val = osi_readl((unsigned char *)config->reg_addr[i]);
cur_val &= config->reg_mask[i];
if (cur_val == config->reg_val[i]) {
continue;
} else {
/* Register content differs from what was written.
* Return error and let safety manager (NVGaurd etc.)
* take care of corrective action.
*/
osi_unlock_irq_enabled(&config->dma_safety_lock);
return -1;
}
}
osi_unlock_irq_enabled(&config->dma_safety_lock);
return 0;
}
/**
* @brief eqos_config_slot - Configure slot Checking for DMA channel
*
* @note
* Algorithm:
* - Set/Reset the slot function of DMA channel based on given inputs
*
* @param[in] osi_dma: OSI DMA private data structure.
* @param[in] chan: DMA channel number to enable slot function
* @param[in] set: flag for set/reset with value OSI_ENABLE/OSI_DISABLE
* @param[in] interval: slot interval from 0usec to 4095usec
*
* @pre
& - MAC should be init and started. see osi_start_mac()
* - OSD should be initialized
*
* @retval none
*/
static void eqos_config_slot(struct osi_dma_priv_data *osi_dma,
unsigned int chan,
unsigned int set,
unsigned int interval)
{
unsigned int value;
CHECK_CHAN_BOUND(chan);
if (set == OSI_ENABLE) {
/* Program SLOT CTRL register SIV and set ESC bit */
value = osi_readl((unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
value &= ~EQOS_DMA_CHX_SLOT_SIV_MASK;
/* remove overflow bits of interval */
interval &= EQOS_DMA_CHX_SLOT_SIV_MASK;
value |= (interval << EQOS_DMA_CHX_SLOT_SIV_SHIFT);
/* Set ESC bit */
value |= EQOS_DMA_CHX_SLOT_ESC;
osi_writel(value, (unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
} else {
/* Clear ESC bit of SLOT CTRL register */
value = osi_readl((unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
value &= ~EQOS_DMA_CHX_SLOT_ESC;
osi_writel(value, (unsigned char *)osi_dma->base +
EQOS_DMA_CHX_SLOT_CTRL(chan));
}
}
#endif /* !OSI_STRIPPED_LIB */
/** /**
* @brief eqos_get_global_dma_status - Gets DMA status. * @brief eqos_get_global_dma_status - Gets DMA status.
* *
@@ -885,8 +875,10 @@ static struct osi_dma_chan_ops eqos_dma_chan_ops = {
.stop_dma = eqos_stop_dma, .stop_dma = eqos_stop_dma,
.init_dma_channel = eqos_init_dma_channel, .init_dma_channel = eqos_init_dma_channel,
.set_rx_buf_len = eqos_set_rx_buf_len, .set_rx_buf_len = eqos_set_rx_buf_len,
#ifndef OSI_STRIPPED_LIB
.validate_regs = eqos_validate_dma_regs, .validate_regs = eqos_validate_dma_regs,
.config_slot = eqos_config_slot, .config_slot = eqos_config_slot,
#endif /* !OSI_STRIPPED_LIB */
.get_global_dma_status = eqos_get_global_dma_status, .get_global_dma_status = eqos_get_global_dma_status,
.clear_vm_tx_intr = eqos_clear_vm_tx_intr, .clear_vm_tx_intr = eqos_clear_vm_tx_intr,
.clear_vm_rx_intr = eqos_clear_vm_rx_intr, .clear_vm_rx_intr = eqos_clear_vm_rx_intr,

View File

@@ -38,8 +38,5 @@ osi_process_rx_completions
osi_hw_dma_init osi_hw_dma_init
osi_hw_dma_deinit osi_hw_dma_deinit
osi_init_dma_ops osi_init_dma_ops
osi_validate_dma_regs
osi_config_slot_function
osi_clear_tx_pkt_err_stats
osi_dma_get_systime_from_mac osi_dma_get_systime_from_mac
osi_is_mac_enabled osi_is_mac_enabled

View File

@@ -29,7 +29,7 @@ int osi_init_dma_ops(struct osi_dma_priv_data *osi_dma)
/* /*
* Currently these osd_ops are optional to be filled in the OSD layer. * Currently these osd_ops are optional to be filled in the OSD layer.
* If OSD updates these pointers, use the same. If not, fall back to the * If OSD updates these pointers, use the same. If not, fall back to the
* exisitng way of using osd_* API's. * existing way of using osd_* API's.
* TODO: Once These API's are mandatory, return errors instead of * TODO: Once These API's are mandatory, return errors instead of
* default API usage. * default API usage.
*/ */
@@ -331,6 +331,7 @@ int osi_set_rx_buf_len(struct osi_dma_priv_data *osi_dma)
return 0; return 0;
} }
#ifndef OSI_STRIPPED_LIB
int osi_config_slot_function(struct osi_dma_priv_data *osi_dma, int osi_config_slot_function(struct osi_dma_priv_data *osi_dma,
unsigned int set) unsigned int set)
{ {
@@ -346,7 +347,6 @@ int osi_config_slot_function(struct osi_dma_priv_data *osi_dma,
return -1; return -1;
} }
/* Configure slot Checking for Tranmit */
if (osi_dma == OSI_NULL || osi_dma->ops == OSI_NULL || if (osi_dma == OSI_NULL || osi_dma->ops == OSI_NULL ||
osi_dma->ops->config_slot == OSI_NULL) { osi_dma->ops->config_slot == OSI_NULL) {
OSI_ERR(OSI_NULL, OSI_ERR(OSI_NULL,
@@ -363,7 +363,7 @@ int osi_config_slot_function(struct osi_dma_priv_data *osi_dma,
/* Ignore 0 and invalid channels */ /* Ignore 0 and invalid channels */
continue; continue;
} }
/* Check for slot enbale */ /* Check for slot enable */
if (osi_dma->slot_enabled[chan] == OSI_ENABLE) { if (osi_dma->slot_enabled[chan] == OSI_ENABLE) {
/* Get DMA slot interval and validate */ /* Get DMA slot interval and validate */
interval = osi_dma->slot_interval[chan]; interval = osi_dma->slot_interval[chan];
@@ -412,6 +412,7 @@ int osi_txring_empty(struct osi_dma_priv_data *osi_dma, unsigned int chan)
return (tx_ring->clean_idx == tx_ring->cur_tx_idx) ? 1 : 0; return (tx_ring->clean_idx == tx_ring->cur_tx_idx) ? 1 : 0;
} }
#endif /* !OSI_STRIPPED_LIB */
int osi_dma_get_systime_from_mac(struct osi_dma_priv_data *const osi_dma, int osi_dma_get_systime_from_mac(struct osi_dma_priv_data *const osi_dma,
unsigned int *sec, unsigned int *sec,

View File

@@ -291,7 +291,7 @@ int osi_process_rx_completions(struct osi_dma_priv_data *osi,
break; break;
} }
/* WHen JE is set, HW will accept any valid packet on Rx upto /* When JE is set, HW will accept any valid packet on Rx upto
* 9K or 16K (depending on GPSCLE bit), irrespective of whether * 9K or 16K (depending on GPSCLE bit), irrespective of whether
* MTU set is lower than these specific values. When Rx buf len * MTU set is lower than these specific values. When Rx buf len
* is allocated to be exactly same as MTU, HW will consume more * is allocated to be exactly same as MTU, HW will consume more
@@ -468,7 +468,7 @@ static inline void get_tx_err_stats(struct osi_tx_desc *tx_desc,
1UL); 1UL);
} }
/* Execessive Collision Error */ /* Excessive Collision Error */
if ((tx_desc->tdes3 & TDES3_EXCESSIVE_COL_ERR) == if ((tx_desc->tdes3 & TDES3_EXCESSIVE_COL_ERR) ==
TDES3_EXCESSIVE_COL_ERR) { TDES3_EXCESSIVE_COL_ERR) {
pkt_err_stats->excessive_collision_error = pkt_err_stats->excessive_collision_error =
@@ -494,6 +494,7 @@ static inline void get_tx_err_stats(struct osi_tx_desc *tx_desc,
} }
} }
#ifndef OSI_STRIPPED_LIB
int osi_clear_tx_pkt_err_stats(struct osi_dma_priv_data *osi_dma) int osi_clear_tx_pkt_err_stats(struct osi_dma_priv_data *osi_dma)
{ {
int ret = -1; int ret = -1;
@@ -538,6 +539,7 @@ int osi_clear_rx_pkt_err_stats(struct osi_dma_priv_data *osi_dma)
return ret; return ret;
} }
#endif /* !OSI_STRIPPED_LIB */
int osi_process_tx_completions(struct osi_dma_priv_data *osi, int osi_process_tx_completions(struct osi_dma_priv_data *osi,
unsigned int chan, int budget) unsigned int chan, int budget)
@@ -814,7 +816,7 @@ void osi_hw_transmit(struct osi_dma_priv_data *osi, unsigned int chan)
return; return;
} }
/* Context decriptor for VLAN/TSO */ /* Context descriptor for VLAN/TSO */
if ((tx_pkt_cx->flags & OSI_PKT_CX_VLAN) == OSI_PKT_CX_VLAN) { if ((tx_pkt_cx->flags & OSI_PKT_CX_VLAN) == OSI_PKT_CX_VLAN) {
osi->dstats.tx_vlan_pkt_n = osi->dstats.tx_vlan_pkt_n =
osi_update_stats_counter(osi->dstats.tx_vlan_pkt_n, osi_update_stats_counter(osi->dstats.tx_vlan_pkt_n,