Data Structures | Defines

ringiodefs.h File Reference

#include <mpcs.h>
Include dependency graph for dsp/inc/ringiodefs.h:

Go to the source code of this file.

Data Structures

struct  RingIO_Attrs_tag
struct  RingIO_Client_tag
struct  RingIO_ControlStruct_tag
struct  RingIO_Entry_tag
struct  RingIO_Ctrl_tag

Defines

#define RINGIO_SUCCESS   (SYS_OK)
#define RINGIO_BASE   (SYS_EUSER)
#define RINGIO_SPENDINGATTRIBUTE   (RINGIO_BASE + 0x1)
#define RINGIO_EFAILURE   (RINGIO_BASE + 0x2)
#define RINGIO_EBUFWRAP   (RINGIO_BASE + 0x3)
#define RINGIO_EBUFEMPTY   (RINGIO_BASE + 0x4)
#define RINGIO_EBUFFULL   (RINGIO_BASE + 0x5)
#define RINGIO_EPENDINGDATA   (RINGIO_BASE + 0x6)
#define RINGIO_EVARIABLEATTRIBUTE   (RINGIO_BASE + 0x7)
#define RINGIO_EALREADYEXISTS   (RINGIO_BASE + 0x8)
#define RINGIO_ENOTCONTIGUOUSDATA   (RINGIO_BASE + 0x9)
#define RINGIO_EWRONGSTATE   (RINGIO_BASE + 0xA)
#define RINGIO_NAME_MAX_LEN   DSP_MAX_STRLEN
 Maximum length of RingIO strings. ============================================================================.
#define RINGIO_INVALID_ATTR   (Uint16) 0xFFFF
#define RINGIO_DATABUF_CACHEUSE   0x1
 These constants denote the flags provided while opening the RingIO. ============================================================================.
#define RINGIO_ATTRBUF_CACHEUSE   0x2
#define RINGIO_CONTROL_CACHEUSE   0x4
#define RINGIO_NEED_EXACT_SIZE   0x8

Typedefs

RingIO_Handle

This type is used for the handle to the RingIO Client structure. ============================================================================

============================================================================

typedef Ptr RingIO_Handle
RingIO_ControlHandle

This type is used for the handle to the Shared Control structure. ============================================================================

============================================================================

typedef struct
RingIO_ControlStruct_tag
RingIO_ControlHandle
RingIO_BufPtr

This type is used for the Buffer Pointer Type. ============================================================================

============================================================================

typedef Ptr RingIO_BufPtr
RingIO_NotifyParam

This type is used for the Notification Parameter. ============================================================================

============================================================================

typedef Ptr RingIO_NotifyParam
RingIO_NotifyMsg

This type is used for the Notification Message. ============================================================================

============================================================================

typedef Uint16 RingIO_NotifyMsg
RingIO_NotifyFunc

Signature of function used as the Notification function.

============================================================================

Parameters:
handleHandle to the RingIO.
paramParameter used while registering the notification.
msgMessage passed along with notification.
Returns:
None. ============================================================================
typedef Void(* RingIO_NotifyFunc )(RingIO_Handle handle, RingIO_NotifyParam param, RingIO_NotifyMsg msg)
RingIO_Attrs

This structure defines the RingIO Creation Parameters.

============================================================================

Parameters:
transportTypeTransport type - This specifies whether the data transport is between DSP<-> DSP or DSP<->ARM.
ctrlPoolIdPool to be used to allocate memory for control structure.
dataPoolIdPool to be used to allocate memory for data buffer.
attrPoolIdPool to be used to allocate memory for attribute buffer.
lockPoolIdPool to be used to allocate memory for lock structure.
dataBufSizeData Buffer Size in bytes.
footBufSizeFooter area for providing contiguous buffer to a reader.
attrBufSizeAttribute buffer size in bytes. ============================================================================
typedef struct RingIO_Attrs_tag RingIO_Attrs
RingIO_ControlStruct

This structure defines the RingIO Control Structure. This structure is stored in shared memory and is accessible by all clients. The control structure supports a single reader and a single writer for the ring buffer.

============================================================================

