mirror of
git://nv-tegra.nvidia.com/kernel/nvethernetrm.git
synced 2025-12-22 17:34:29 +03:00
osi: core: Fix misc optimizations
1) remove duplicate checks 2) remove unused APIs 3) moved to STRIPPED if not used Bug 3701869 Change-Id: Id6ba8649ff5135affa949ea8dde947db10003f80 Signed-off-by: Narayan Reddy <narayanr@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/kernel/nvethernetrm/+/2784309 Reviewed-by: Bhadram Varka <vbhadram@nvidia.com> Reviewed-by: Nagarjuna Kristam <nkristam@nvidia.com> Reviewed-by: Srinivas Ramachandran <srinivasra@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
4a9893133d
commit
81242cd874
@@ -224,16 +224,15 @@
|
|||||||
#define OSI_MGBE_MAC_3_00 0x30U
|
#define OSI_MGBE_MAC_3_00 0x30U
|
||||||
#define OSI_EQOS_MAC_4_10 0x41U
|
#define OSI_EQOS_MAC_4_10 0x41U
|
||||||
#define OSI_EQOS_MAC_5_10 0x51U
|
#define OSI_EQOS_MAC_5_10 0x51U
|
||||||
|
#define OSI_MGBE_MAC_4_00 0x40U
|
||||||
#endif /* OSI_STRIPPED_LIB */
|
#endif /* OSI_STRIPPED_LIB */
|
||||||
|
|
||||||
#define OSI_EQOS_MAC_5_00 0x50U
|
#define OSI_EQOS_MAC_5_00 0x50U
|
||||||
#define OSI_EQOS_MAC_5_30 0x53U
|
#define OSI_EQOS_MAC_5_30 0x53U
|
||||||
#define OSI_MGBE_MAC_3_10 0x31U
|
#define OSI_MGBE_MAC_3_10 0x31U
|
||||||
#define OSI_MGBE_MAC_4_00 0x40U
|
|
||||||
|
|
||||||
#define OSI_MAX_VM_IRQS 5U
|
#define OSI_MAX_VM_IRQS 5U
|
||||||
#define OSI_IP4_FILTER 0U
|
#define OSI_IP4_FILTER 0U
|
||||||
#define OSI_IP6_FILTER 1U
|
|
||||||
|
|
||||||
#ifndef OSI_STRIPPED_LIB
|
#ifndef OSI_STRIPPED_LIB
|
||||||
#define OSI_HASH_FILTER_MODE 1U
|
#define OSI_HASH_FILTER_MODE 1U
|
||||||
|
|||||||
@@ -1464,110 +1464,6 @@ nve32_t osi_hw_core_init(struct osi_core_priv_data *const osi_core,
|
|||||||
*/
|
*/
|
||||||
nve32_t osi_hw_core_deinit(struct osi_core_priv_data *const osi_core);
|
nve32_t osi_hw_core_deinit(struct osi_core_priv_data *const osi_core);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_common_isr - Common ISR.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Takes care of handling the common interrupts accordingly as per
|
|
||||||
* the MAC IP
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_010
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: Yes
|
|
||||||
* - Signal handler: Yes
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_common_isr(struct osi_core_priv_data *const osi_core);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_config_rxcsum_offload - Configure RX checksum offload in MAC.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Invokes EQOS config RX checksum offload routine.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] enable: Enable/disable flag. 0: Disable 1: Enable
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_017
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_config_rxcsum_offload(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t enable);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_l2_filter - configure L2 mac filter.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - This sequence is used to configure MAC in different packet
|
|
||||||
* processing modes like promiscuous, multicast, unicast,
|
|
||||||
* hash unicast/multicast and perfect/inverse matching for L2 DA
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] filter: OSI filter structure.
|
|
||||||
*
|
|
||||||
* @pre
|
|
||||||
* - MAC should be initialized and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_018
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_l2_filter(struct osi_core_priv_data *const osi_core,
|
|
||||||
const struct osi_filter *filter);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief osi_write_phy_reg - Write to a PHY register through MAC over MDIO bus.
|
* @brief osi_write_phy_reg - Write to a PHY register through MAC over MDIO bus.
|
||||||
*
|
*
|
||||||
@@ -1612,42 +1508,6 @@ nve32_t osi_write_phy_reg(struct osi_core_priv_data *const osi_core,
|
|||||||
const nveu32_t phyaddr, const nveu32_t phyreg,
|
const nveu32_t phyaddr, const nveu32_t phyreg,
|
||||||
const nveu16_t phydata);
|
const nveu16_t phydata);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_read_mmc - invoke function to read actual registers and update
|
|
||||||
* structure variable mmc
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Read the registers, mask reserve bits if required, update
|
|
||||||
* structure.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
*
|
|
||||||
* @pre
|
|
||||||
* - MAC should be init and started. see osi_start_mac()
|
|
||||||
* - osi_core->osd should be populated
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_014
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_read_mmc(struct osi_core_priv_data *const osi_core);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief osi_read_phy_reg - Read from a PHY register through MAC over MDIO bus.
|
* @brief osi_read_phy_reg - Read from a PHY register through MAC over MDIO bus.
|
||||||
*
|
*
|
||||||
@@ -1718,158 +1578,6 @@ nve32_t osi_read_phy_reg(struct osi_core_priv_data *const osi_core,
|
|||||||
*/
|
*/
|
||||||
nve32_t osi_init_core_ops(struct osi_core_priv_data *const osi_core);
|
nve32_t osi_init_core_ops(struct osi_core_priv_data *const osi_core);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_set_systime_to_mac - Handles setting of system time.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Set current system time to MAC.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] sec: Seconds to be configured.
|
|
||||||
* @param[in] nsec: Nano seconds to be configured.
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_005
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_set_systime_to_mac(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t sec, const nveu32_t nsec);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_adjust_freq - Adjust frequency
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Adjust a drift of +/- comp nanoseconds per second.
|
|
||||||
* "Compensation" is the difference in frequency between
|
|
||||||
* the master and slave clocks in Parts Per Billion.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] ppb: Parts per Billion
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_023
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_adjust_freq(struct osi_core_priv_data *const osi_core, nve32_t ppb);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_adjust_time - Adjust MAC time with system time
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Adjust/update the MAC time (delta time from MAC to system time
|
|
||||||
* passed in nanoseconds, can be + or -).
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] nsec_delta: Delta time in nano seconds
|
|
||||||
*
|
|
||||||
* @pre
|
|
||||||
* - MAC should be init and started. see osi_start_mac()
|
|
||||||
* - osi_core->ptp_config.one_nsec_accuracy need to be set to 1
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_022
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_adjust_time(struct osi_core_priv_data *const osi_core,
|
|
||||||
nvel64_t nsec_delta);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_ptp_configuration - Configure PTP
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Configure the PTP registers that are required for PTP.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] enable: Enable or disable Time Stamping. 0: Disable 1: Enable
|
|
||||||
*
|
|
||||||
* @pre
|
|
||||||
* - MAC should be init and started. see osi_start_mac()
|
|
||||||
* - osi->ptp_config.ptp_filter need to be filled accordingly to the
|
|
||||||
* filter that need to be set for PTP packets. Please check osi_ptp_config
|
|
||||||
* structure declaration on the bit fields that need to be filled.
|
|
||||||
* - osi->ptp_config.ptp_clock need to be filled with the ptp system clk.
|
|
||||||
* Currently it is set to 62500000Hz.
|
|
||||||
* - osi->ptp_config.ptp_ref_clk_rate need to be filled with the ptp
|
|
||||||
* reference clock that platform supports.
|
|
||||||
* - osi->ptp_config.sec need to be filled with current time of seconds
|
|
||||||
* - osi->ptp_config.nsec need to be filled with current time of nseconds
|
|
||||||
* - osi->base need to be filled with the ioremapped base address
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_021
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_ptp_configuration(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t enable);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief osi_handle_ioctl - API to handle runtime command
|
* @brief osi_handle_ioctl - API to handle runtime command
|
||||||
*
|
*
|
||||||
@@ -2061,327 +1769,4 @@ nve32_t osi_handle_ioctl(struct osi_core_priv_data *osi_core,
|
|||||||
* @retval NULL on failure.
|
* @retval NULL on failure.
|
||||||
*/
|
*/
|
||||||
struct osi_core_priv_data *osi_get_core(void);
|
struct osi_core_priv_data *osi_get_core(void);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_hal_handle_ioctl - HW function API to handle runtime command
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Handle runtime commands to OSI
|
|
||||||
* - OSI_CMD_MDC_CONFIG
|
|
||||||
* Derive MDC clock based on provided AXI_CBB clk
|
|
||||||
* arg1_u32 - CSR (AXI CBB) clock rate.
|
|
||||||
* - OSI_CMD_POLL_FOR_MAC_RST
|
|
||||||
* Poll Software reset bit in MAC HW
|
|
||||||
* - OSI_CMD_START_MAC
|
|
||||||
* Start MAC Tx/Rx engine
|
|
||||||
* - OSI_CMD_STOP_MAC
|
|
||||||
* Stop MAC Tx/Rx engine
|
|
||||||
* - OSI_CMD_COMMON_ISR
|
|
||||||
* Common ISR handler
|
|
||||||
* - OSI_CMD_PAD_CALIBRATION
|
|
||||||
* PAD calibration
|
|
||||||
* - OSI_CMD_READ_MMC
|
|
||||||
* invoke function to read actual registers and update
|
|
||||||
* structure variable mmc
|
|
||||||
* - OSI_CMD_GET_MAC_VER
|
|
||||||
* Reading MAC version
|
|
||||||
* arg1_u32 - holds mac version
|
|
||||||
* - OSI_CMD_RESET_MMC
|
|
||||||
* invoke function to reset MMC counter and data
|
|
||||||
* structure
|
|
||||||
* - OSI_CMD_MAC_LB
|
|
||||||
* Configure MAC loopback
|
|
||||||
* - OSI_CMD_FLOW_CTRL
|
|
||||||
* Configure flow control settings
|
|
||||||
* arg1_u32 - Enable or disable flow control settings
|
|
||||||
* - OSI_CMD_SET_MODE
|
|
||||||
* Set Full/Half Duplex mode.
|
|
||||||
* arg1_u32 - mode
|
|
||||||
* - OSI_CMD_SET_SPEED
|
|
||||||
* Set Operating speed
|
|
||||||
* arg1_u32 - Operating speed
|
|
||||||
* - OSI_CMD_L2_FILTER
|
|
||||||
* configure L2 mac filter
|
|
||||||
* l2_filter_struct - OSI filter structure
|
|
||||||
* - OSI_CMD_RXCSUM_OFFLOAD
|
|
||||||
* Configure RX checksum offload in MAC
|
|
||||||
* arg1_u32 - enable(1)/disable(0)
|
|
||||||
* - OSI_CMD_ADJ_FREQ
|
|
||||||
* Adjust frequency
|
|
||||||
* arg6_u32 - Parts per Billion
|
|
||||||
* - OSI_CMD_ADJ_TIME
|
|
||||||
* Adjust MAC time with system time
|
|
||||||
* arg1_u32 - Delta time in nano seconds
|
|
||||||
* - OSI_CMD_CONFIG_PTP
|
|
||||||
* Configure PTP
|
|
||||||
* arg1_u32 - Enable(1) or disable(0) Time Stamping
|
|
||||||
* - OSI_CMD_GET_AVB
|
|
||||||
* Get CBS algo and parameters
|
|
||||||
* avb_struct - osi core avb data structure
|
|
||||||
* - OSI_CMD_SET_AVB
|
|
||||||
* Set CBS algo and parameters
|
|
||||||
* avb_struct - osi core avb data structure
|
|
||||||
* - OSI_CMD_CONFIG_RX_CRC_CHECK
|
|
||||||
* Configure CRC Checking for Received Packets
|
|
||||||
* arg1_u32 - Enable or disable checking of CRC field in
|
|
||||||
* received pkts
|
|
||||||
* - OSI_CMD_UPDATE_VLAN_ID
|
|
||||||
* invoke osi call to update VLAN ID
|
|
||||||
* arg1_u32 - VLAN ID
|
|
||||||
* - OSI_CMD_CONFIG_TXSTATUS
|
|
||||||
* Configure Tx packet status reporting
|
|
||||||
* Enable(1) or disable(0) tx packet status reporting
|
|
||||||
* - OSI_CMD_GET_HW_FEAT
|
|
||||||
* Reading MAC HW features
|
|
||||||
* hw_feat_struct - holds the supported features of the hardware
|
|
||||||
* - OSI_CMD_CONFIG_FW_ERR
|
|
||||||
* Configure forwarding of error packets
|
|
||||||
* arg1_u32 - queue index, Max OSI_EQOS_MAX_NUM_QUEUES
|
|
||||||
* arg2_u32 - FWD error enable(1)/disable(0)
|
|
||||||
* - OSI_CMD_ARP_OFFLOAD
|
|
||||||
* Configure ARP offload in MAC
|
|
||||||
* arg1_u32 - Enable/disable flag
|
|
||||||
* arg7_u8_p - Char array representation of IP address
|
|
||||||
* - OSI_CMD_VLAN_FILTER
|
|
||||||
* OSI call for configuring VLAN filter
|
|
||||||
* vlan_filter - vlan filter structure
|
|
||||||
* - OSI_CMD_CONFIG_EEE
|
|
||||||
* Configure EEE LPI in MAC
|
|
||||||
* arg1_u32 - Enable (1)/disable (0) tx lpi
|
|
||||||
* arg2_u32 - Tx LPI entry timer in usecs upto
|
|
||||||
* OSI_MAX_TX_LPI_TIMER (in steps of 8usec)
|
|
||||||
* - OSI_CMD_L3L4_FILTER
|
|
||||||
* invoke OSI call to add L3/L4
|
|
||||||
* l3l4_filter - l3_l4 filter structure
|
|
||||||
* arg1_u32 - L3 filter (ipv4(0) or ipv6(1))
|
|
||||||
* or L4 filter (tcp(0) or udp(1)
|
|
||||||
* arg2_u32 - filter based dma routing enable(1)
|
|
||||||
* arg3_u32 - dma channel for routing based on filter.
|
|
||||||
* Max OSI_EQOS_MAX_NUM_CHANS.
|
|
||||||
* arg4_u32 - API call for L3 filter(0) or L4 filter(1)
|
|
||||||
* - OSI_CMD_SET_SYSTOHW_TIME
|
|
||||||
* set system to MAC hardware
|
|
||||||
* arg1_u32 - sec
|
|
||||||
* arg1_u32 - nsec
|
|
||||||
* - OSI_CMD_CONFIG_PTP_OFFLOAD
|
|
||||||
* enable/disable PTP offload feature
|
|
||||||
* pto_config - ptp offload structure
|
|
||||||
* - OSI_CMD_PTP_RXQ_ROUTE
|
|
||||||
* rxq routing to secific queue
|
|
||||||
* rxq_route - rxq routing information in structure
|
|
||||||
* - OSI_CMD_CONFIG_FRP
|
|
||||||
* Issue FRP command to HW
|
|
||||||
* frp_cmd - FRP command parameter
|
|
||||||
* - OSI_CMD_CONFIG_RSS
|
|
||||||
* Configure RSS
|
|
||||||
* - OSI_CMD_CONFIG_EST
|
|
||||||
* Configure EST registers and GCL to hw
|
|
||||||
* est - EST configuration structure
|
|
||||||
* - OSI_CMD_CONFIG_FPE
|
|
||||||
* Configuration FPE register and preemptable queue
|
|
||||||
* fpe - FPE configuration structure
|
|
||||||
*
|
|
||||||
* - OSI_CMD_GET_TX_TS
|
|
||||||
* Command to get TX timestamp for PTP packet
|
|
||||||
* ts - OSI core timestamp structure
|
|
||||||
*
|
|
||||||
* - OSI_CMD_FREE_TS
|
|
||||||
* Command to free old timestamp for PTP packet
|
|
||||||
* chan - DMA channel number +1. 0 will be used for onestep
|
|
||||||
*
|
|
||||||
* - OSI_CMD_CAP_TSC_PTP
|
|
||||||
* Capture TSC and PTP time stamp
|
|
||||||
* ptp_tsc_data - output structure with time
|
|
||||||
*
|
|
||||||
* - OSI_CMD_CONF_M2M_TS
|
|
||||||
* Enable/Disable MAC to MAC time sync for Secondary interface
|
|
||||||
* enable_disable - 1 - enable, 0- disable
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] data: void pointer pointing to osi_ioctl
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_hal_handle_ioctl(struct osi_core_priv_data *osi_core,
|
|
||||||
struct osi_ioctl *data);
|
|
||||||
/**
|
|
||||||
* @brief osi_hal_hw_core_init - HW API for EQOS MAC, MTL and common DMA
|
|
||||||
* initialization.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Invokes EQOS MAC, MTL and common DMA register init code.
|
|
||||||
*
|
|
||||||
* @param[in, out] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] tx_fifo_size: OSI core private data structure.
|
|
||||||
* @param[in] rx_fifo_size: OSI core private data structure.
|
|
||||||
*
|
|
||||||
* @pre
|
|
||||||
* - MAC should be out of reset. See osi_poll_for_mac_reset_complete()
|
|
||||||
* for details.
|
|
||||||
* - osi_core->base needs to be filled based on ioremap.
|
|
||||||
* - osi_core->num_mtl_queues needs to be filled.
|
|
||||||
* - osi_core->mtl_queues[qinx] need to be filled.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: ETHERNET_NVETHERNETRM_006
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: No
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_hal_hw_core_init(struct osi_core_priv_data *const osi_core,
|
|
||||||
nveu32_t tx_fifo_size, nveu32_t rx_fifo_size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_hal_hw_core_deinit - HW API for MAC deinitialization.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Stops MAC transmission and reception.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
*
|
|
||||||
* @pre MAC has to be out of reset.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: TODO
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: No
|
|
||||||
* - Run time: No
|
|
||||||
* - De-initialization: Yes
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_hal_hw_core_deinit(struct osi_core_priv_data *const osi_core);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_hal_write_phy_reg - HW API to Write to a PHY register through MAC
|
|
||||||
* over MDIO bus.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Before proceeding for reading for PHY register check whether any MII
|
|
||||||
* operation going on MDIO bus by polling MAC_GMII_BUSY bit.
|
|
||||||
* - Program data into MAC MDIO data register.
|
|
||||||
* - Populate required parameters like phy address, phy register etc,,
|
|
||||||
* in MAC MDIO Address register. write and GMII busy bits needs to be set
|
|
||||||
* in this operation.
|
|
||||||
* - Write into MAC MDIO address register poll for GMII busy for MDIO
|
|
||||||
* operation to complete.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] phyaddr: PHY address (PHY ID) associated with PHY
|
|
||||||
* @param[in] phyreg: Register which needs to be write to PHY.
|
|
||||||
* @param[in] phydata: Data to write to a PHY register.
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: TODO
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval 0 on success
|
|
||||||
* @retval -1 on failure.
|
|
||||||
*/
|
|
||||||
nve32_t osi_hal_write_phy_reg(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t phyaddr, const nveu32_t phyreg,
|
|
||||||
const nveu16_t phydata);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief osi_hal_read_phy_reg - HW API to Read from a PHY register through MAC
|
|
||||||
* over MDIO bus.
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Algorithm:
|
|
||||||
* - Before proceeding for reading for PHY register check whether any MII
|
|
||||||
* operation going on MDIO bus by polling MAC_GMII_BUSY bit.
|
|
||||||
* - Populate required parameters like phy address, phy register etc,,
|
|
||||||
* in program it in MAC MDIO Address register. Read and GMII busy bits
|
|
||||||
* needs to be set in this operation.
|
|
||||||
* - Write into MAC MDIO address register poll for GMII busy for MDIO
|
|
||||||
* operation to complete. After this data will be available at MAC MDIO
|
|
||||||
* data register.
|
|
||||||
*
|
|
||||||
* @param[in] osi_core: OSI core private data structure.
|
|
||||||
* @param[in] phyaddr: PHY address (PHY ID) associated with PHY
|
|
||||||
* @param[in] phyreg: Register which needs to be read from PHY.
|
|
||||||
*
|
|
||||||
* @pre MAC should be init and started. see osi_start_mac()
|
|
||||||
*
|
|
||||||
* @note
|
|
||||||
* Traceability Details:
|
|
||||||
* - SWUD_ID: TODO
|
|
||||||
*
|
|
||||||
* @usage
|
|
||||||
* - Allowed context for the API call
|
|
||||||
* - Interrupt handler: No
|
|
||||||
* - Signal handler: No
|
|
||||||
* - Thread safe: No
|
|
||||||
* - Async/Sync: Sync
|
|
||||||
* - Required Privileges: None
|
|
||||||
* - API Group:
|
|
||||||
* - Initialization: Yes
|
|
||||||
* - Run time: Yes
|
|
||||||
* - De-initialization: No
|
|
||||||
*
|
|
||||||
* @retval data from PHY register on success
|
|
||||||
* @retval -1 on failure
|
|
||||||
*/
|
|
||||||
nve32_t osi_hal_read_phy_reg(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t phyaddr, const nveu32_t phyreg);
|
|
||||||
#endif /* INCLUDED_OSI_CORE_H */
|
#endif /* INCLUDED_OSI_CORE_H */
|
||||||
|
|
||||||
|
|||||||
@@ -271,7 +271,9 @@ static inline nve32_t validate_mac_ver_update_chans(nveu32_t mac_ver,
|
|||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
case OSI_MGBE_MAC_3_10:
|
case OSI_MGBE_MAC_3_10:
|
||||||
|
#ifndef OSI_STRIPPED_LIB
|
||||||
case OSI_MGBE_MAC_4_00:
|
case OSI_MGBE_MAC_4_00:
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
*num_max_chans = OSI_MGBE_MAX_NUM_CHANS;
|
*num_max_chans = OSI_MGBE_MAX_NUM_CHANS;
|
||||||
*l_mac_ver = MAC_CORE_VER_TYPE_MGBE;
|
*l_mac_ver = MAC_CORE_VER_TYPE_MGBE;
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|||||||
@@ -492,6 +492,7 @@ done:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef OSI_STRIPPED_LIB
|
||||||
static inline void config_l2_da_perfect_inverse_match(
|
static inline void config_l2_da_perfect_inverse_match(
|
||||||
struct osi_core_priv_data *osi_core,
|
struct osi_core_priv_data *osi_core,
|
||||||
nveu32_t perfect_inverse_match)
|
nveu32_t perfect_inverse_match)
|
||||||
@@ -506,6 +507,7 @@ static inline void config_l2_da_perfect_inverse_match(
|
|||||||
}
|
}
|
||||||
osi_writela(osi_core, value, ((nveu8_t *)osi_core->base + MAC_PKT_FILTER_REG));
|
osi_writela(osi_core, value, ((nveu8_t *)osi_core->base + MAC_PKT_FILTER_REG));
|
||||||
}
|
}
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
|
||||||
nve32_t hw_config_mac_pkt_filter_reg(struct osi_core_priv_data *const osi_core,
|
nve32_t hw_config_mac_pkt_filter_reg(struct osi_core_priv_data *const osi_core,
|
||||||
const struct osi_filter *filter)
|
const struct osi_filter *filter)
|
||||||
@@ -555,10 +557,13 @@ nve32_t hw_config_mac_pkt_filter_reg(struct osi_core_priv_data *const osi_core,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((filter->oper_mode & OSI_OPER_DIS_L2_DA_INV) != OSI_DISABLE) {
|
if ((filter->oper_mode & OSI_OPER_DIS_L2_DA_INV) != OSI_DISABLE) {
|
||||||
#endif /* !OSI_STRIPPED_LIB */
|
|
||||||
config_l2_da_perfect_inverse_match(osi_core, OSI_PFT_MATCH);
|
config_l2_da_perfect_inverse_match(osi_core, OSI_PFT_MATCH);
|
||||||
#ifndef OSI_STRIPPED_LIB
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
value = osi_readla(osi_core, ((nveu8_t *)osi_core->base + MAC_PKT_FILTER_REG));
|
||||||
|
value &= ~MAC_PFR_DAIF;
|
||||||
|
osi_writela(osi_core, value, ((nveu8_t *)osi_core->base + MAC_PKT_FILTER_REG));
|
||||||
|
|
||||||
#endif /* !OSI_STRIPPED_LIB */
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@@ -574,8 +579,8 @@ nve32_t hw_config_l3_l4_filter_enable(struct osi_core_priv_data *const osi_core,
|
|||||||
/* validate filter_enb_dis argument */
|
/* validate filter_enb_dis argument */
|
||||||
if ((filter_enb_dis != OSI_ENABLE) && (filter_enb_dis != OSI_DISABLE)) {
|
if ((filter_enb_dis != OSI_ENABLE) && (filter_enb_dis != OSI_DISABLE)) {
|
||||||
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
OSI_CORE_ERR(OSI_NULL, OSI_LOG_ARG_INVALID,
|
||||||
"Invalid filter_enb_dis value\n",
|
"Invalid filter_enb_dis value\n",
|
||||||
filter_enb_dis);
|
filter_enb_dis);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
* @brief g_ops - Static core operations array.
|
* @brief g_ops - Static core operations array.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if DRIFT_CAL
|
||||||
/**
|
/**
|
||||||
* @brief Function to validate input arguments of API.
|
* @brief Function to validate input arguments of API.
|
||||||
*
|
*
|
||||||
@@ -61,6 +62,7 @@ static inline nve32_t validate_args(struct osi_core_priv_data *const osi_core,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Function to validate function pointers.
|
* @brief Function to validate function pointers.
|
||||||
@@ -106,29 +108,102 @@ static nve32_t validate_func_ptrs(struct osi_core_priv_data *const osi_core,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_hal_write_phy_reg(struct osi_core_priv_data *const osi_core,
|
/**
|
||||||
const nveu32_t phyaddr, const nveu32_t phyreg,
|
* @brief osi_hal_write_phy_reg - HW API to Write to a PHY register through MAC
|
||||||
const nveu16_t phydata)
|
* over MDIO bus.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - Before proceeding for reading for PHY register check whether any MII
|
||||||
|
* operation going on MDIO bus by polling MAC_GMII_BUSY bit.
|
||||||
|
* - Program data into MAC MDIO data register.
|
||||||
|
* - Populate required parameters like phy address, phy register etc,,
|
||||||
|
* in MAC MDIO Address register. write and GMII busy bits needs to be set
|
||||||
|
* in this operation.
|
||||||
|
* - Write into MAC MDIO address register poll for GMII busy for MDIO
|
||||||
|
* operation to complete.
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] phyaddr: PHY address (PHY ID) associated with PHY
|
||||||
|
* @param[in] phyreg: Register which needs to be write to PHY.
|
||||||
|
* @param[in] phydata: Data to write to a PHY register.
|
||||||
|
*
|
||||||
|
* @pre MAC should be init and started. see osi_start_mac()
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: TODO
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: Yes
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
|
*/
|
||||||
|
static nve32_t osi_hal_write_phy_reg(struct osi_core_priv_data *const osi_core,
|
||||||
|
const nveu32_t phyaddr, const nveu32_t phyreg,
|
||||||
|
const nveu16_t phydata)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return l_core->ops_p->write_phy_reg(osi_core, phyaddr, phyreg, phydata);
|
return l_core->ops_p->write_phy_reg(osi_core, phyaddr, phyreg, phydata);
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_hal_read_phy_reg(struct osi_core_priv_data *const osi_core,
|
/**
|
||||||
const nveu32_t phyaddr, const nveu32_t phyreg)
|
* @brief osi_hal_read_phy_reg - HW API to Read from a PHY register through MAC
|
||||||
|
* over MDIO bus.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - Before proceeding for reading for PHY register check whether any MII
|
||||||
|
* operation going on MDIO bus by polling MAC_GMII_BUSY bit.
|
||||||
|
* - Populate required parameters like phy address, phy register etc,,
|
||||||
|
* in program it in MAC MDIO Address register. Read and GMII busy bits
|
||||||
|
* needs to be set in this operation.
|
||||||
|
* - Write into MAC MDIO address register poll for GMII busy for MDIO
|
||||||
|
* operation to complete. After this data will be available at MAC MDIO
|
||||||
|
* data register.
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] phyaddr: PHY address (PHY ID) associated with PHY
|
||||||
|
* @param[in] phyreg: Register which needs to be read from PHY.
|
||||||
|
*
|
||||||
|
* @pre MAC should be init and started. see osi_start_mac()
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: TODO
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: Yes
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval data from PHY register on success
|
||||||
|
* @retval -1 on failure
|
||||||
|
*/
|
||||||
|
static nve32_t osi_hal_read_phy_reg(struct osi_core_priv_data *const osi_core,
|
||||||
|
const nveu32_t phyaddr, const nveu32_t phyreg)
|
||||||
|
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return l_core->ops_p->read_phy_reg(osi_core, phyaddr, phyreg);
|
return l_core->ops_p->read_phy_reg(osi_core, phyaddr, phyreg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -210,16 +285,12 @@ static inline void init_vlan_filters(struct osi_core_priv_data *const osi_core)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nve32_t osi_hal_hw_core_init(struct osi_core_priv_data *const osi_core,
|
static nve32_t osi_hal_hw_core_init(struct osi_core_priv_data *const osi_core,
|
||||||
nveu32_t tx_fifo_size, nveu32_t rx_fifo_size)
|
nveu32_t tx_fifo_size, nveu32_t rx_fifo_size)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
nve32_t ret;
|
nve32_t ret;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef OSI_STRIPPED_LIB
|
#ifndef OSI_STRIPPED_LIB
|
||||||
init_vlan_filters(osi_core);
|
init_vlan_filters(osi_core);
|
||||||
|
|
||||||
@@ -240,14 +311,40 @@ nve32_t osi_hal_hw_core_init(struct osi_core_priv_data *const osi_core,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_hal_hw_core_deinit(struct osi_core_priv_data *const osi_core)
|
/**
|
||||||
|
* @brief osi_hal_hw_core_deinit - HW API for MAC deinitialization.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - Stops MAC transmission and reception.
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
*
|
||||||
|
* @pre MAC has to be out of reset.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: TODO
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: No
|
||||||
|
* - Run time: No
|
||||||
|
* - De-initialization: Yes
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
|
*/
|
||||||
|
static nve32_t osi_hal_hw_core_deinit(struct osi_core_priv_data *const osi_core)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Stop the MAC */
|
/* Stop the MAC */
|
||||||
hw_stop_mac(osi_core);
|
hw_stop_mac(osi_core);
|
||||||
|
|
||||||
@@ -274,17 +371,149 @@ nve32_t osi_hal_hw_core_deinit(struct osi_core_priv_data *const osi_core)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_common_isr(struct osi_core_priv_data *const osi_core)
|
/**
|
||||||
|
* @brief div_u64 - Calls a function which returns quotient
|
||||||
|
*
|
||||||
|
* @param[in] dividend: Dividend
|
||||||
|
* @param[in] divisor: Divisor
|
||||||
|
*
|
||||||
|
* @pre MAC IP should be out of reset and need to be initialized as the
|
||||||
|
* requirements.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* API Group:
|
||||||
|
* - Initialization: No
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
* @returns Quotient
|
||||||
|
*/
|
||||||
|
static inline nveu64_t div_u64(nveu64_t dividend,
|
||||||
|
nveu64_t divisor)
|
||||||
{
|
{
|
||||||
|
nveu64_t remain;
|
||||||
|
|
||||||
|
return div_u64_rem(dividend, divisor, &remain);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief osi_ptp_configuration - Configure PTP
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - Configure the PTP registers that are required for PTP.
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] enable: Enable or disable Time Stamping. 0: Disable 1: Enable
|
||||||
|
*
|
||||||
|
* @pre
|
||||||
|
* - MAC should be init and started. see osi_start_mac()
|
||||||
|
* - osi->ptp_config.ptp_filter need to be filled accordingly to the
|
||||||
|
* filter that need to be set for PTP packets. Please check osi_ptp_config
|
||||||
|
* structure declaration on the bit fields that need to be filled.
|
||||||
|
* - osi->ptp_config.ptp_clock need to be filled with the ptp system clk.
|
||||||
|
* Currently it is set to 62500000Hz.
|
||||||
|
* - osi->ptp_config.ptp_ref_clk_rate need to be filled with the ptp
|
||||||
|
* reference clock that platform supports.
|
||||||
|
* - osi->ptp_config.sec need to be filled with current time of seconds
|
||||||
|
* - osi->ptp_config.nsec need to be filled with current time of nseconds
|
||||||
|
* - osi->base need to be filled with the ioremapped base address
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: ETHERNET_NVETHERNETRM_021
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: Yes
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
|
*/
|
||||||
|
static nve32_t osi_ptp_configuration(struct osi_core_priv_data *const osi_core,
|
||||||
|
OSI_UNUSED const nveu32_t enable)
|
||||||
|
{
|
||||||
|
#ifndef OSI_STRIPPED_LIB
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
nve32_t ret = 0;
|
||||||
|
nveu64_t temp = 0, temp1 = 0, temp2 = 0;
|
||||||
|
nveu64_t ssinc = 0;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
#ifndef OSI_STRIPPED_LIB
|
||||||
return -1;
|
if (enable == OSI_DISABLE) {
|
||||||
|
/* disable hw time stamping */
|
||||||
|
/* Program MAC_Timestamp_Control Register */
|
||||||
|
hw_config_tscr(osi_core, OSI_DISABLE);
|
||||||
|
/* Disable PTP RX Queue routing */
|
||||||
|
ret = l_core->ops_p->config_ptp_rxq(osi_core,
|
||||||
|
osi_core->ptp_config.ptp_rx_queue,
|
||||||
|
OSI_DISABLE);
|
||||||
|
} else {
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
/* Program MAC_Timestamp_Control Register */
|
||||||
|
hw_config_tscr(osi_core, osi_core->ptp_config.ptp_filter);
|
||||||
|
|
||||||
|
/* Program Sub Second Increment Register */
|
||||||
|
hw_config_ssir(osi_core);
|
||||||
|
|
||||||
|
/* formula for calculating addend value is
|
||||||
|
* TSAR = (2^32 * 1000) / (ptp_ref_clk_rate in MHz * SSINC)
|
||||||
|
* 2^x * y == (y << x), hence
|
||||||
|
* 2^32 * 1000 == (1000 << 32)
|
||||||
|
* so addend = (2^32 * 1000)/(ptp_ref_clk_rate in MHZ * SSINC);
|
||||||
|
*/
|
||||||
|
ssinc = OSI_PTP_SSINC_4;
|
||||||
|
if (osi_core->mac_ver == OSI_EQOS_MAC_5_30) {
|
||||||
|
ssinc = OSI_PTP_SSINC_6;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = ((nveu64_t)1000 << 32);
|
||||||
|
temp = (nveu64_t)temp * 1000000U;
|
||||||
|
|
||||||
|
temp1 = div_u64(temp,
|
||||||
|
(nveu64_t)osi_core->ptp_config.ptp_ref_clk_rate);
|
||||||
|
|
||||||
|
temp2 = div_u64(temp1, (nveu64_t)ssinc);
|
||||||
|
|
||||||
|
if (temp2 < UINT_MAX) {
|
||||||
|
osi_core->default_addend = (nveu32_t)temp2;
|
||||||
|
} else {
|
||||||
|
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
||||||
|
"core: temp2 >= UINT_MAX\n", 0ULL);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Program addend value */
|
||||||
|
ret = hw_config_addend(osi_core, osi_core->default_addend);
|
||||||
|
|
||||||
|
/* Set current time */
|
||||||
|
if (ret == 0) {
|
||||||
|
ret = hw_set_systime_to_mac(osi_core,
|
||||||
|
osi_core->ptp_config.sec,
|
||||||
|
osi_core->ptp_config.nsec);
|
||||||
|
#ifndef OSI_STRIPPED_LIB
|
||||||
|
if (ret == 0) {
|
||||||
|
/* Enable PTP RX Queue routing */
|
||||||
|
ret = l_core->ops_p->config_ptp_rxq(osi_core,
|
||||||
|
osi_core->ptp_config.ptp_rx_queue,
|
||||||
|
OSI_ENABLE);
|
||||||
|
}
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
}
|
||||||
|
#ifndef OSI_STRIPPED_LIB
|
||||||
}
|
}
|
||||||
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
|
||||||
l_core->ops_p->handle_common_intr(osi_core);
|
return ret;
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef OSI_STRIPPED_LIB
|
#ifndef OSI_STRIPPED_LIB
|
||||||
@@ -369,22 +598,46 @@ static nve32_t conf_ptp_offload(struct osi_core_priv_data *const osi_core,
|
|||||||
}
|
}
|
||||||
#endif /* !OSI_STRIPPED_LIB */
|
#endif /* !OSI_STRIPPED_LIB */
|
||||||
|
|
||||||
nve32_t osi_l2_filter(struct osi_core_priv_data *const osi_core,
|
/**
|
||||||
const struct osi_filter *filter)
|
* @brief osi_l2_filter - configure L2 mac filter.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - This sequence is used to configure MAC in different packet
|
||||||
|
* processing modes like promiscuous, multicast, unicast,
|
||||||
|
* hash unicast/multicast and perfect/inverse matching for L2 DA
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] filter: OSI filter structure.
|
||||||
|
*
|
||||||
|
* @pre
|
||||||
|
* - MAC should be initialized and started. see osi_start_mac()
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: ETHERNET_NVETHERNETRM_018
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: Yes
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
|
*/
|
||||||
|
static nve32_t osi_l2_filter(struct osi_core_priv_data *const osi_core,
|
||||||
|
const struct osi_filter *filter)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
nve32_t ret;
|
nve32_t ret;
|
||||||
|
|
||||||
if ((validate_args(osi_core, l_core) < 0) || (filter == OSI_NULL)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filter == OSI_NULL) {
|
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
|
||||||
"CORE: filter is NULL\n", 0ULL);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = hw_config_mac_pkt_filter_reg(osi_core, filter);
|
ret = hw_config_mac_pkt_filter_reg(osi_core, filter);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_HW_FAIL,
|
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_HW_FAIL,
|
||||||
@@ -534,10 +787,6 @@ static nve32_t osi_l3l4_filter(struct osi_core_priv_data *const osi_core,
|
|||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
nve32_t ret = -1;
|
nve32_t ret = -1;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((dma_routing_enable == OSI_ENABLE) &&
|
if ((dma_routing_enable == OSI_ENABLE) &&
|
||||||
(osi_core->dcs_en != OSI_ENABLE)) {
|
(osi_core->dcs_en != OSI_ENABLE)) {
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
||||||
@@ -571,59 +820,41 @@ static nve32_t osi_l3l4_filter(struct osi_core_priv_data *const osi_core,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_config_rxcsum_offload(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t enable)
|
|
||||||
{
|
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hw_config_rxcsum_offload(osi_core, enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
nve32_t osi_set_systime_to_mac(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t sec, const nveu32_t nsec)
|
|
||||||
{
|
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hw_set_systime_to_mac(osi_core, sec, nsec);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief div_u64 - Calls a function which returns quotient
|
* @brief osi_adjust_freq - Adjust frequency
|
||||||
*
|
|
||||||
* @param[in] dividend: Dividend
|
|
||||||
* @param[in] divisor: Divisor
|
|
||||||
*
|
|
||||||
* @pre MAC IP should be out of reset and need to be initialized as the
|
|
||||||
* requirements.
|
|
||||||
*
|
|
||||||
*
|
*
|
||||||
* @note
|
* @note
|
||||||
* API Group:
|
* Algorithm:
|
||||||
* - Initialization: No
|
* - Adjust a drift of +/- comp nanoseconds per second.
|
||||||
* - Run time: Yes
|
* "Compensation" is the difference in frequency between
|
||||||
* - De-initialization: No
|
* the master and slave clocks in Parts Per Billion.
|
||||||
* @returns Quotient
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] ppb: Parts per Billion
|
||||||
|
*
|
||||||
|
* @pre MAC should be init and started. see osi_start_mac()
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
* - SWUD_ID: ETHERNET_NVETHERNETRM_023
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: No
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
*/
|
*/
|
||||||
static inline nveu64_t div_u64(nveu64_t dividend,
|
static nve32_t osi_adjust_freq(struct osi_core_priv_data *const osi_core, nve32_t ppb)
|
||||||
nveu64_t divisor)
|
|
||||||
{
|
{
|
||||||
nveu64_t remain;
|
|
||||||
|
|
||||||
return div_u64_rem(dividend, divisor, &remain);
|
|
||||||
}
|
|
||||||
|
|
||||||
nve32_t osi_adjust_freq(struct osi_core_priv_data *const osi_core, nve32_t ppb)
|
|
||||||
{
|
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
|
||||||
|
|
||||||
nveu64_t adj;
|
nveu64_t adj;
|
||||||
nveu64_t temp;
|
nveu64_t temp;
|
||||||
nveu32_t diff = 0;
|
nveu32_t diff = 0;
|
||||||
@@ -632,10 +863,6 @@ nve32_t osi_adjust_freq(struct osi_core_priv_data *const osi_core, nve32_t ppb)
|
|||||||
nve32_t ret = -1;
|
nve32_t ret = -1;
|
||||||
nve32_t ppb1 = ppb;
|
nve32_t ppb1 = ppb;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
addend = osi_core->default_addend;
|
addend = osi_core->default_addend;
|
||||||
if (ppb1 < 0) {
|
if (ppb1 < 0) {
|
||||||
neg_adj = 1U;
|
neg_adj = 1U;
|
||||||
@@ -680,8 +907,8 @@ nve32_t osi_adjust_freq(struct osi_core_priv_data *const osi_core, nve32_t ppb)
|
|||||||
return hw_config_addend(osi_core, addend);
|
return hw_config_addend(osi_core, addend);
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_adjust_time(struct osi_core_priv_data *const osi_core,
|
static nve32_t osi_adjust_time(struct osi_core_priv_data *const osi_core,
|
||||||
nvel64_t nsec_delta)
|
nvel64_t nsec_delta)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
nveu32_t neg_adj = 0;
|
nveu32_t neg_adj = 0;
|
||||||
@@ -692,10 +919,6 @@ nve32_t osi_adjust_time(struct osi_core_priv_data *const osi_core,
|
|||||||
nve32_t ret = -1;
|
nve32_t ret = -1;
|
||||||
nvel64_t nsec_delta1 = nsec_delta;
|
nvel64_t nsec_delta1 = nsec_delta;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nsec_delta1 < 0) {
|
if (nsec_delta1 < 0) {
|
||||||
neg_adj = 1;
|
neg_adj = 1;
|
||||||
nsec_delta1 = -nsec_delta1;
|
nsec_delta1 = -nsec_delta1;
|
||||||
@@ -725,112 +948,10 @@ nve32_t osi_adjust_time(struct osi_core_priv_data *const osi_core,
|
|||||||
osi_core->ptp_config.one_nsec_accuracy);
|
osi_core->ptp_config.one_nsec_accuracy);
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_ptp_configuration(struct osi_core_priv_data *const osi_core,
|
|
||||||
const nveu32_t enable)
|
|
||||||
{
|
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
|
||||||
nve32_t ret = 0;
|
|
||||||
nveu64_t temp = 0, temp1 = 0, temp2 = 0;
|
|
||||||
nveu64_t ssinc = 0;
|
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enable == OSI_DISABLE) {
|
|
||||||
/* disable hw time stamping */
|
|
||||||
/* Program MAC_Timestamp_Control Register */
|
|
||||||
hw_config_tscr(osi_core, OSI_DISABLE);
|
|
||||||
#ifndef OSI_STRIPPED_LIB
|
|
||||||
/* Disable PTP RX Queue routing */
|
|
||||||
ret = l_core->ops_p->config_ptp_rxq(osi_core,
|
|
||||||
osi_core->ptp_config.ptp_rx_queue,
|
|
||||||
OSI_DISABLE);
|
|
||||||
#endif /* !OSI_STRIPPED_LIB */
|
|
||||||
} else {
|
|
||||||
/* Program MAC_Timestamp_Control Register */
|
|
||||||
hw_config_tscr(osi_core,
|
|
||||||
osi_core->ptp_config.ptp_filter);
|
|
||||||
|
|
||||||
/* Program Sub Second Increment Register */
|
|
||||||
hw_config_ssir(osi_core);
|
|
||||||
|
|
||||||
/* formula for calculating addend value is
|
|
||||||
* TSAR = (2^32 * 1000) / (ptp_ref_clk_rate in MHz * SSINC)
|
|
||||||
* 2^x * y == (y << x), hence
|
|
||||||
* 2^32 * 1000 == (1000 << 32)
|
|
||||||
* so addend = (2^32 * 1000)/(ptp_ref_clk_rate in MHZ * SSINC);
|
|
||||||
*/
|
|
||||||
ssinc = OSI_PTP_SSINC_4;
|
|
||||||
if (osi_core->mac_ver == OSI_EQOS_MAC_5_30) {
|
|
||||||
ssinc = OSI_PTP_SSINC_6;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((nveu64_t)1000 << 32);
|
|
||||||
temp = (nveu64_t)temp * 1000000U;
|
|
||||||
|
|
||||||
temp1 = div_u64(temp,
|
|
||||||
(nveu64_t)osi_core->ptp_config.ptp_ref_clk_rate);
|
|
||||||
|
|
||||||
temp2 = div_u64(temp1, (nveu64_t)ssinc);
|
|
||||||
|
|
||||||
if (temp2 < UINT_MAX) {
|
|
||||||
osi_core->default_addend = (nveu32_t)temp2;
|
|
||||||
} else {
|
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
|
||||||
"core: temp2 >= UINT_MAX\n", 0ULL);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Program addend value */
|
|
||||||
ret = hw_config_addend(osi_core, osi_core->default_addend);
|
|
||||||
|
|
||||||
/* Set current time */
|
|
||||||
if (ret == 0) {
|
|
||||||
ret = hw_set_systime_to_mac(osi_core,
|
|
||||||
osi_core->ptp_config.sec,
|
|
||||||
osi_core->ptp_config.nsec);
|
|
||||||
if (ret == 0) {
|
|
||||||
#ifndef OSI_STRIPPED_LIB
|
|
||||||
/* Enable PTP RX Queue routing */
|
|
||||||
ret = l_core->ops_p->config_ptp_rxq(osi_core,
|
|
||||||
osi_core->ptp_config.ptp_rx_queue,
|
|
||||||
OSI_ENABLE);
|
|
||||||
#endif /* !OSI_STRIPPED_LIB */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
nve32_t osi_read_mmc(struct osi_core_priv_data *const osi_core)
|
|
||||||
{
|
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
l_core->ops_p->read_mmc(osi_core);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static nve32_t osi_get_mac_version(struct osi_core_priv_data *const osi_core, nveu32_t *mac_ver)
|
static nve32_t osi_get_mac_version(struct osi_core_priv_data *const osi_core, nveu32_t *mac_ver)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mac_ver == OSI_NULL) {
|
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
|
||||||
"mac_ver is NULL\n", 0ULL);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
*mac_ver = osi_readla(osi_core, ((nveu8_t *)osi_core->base + (nve32_t)MAC_VERSION)) &
|
*mac_ver = osi_readla(osi_core, ((nveu8_t *)osi_core->base + (nve32_t)MAC_VERSION)) &
|
||||||
MAC_VERSION_SNVER_MASK;
|
MAC_VERSION_SNVER_MASK;
|
||||||
|
|
||||||
@@ -1724,8 +1845,173 @@ static void store_l2_filter(struct osi_core_priv_data *osi_core,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nve32_t osi_hal_handle_ioctl(struct osi_core_priv_data *osi_core,
|
/**
|
||||||
struct osi_ioctl *data)
|
* @brief osi_hal_handle_ioctl - HW function API to handle runtime command
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Algorithm:
|
||||||
|
* - Handle runtime commands to OSI
|
||||||
|
* - OSI_CMD_MDC_CONFIG
|
||||||
|
* Derive MDC clock based on provided AXI_CBB clk
|
||||||
|
* arg1_u32 - CSR (AXI CBB) clock rate.
|
||||||
|
* - OSI_CMD_RESTORE_REGISTER
|
||||||
|
* Restore backup of MAC MMIO address space
|
||||||
|
* - OSI_CMD_POLL_FOR_MAC_RST
|
||||||
|
* Poll Software reset bit in MAC HW
|
||||||
|
* - OSI_CMD_START_MAC
|
||||||
|
* Start MAC Tx/Rx engine
|
||||||
|
* - OSI_CMD_STOP_MAC
|
||||||
|
* Stop MAC Tx/Rx engine
|
||||||
|
* - OSI_CMD_COMMON_ISR
|
||||||
|
* Common ISR handler
|
||||||
|
* - OSI_CMD_PAD_CALIBRATION
|
||||||
|
* PAD calibration
|
||||||
|
* - OSI_CMD_READ_MMC
|
||||||
|
* invoke function to read actual registers and update
|
||||||
|
* structure variable mmc
|
||||||
|
* - OSI_CMD_GET_MAC_VER
|
||||||
|
* Reading MAC version
|
||||||
|
* arg1_u32 - holds mac version
|
||||||
|
* - OSI_CMD_VALIDATE_CORE_REG
|
||||||
|
* Read-validate HW registers for func safety
|
||||||
|
* - OSI_CMD_RESET_MMC
|
||||||
|
* invoke function to reset MMC counter and data
|
||||||
|
* structure
|
||||||
|
* - OSI_CMD_SAVE_REGISTER
|
||||||
|
* Take backup of MAC MMIO address space
|
||||||
|
* - OSI_CMD_MAC_LB
|
||||||
|
* Configure MAC loopback
|
||||||
|
* - OSI_CMD_FLOW_CTRL
|
||||||
|
* Configure flow control settings
|
||||||
|
* arg1_u32 - Enable or disable flow control settings
|
||||||
|
* - OSI_CMD_SET_MODE
|
||||||
|
* Set Full/Half Duplex mode.
|
||||||
|
* arg1_u32 - mode
|
||||||
|
* - OSI_CMD_SET_SPEED
|
||||||
|
* Set Operating speed
|
||||||
|
* arg1_u32 - Operating speed
|
||||||
|
* - OSI_CMD_L2_FILTER
|
||||||
|
* configure L2 mac filter
|
||||||
|
* l2_filter_struct - OSI filter structure
|
||||||
|
* - OSI_CMD_RXCSUM_OFFLOAD
|
||||||
|
* Configure RX checksum offload in MAC
|
||||||
|
* arg1_u32 - enable(1)/disable(0)
|
||||||
|
* - OSI_CMD_ADJ_FREQ
|
||||||
|
* Adjust frequency
|
||||||
|
* arg6_u32 - Parts per Billion
|
||||||
|
* - OSI_CMD_ADJ_TIME
|
||||||
|
* Adjust MAC time with system time
|
||||||
|
* arg1_u32 - Delta time in nano seconds
|
||||||
|
* - OSI_CMD_CONFIG_PTP
|
||||||
|
* Configure PTP
|
||||||
|
* arg1_u32 - Enable(1) or disable(0) Time Stamping
|
||||||
|
* - OSI_CMD_GET_AVB
|
||||||
|
* Get CBS algo and parameters
|
||||||
|
* avb_struct - osi core avb data structure
|
||||||
|
* - OSI_CMD_SET_AVB
|
||||||
|
* Set CBS algo and parameters
|
||||||
|
* avb_struct - osi core avb data structure
|
||||||
|
* - OSI_CMD_CONFIG_RX_CRC_CHECK
|
||||||
|
* Configure CRC Checking for Received Packets
|
||||||
|
* arg1_u32 - Enable or disable checking of CRC field in
|
||||||
|
* received pkts
|
||||||
|
* - OSI_CMD_UPDATE_VLAN_ID
|
||||||
|
* invoke osi call to update VLAN ID
|
||||||
|
* arg1_u32 - VLAN ID
|
||||||
|
* - OSI_CMD_CONFIG_TXSTATUS
|
||||||
|
* Configure Tx packet status reporting
|
||||||
|
* Enable(1) or disable(0) tx packet status reporting
|
||||||
|
* - OSI_CMD_GET_HW_FEAT
|
||||||
|
* Reading MAC HW features
|
||||||
|
* hw_feat_struct - holds the supported features of the hardware
|
||||||
|
* - OSI_CMD_CONFIG_FW_ERR
|
||||||
|
* Configure forwarding of error packets
|
||||||
|
* arg1_u32 - queue index, Max OSI_EQOS_MAX_NUM_QUEUES
|
||||||
|
* arg2_u32 - FWD error enable(1)/disable(0)
|
||||||
|
* - OSI_CMD_ARP_OFFLOAD
|
||||||
|
* Configure ARP offload in MAC
|
||||||
|
* arg1_u32 - Enable/disable flag
|
||||||
|
* arg7_u8_p - Char array representation of IP address
|
||||||
|
* - OSI_CMD_VLAN_FILTER
|
||||||
|
* OSI call for configuring VLAN filter
|
||||||
|
* vlan_filter - vlan filter structure
|
||||||
|
* - OSI_CMD_CONFIG_EEE
|
||||||
|
* Configure EEE LPI in MAC
|
||||||
|
* arg1_u32 - Enable (1)/disable (0) tx lpi
|
||||||
|
* arg2_u32 - Tx LPI entry timer in usecs upto
|
||||||
|
* OSI_MAX_TX_LPI_TIMER (in steps of 8usec)
|
||||||
|
* - OSI_CMD_L3L4_FILTER
|
||||||
|
* invoke OSI call to add L3/L4
|
||||||
|
* l3l4_filter - l3_l4 filter structure
|
||||||
|
* arg1_u32 - L3 filter (ipv4(0) or ipv6(1))
|
||||||
|
* or L4 filter (tcp(0) or udp(1)
|
||||||
|
* arg2_u32 - filter based dma routing enable(1)
|
||||||
|
* arg3_u32 - dma channel for routing based on filter.
|
||||||
|
* Max OSI_EQOS_MAX_NUM_CHANS.
|
||||||
|
* arg4_u32 - API call for L3 filter(0) or L4 filter(1)
|
||||||
|
* - OSI_CMD_SET_SYSTOHW_TIME
|
||||||
|
* set system to MAC hardware
|
||||||
|
* arg1_u32 - sec
|
||||||
|
* arg1_u32 - nsec
|
||||||
|
* - OSI_CMD_CONFIG_PTP_OFFLOAD
|
||||||
|
* enable/disable PTP offload feature
|
||||||
|
* pto_config - ptp offload structure
|
||||||
|
* - OSI_CMD_PTP_RXQ_ROUTE
|
||||||
|
* rxq routing to secific queue
|
||||||
|
* rxq_route - rxq routing information in structure
|
||||||
|
* - OSI_CMD_CONFIG_FRP
|
||||||
|
* Issue FRP command to HW
|
||||||
|
* frp_cmd - FRP command parameter
|
||||||
|
* - OSI_CMD_CONFIG_RSS
|
||||||
|
* Configure RSS
|
||||||
|
* - OSI_CMD_CONFIG_EST
|
||||||
|
* Configure EST registers and GCL to hw
|
||||||
|
* est - EST configuration structure
|
||||||
|
* - OSI_CMD_CONFIG_FPE
|
||||||
|
* Configuration FPE register and preemptable queue
|
||||||
|
* fpe - FPE configuration structure
|
||||||
|
*
|
||||||
|
* - OSI_CMD_GET_TX_TS
|
||||||
|
* Command to get TX timestamp for PTP packet
|
||||||
|
* ts - OSI core timestamp structure
|
||||||
|
*
|
||||||
|
* - OSI_CMD_FREE_TS
|
||||||
|
* Command to free old timestamp for PTP packet
|
||||||
|
* chan - DMA channel number +1. 0 will be used for onestep
|
||||||
|
*
|
||||||
|
* - OSI_CMD_CAP_TSC_PTP
|
||||||
|
* Capture TSC and PTP time stamp
|
||||||
|
* ptp_tsc_data - output structure with time
|
||||||
|
*
|
||||||
|
* - OSI_CMD_CONF_M2M_TS
|
||||||
|
* Enable/Disable MAC to MAC time sync for Secondary interface
|
||||||
|
* enable_disable - 1 - enable, 0- disable
|
||||||
|
*
|
||||||
|
* @param[in] osi_core: OSI core private data structure.
|
||||||
|
* @param[in] data: void pointer pointing to osi_ioctl
|
||||||
|
*
|
||||||
|
* @pre MAC should be init and started. see osi_start_mac()
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* Traceability Details:
|
||||||
|
*
|
||||||
|
* @usage
|
||||||
|
* - Allowed context for the API call
|
||||||
|
* - Interrupt handler: No
|
||||||
|
* - Signal handler: No
|
||||||
|
* - Thread safe: No
|
||||||
|
* - Async/Sync: Sync
|
||||||
|
* - Required Privileges: None
|
||||||
|
* - API Group:
|
||||||
|
* - Initialization: No
|
||||||
|
* - Run time: Yes
|
||||||
|
* - De-initialization: No
|
||||||
|
*
|
||||||
|
* @retval 0 on success
|
||||||
|
* @retval -1 on failure.
|
||||||
|
*/
|
||||||
|
static nve32_t osi_hal_handle_ioctl(struct osi_core_priv_data *osi_core,
|
||||||
|
struct osi_ioctl *data)
|
||||||
{
|
{
|
||||||
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
struct core_local *l_core = (struct core_local *)(void *)osi_core;
|
||||||
const struct core_ops *ops_p;
|
const struct core_ops *ops_p;
|
||||||
@@ -1742,20 +2028,8 @@ nve32_t osi_hal_handle_ioctl(struct osi_core_priv_data *osi_core,
|
|||||||
nvel64_t secondary_time;
|
nvel64_t secondary_time;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (validate_args(osi_core, l_core) < 0) {
|
|
||||||
ret = -1;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
ops_p = l_core->ops_p;
|
ops_p = l_core->ops_p;
|
||||||
|
|
||||||
if (data == OSI_NULL) {
|
|
||||||
OSI_CORE_ERR(osi_core->osd, OSI_LOG_ARG_INVALID,
|
|
||||||
"CORE: Invalid argument\n", 0ULL);
|
|
||||||
ret = -1;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (data->cmd) {
|
switch (data->cmd) {
|
||||||
case OSI_CMD_L3L4_FILTER:
|
case OSI_CMD_L3L4_FILTER:
|
||||||
ret = osi_l3l4_filter(osi_core, &data->l3l4_filter,
|
ret = osi_l3l4_filter(osi_core, &data->l3l4_filter,
|
||||||
@@ -2232,7 +2506,6 @@ nve32_t osi_hal_handle_ioctl(struct osi_core_priv_data *osi_core,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user