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