Parameters:
procIdProcessor Identifier.
entryIdID of the RingIO within the entry array.
transportTypeTransport type - This specifies whether the data transport is between DSP<-> DSP or DSP<->ARM.
phyBufStartPhysical start address of the data buffer.
phyBufEndTotal size of the Data buffer (offset from phyBufStart)
curBufEndCurrent buffer size. This may be <= dataBufEnd (offset from phyBufStart)
dataBufEndSize of the main data buffer (offset from phyBufStart)
dataBufSizeSize of the data buffer
footBufSizeSize of the foot buffer used for providing linear buffer to a reader
validSizeAmount of valid data available in the data buffer. Valid Data is the total data that is readable by the reader using an acquire call. This does not include the size of the data buffer already acquired by the reader
emptySizeAmount of empty space in the data buffer. This does not include the empty space already acquired by the writer
phyAttrStartPhysical start address of the attr buffer
phyAttrBufEndTotal Size of the attribute buffer (offset)
curAttrBufEndCurrent Attr buffer size. This may be <= the phyAttrBufEnd (offset)
validAttrSizeAmount of valid attribute bytes available in the attribute buffer. The valid attribute bytes does not include the attribute bytes already acquired by the reader
emptyAttrSizeAmount of empty space in the attr buffer. This does not include the empty attr space already acquired by the writer
prevAttrOffsetOffset of the most recent attribute
phyLockHandlePhysical (DSP) address of the lock that should be used to protect the Control structure from multiple accesses.
paddingPadding.
writerWriter state information
readerReader state information ============================================================================
typedef struct
RingIO_ControlStruct_tag 
RingIO_ControlStruct
RingIO_Client

This structure defines the RingIO Shared memory client structure. The RingIO Reader or Writer state information is stored in this structure

============================================================================

Parameters:
procIdProcessor Id where the client is executing
openModeIndicates whether the client is a reader or writer
pDataStartVirtual start address of the data buffer
pAttrStartVirtual start address of the attr buffer
acqStartStart offset of data buffer that has been acquired by the application.
acqSizeSize of data that has been acquired
acqAttrStartStart offset of the acquired attribute buffer
acqAttrSizeSize of attribute data that has been acquired
notifyTypeNotification type
notifyFuncNotification function for this client
notifyParamParameter to the Notification function
notifyWaterMarkWatermark that should be satisfied before notification is done
flagsCounting bits from MSB to LSB 0....31 B31 - Denotes whether the client uses cache for accessing the data buffer (dataBufCacheUseFlag) B30 - Denotes whether the client uses cache for accessing the attribute buffer (attrBufCacheUseFlag) B29 - Denotes whether the client uses cache for accessing the control struct (controlStructCacheFlag) B28 - Denotes whether requests for acquire buffer should always be satisfied. If a contiguous request could not be satisfied because of the buffer wrap, we need to mark an early end and provide only a contiguous buffer (contiguousBufFlag)
virtControlHandleHandle to the Control structure. Apps do not have direct access to the control structure. The Control structure can only be accessed through the client handle
virtLockHandleVirtual (GPP) address of the lock that should be used to protect the Control structure from multiple accesses.
isValidIndicates whether the Client is initialized
notifyFlagDenotes whether notification needs to be done or not
refCountDenotes whether ringio has been re-opened or not
paddingPadding. ============================================================================
typedef struct RingIO_Client_tag RingIO_Client
RingIO_Entry

Entry structure for the RingIO data transport

============================================================================

Parameters:
nameSystem wide unique identifier for the RingIO
phyControlPhysical (DSP) address of the Control structure for the RingIO.
virtControlVirtual (GPP) address of the Control structure for the RingIO.
ownerProcIdCreator's processor ID of this ringio.
ctrlPoolIdPool to be used to allocate memory for control structure.
dataPoolIdPool to be used to allocate memory for data buffer.
attrPoolIdPool to be used to allocate memory for attribute buffer.
lockPoolIdPool to be used to allocate memory for lock structure.
paddingPadding. ============================================================================
typedef struct RingIO_Entry_tag RingIO_Entry

Enumerations

RingIO_NotifyType

Enumeration of RingIO notification types.

============================================================================

Parameters:
RINGIO_NOTIFICATION_NONENo notification required.
RINGIO_NOTIFICATION_ALWAYSNotify whenever the other side sends data/frees up space.
RINGIO_NOTIFICATION_ONCENotify when the other side sends data/frees up space. Once the notification is done, the notification is disabled until it is enabled again
RINGIO_NOTIFICATION_HDWRFIFO_ALWAYSNotify whenever the other side sends data/frees up space. This notification is never disabled.
RINGIO_NOTIFICATION_HDWRFIFO_ONCENotify when the other side sends data/frees up space. Once the notification is done, the notification is disabled until it is enabled again. The notification is enabled once the watermark is crossed and does not require buffer to get full/empty. ============================================================================
enum  RingIO_NotifyType {
  RINGIO_NOTIFICATION_NONE = 0,
  RINGIO_NOTIFICATION_ALWAYS,
  RINGIO_NOTIFICATION_ONCE,
  RINGIO_NOTIFICATION_HDWRFIFO_ALWAYS,
  RINGIO_NOTIFICATION_HDWRFIFO_ONCE,
  RINGIO_NOTIFICATION_NONE = 0u,
  RINGIO_NOTIFICATION_ALWAYS,
  RINGIO_NOTIFICATION_ONCE,
  RINGIO_NOTIFICATION_HDWRFIFO_ALWAYS,
  RINGIO_NOTIFICATION_HDWRFIFO_ONCE
}
RingIO_OpenMode

