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