/* qav_qbv.h - Wind River 802.1Qav and 802.1Qbv library */ /* * Copyright (c) 2016-2017 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. */ /* modification history -------------------- 05sep16,xxy Init version. */ #ifndef __INCqav_qbvh #define __INCqav_qbvh /* **************************************************************************** * 1 DESCRIPTION **************************************************************************** * Public header file for 802.1Qav and 802.1Qbv. */ /* DESCRIPTION This library contains the APIs provided by the Wind River implementation of 802.1Qav and 802.1Qbv. INCLUDE FILES: qav_qbv.h */ /* **************************************************************************** * 2 CONFIGURATION **************************************************************************** */ /* **************************************************************************** * 3 INCLUDE FILES **************************************************************************** */ /* typedef struct timespec */ #include #ifdef __cplusplus extern "C" { #endif /* **************************************************************************** * 4 DEFINES **************************************************************************** */ /* *=========================================================================== * release *=========================================================================== */ #define QAVQBV_RELEASE 70001 /* **************************************************************************** * 5 TYPES **************************************************************************** */ /* **************************************************************************** * 6 PUBLIC FUNCTIONS **************************************************************************** */ /******************************************************************************* * * tsnQbvTimerCycleCreate - create a QBV timer cycle * * This function creates a QBV timer cycle bound to a specific Ethernet physical * device. * * * Parameters: * \is * \i * A pointer to the Ethernet device name. * \i * Ethernet device index. * \i * A pointer to the absolute time (according to the 1588 clock) when the QBV cycle * comes into effect. The 1588 clock time can be obtained by calling * muxIoctl(ethCookie, EIOCG1588SYSTIM, (void *)&ts). If this parameter is * zero, or less than the current time, the QBV cycle comes into effect * immediately. If this parameter is a future time, tsnQbvMuxSend() has no effect * until the cycle starts. * \i * Length of time for the cycle. The units are us. * \ie * * RETURNS: \is * \i 'cycle ID' * if successful. * \i 'ERROR' * if unsuccessful. * \ie * * ERRNO: * * * SYNOPSIS * int tsnQbvTimerCycleCreate * ( * char *pName, * int index, * struct timespec *cycleStart, * size_t cycleLen * ) * */ int tsnQbvTimerCycleCreate ( char * pName, int index, struct timespec * cycleStart, size_t cycleLen ); /******************************************************************************* * * tsnQbvTimeSlotAdd - add a time slot to the timer cycle of the QBV * * This function adds a time slot to the timer cycle of the QBV. cycleId is the * return value of the tsnQbvTimerCycleCreate( ) function. slotId is a unique, * user-assigned value. * * Parameters: * \is * \i * ID for the cycle. This value is returned by tsnQbvTimerCycleCreate(). * \i * Time slot ID. This value is a unique, user-assigned value. * \i * Offset to the start boundary for each cycle. The unit for this offset is us. * \i * Length of the time slot. The unit for this length is us. * \ie * * RETURNS: \is * \i 'OK' * if successful. * \i 'ERROR' * if unsuccessful. * \ie * * ERRNO: * * * SYNOPSIS * STATUS tsnQbvTimeSlotAdd * ( * int cycleId, * int slotId, * int slotStart, * size_t slotLen * ) */ STATUS tsnQbvTimeSlotAdd ( int cycleId, int slotId, int slotStart, size_t slotLen ); /******************************************************************************* * * tsnQbvTimeSlotDelete - delete a time slot from the timer cycle of the QBV * * This function deletes a time slot from the timer cycle of the QBV. * * Parameters: * \is * \i * ID for the cycle. This value is returned by tsnQbvTimerCycleCreate(). * \i * Time slot ID. This value is the unique, user-assigned value that was passed * to tsnQbvTimeSlotAdd. * \ie * * RETURNS: \is * \i 'OK' * if successful. * \i 'ERROR' * if unsuccessful. * \ie * * ERRNO: * * SYNOPSIS * STATUS tsnQbvTimeSlotDelete * ( * int cycleId, * int slotId * ) * */ STATUS tsnQbvTimeSlotDelete ( int cycleId, int slotId ); /******************************************************************************* * * tsnQbvMuxSend - send an Ethernet packet by TSN QBV mux * * This function sends an Ethernet packet by TSN QBV mux. The cycleId is the * return value of the tsnQbvTimerCycleCreate( ) function. The cycleOffset is * the number of additional cycles to be added to the current running cycles. * If the cycleOffset is zero, the TSN-scheduled send is launched in the next * cycle adjacent to the current running cycle. The cycleOffset is used to * ensure that the TSN-scheduled send is launched in a future time. Because * it is limited by the NIC, the value of cycleOffset should not be a large * value. For example, the Intel I210 chip can only hold launch time for a * maximum of 0.5 seconds. Therefore, the value of cycleOffset is calculated * as follows: (cycleOffset * cycleLen) < 500 ms. slotDelay is the time added * to the start time of the slot. slotDelay is used to keep the order for * multiple packets in the same slot. slotId is the parameter passed to * tsnQbvTimeSlotAdd(). When calling tsnQbvMuxSend(), slotId must reuse the * value that was previously passed to tsnQbvTimeSlotAdd(). * * * Parameters: * \is * \i * ID for the cycle. This value is returned by tsnQbvTimerCycleCreate(). * \i * The number of additional cycles to be added to the current running cycles. * \i * Time slot ID. This value is the unique, user-assigned value that was passed * to tsnQbvTimeSlotAdd. * \i * The time added to the start time of the slot. slotDelay is used to keep the * order for multiple packets in the same slot. The units are ns. * \i * trafficType : 0 Time-Aware(TSN-scheduled) * 1 Credit-based A(not TSN-scheduled) * 2 Credit-based B(not TSN-scheduled) * 3 Prioritized(not TSN-scheduled) * 4 Best-Effort(not TSN-scheduled) * \i * A pointer to the buffer to be sent. * \i * Length of the buffer. The units are bytes. * \ie * * RETURNS: \is * \i 'OK' * if successful. * \i 'ERROR' * if unsuccessful. * \ie * * ERRNO: * * SYNOPSIS * STATUS tsnQbvMuxSend * ( * int cycleId, * int cycleOffset, * int slotId, * int slotDelay, * int trafficType, * const void *buf, * size_t len * ) * */ STATUS tsnQbvMuxSend ( int cycleId, int cycleOffset, int slotId, int slotDelay, int trafficType, const void *buf, size_t len ); #ifdef __cplusplus } #endif #endif /* **************************************************************************** * END OF FILE **************************************************************************** */