Linux Audio

Check our new training course

Linux kernel drivers training

Mar 31-Apr 9, 2025, special US time zones
Register
Loading...
Note: File does not exist in v6.2.
 1/*
 2 * omap-mbox.h: OMAP mailbox internal definitions
 3 *
 4 * This program is free software; you can redistribute it and/or modify
 5 * it under the terms of the GNU General Public License version 2 as
 6 * published by the Free Software Foundation.
 7 */
 8
 9#ifndef OMAP_MBOX_H
10#define OMAP_MBOX_H
11
12#include <linux/device.h>
13#include <linux/interrupt.h>
14#include <linux/kfifo.h>
15#include <linux/spinlock.h>
16#include <linux/workqueue.h>
17#include <linux/omap-mailbox.h>
18
19typedef int __bitwise omap_mbox_type_t;
20#define OMAP_MBOX_TYPE1 ((__force omap_mbox_type_t) 1)
21#define OMAP_MBOX_TYPE2 ((__force omap_mbox_type_t) 2)
22
23struct omap_mbox_ops {
24	omap_mbox_type_t	type;
25	int		(*startup)(struct omap_mbox *mbox);
26	void		(*shutdown)(struct omap_mbox *mbox);
27	/* fifo */
28	mbox_msg_t	(*fifo_read)(struct omap_mbox *mbox);
29	void		(*fifo_write)(struct omap_mbox *mbox, mbox_msg_t msg);
30	int		(*fifo_empty)(struct omap_mbox *mbox);
31	int		(*fifo_full)(struct omap_mbox *mbox);
32	/* irq */
33	void		(*enable_irq)(struct omap_mbox *mbox,
34						omap_mbox_irq_t irq);
35	void		(*disable_irq)(struct omap_mbox *mbox,
36						omap_mbox_irq_t irq);
37	void		(*ack_irq)(struct omap_mbox *mbox, omap_mbox_irq_t irq);
38	int		(*is_irq)(struct omap_mbox *mbox, omap_mbox_irq_t irq);
39	/* ctx */
40	void		(*save_ctx)(struct omap_mbox *mbox);
41	void		(*restore_ctx)(struct omap_mbox *mbox);
42};
43
44struct omap_mbox_queue {
45	spinlock_t		lock;
46	struct kfifo		fifo;
47	struct work_struct	work;
48	struct tasklet_struct	tasklet;
49	struct omap_mbox	*mbox;
50	bool full;
51};
52
53struct omap_mbox {
54	const char		*name;
55	int			irq;
56	struct omap_mbox_queue	*txq, *rxq;
57	struct omap_mbox_ops	*ops;
58	struct device		*dev;
59	void			*priv;
60	int			use_count;
61	struct blocking_notifier_head	notifier;
62};
63
64int omap_mbox_register(struct device *parent, struct omap_mbox **);
65int omap_mbox_unregister(void);
66
67#endif /* OMAP_MBOX_H */