xref: /openbmc/linux/drivers/scsi/arm/msgqueue.h (revision c4e78957)
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
80