Enumeration of RingIO open modes.

============================================================================

Parameters:
RINGIO_MODE_READReader mode.
RINGIO_MODE_WRITEWriter mode. ============================================================================
enum  RingIO_OpenMode {
  RINGIO_MODE_READ = 0,
  RINGIO_MODE_WRITE,
  RINGIO_MODE_READ = 0u,
  RINGIO_MODE_WRITE
}
RingIO_TransportType

Enumeration of RingIO transport types.

============================================================================

Parameters:
RINGIO_TRANSPORT_DSP_DSPIntra-DSP transport.
RINGIO_TRANSPORT_GPP_DSPGPP<->DSP transport. ============================================================================
enum  RingIO_TransportType {
  RINGIO_TRANSPORT_DSP_DSP = 1,
  RINGIO_TRANSPORT_GPP_DSP,
  RINGIO_TRANSPORT_DSP_DSP = 1u,
  RINGIO_TRANSPORT_GPP_DSP
}

RingIO_Ctrl

This structure defines the control structure required by the RINGIO component. It contains information about all RINGIO objects shared between the GPP and a specific DSP.

============================================================================

Parameters:
isInitializedFlag to indicate if this region was initialized
dspIdID of the DSP with which the RingIO Region is shared
maxEntriesMaximum number of RingIO instances supported by the RingIO.
ipsIdID of the IPS to be used.
ipsEventNoIPS Event number associated with the RingIO.
dspAddrEntryPointer to array in DSP address space of RINGIO objects that can be created.
paddingPadding.
lockObjLock used to protect the shared RingIO_Ctrl from multiple simultaneous accesses. ============================================================================

#define GET_ENTRY_ID(client)   ((client)->virtControlHandle->entryId)
 Gets the entry id of the RingIO ============================================================================.
#define GET_LOCK_POOL_ID(entryId)   (RingIO_ctrlPtr->entry [entryId].lockPoolId)
 Gets the pool id from which the MPCS lock object structure has been allocated. ============================================================================.
#define GET_CTRL_POOL_ID(entryId)   (RingIO_ctrlPtr->entry [entryId].ctrlPoolId)
 Gets the pool id from which the RingIO control structure has been validated. ============================================================================.
#define GET_DATA_POOL_ID(entryId)   (RingIO_ctrlPtr->entry [entryId].dataPoolId)
 Gets the pool id from which the RingIO data buffer has been allocated. ============================================================================.
#define GET_ATTR_POOL_ID(entryId)   (RingIO_ctrlPtr->entry [entryId].attrPoolId)
 Gets the pool id from which the RingIO attr buffer has been allocated. ============================================================================.
#define IS_WRITER(client)   ((client)->openMode == RINGIO_MODE_WRITE)
 Check if client is a writer. ============================================================================.
#define IS_READER(client)   ((client)->openMode == RINGIO_MODE_READ)
 Check if client is a reader. ============================================================================.
#define GET_CUR_ATTR_END(control)   ((control)->curAttrBufEnd + 1)
 Get Current attr buffer end. ============================================================================.
#define GET_CUR_DATA_END(control)   ((control)->curBufEnd + 1)
 Get Current data buffer end. ============================================================================.
#define ADJUST_MODULO(start, size, bufSize)   (((start) + (size)) % bufSize)
 Modulo operation ============================================================================.
#define SIZEOF_ATTR(size)   (sizeof (RingIO_Attr) + (size))
 Size of RingIO attributes ============================================================================.
typedef struct RingIO_Ctrl_tag RingIO_Ctrl

Define Documentation

#define RINGIO_SUCCESS   (SYS_OK)
#define RINGIO_BASE   (SYS_EUSER)
#define RINGIO_SPENDINGATTRIBUTE   (RINGIO_BASE + 0x1)
#define RINGIO_EFAILURE   (RINGIO_BASE + 0x2)
#define RINGIO_EBUFWRAP   (RINGIO_BASE + 0x3)
#define RINGIO_EBUFEMPTY   (RINGIO_BASE + 0x4)
#define RINGIO_EBUFFULL   (RINGIO_BASE + 0x5)
#define RINGIO_EPENDINGDATA   (RINGIO_BASE + 0x6)
#define RINGIO_EVARIABLEATTRIBUTE   (RINGIO_BASE + 0x7)
#define RINGIO_EALREADYEXISTS   (RINGIO_BASE + 0x8)
#define RINGIO_ENOTCONTIGUOUSDATA   (RINGIO_BASE + 0x9)
#define RINGIO_EWRONGSTATE   (RINGIO_BASE + 0xA)
#define RINGIO_NAME_MAX_LEN   DSP_MAX_STRLEN

