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