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