1/*
2 * Virtio SCMI Device
3 *
4 * Copyright (c) 2023 Arm Ltd
5 *
6 * This header is BSD licensed so anyone can use the definitions
7 * to implement compatible drivers/servers:
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 *    notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 *    notice, this list of conditions and the following disclaimer in the
16 *    documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of IBM nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#ifndef VIRTIO_SCMI_H
35#define VIRTIO_SCMI_H
36
37#include <dev/virtio/virtqueue.h>
38
39/* Features bits */
40/* Device implements some SCMI notifications, or delayed responses */
41#define VIRTIO_SCMI_F_P2A_CHANNELS	(1 << 0)
42/* Device implements any SCMI statistics region */
43#define VIRTIO_SCMI_F_SHARED_MEMORY	(1 << 1)
44
45#define VIRTIO_SCMI_FEATURES	\
46	(VIRTIO_SCMI_F_P2A_CHANNELS | VIRTIO_SCMI_F_SHARED_MEMORY)
47
48/* Virtqueues */
49enum vtscmi_chan {
50	VIRTIO_SCMI_CHAN_A2P,
51	VIRTIO_SCMI_CHAN_P2A,
52	VIRTIO_SCMI_CHAN_MAX
53};
54
55typedef void virtio_scmi_rx_callback_t(void *msg, unsigned int len, void *priv);
56
57device_t virtio_scmi_transport_get(void);
58int virtio_scmi_channel_size_get(device_t dev, enum vtscmi_chan chan);
59int virtio_scmi_channel_callback_set(device_t dev, enum vtscmi_chan chan,
60				     virtio_scmi_rx_callback_t *cb, void *priv);
61int virtio_scmi_message_enqueue(device_t dev, enum vtscmi_chan chan,
62				void *buf, unsigned int tx_len,
63				unsigned int rx_len);
64void *virtio_scmi_message_poll(device_t dev, uint32_t *rx_len);
65
66#endif
67