diff options
Diffstat (limited to 'c/src/lib/libcpu/sh/sh7032/include/ioqueue.h')
-rw-r--r-- | c/src/lib/libcpu/sh/sh7032/include/ioqueue.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/sh/sh7032/include/ioqueue.h b/c/src/lib/libcpu/sh/sh7032/include/ioqueue.h new file mode 100644 index 0000000000..55020acfad --- /dev/null +++ b/c/src/lib/libcpu/sh/sh7032/include/ioqueue.h @@ -0,0 +1,77 @@ +/* + * Defines for low level queue management + * + * Author: Ralf Corsepius (corsepiu@faw.uni-ulm.de) + * + * COPYRIGHT (c) 1997-1998, Ralf Corsepius, Germany + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * + * COPYRIGHT (c) 1998. + * On-Line Applications Research Corporation (OAR). + * Copyright assigned to U.S. Government, 1994. + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.OARcorp.com/rtems/license.html. + * + * $Id$ + * + */ + +#ifndef _io_queue_h +#define _io_queue_h + +#include <stdlib.h> /* size_t */ + +/* + * NOTE: size needs to be a power of 2 + */ +#define IO_QUEUE(type,size,name) \ +typedef struct { \ + volatile type queue[size] ; \ + volatile unsigned short tail ; \ + volatile unsigned short head ; \ +} name ; + +#define IO_QUEUE_FULL(queue, size) \ + ((queue)->tail == (((queue)->head+1) & ((size)-1))) + +#define IO_QUEUE_EMPTY(queue) \ + (((queue)->tail) == ((queue)->head)) + +#define IO_QUEUE_INIT(queue) \ + (queue)->tail = (queue)->head = 0 + +#define IO_QUEUE_ADD(queue,size) \ + (queue)->head = (((queue)->head + 1) & ((size)-1)) + +#define IO_QUEUE_SUB(queue,size) \ + (queue)->tail = (((queue)->tail + 1) & ((size)-1)) + +#define IO_QUEUE_PUT(_queue,item) \ +{ \ + size_t i; \ + unsigned char* dest = (unsigned char*) ((_queue)->queue[(_queue)->head]); \ + unsigned char* src = (unsigned char*) (item); \ + for( i = 0; i < sizeof(item); i++) \ + { \ + dest[i] = src[i]; \ + } \ +} + +#define IO_QUEUE_GET(_queue,item) \ +{\ + size_t i; \ + unsigned char *src = (unsigned char*) (_queue)->queue[(_queue)->tail]; \ + unsigned char *dest = (unsigned char*) (item); \ + for( i=0; i< sizeof(item); i++)\ + {\ + dest[i] = src[i]; \ + }\ +} + +#endif |