/*************************************************************************/ /*!
@File
@Title          Services Transport Layer common types and definitions
@Copyright      Copyright (c) Imagination Technologies Ltd. All Rights Reserved
@Description    Transport layer common types and definitions included into
                both user mode and kernel mode source.
@License        Dual MIT/GPLv2

The contents of this file are subject to the MIT license as set out below.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

Alternatively, the contents of this file may be used under the terms of
the GNU General Public License Version 2 ("GPL") in which case the provisions
of GPL are applicable instead of those above.

If you wish to allow use of your version of this file only under the terms of
GPL, and not to allow others to use your version of this file under the terms
of the MIT license, indicate your decision by deleting the provisions above
and replace them with the notice and other provisions required by GPL as set
out in the file called "GPL-COPYING" included in this distribution. If you do
not delete the provisions above, a recipient may use your version of this file
under the terms of either the MIT license or GPL.

This License is also included in this distribution in the file called
"MIT-COPYING".

EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/ /**************************************************************************/
#ifndef __PVR_TLCOMMON_H__
#define __PVR_TLCOMMON_H__

#if defined (__cplusplus)
extern "C" {
#endif

#include "img_defs.h"


/*! Handle type for stream descriptor objects as created by this API */
typedef IMG_HANDLE PVRSRVTL_SD;

/*! Maximum stream name length including the null byte */
#define PRVSRVTL_MAX_STREAM_NAME_SIZE	40U

/*! Packet lengths are always rounded up to a multiple of 8 bytes */
#define PVRSRVTL_PACKET_ALIGNMENT		8U
#define PVRSRVTL_ALIGN(x) 				((x+PVRSRVTL_PACKET_ALIGNMENT-1) & ~(PVRSRVTL_PACKET_ALIGNMENT-1))


/*! A packet is made up of a header structure followed by the data bytes.
 * There are 3 types of packet: normal (has data), data lost and padding,
 * see packet flags. Header kept small to reduce data overhead.
 *
 * if the ORDER of the structure members is changed, please UPDATE the 
 *   PVRSRVTL_PACKET_FLAG_OFFSET macro.
 *
 * Layout of uiTypeSize member is :
 *
 * |<---------------------------32-bits------------------------------>|
 * |<----8---->|<-----1----->|<----7--->|<------------16------------->|
 * |    Type   | Drop-Oldest |  UNUSED  |             Size            |
 *
 */
typedef struct _PVRSRVTL_PACKETHDR_
{
	IMG_UINT32 uiTypeSize;	/*!< Type, Drop-Oldest flag & number of bytes following header */
	IMG_UINT32 uiReserved;	/*!< Reserve, packets and data must be 8 byte aligned */

	/* First bytes of TL packet data follow header ... */
} PVRSRVTL_PACKETHDR, *PVRSRVTL_PPACKETHDR;

/* Structure must always be a size multiple of 8 as stream buffer
 * still an array of IMG_UINT32s.
 */
static_assert((sizeof(PVRSRVTL_PACKETHDR) & (PVRSRVTL_PACKET_ALIGNMENT-1)) == 0,
			  "sizeof(PVRSRVTL_PACKETHDR) must be a multiple of 8");

/*! Packet header mask used to extract the size from the uiTypeSize member.
 * Do not use directly, see GET macros.
 */
#define PVRSRVTL_PACKETHDR_SIZE_MASK    0x0000FFFFU
#define PVRSRVTL_MAX_PACKET_SIZE        (PVRSRVTL_PACKETHDR_SIZE_MASK & ~0xFU)


/*! Packet header mask used to extract the type from the uiTypeSize member.
 * Do not use directly, see GET macros.
 */
#define PVRSRVTL_PACKETHDR_TYPE_MASK    0xFF000000U
#define PVRSRVTL_PACKETHDR_TYPE_OFFSET  24U

/*! Packet header mask used to check if packets before this one were dropped or not.
 * Do not use directly, see GET macros.
 */
#define PVRSRVTL_PACKETHDR_OLDEST_DROPPED_MASK    0x00800000U
#define PVRSRVTL_PACKETHDR_OLDEST_DROPPED_OFFSET    23U

/*! Packet type enumeration.
 */
typedef enum _PVRSRVTL_PACKETTYPE_
{
	/*! Undefined packet */
	PVRSRVTL_PACKETTYPE_UNDEF = 0,

	/*! Normal packet type. Indicates data follows the header.
	 */
	PVRSRVTL_PACKETTYPE_DATA = 1,

	/*! When seen this packet type indicates that at this moment in the stream
	 * packet(s) were not able to be accepted due to space constraints and that
	 * recent data may be lost - depends on how the producer handles the
	 * error. Such packets have no data, data length is 0.
	 */
	PVRSRVTL_PACKETTYPE_MOST_RECENT_WRITE_FAILED = 2,

	/*! Packets with this type set are padding packets that contain undefined
	 * data and must be ignored/skipped by the client. They are used when the
	 * circular stream buffer wraps around and there is not enough space for
	 * the data at the end of the buffer. Such packets have a length of 0 or
	 * more.
	 */
	PVRSRVTL_PACKETTYPE_PADDING = 3,

	/*! This packet type conveys to the stream consumer that the stream producer
	 * has reached the end of data for that data sequence. The TLDaemon
	 * has several options for processing these packets that can be selected
	 * on a per stream basis.
	 */
	PVRSRVTL_PACKETTYPE_MARKER_EOS = 4,

	/*! Packet emitted on first stream opened by writer. Packet carries a name
	 * of the opened stream in a form of null-terminated string.
	 */
	PVRSRVTL_PACKETTYPE_STREAM_OPEN_FOR_WRITE = 5,

	/*! Packet emitted on last stream closed by writer. Packet carries a name
	 * of the closed stream in a form of null-terminated string.
	 */
	PVRSRVTL_PACKETTYPE_STREAM_CLOSE_FOR_WRITE = 6,

	PVRSRVTL_PACKETTYPE_LAST
} PVRSRVTL_PACKETTYPE;

/* The SET_PACKET_* macros rely on the order the PVRSRVTL_PACKETHDR members are declared:
 * uiFlags is the upper half of a structure consisting of 2 uint16 quantities.
 */
#define PVRSRVTL_SET_PACKET_DATA(len)       (len) | (PVRSRVTL_PACKETTYPE_DATA                     << PVRSRVTL_PACKETHDR_TYPE_OFFSET)
#define PVRSRVTL_SET_PACKET_PADDING(len)    (len) | (PVRSRVTL_PACKETTYPE_PADDING                  << PVRSRVTL_PACKETHDR_TYPE_OFFSET)
#define PVRSRVTL_SET_PACKET_WRITE_FAILED    (0)   | (PVRSRVTL_PACKETTYPE_MOST_RECENT_WRITE_FAILED << PVRSRVTL_PACKETHDR_TYPE_OFFSET)
#define PVRSRVTL_SET_PACKET_HDR(len,type)   (len) | ((type)                                       << PVRSRVTL_PACKETHDR_TYPE_OFFSET)

/*! Returns the number of bytes of data in the packet. p may be any address type
 * */
#define GET_PACKET_DATA_LEN(p)	\
	((IMG_UINT32) ((PVRSRVTL_PPACKETHDR)(p))->uiTypeSize & PVRSRVTL_PACKETHDR_SIZE_MASK)


/*! Returns a IMG_BYTE* pointer to the first byte of data in the packet */
#define GET_PACKET_DATA_PTR(p)	\
	((IMG_PBYTE) ( ((size_t)p) + sizeof(PVRSRVTL_PACKETHDR)) )

/*! Given a PVRSRVTL_PPACKETHDR address, return the address of the next pack
 *  It is up to the caller to determine if the new address is within the packet
 *  buffer.
 */
#define GET_NEXT_PACKET_ADDR(p) \
	((PVRSRVTL_PPACKETHDR) ( ((IMG_UINT8 *)p) + sizeof(PVRSRVTL_PACKETHDR) + \
	(((((PVRSRVTL_PPACKETHDR)p)->uiTypeSize & PVRSRVTL_PACKETHDR_SIZE_MASK) + \
	(PVRSRVTL_PACKET_ALIGNMENT-1)) & (~(PVRSRVTL_PACKET_ALIGNMENT-1)) ) ))

/*! Turns the packet address p into a PVRSRVTL_PPACKETHDR pointer type
 */
#define GET_PACKET_HDR(p)		((PVRSRVTL_PPACKETHDR)(p))

/*! Get the type of the packet. p is of type PVRSRVTL_PPACKETHDR
 */
#define GET_PACKET_TYPE(p)		(((p)->uiTypeSize & PVRSRVTL_PACKETHDR_TYPE_MASK)>>PVRSRVTL_PACKETHDR_TYPE_OFFSET)

/*! Set PACKETS_DROPPED flag in packet header as a part of uiTypeSize. p is of type PVRSRVTL_PPACKETHDR.
 */
#define SET_PACKETS_DROPPED(p)		(((p)->uiTypeSize) | (1<<PVRSRVTL_PACKETHDR_OLDEST_DROPPED_OFFSET))

/*! Check if packets were dropped before this packet. p is of type PVRSRVTL_PPACKETHDR
 */
#define CHECK_PACKETS_DROPPED(p)	(((p)->uiTypeSize & PVRSRVTL_PACKETHDR_OLDEST_DROPPED_MASK)>>PVRSRVTL_PACKETHDR_OLDEST_DROPPED_OFFSET)

/*! Flags for use with PVRSRVTLOpenStream
 * 0x01 - Do not block in PVRSRVTLAcquireData() when no bytes are available
 * 0x02 - When the stream does not exist wait for a bit (2s) in
 *        PVRSRVTLOpenStream() and then exit with a timeout error if it still
 *        does not exist.
 * 0x04 - Open stream for write only operations.
 *        If flag is not used stream is opened as read-only. This flag is
 *        required if one wants to call reserve/commit/write function on the
 *        stream descriptor. Read from on the stream descriptor opened
 *        with this flag will fail.
 * 0x10 - Reset stream on open.
 *        When this flag is used the stream will drop all of the stored data.
 */
#define PVRSRV_STREAM_FLAG_NONE                        (0U)
#define PVRSRV_STREAM_FLAG_ACQUIRE_NONBLOCKING         (1U<<0)
#define PVRSRV_STREAM_FLAG_OPEN_WAIT                   (1U<<1)
#define PVRSRV_STREAM_FLAG_OPEN_WO                     (1U<<2)
#define PVRSRV_STREAM_FLAG_DISABLE_PRODUCER_CALLBACK   (1U<<3)
#define PVRSRV_STREAM_FLAG_RESET_ON_OPEN               (1U<<4)

#if defined (__cplusplus)
}
#endif

#endif /* __PVR_TLCOMMON_H__ */
/******************************************************************************
 End of file (pvrsrv_tlcommon.h)
******************************************************************************/

