zephyr/kernel/microkernel/include/k_pipe_buffer.h
Allan Stephens c41b4d24e2 Cosmetic changes to microkernel pipe buffer code
1) Re-orders routines to eliminate the need for forward referencing.
2) Makes routines non-global if they are only referenced by pipe
   buffer code itself.
3) Optimizes out an unnecessary wrapper routine.

Change-Id: I731db9c9125c58d98c5e350bdd1708456e2cf40c
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
2016-02-05 20:14:01 -05:00

96 lines
3.6 KiB
C

/* k_pipe_buffer.h */
/*
* Copyright (c) 1997-2010, 2014-2015 Wind River Systems, Inc.
*
* 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 Wind River Systems 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 HOLDER 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 _K_PIPE_BUFFER_H
#define _K_PIPE_BUFFER_H
#ifdef __cplusplus
extern "C" {
#endif
#include <kernel_struct.h>
/* low-level parameters: */
#define STORE_NBR_MARKERS
/* NOTE: the number of pending write and read Xfers is always stored,
as it is required for the channels to function properly. It is stored in the
field ChBuff.iNbrPendingWrites and iNbrPendingReads.
In the Writer and Reader MarkersList, the number of markers (==nbr. of
unreleased Xfers)
is monitored as well. They actually equal iNbrPendingWrites and
iNbrPendingReads.
Their existence depends on STORE_NBR_MARKERS. A reason to have them
additionally is that
some extra consistency checking is performed in the markers manipulation
functionality
itself.
Drawback: double storage of nbr. of pending write Xfers (but for test
purposes this is
acceptable I think)
*/
void BuffInit(unsigned char *pBuffer, int *piBuffSize, struct chbuff *pChBuff);
void BuffGetFreeSpaceTotal(struct chbuff *pBuff, int *piTotalFreeSpace);
void BuffGetFreeSpace(struct chbuff *pBuff, int *piTotalFreeSpace,
int *piFreeSpaceCont, int *piFreeSpaceAWA);
void BuffGetAvailDataTotal(struct chbuff *pBuff, int *piAvailDataTotal);
void BuffGetAvailData(struct chbuff *pBuff, int *piAvailDataTotal,
int *piAvailDataCont, int *piAvailDataAWA);
int BuffEmpty(struct chbuff *pBuff);
int BuffFull(struct chbuff *pBuff);
int BuffEnQ(struct chbuff *pBuff, int iSize, unsigned char **ppWrite);
int BuffEnQA(struct chbuff *pBuff, int iSize, unsigned char **ppWrite,
int *piTransferID);
void BuffEnQA_End(struct chbuff *pBuff, int iTransferID,
int iSize /* optional */);
int BuffDeQ(struct chbuff *pBuff, int iSize, unsigned char **ppRead);
int BuffDeQA(struct chbuff *pBuff, int iSize, unsigned char **ppRead,
int *piTransferID);
void BuffDeQA_End(struct chbuff *pBuff, int iTransferID,
int iSize /* optional */);
void ChannelCheck4Intrusion(struct chbuff *pChBuff,
unsigned char *pBegin, int iSize);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* _K_PIPE_BUFFER_H */