Go to the documentation of this file.00001
00043 #if !defined (RINGIODEFS_H)
00044 #define RINGIODEFS_H
00045
00046
00047
00048 #include <mpcs.h>
00049
00050
00051 #if defined (__cplusplus)
00052 extern "C" {
00053 #endif
00054
00055
00056
00057 #define RINGIO_SUCCESS (SYS_OK)
00058 #define RINGIO_BASE (SYS_EUSER)
00059
00060
00061
00062
00063
00064 #define RINGIO_SPENDINGATTRIBUTE (RINGIO_BASE + 0x1)
00065
00066
00067 #define RINGIO_EFAILURE (RINGIO_BASE + 0x2)
00068
00069
00070
00071 #define RINGIO_EBUFWRAP (RINGIO_BASE + 0x3)
00072
00073
00074 #define RINGIO_EBUFEMPTY (RINGIO_BASE + 0x4)
00075
00076
00077 #define RINGIO_EBUFFULL (RINGIO_BASE + 0x5)
00078
00079
00080
00081 #define RINGIO_EPENDINGDATA (RINGIO_BASE + 0x6)
00082
00083
00084
00085 #define RINGIO_EVARIABLEATTRIBUTE (RINGIO_BASE + 0x7)
00086
00087
00088 #define RINGIO_EALREADYEXISTS (RINGIO_BASE + 0x8)
00089
00090
00091
00092
00093 #define RINGIO_ENOTCONTIGUOUSDATA (RINGIO_BASE + 0x9)
00094
00095
00096 #define RINGIO_EWRONGSTATE (RINGIO_BASE + 0xA)
00097
00104 #define RINGIO_NAME_MAX_LEN DSP_MAX_STRLEN
00105
00106
00107
00108
00109
00110
00111
00112
00113 #define RINGIO_INVALID_ATTR (Uint16) 0xFFFF
00114
00122 #define RINGIO_DATABUF_CACHEUSE 0x1
00123 #define RINGIO_ATTRBUF_CACHEUSE 0x2
00124 #define RINGIO_CONTROL_CACHEUSE 0x4
00125 #define RINGIO_NEED_EXACT_SIZE 0x8
00126
00127
00151 typedef enum {
00152 RINGIO_NOTIFICATION_NONE = 0,
00153 RINGIO_NOTIFICATION_ALWAYS,
00154 RINGIO_NOTIFICATION_ONCE,
00155 RINGIO_NOTIFICATION_HDWRFIFO_ALWAYS,
00156 RINGIO_NOTIFICATION_HDWRFIFO_ONCE
00157 } RingIO_NotifyType ;
00158
00170 typedef enum{
00171 RINGIO_MODE_READ = 0,
00172 RINGIO_MODE_WRITE
00173 } RingIO_OpenMode ;
00174
00186 typedef enum{
00187 RINGIO_TRANSPORT_DSP_DSP = 1,
00188 RINGIO_TRANSPORT_GPP_DSP
00189 } RingIO_TransportType ;
00190
00191
00198 typedef Ptr RingIO_Handle ;
00199
00206 typedef struct RingIO_ControlStruct_tag * RingIO_ControlHandle ;
00207
00214 typedef Ptr RingIO_BufPtr ;
00215
00222 typedef Ptr RingIO_NotifyParam ;
00223
00230 typedef Uint16 RingIO_NotifyMsg;
00231
00247 typedef Void (* RingIO_NotifyFunc) (RingIO_Handle handle,
00248 RingIO_NotifyParam param,
00249 RingIO_NotifyMsg msg) ;
00250
00251
00276 typedef struct RingIO_Attrs_tag {
00277 RingIO_TransportType transportType ;
00278 Uint16 ctrlPoolId ;
00279 Uint16 dataPoolId ;
00280 Uint16 attrPoolId ;
00281 Uint16 lockPoolId ;
00282 Uint32 dataBufSize ;
00283 Uint32 footBufSize ;
00284 Uint32 attrBufSize ;
00285 } RingIO_Attrs ;
00286
00293 typedef struct RingIO_ControlStruct_tag RingIO_ControlStruct ;
00294
00357 typedef struct RingIO_Client_tag {
00358 Uint32 procId ;
00359 Uint32 openMode ;
00360 RingIO_BufPtr pDataStart ;
00361 RingIO_BufPtr pAttrStart ;
00362 Uint32 acqStart ;
00363 Uint32 acqSize ;
00364 Uint32 acqAttrStart ;
00365 Uint32 acqAttrSize ;
00366 Uint32 notifyType ;
00367 RingIO_NotifyFunc notifyFunc ;
00368 RingIO_NotifyParam notifyParam ;
00369 Uint32 notifyWaterMark ;
00370 Uint32 flags ;
00371 RingIO_ControlStruct * virtControlHandle ;
00372 Void * virtLockHandle;
00373 Uint32 isValid ;
00374 Uint32 refCount ;
00375 Uint16 notifyFlag ;
00376 ADD_PADDING (padding, RINGIO_CLIENT_PADDING)
00377 } RingIO_Client ;
00378
00443 struct RingIO_ControlStruct_tag {
00444 Uint32 procId ;
00445 Uint32 entryId;
00446 Uint32 transportType;
00447 RingIO_BufPtr phyBufStart;
00448 Uint32 phyBufEnd;
00449 Uint32 curBufEnd;
00450 Uint32 dataBufEnd;
00451 Uint32 dataBufSize;
00452 Uint32 footBufSize;
00453 Uint32 validSize;
00454 Uint32 emptySize;
00455 RingIO_BufPtr phyAttrStart;
00456 Uint32 phyAttrBufEnd;
00457 Uint32 curAttrBufEnd;
00458 Uint32 validAttrSize;
00459 Uint32 emptyAttrSize;
00460 Int32 prevAttrOffset;
00461 Void * phyLockHandle;
00462 ADD_PADDING (padding, RINGIO_CONTROLSTRUCT_PADDING)
00463 RingIO_Client writer;
00464 RingIO_Client reader;
00465 } ;
00466
00492 typedef struct RingIO_Entry_tag {
00493 Ptr phyControl ;
00494 Ptr virtControl ;
00495 Char name [RINGIO_NAME_MAX_LEN] ;
00496 Uint16 ownerProcId ;
00497 Uint16 ctrlPoolId ;
00498 Uint16 dataPoolId ;
00499 Uint16 attrPoolId ;
00500 Uint16 lockPoolId ;
00501 ADD_PADDING (padding, RINGIO_ENTRY_PADDING)
00502 } RingIO_Entry ;
00503
00531 typedef struct RingIO_Ctrl_tag {
00532 Uint32 isInitialized ;
00533 Uint32 dspId ;
00534 Uint32 maxEntries ;
00535 Uint32 ipsId ;
00536 Uint32 ipsEventNo ;
00537 RingIO_Entry * dspAddrEntry ;
00538 ADD_PADDING (padding, RINGIO_CTRL_PADDING)
00539 MPCS_ShObj lockObj ;
00540 } RingIO_Ctrl ;
00541
00542
00549 #define GET_ENTRY_ID(client) ((client)->virtControlHandle->entryId)
00550
00558 #define GET_LOCK_POOL_ID(entryId) (RingIO_ctrlPtr->entry [entryId].lockPoolId)
00559
00567 #define GET_CTRL_POOL_ID(entryId) (RingIO_ctrlPtr->entry [entryId].ctrlPoolId)
00568
00576 #define GET_DATA_POOL_ID(entryId) (RingIO_ctrlPtr->entry [entryId].dataPoolId)
00577
00585 #define GET_ATTR_POOL_ID(entryId) (RingIO_ctrlPtr->entry [entryId].attrPoolId)
00586
00593 #define IS_WRITER(client) ((client)->openMode == RINGIO_MODE_WRITE)
00594
00601 #define IS_READER(client) ((client)->openMode == RINGIO_MODE_READ)
00602
00609 #define GET_CUR_ATTR_END(control) ((control)->curAttrBufEnd + 1)
00610
00617 #define GET_CUR_DATA_END(control) ((control)->curBufEnd + 1)
00618
00625 #define ADJUST_MODULO(start, size, bufSize) (((start) + (size)) % bufSize)
00626
00633 #define SIZEOF_ATTR(size) (sizeof (RingIO_Attr) + (size))
00634
00635 #if defined (__cplusplus)
00636 }
00637 #endif
00638
00639 #endif