563b125de3
extern inline isn't the nicest and it doesn't really make sense. So unwind all the INLINE defines and includes, if speed is _really_ an issue later stuff can be put back in a sane manner. Cc: Daniel Krueger <daniel.krueger@systec-electronic.com> Cc: Ronald Sieber <Ronald.Sieber@systec-electronic.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
188 lines
6.7 KiB
C
188 lines
6.7 KiB
C
/****************************************************************************
|
|
|
|
(c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
|
|
www.systec-electronic.com
|
|
|
|
Project: Project independend shared buffer (linear + circular)
|
|
|
|
Description: Declaration of platform independend part for the
|
|
shared buffer
|
|
|
|
License:
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
|
|
1. Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
|
|
2. 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.
|
|
|
|
3. Neither the name of SYSTEC electronic GmbH nor the names of its
|
|
contributors may be used to endorse or promote products derived
|
|
from this software without prior written permission. For written
|
|
permission, please contact info@systec-electronic.com.
|
|
|
|
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 HOLDERS 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.
|
|
|
|
Severability Clause:
|
|
|
|
If a provision of this License is or becomes illegal, invalid or
|
|
unenforceable in any jurisdiction, that shall not affect:
|
|
1. the validity or enforceability in that jurisdiction of any other
|
|
provision of this License; or
|
|
2. the validity or enforceability in other jurisdictions of that or
|
|
any other provision of this License.
|
|
|
|
-------------------------------------------------------------------------
|
|
|
|
2006/06/27 -rs: V 1.00 (initial version)
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _SHAREDBUFF_H_
|
|
#define _SHAREDBUFF_H_
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Type definitions
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef enum {
|
|
kShbOk = 0,
|
|
kShbNoReadableData = 1,
|
|
kShbDataTruncated = 2,
|
|
kShbBufferFull = 3,
|
|
kShbDataOutsideBufferArea = 4,
|
|
kShbBufferAlreadyCompleted = 5,
|
|
kShbMemUsedByOtherProcs = 6,
|
|
kShbOpenMismatch = 7,
|
|
kShbInvalidBufferType = 8,
|
|
kShbInvalidArg = 9,
|
|
kShbBufferInvalid = 10,
|
|
kShbOutOfMem = 11,
|
|
kShbAlreadyReseting = 12,
|
|
kShbAlreadySignaling = 13,
|
|
kShbExceedDataSizeLimit = 14,
|
|
|
|
} tShbError;
|
|
|
|
// 2006/08/24 d.k.: Priority for threads (new data, job signaling)
|
|
typedef enum {
|
|
kShbPriorityLow = 0,
|
|
kShbPriorityNormal = 1,
|
|
kshbPriorityHigh = 2
|
|
} tShbPriority;
|
|
|
|
typedef struct {
|
|
unsigned int m_uiFullBlockSize; // real size of allocated block (incl. alignment fill bytes)
|
|
unsigned long m_ulAvailableSize; // still available size for data
|
|
unsigned long m_ulWrIndex; // current write index
|
|
unsigned int m_fBufferCompleted; // TRUE if allocated block is complete filled with data
|
|
|
|
} tShbCirChunk;
|
|
|
|
typedef void *tShbInstance;
|
|
|
|
typedef void (*tShbCirSigHndlrNewData) (tShbInstance pShbInstance_p,
|
|
unsigned long ulDataBlockSize_p);
|
|
typedef void (*tShbCirSigHndlrReset) (tShbInstance pShbInstance_p,
|
|
unsigned int fTimeOut_p);
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Prototypes
|
|
//---------------------------------------------------------------------------
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
tShbError ShbInit(void);
|
|
tShbError ShbExit(void);
|
|
|
|
// Circular Shared Buffer
|
|
tShbError ShbCirAllocBuffer(unsigned long ulBufferSize_p,
|
|
const char *pszBufferID_p,
|
|
tShbInstance * ppShbInstance_p,
|
|
unsigned int *pfShbNewCreated_p);
|
|
tShbError ShbCirReleaseBuffer(tShbInstance pShbInstance_p);
|
|
|
|
|
|
tShbError ShbCirResetBuffer(tShbInstance pShbInstance_p,
|
|
unsigned long ulTimeOut_p,
|
|
tShbCirSigHndlrReset
|
|
pfnSignalHandlerReset_p);
|
|
tShbError ShbCirWriteDataBlock(tShbInstance pShbInstance_p,
|
|
const void *pSrcDataBlock_p,
|
|
unsigned long ulDataBlockSize_p);
|
|
tShbError ShbCirAllocDataBlock(tShbInstance pShbInstance_p,
|
|
tShbCirChunk * pShbCirChunk_p,
|
|
unsigned long ulDataBufferSize_p);
|
|
tShbError ShbCirWriteDataChunk(tShbInstance pShbInstance_p,
|
|
tShbCirChunk * pShbCirChunk_p,
|
|
const void *pSrcDataChunk_p,
|
|
unsigned long ulDataChunkSize_p,
|
|
unsigned int *pfBufferCompleted_p);
|
|
tShbError ShbCirReadDataBlock(tShbInstance pShbInstance_p,
|
|
void *pDstDataBlock_p,
|
|
unsigned long ulRdBuffSize_p,
|
|
unsigned long *pulDataBlockSize_p);
|
|
tShbError ShbCirGetReadDataSize(tShbInstance pShbInstance_p,
|
|
unsigned long *pulDataBlockSize_p);
|
|
tShbError ShbCirGetReadBlockCount(tShbInstance pShbInstance_p,
|
|
unsigned long *pulDataBlockCount_p);
|
|
tShbError ShbCirSetSignalHandlerNewData(tShbInstance pShbInstance_p,
|
|
tShbCirSigHndlrNewData
|
|
pfnShbSignalHandlerNewData_p,
|
|
tShbPriority ShbPriority_p);
|
|
|
|
|
|
// Linear Shared Buffer
|
|
tShbError ShbLinAllocBuffer(unsigned long ulBufferSize_p,
|
|
const char *pszBufferID_p,
|
|
tShbInstance * ppShbInstance_p,
|
|
unsigned int *pfShbNewCreated_p);
|
|
tShbError ShbLinReleaseBuffer(tShbInstance pShbInstance_p);
|
|
|
|
|
|
tShbError ShbLinWriteDataBlock(tShbInstance pShbInstance_p,
|
|
unsigned long ulDstBufferOffs_p,
|
|
const void *pSrcDataBlock_p,
|
|
unsigned long ulDataBlockSize_p);
|
|
tShbError ShbLinReadDataBlock(tShbInstance pShbInstance_p,
|
|
void *pDstDataBlock_p,
|
|
unsigned long ulSrcBufferOffs_p,
|
|
unsigned long ulDataBlockSize_p);
|
|
|
|
|
|
#ifndef NDEBUG
|
|
tShbError ShbCirTraceBuffer(tShbInstance pShbInstance_p);
|
|
tShbError ShbLinTraceBuffer(tShbInstance pShbInstance_p);
|
|
tShbError ShbTraceDump(const unsigned char *pabStartAddr_p,
|
|
unsigned long ulDataSize_p,
|
|
unsigned long ulAddrOffset_p,
|
|
const char *pszInfoText_p);
|
|
#else
|
|
#define ShbCirTraceBuffer(p0)
|
|
#define ShbLinTraceBuffer(p0)
|
|
#define ShbTraceDump(p0, p1, p2, p3)
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // #ifndef _SHAREDBUFF_H_
|