112 lines
2.4 KiB
C
112 lines
2.4 KiB
C
|
/*
|
||
|
* Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
|
||
|
*
|
||
|
* This software may be freely used, copied, modified, and distributed
|
||
|
* provided that the above copyright notice is preserved in all copies of the
|
||
|
* software.
|
||
|
*/
|
||
|
|
||
|
/* -*-C-*-
|
||
|
*
|
||
|
* $Revision$
|
||
|
* $Date$
|
||
|
*
|
||
|
*
|
||
|
* Project: ANGEL
|
||
|
*
|
||
|
* Title: Public interface to buffer management
|
||
|
*/
|
||
|
|
||
|
#ifndef angel_buffers_h
|
||
|
#define angel_buffers_h
|
||
|
|
||
|
#include "chandefs.h" /* CHAN_HEADER_SIZE */
|
||
|
|
||
|
|
||
|
/* the handle to a buffer */
|
||
|
typedef unsigned char *p_Buffer;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Angel Packets are structured as a fixed size header, followed
|
||
|
* by the packet data
|
||
|
*/
|
||
|
#ifdef TARGET
|
||
|
# define BUFFERDATA(b) (b) /* channels layer takes care of it */
|
||
|
#else
|
||
|
# define BUFFERDATA(b) (&((b)[CHAN_HEADER_SIZE]))
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* The buffer management function prototypes are only applicable
|
||
|
* when compiling target code
|
||
|
*/
|
||
|
#ifdef TARGET
|
||
|
|
||
|
/*
|
||
|
* Function: Angel_BufferQuerySizes
|
||
|
* Purpose: Request infomation on the default and maximum buffer sizes
|
||
|
* that can be allocated
|
||
|
*
|
||
|
* Params:
|
||
|
* In/Out: default_size, max_size: pointers to place the
|
||
|
* sizes in on return
|
||
|
*/
|
||
|
|
||
|
void Angel_BufferQuerySizes(unsigned int *default_size,
|
||
|
unsigned int *max_size );
|
||
|
|
||
|
/*
|
||
|
* Function: Angel_RxEnginBuffersLeft
|
||
|
* Purpose: return the number of free buffers
|
||
|
*
|
||
|
* Params:
|
||
|
* Returns: number of free buffers
|
||
|
*/
|
||
|
unsigned int Angel_BuffersLeft( void );
|
||
|
|
||
|
/*
|
||
|
* Function: Angel_BufferAlloc
|
||
|
* Purpose: allocate a buffer that is at least req_size bytes long
|
||
|
*
|
||
|
* Params:
|
||
|
* Input: req_size the required size of the buffer
|
||
|
*
|
||
|
* Returns: pointer to the buffer NULL if unable to
|
||
|
* fulfil the request
|
||
|
*/
|
||
|
p_Buffer Angel_BufferAlloc(unsigned int req_size);
|
||
|
|
||
|
/*
|
||
|
* Function: Angel_BufferRelease
|
||
|
* Purpose: release a buffer back to the free pool
|
||
|
*
|
||
|
* Params:
|
||
|
* Input: pointer to the buffer to free
|
||
|
*/
|
||
|
void Angel_BufferRelease(p_Buffer buffer);
|
||
|
|
||
|
|
||
|
/* return values for angel_InitBuffers */
|
||
|
typedef enum buf_init_error{
|
||
|
INIT_BUF_OK,
|
||
|
INIT_BUF_FAIL
|
||
|
} buf_init_error;
|
||
|
|
||
|
/*
|
||
|
* Function: Angel_InitBuffers
|
||
|
* Purpose: Initalised and malloc the buffer pool
|
||
|
*
|
||
|
* Params:
|
||
|
* Returns: see above
|
||
|
*/
|
||
|
|
||
|
buf_init_error Angel_InitBuffers(void);
|
||
|
|
||
|
#endif /* def TARGET */
|
||
|
|
||
|
#endif /* ndef angel_buffers_h */
|
||
|
|
||
|
/* EOF buffers.h */
|