1 /* 2 * linux/drivers/acorn/scsi/msgqueue.h 3 * 4 * Copyright (C) 1997 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 * 10 * message queue handling 11 */ 12 #ifndef MSGQUEUE_H 13 #define MSGQUEUE_H 14 15 struct message { 16 char msg[8]; 17 int length; 18 int fifo; 19 }; 20 21 struct msgqueue_entry { 22 struct message msg; 23 struct msgqueue_entry *next; 24 }; 25 26 #define NR_MESSAGES 4 27 28 typedef struct { 29 struct msgqueue_entry *qe; 30 struct msgqueue_entry *free; 31 struct msgqueue_entry entries[NR_MESSAGES]; 32 } MsgQueue_t; 33 34 /* 35 * Function: void msgqueue_initialise(MsgQueue_t *msgq) 36 * Purpose : initialise a message queue 37 * Params : msgq - queue to initialise 38 */ 39 extern void msgqueue_initialise(MsgQueue_t *msgq); 40 41 /* 42 * Function: void msgqueue_free(MsgQueue_t *msgq) 43 * Purpose : free a queue 44 * Params : msgq - queue to free 45 */ 46 extern void msgqueue_free(MsgQueue_t *msgq); 47 48 /* 49 * Function: int msgqueue_msglength(MsgQueue_t *msgq) 50 * Purpose : calculate the total length of all messages on the message queue 51 * Params : msgq - queue to examine 52 * Returns : number of bytes of messages in queue 53 */ 54 extern int msgqueue_msglength(MsgQueue_t *msgq); 55 56 /* 57 * Function: struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno) 58 * Purpose : return a message & its length 59 * Params : msgq - queue to obtain message from 60 * : msgno - message number 61 * Returns : pointer to message string, or NULL 62 */ 63 extern struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno); 64 65 /* 66 * Function: int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...) 67 * Purpose : add a message onto a message queue 68 * Params : msgq - queue to add message on 69 * length - length of message 70 * ... - message bytes 71 * Returns : != 0 if successful 72 */ 73 extern int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...); 74 75 /* 76 * Function: void msgqueue_flush(MsgQueue_t *msgq) 77 * Purpose : flush all messages from message queue 78 * Params : msgq - queue to flush 79 */ 80 extern void msgqueue_flush(MsgQueue_t *msgq); 81 82 #endif 83