xref: /openbmc/linux/drivers/scsi/arm/msgqueue.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  *  linux/drivers/acorn/scsi/msgqueue.h
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  *  Copyright (C) 1997 Russell King
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  *  message queue handling
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds #ifndef MSGQUEUE_H
101da177e4SLinus Torvalds #define MSGQUEUE_H
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds struct message {
131da177e4SLinus Torvalds     char msg[8];
141da177e4SLinus Torvalds     int length;
151da177e4SLinus Torvalds     int fifo;
161da177e4SLinus Torvalds };
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds struct msgqueue_entry {
191da177e4SLinus Torvalds     struct message msg;
201da177e4SLinus Torvalds     struct msgqueue_entry *next;
211da177e4SLinus Torvalds };
221da177e4SLinus Torvalds 
231da177e4SLinus Torvalds #define NR_MESSAGES 4
241da177e4SLinus Torvalds 
251da177e4SLinus Torvalds typedef struct {
261da177e4SLinus Torvalds     struct msgqueue_entry *qe;
271da177e4SLinus Torvalds     struct msgqueue_entry *free;
281da177e4SLinus Torvalds     struct msgqueue_entry entries[NR_MESSAGES];
291da177e4SLinus Torvalds } MsgQueue_t;
301da177e4SLinus Torvalds 
311da177e4SLinus Torvalds /*
321da177e4SLinus Torvalds  * Function: void msgqueue_initialise(MsgQueue_t *msgq)
331da177e4SLinus Torvalds  * Purpose : initialise a message queue
341da177e4SLinus Torvalds  * Params  : msgq - queue to initialise
351da177e4SLinus Torvalds  */
361da177e4SLinus Torvalds extern void msgqueue_initialise(MsgQueue_t *msgq);
371da177e4SLinus Torvalds 
381da177e4SLinus Torvalds /*
391da177e4SLinus Torvalds  * Function: void msgqueue_free(MsgQueue_t *msgq)
401da177e4SLinus Torvalds  * Purpose : free a queue
411da177e4SLinus Torvalds  * Params  : msgq - queue to free
421da177e4SLinus Torvalds  */
431da177e4SLinus Torvalds extern void msgqueue_free(MsgQueue_t *msgq);
441da177e4SLinus Torvalds 
451da177e4SLinus Torvalds /*
461da177e4SLinus Torvalds  * Function: int msgqueue_msglength(MsgQueue_t *msgq)
471da177e4SLinus Torvalds  * Purpose : calculate the total length of all messages on the message queue
481da177e4SLinus Torvalds  * Params  : msgq - queue to examine
491da177e4SLinus Torvalds  * Returns : number of bytes of messages in queue
501da177e4SLinus Torvalds  */
511da177e4SLinus Torvalds extern int msgqueue_msglength(MsgQueue_t *msgq);
521da177e4SLinus Torvalds 
531da177e4SLinus Torvalds /*
541da177e4SLinus Torvalds  * Function: struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno)
551da177e4SLinus Torvalds  * Purpose : return a message & its length
561da177e4SLinus Torvalds  * Params  : msgq   - queue to obtain message from
571da177e4SLinus Torvalds  *         : msgno  - message number
581da177e4SLinus Torvalds  * Returns : pointer to message string, or NULL
591da177e4SLinus Torvalds  */
601da177e4SLinus Torvalds extern struct message *msgqueue_getmsg(MsgQueue_t *msgq, int msgno);
611da177e4SLinus Torvalds 
621da177e4SLinus Torvalds /*
631da177e4SLinus Torvalds  * Function: int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...)
641da177e4SLinus Torvalds  * Purpose : add a message onto a message queue
651da177e4SLinus Torvalds  * Params  : msgq   - queue to add message on
661da177e4SLinus Torvalds  *	     length - length of message
671da177e4SLinus Torvalds  *	     ...    - message bytes
681da177e4SLinus Torvalds  * Returns : != 0 if successful
691da177e4SLinus Torvalds  */
701da177e4SLinus Torvalds extern int msgqueue_addmsg(MsgQueue_t *msgq, int length, ...);
711da177e4SLinus Torvalds 
721da177e4SLinus Torvalds /*
731da177e4SLinus Torvalds  * Function: void msgqueue_flush(MsgQueue_t *msgq)
741da177e4SLinus Torvalds  * Purpose : flush all messages from message queue
751da177e4SLinus Torvalds  * Params  : msgq - queue to flush
761da177e4SLinus Torvalds  */
771da177e4SLinus Torvalds extern void msgqueue_flush(MsgQueue_t *msgq);
781da177e4SLinus Torvalds 
791da177e4SLinus Torvalds #endif
80