Maximum length of RingIO strings. ============================================================================.

============================================================================

Macro:
RINGIO_NAME_MAX_LEN
#define RINGIO_INVALID_ATTR   (Uint16) 0xFFFF
#define RINGIO_DATABUF_CACHEUSE   0x1

These constants denote the flags provided while opening the RingIO. ============================================================================.

============================================================================

Constant:
RINGIO_DATABUF_CACHEUSE, RINGIO_ATTRBUF_CACHEUSE, RINGIO_CONTROL_CACHEUSE, RINGIO_NEED_EXACT_SIZE
#define RINGIO_ATTRBUF_CACHEUSE   0x2
#define RINGIO_CONTROL_CACHEUSE   0x4
#define RINGIO_NEED_EXACT_SIZE   0x8
#define GET_ENTRY_ID (   client )    ((client)->virtControlHandle->entryId)

Gets the entry id of the RingIO ============================================================================.

============================================================================

Macro:
GET_ENTRY_ID
#define GET_LOCK_POOL_ID (   entryId )    (RingIO_ctrlPtr->entry [entryId].lockPoolId)

Gets the pool id from which the MPCS lock object structure has been allocated. ============================================================================.

============================================================================

Macro:
GET_LOCK_POOL_ID
#define GET_CTRL_POOL_ID (   entryId )    (RingIO_ctrlPtr->entry [entryId].ctrlPoolId)

Gets the pool id from which the RingIO control structure has been validated. ============================================================================.

============================================================================

Macro:
GET_CTRL_POOL_ID
#define GET_DATA_POOL_ID (   entryId )    (RingIO_ctrlPtr->entry [entryId].dataPoolId)

Gets the pool id from which the RingIO data buffer has been allocated. ============================================================================.

============================================================================

Macro:
GET_DATA_POOL_ID
#define GET_ATTR_POOL_ID (   entryId )    (RingIO_ctrlPtr->entry [entryId].attrPoolId)

Gets the pool id from which the RingIO attr buffer has been allocated. ============================================================================.

============================================================================

Macro:
GET_ATTR_POOL_ID
#define IS_WRITER (   client )    ((client)->openMode == RINGIO_MODE_WRITE)

Check if client is a writer. ============================================================================.

============================================================================

Macro:
IS_WRITER
#define IS_READER (   client )    ((client)->openMode == RINGIO_MODE_READ)

Check if client is a reader. ============================================================================.

============================================================================

Macro:
IS_READER
#define GET_CUR_ATTR_END (   control )    ((control)->curAttrBufEnd + 1)

Get Current attr buffer end. ============================================================================.

============================================================================

Macro:
GET_CUR_ATTR_END
#define GET_CUR_DATA_END (   control )    ((control)->curBufEnd + 1)

Get Current data buffer end. ============================================================================.

============================================================================

Macro:
GET_CUR_DATA_END
#define ADJUST_MODULO (   start,
  size,
  bufSize 
)    (((start) + (size)) % bufSize)

Modulo operation ============================================================================.

============================================================================

Macro:
ADJUST_MODULO
#define SIZEOF_ATTR (   size )    (sizeof (RingIO_Attr) + (size))

Size of RingIO attributes ============================================================================.

============================================================================

Macro:
SIZEOF_ATTR

Typedef Documentation

typedef Ptr RingIO_Handle
typedef Ptr RingIO_BufPtr
typedef Ptr RingIO_NotifyParam
typedef struct RingIO_Ctrl_tag RingIO_Ctrl

Enumeration Type Documentation

Enumerator:
RINGIO_NOTIFICATION_NONE 
RINGIO_NOTIFICATION_ALWAYS 
RINGIO_NOTIFICATION_ONCE 
RINGIO_NOTIFICATION_HDWRFIFO_ALWAYS 
RINGIO_NOTIFICATION_HDWRFIFO_ONCE 
RINGIO_NOTIFICATION_NONE 
RINGIO_NOTIFICATION_ALWAYS 
RINGIO_NOTIFICATION_ONCE 
RINGIO_NOTIFICATION_HDWRFIFO_ALWAYS 
RINGIO_NOTIFICATION_HDWRFIFO_ONCE 
Enumerator:
RINGIO_MODE_READ 
RINGIO_MODE_WRITE 
RINGIO_MODE_READ 
RINGIO_MODE_WRITE 
Enumerator:
RINGIO_TRANSPORT_DSP_DSP 
RINGIO_TRANSPORT_GPP_DSP 
RINGIO_TRANSPORT_DSP_DSP 
RINGIO_TRANSPORT_GPP_DSP 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

Copyright 2012, Texas Instruments Incorporated