83 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
	
		
			2.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  *  linux/drivers/acorn/scsi/msgqueue.h | ||
|  |  * | ||
|  |  *  Copyright (C) 1997 Russell King | ||
|  |  * | ||
|  |  * This program is free software; you can redistribute it and/or modify | ||
|  |  * it under the terms of the GNU General Public License version 2 as | ||
|  |  * published by the Free Software Foundation. | ||
|  |  * | ||
|  |  *  message queue handling | ||
|  |  */ | ||
|  | #ifndef MSGQUEUE_H
 | ||
|  | #define MSGQUEUE_H
 | ||
|  | 
 | ||
|  | struct message { | ||
|  |     char msg[8]; | ||
|  |     int length; | ||
|  |     int fifo; | ||
|  | }; | ||
|  | 
 | ||
|  | struct msgqueue_entry { | ||
|  |     struct message msg; | ||
|  |     struct msgqueue_entry *next; | ||
|  | }; | ||
|  | 
 | ||
|  | #define NR_MESSAGES 4
 | ||
|  | 
 | ||
|  | typedef struct { | ||
|  |     struct msgqueue_entry *qe; | ||
|  |     struct msgqueue_entry *free; | ||
|  |     struct msgqueue_entry entries[NR_MESSAGES]; | ||
|  | } MsgQueue_t; | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: void msgqueue_initialise(MsgQueue_t *msgq) | ||
|  |  * Purpose : initialise a message queue | ||
|  |  * Params  : msgq - queue to initialise | ||
|  |  */ | ||
|  | extern void msgqueue_initialise(MsgQueue_t *msgq); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: void msgqueue_free(MsgQueue_t *msgq) | ||
|  |  * Purpose : free a queue | ||
|  |  * Params  : msgq - queue to free | ||
|  |  */ | ||
|  | extern void msgqueue_free(MsgQueue_t *msgq); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: int msgqueue_msglength(MsgQueue_t *msgq) | ||
|  |  * Purpose : calculate the total length of all messages on the message queue | ||
|  |  * Params  : msgq - queue to examine | ||
|  |  * Returns : number of bytes of messages in queue | ||
|  |  */ | ||
|  | extern int msgqueue_msglength(MsgQueue_t *msgq); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno) | ||
|  |  * Purpose : return a message & its length | ||
|  |  * Params  : msgq   - queue to obtain message from | ||
|  |  *         : msgno  - message number | ||
|  |  * Returns : pointer to message string, or NULL | ||
|  |  */ | ||
|  | extern struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...) | ||
|  |  * Purpose : add a message onto a message queue | ||
|  |  * Params  : msgq   - queue to add message on | ||
|  |  *	     length - length of message | ||
|  |  *	     ...    - message bytes | ||
|  |  * Returns : != 0 if successful | ||
|  |  */ | ||
|  | extern int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * Function: void msgqueue_flush(MsgQueue_t *msgq) | ||
|  |  * Purpose : flush all messages from message queue | ||
|  |  * Params  : msgq - queue to flush | ||
|  |  */ | ||
|  | extern void msgqueue_flush(MsgQueue_t *msgq); | ||
|  | 
 | ||
|  | #endif
 |