blob: 87320ed4daef0af50ed08f7ae69cc1236b4ecd66 [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms. Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.
********************************************************************************
Marvell Commercial License Option
If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Marvell nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#ifndef __INC_MV_TSU_H__
#define __INC_MV_TSU_H__
#include "ctrlEnv/mvCtrlEnvSpec.h"
#include "mvSysTsConfig.h"
/********************************/
/* General enums and structures */
/********************************/
#define MV_TSU_NUM_PORTS (2)
#define MV_TSU_STATUS_CONN_ERROR (0x1)
#define MV_TSU_STATUS_OVFL_ERROR (0x2)
#define MV_TSU_STATUS_TSIF_ERROR (0x4)
#define TSU_DONE_STATUS_ENTRY_SIZE (4)
#define TSU_INPUT_DESC_ENTRY_SIZE (4)
#define TSU_OUTPUT_DESC_ENTRY_SIZE(agrMode) ((agrMode == MV_TSU_AGGR_MODE_DISABLED) ? (8) : (4))
#define TSU_MODE1_OUT_TMS_SIZE (8)
#define MV_TSU_MAX_IN_QUEUE_LEN (1024)
#define MV_TSU_MAX_OUT_QUEUE_LEN (512)
#define MV_TSU_MAX_DONEQ_LEN (1024)
#define TSU_DMA_ALIGN (32)
#define MV_TSU_TX_CLOCK_EXTERNAL (0xFFFFFFFF)
typedef enum
{
TSU_CORE_CLK_83_MHZ = 0,
TSU_CORE_CLK_71_MHZ,
TSU_CORE_CLK_91_MHZ,
TSU_CORE_CLK_100_MHZ
}MV_TSU_CORE_CLOCK;
typedef enum
{
TSU_MODE_SERIAL,
TSU_MODE_PARALLEL
}MV_TSU_PORTS_MODE;
typedef enum
{
TSU_SIGNAL_KEEP_DEF, /* Keep default. */
TSU_SIGNAL_DIS,
TSU_SIGNAL_EN_ACT_LOW,
TSU_SIGNAL_EN_ACT_HIGH
}MV_TSU_SIGNAL_MODE;
typedef enum
{
TSU_SIGNAL_EDGE_KEEP_DEF, /* Keep default. */
TSU_SIGNAL_EDGE_FALL,
TSU_SIGNAL_EDGE_RISE
}MV_TSU_SIGNAL_EDGE;
typedef enum
{
TSU_PORT_INPUT,
TSU_PORT_OUTPUT
}MV_TSU_PORT_DIRECTION;
typedef struct
{
MV_TSU_SIGNAL_MODE tsSync;
MV_TSU_SIGNAL_MODE tsValid;
MV_TSU_SIGNAL_MODE tsError;
MV_TSU_SIGNAL_EDGE tsDataEdge;
}MV_TSU_SIGNAL_CONFIG;
/* Serial data bits order, only one option can be selected. */
#define MV_TSU_SER_DATA_ORDER_MSB (0x0001)
#define MV_TSU_SER_DATA_ORDER_LSB (0x0002)
#define MV_TSU_SER_DATA_ORDER_MASK \
(MV_TSU_SER_DATA_ORDER_MSB | MV_TSU_SER_DATA_ORDER_LSB)
/* Serial sync signal active length in bits, only one option */
/* can be selected. */
#define MV_TSU_SER_SYNC_ACT_1_BIT (0x0004)
#define MV_TSU_SER_SYNC_ACT_8_BIT (0x0008)
#define MV_TSU_SER_SYNC_ACT_LEN_MASK \
(MV_TSU_SER_SYNC_ACT_1_BIT | MV_TSU_SER_SYNC_ACT_8_BIT)
/* Serial Tx signal mode, continuous or gapped, only one option */
/* can be selected. */
#define MV_TSU_SER_TX_CLK_MODE_CONT (0x0010)
#define MV_TSU_SER_TX_CLK_MODE_GAPPED (0x0020)
#define MV_TSU_SER_TX_CLK_MODE_MASK \
(MV_TSU_SER_TX_CLK_MODE_CONT | MV_TSU_SER_TX_CLK_MODE_GAPPED)
typedef struct
{
MV_TSU_PORT_DIRECTION portDir;
MV_U16 pktSize; /* 188 to 256 */
}MV_TSU_PORT_CONFIG;
#define MV_TSU_AGGR_MODE_DISABLED (1)
#define MV_TSU_AGGR_MODE_1 (2)
#define MV_TSU_AGGR_MODE_2 (3)
/*
* MV_TSU_BUFF_INFO:
*
* aggrMode: Aggregation mode MV_TSU_AGGR_MODE_X
* aggrMode2TmstmpOff: Timestamp offset in case of aggr mode 2.
* aggrNumPackets: Number of packets in each aggregation.
* numTsDesc: Number of descriptors (Power of 2).
* numDoneQEntry: Number of done queue entries (Power of 2).
* tsDataBuff: Pointer to the data buffers list, the user must ensure
* DMA coherency for these buffers. The content of these
* buffers is never accessed by the HAL.
* tsDoneBuff: Pointer to the data status list, the user must ensure
* DMA coherency for these buffers. The content of these
* buffers is never accessed by the HAL.
* dataBlockSize: the size of a single data block, this can be larger than
* the amount of memory needed to hold TS packets in order
* to insure a certain alignment of the buffers.
*
* Guidelines for calculating the data & status buffers length:
*
* data-buff-len = dataBlockSize * numTsDesc
* In normal mode:
* dataBlockSize = <packet-size> + alignment_space
* done-buff-len= numDoneQEntry * TSU_DONE_STATUS_ENTRY_SIZE
*
* In aggregation mode 1:
* dataBlockSize = <packet-size> * aggrNumPackets + alignment_space
* done-buff-len= numDoneQEntry * TSU_DONE_STATUS_ENTRY_SIZE
*
* In aggregation mode 2:
* dataBlockSize = ((<packet-size> + aggrMode2TmstmpOff)*
* aggrNumPackets) + alignment_space
* done-buff-len= numDoneQEntry * TSU_DONE_STATUS_ENTRY_SIZE
*/
typedef struct
{
MV_U8 aggrMode;
MV_U8 aggrMode2TmstmpOff;
MV_U8 aggrNumPackets;
MV_U32 numTsDesc;
MV_U32 numDoneQEntry;
MV_U32 *tsDataBuff;
MV_U32 tsDataBuffPhys;
MV_U32 *tsDoneBuff;
MV_U32 tsDoneBuffPhys;
MV_U32 dataBlockSize;
}MV_TSU_BUFF_INFO;
/********************************/
/* Macros */
/********************************/
#define MV_TSU_STATUS_ENTRY_TMS_GET(stat) (MV_U32)(stat & 0xFFFFFFF)
/********************************/
/* Functions API */
/********************************/
/*******************************************************************************
* mvTsuHalInit
*
* DESCRIPTION:
* Initialize the TSU unit, and get unit out of reset.
*
* INPUT:
* coreClock - The core clock at which the TSU should operate.
* mode - The mode on configure the unit into (serial/parallel).
* osHandle - Memory handle used for memory allocations.
* OUTPUT:
* None.
* RETURN:
* MV_OK - on success,
*
*******************************************************************************/
MV_STATUS mvTsuHalInit(MV_TSU_CORE_CLOCK coreClock, MV_TSU_PORTS_MODE mode,
void *osHandle);
/*******************************************************************************
* mvTsuShutdown
*
* DESCRIPTION:
* Shutdown the TS unit, and put into reset state.
*
* INPUT:
* None.
* OUTPUT:
* None.
* RETURN:
* MV_OK - on success,
*
*******************************************************************************/
MV_STATUS mvTsuShutdown(void);
/*******************************************************************************
* mvTsuPortReset
*
* DESCRIPTION:
* Perform a SW reset on a given port.
*
* INPUT:
* port - The port number to reset.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_BAD_VALUE - Bad port configuration option.
* MV_BAD_SIZE - Illegal number of ports.
*
*******************************************************************************/
MV_STATUS mvTsuPortReset(MV_U8 port);
/*******************************************************************************
* mvTsuPortInit
*
* DESCRIPTION:
* Initialize the TSU ports.
*
* INPUT:
* port - The port number to configure.
* portCfg - Port configurations parameters.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_BAD_VALUE - Bad port configuration option.
* MV_BAD_SIZE - Illegal number of ports.
*
*******************************************************************************/
MV_STATUS mvTsuPortInit(MV_U8 port, MV_TSU_PORT_CONFIG *portCfg);
/*******************************************************************************
* mvTsuPortSignalCfgSet
*
* DESCRIPTION:
* Configure port signals parameters.
*
* INPUT:
* port - The port to configure.
* signalCfg - Signal configuration options.
* serialflags - Serial signal configuration options (valid only if the
* port is working in serial mode).
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_BAD_VALUE - Bad port configuration option.
* MV_BAD_SIZE - Illegal number of ports.
*
*******************************************************************************/
MV_STATUS mvTsuPortSignalCfgSet(MV_U8 port, MV_TSU_SIGNAL_CONFIG *signalCfg,
MV_U32 serialFlags);
/*******************************************************************************
* mvTsuPortSignalCfgGet
*
* DESCRIPTION:
* Get port signals parameters.
*
* INPUT:
* port - The port to configure.
* OUTPUT:
* signalCfg - Signal configuration options.
* serialflags - Serial signal configuration options (valid only if the
* port is working in serial mode).
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Illegal port number.
* MV_BAD_PARAM - Bad pointers.
*
*******************************************************************************/
MV_STATUS mvTsuPortSignalCfgGet(MV_U8 port, MV_TSU_SIGNAL_CONFIG *signalCfg,
MV_U32* serialFlags);
/*******************************************************************************
* mvTsuStatusGet
*
* DESCRIPTION:
* Get the TSU port status for a given port.
*
* INPUT:
* port - The port number to configure.
* OUTPUT:
* status - Bitmask representing the TSU port status (a bitwise or
* between the MV_TSU_STATUS_* macros.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
*
*******************************************************************************/
MV_STATUS mvTsuStatusGet(MV_U8 port, MV_U32 *status);
/*******************************************************************************
* mvTsuBuffersInit
*
* DESCRIPTION:
* Initialize the TSU unit buffers.
* This function is used to initialize both Rx or Tx buffers according to
* the port mode configured in mvTsuPortsInit().
*
* INPUT:
* port - The port number to configure.
* buffInfo- TSU buffer information.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad buffer configuration options.
* MV_NOT_ALIGNED - Bad data buffer alignemed.
*
*******************************************************************************/
MV_STATUS mvTsuBuffersInit(MV_U8 port, MV_TSU_BUFF_INFO *buffInfo);
/*******************************************************************************
* mvTsuPortShutdown
*
* DESCRIPTION:
* Shutdown the port, this will release any previously allocated port
* memory, and set the port to disable state.
*
* INPUT:
* port - The port number to shutdown.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad buffer configuration options.
*
*******************************************************************************/
MV_STATUS mvTsuPortShutdown(MV_U8 port);
/*******************************************************************************
* mvTsuDmaWatermarkSet
*
* DESCRIPTION:
* Set the watermark for starting a DMA transfer from / to the TSU
* internal FIFO to the CPU memory.
*
* INPUT:
* port - The port number to configure.
* watermark - The watermark to configure (in DWORD units).
* For Rx: Number of data DWORDS in FIFO to start DMA.
* For Tx: Number of free DWORDS in FIFO to start DMA.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad watermark value..
*
*******************************************************************************/
MV_STATUS mvTsuDmaWatermarkSet(MV_U8 port, MV_U32 watermark);
/*******************************************************************************
* mvTsuAggrMode1TmsOnPcktEn
*
* DESCRIPTION:
* Set the TSU unit to add the timestamp to the packet buffer when working
* in aggregation mode-1.
*
* INPUT:
* port - The port number to configure.
* enable - When True, enables the placement of timestamp data in the
* packet buffer.
* When False, the timestamp is placed in the Done-Queue.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
*
*******************************************************************************/
MV_STATUS mvTsuAggrMode1TmsOnPcktEn(MV_U8 port, MV_BOOL enable);
/********************************/
/* Rx related APIs */
/********************************/
/*******************************************************************************
* mvTsuRxSyncDetectionSet
*
* DESCRIPTION:
* Set TS synchronization parameters for Rx data.
*
* INPUT:
* port - The port number to configure.
* syncDetect - Number of TS sync matches to lock signal.
* syncLoss - Number of TS sync losses to unlock signal.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad sync values configuration.
*
*******************************************************************************/
MV_STATUS mvTsuRxSyncDetectionSet(MV_U8 port, MV_U8 syncDetect, MV_U8 syncLoss);
/*******************************************************************************
* mvTsuRxSyncDetectionGet
*
* DESCRIPTION:
* Get TS synchronization parameters for Rx data.
*
* INPUT:
* port - The port number.
* OUTPUT:
* syncDetect - Number of TS sync matches to lock signal.
* syncLoss - Number of TS sync losses to unlock signal.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad pointers.
*
*******************************************************************************/
MV_STATUS mvTsuRxSyncDetectionGet(MV_U8 port, MV_U8 *syncDetect, MV_U8 *syncLoss);
/*******************************************************************************
* mvTsuRxFullBuffCountGet
*
* DESCRIPTION:
* Get number of Rx packets ready for CPU processing.
*
* INPUT:
* port - TSU port number.
* OUTPUT:
* numBlocks - Number of data blocks ready for CPU processing
* (already have data for processing).
* numBuffers - Number of buffers ready for CPU processing (already
* have data for processing).
* In non-aggreagtion mode numBlocks == numBuffers.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_NOT_SUPPORTED- If the port is not configured in input mode.
*
*******************************************************************************/
MV_STATUS mvTsuRxFullBuffCountGet(MV_U8 port, MV_U32 *numBlocks,
MV_U32 *numBuffers);
/*******************************************************************************
* mvTsuRxNextBuffGet
*
* DESCRIPTION:
* Get a pointer to the next available Rx data & status buffers from the Rx
* queue.
*
* INPUT:
* port - TSU port number.
* dataBuff - Pointer to return the address of the next data buffer.
* statBuff - Pointer to return the address of the next status buffer.
* OUTPUT:
* buffsHandle - A handle returned to the user to be used when freeing
* the buffers in mvTsuRxBuffFree().
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad parameters.
* MV_NOT_SUPPORTED- Functionality not supported by the port configuration.
* MV_NO_MORE - No Rx data is available for copy.
* NOTE:
* When working in Aggregation mode, the buffer will point to the
* beggining of the aggregation buffer and not to a single packet inside
* the buffer.
*
*******************************************************************************/
MV_STATUS mvTsuRxNextBuffGet(MV_U8 port,MV_U32 **dataBuff, MV_U32 **statBuff,
MV_U32 *buffsHandle);
/*******************************************************************************
* mvTsuRxTimestampCntEn
*
* DESCRIPTION:
* Enable / Disable the timestamp counter for Rx direction.
*
* INPUT:
* port - TSU port number.
* enable - MV_TRUE to enable the timestamp counter.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad parameters.
* NOTE:
*
*******************************************************************************/
MV_STATUS mvTsuRxTimestampCntEn(MV_U8 port,MV_BOOL enable);
/*******************************************************************************
* mvTsuRxBuffFree
*
* DESCRIPTION:
* Mark a given set of buffers to be free (ready for new data Rx).
*
* INPUT:
* port - TSU port number.
* dataBuff - Pointer to the start of data buffer to return.
* statBuff - Pointer to the start of status buffer to return.
* buffsHandle - The buffers handle as returned by mvTsuRxNextBuffGet()
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_NO_MORE - No Rx data is available for copy.
* MV_BAD_PARAM - Bad parameters.
* MV_BAD_STATE - Bad buffer free order, attempting to free a buffer
* before all previous buffers where freed.
* NOTE:
* When working in Aggregation mode, the buffer will point to the
* beggining of the aggregation buffer and not to a single packet inside
* the buffer.
* The numBuffs represents the number of aggregation buffers and not to the
* number of packets.
*
*******************************************************************************/
MV_STATUS mvTsuRxBuffFree(MV_U8 port,MV_U32 *dataBuff, MV_U32 *statBuff,
MV_U32 buffsHandle);
/*******************************************************************************
* mvTsuRxFlushErrorPackets
*
* DESCRIPTION:
* Enable / Disable flushing of received erroneous packets.
*
* INPUT:
* port - TSU port number.
* enableFlush - MV_TRUE to flush recieved erroneous packets.
* MV_FALSE to copy erroneous packets to Rx buffers.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
*
*******************************************************************************/
MV_STATUS mvTsuRxFlushErrorPackets(MV_U8 port, MV_BOOL enableFlush);
/********************************/
/* Tx related APIs */
/********************************/
/*******************************************************************************
* mvTsuTxClockFreqSet
*
* DESCRIPTION:
* Configure the transmit clock frequency and parameters.
*
* INPUT:
* port - TSU port number.
* freq - The frequency to configure in Hz.
* range is 2500000 (2.5MHz) to 80000000 (80MHz).
* autoAdjust - Whether to adjust the Tx frequency according to the
* next packet timestamp.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_VALUE - Bad Tx frequency value.
*
*******************************************************************************/
MV_STATUS mvTsuTxClockFreqSet(MV_U8 port, MV_U32 freq, MV_BOOL autoAdjust);
/*******************************************************************************
* mvTsuTxFreeBuffCountGet
*
* DESCRIPTION:
* Get the number of free packets ready to be transmitted in the TX
* descriptor list.
*
* INPUT:
* port - TSU port number.
* OUTPUT:
* numBlocks - Number of data blocks ready for CPU processing
* (does not have data for transmit).
* numBuffers - Number of buffers ready for CPU processing (does not
* have data for transmit).
* In non-aggreagtion mode numBlocks == numBuffers.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_NOT_SUPPORTED- If the port is not configured in input mode.
*
*******************************************************************************/
MV_STATUS mvTsuTxFreeBuffCountGet(MV_U8 port, MV_U32 *numBlocks,
MV_U32 *numBuffers);
/*******************************************************************************
* mvTsuRxNextBuffGet
*
* DESCRIPTION:
* Get a pointer to the next available Tx data & status buffers from the Tx
* queue.
*
* INPUT:
* port - TSU port number.
* dataBuff - Pointer to return the address of the next data buffer.
* numBuffs - Pointer to the maximum number of buffers to return.
* OUTPUT:
* numBuffs - Number of data / status buffers that where returned.
* buffsHandle - A handle returned to the user to be used when freeing
* the buffers in mvTsuRxBuffFree().
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_NO_MORE - No Rx data is available for copy.
* NOTE:
* When working in Aggregation mode, the buffer will point to the
* beggining of the aggregation buffer and not to a single packet inside
* the buffer.
* The numBuffs represents the number of aggregation buffers and not to the
* number of packets.
*
*******************************************************************************/
MV_STATUS mvTsuTxNextBuffGet(MV_U8 port,MV_U32 **dataBuff,MV_U32 *buffsHandle);
/*******************************************************************************
* mvTsuTxBuffPut
*
* DESCRIPTION:
* Mark a given set of buffers to be ready for transmission.
*
* INPUT:
* port - TSU port number.
* dataBuff - Pointer to the start of data buffer to put.
* tmsValue - The timestamp to associate with the buffer.
* This parameter is applicable only when working in
* non-aggregation mode.
* tsErr - Indicates if the TS packet should be sent as an
* erroneous packet.
* buffsHandle - The buffer handle as returned by mvTsuTxNextBuffGet()
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad function parameters.
* NOTE:
* When working in Aggregation mode, the buffer will point to the
* beggining of the aggregation buffer and not to a single packet inside
* the buffer.
*
*******************************************************************************/
MV_STATUS mvTsuTxBuffPut(MV_U8 port, MV_U32 *dataBuff, MV_U32 tmsValue,
MV_BOOL tsErr, MV_U32 buffsHandle);
/*******************************************************************************
* mvTsuTxStatusGet
*
* DESCRIPTION:
* Get the next TX done buffer from the TX done queue.
*
* INPUT:
* port - TSU port number.
* doneBuff - Pointer to return the address of the next done buffer.
* buffsHandle - The buffer handle as returned by mvTsuTxNextBuffGet()
* OUTPUT:
* numBuffs - Number of returned buffers.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_NO_MORE - No free Tx buffers are avilable.
* NOTE:
*
*******************************************************************************/
MV_STATUS mvTsuTxStatusGet(MV_U8 port, MV_U32 **doneBuff, MV_U32 buffsHandle);
/*******************************************************************************
* mvTsuTxInitTimeStampSet
*
* DESCRIPTION:
* Set the initial timestamp value for TX operations.
* This function must be called before each transmit session.
*
* INPUT:
* port - TSU port number.
* enableTmstmp - Enable the timestamp mechanism for packet transmit.
* When false, the TSU will transmit packets back-to-back
* initTimestamp - (Valid only if enableTs == MV_TRUE)
* The initial timestamp to set.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
* MV_BAD_PARAM - Bad timestamp value.
*
*******************************************************************************/
MV_STATUS mvTsuTxInitTimeStampSet(MV_U8 port, MV_BOOL enableTmstmp,
MV_U32 initTimestamp);
/*******************************************************************************
* mvTsuTxDone
*
* DESCRIPTION:
* Inform the TS unit that the current transmission session is over.
* This will stop the internal timestamp counters held by the unit.
*
* INPUT:
* port - TSU port number.
* OUTPUT:
* None.
* RETURN:
* MV_OK - On success,
* MV_OUT_OF_RANGE - Unsupported port number.
*
*******************************************************************************/
MV_STATUS mvTsuTxDone(MV_U8 port);
/*******************************************************************************
* mvTsuWinInit
*
* DESCRIPTION:
* Initialize the TSU unit address decode windows.
*
* INPUT:
* addWinMap: An array holding the address decoding information for the
* system.
* OUTPUT:
* None.
* RETURN:
* MV_OK - on success,
*
*******************************************************************************/
MV_STATUS mvTsuWinInit(MV_UNIT_WIN_INFO *addrWinMap);
/*******************************************************************************
* mvTsuWinWrite
*
* DESCRIPTION:
* This function sets a peripheral target (e.g. SDRAM bank0, PCI_MEM0)
* address window, also known as address decode window.
* After setting this target window, the TSU will be able to access the
* target within the address window.
*
* INPUT:
* unit - The Unit ID.
* winNum - TSU to target address decode window number.
* pAddrDecWin - TSU target window data structure.
*
* OUTPUT:
* None.
*
* RETURN:
* MV_ERROR - if address window overlapps with other address decode
* windows.
* MV_BAD_PARAM - if base address is invalid parameter or target is
* unknown.
*
*******************************************************************************/
MV_STATUS mvTsuWinWrite(MV_U32 unit, MV_U32 winNum, MV_UNIT_WIN_INFO *pAddrDecWin);
/*******************************************************************************
* mvTsuWinRead
*
* DESCRIPTION:
* Get TSU peripheral target address window.
*
* INPUT:
* unit - The Unit ID.
* winNum - TSU to target address decode window number.
*
* OUTPUT:
* pAddrDecWin - TSU target window data structure.
*
* RETURN:
* MV_ERROR if register parameters are invalid.
*
*******************************************************************************/
MV_STATUS mvTsuWinRead(MV_U32 unit, MV_U32 winNum, MV_UNIT_WIN_INFO *pAddrDecWin);
/*******************************************************************************
* mvTsuWinEnable - Enable/disable a TS address decode window
*
* DESCRIPTION:
* This function enable/disable a TS address decode window.
*
* INPUT:
* winNum - Decode window number.
* enable - Enable/disable parameter.
*
* OUTPUT:
* None.
*
* RETURN:
* MV_BAD_PARAM if parameters to function invalid, MV_OK otherwise.
*
*******************************************************************************/
MV_STATUS mvTsuWinEnable(MV_U32 winNum, MV_BOOL enable);
#endif /* __INC_MV_TSU__H__ */