forked from mirrors/linux
		
	Based on 2 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 as published by the free software foundation # extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 4122 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Enrico Weigelt <info@metux.net> Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190604081206.933168790@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0-only */
 | 
						|
/*
 | 
						|
 * Copyright (C) 2013-2014 Linaro Ltd.
 | 
						|
 * Author: Jassi Brar <jassisinghbrar@gmail.com>
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __MAILBOX_CLIENT_H
 | 
						|
#define __MAILBOX_CLIENT_H
 | 
						|
 | 
						|
#include <linux/of.h>
 | 
						|
#include <linux/device.h>
 | 
						|
 | 
						|
struct mbox_chan;
 | 
						|
 | 
						|
/**
 | 
						|
 * struct mbox_client - User of a mailbox
 | 
						|
 * @dev:		The client device
 | 
						|
 * @tx_block:		If the mbox_send_message should block until data is
 | 
						|
 *			transmitted.
 | 
						|
 * @tx_tout:		Max block period in ms before TX is assumed failure
 | 
						|
 * @knows_txdone:	If the client could run the TX state machine. Usually
 | 
						|
 *			if the client receives some ACK packet for transmission.
 | 
						|
 *			Unused if the controller already has TX_Done/RTR IRQ.
 | 
						|
 * @rx_callback:	Atomic callback to provide client the data received
 | 
						|
 * @tx_prepare: 	Atomic callback to ask client to prepare the payload
 | 
						|
 *			before initiating the transmission if required.
 | 
						|
 * @tx_done:		Atomic callback to tell client of data transmission
 | 
						|
 */
 | 
						|
struct mbox_client {
 | 
						|
	struct device *dev;
 | 
						|
	bool tx_block;
 | 
						|
	unsigned long tx_tout;
 | 
						|
	bool knows_txdone;
 | 
						|
 | 
						|
	void (*rx_callback)(struct mbox_client *cl, void *mssg);
 | 
						|
	void (*tx_prepare)(struct mbox_client *cl, void *mssg);
 | 
						|
	void (*tx_done)(struct mbox_client *cl, void *mssg, int r);
 | 
						|
};
 | 
						|
 | 
						|
struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl,
 | 
						|
					      const char *name);
 | 
						|
struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index);
 | 
						|
int mbox_send_message(struct mbox_chan *chan, void *mssg);
 | 
						|
int mbox_flush(struct mbox_chan *chan, unsigned long timeout);
 | 
						|
void mbox_client_txdone(struct mbox_chan *chan, int r); /* atomic */
 | 
						|
bool mbox_client_peek_data(struct mbox_chan *chan); /* atomic */
 | 
						|
void mbox_free_channel(struct mbox_chan *chan); /* may sleep */
 | 
						|
 | 
						|
#endif /* __MAILBOX_CLIENT_H */
 |