xref: /linux/include/uapi/linux/virtio_gpio.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
13a29355aSViresh Kumar /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
23a29355aSViresh Kumar 
33a29355aSViresh Kumar #ifndef _LINUX_VIRTIO_GPIO_H
43a29355aSViresh Kumar #define _LINUX_VIRTIO_GPIO_H
53a29355aSViresh Kumar 
63a29355aSViresh Kumar #include <linux/types.h>
73a29355aSViresh Kumar 
8eff5cdd7SViresh Kumar /* Virtio GPIO Feature bits */
9eff5cdd7SViresh Kumar #define VIRTIO_GPIO_F_IRQ			0
10eff5cdd7SViresh Kumar 
113a29355aSViresh Kumar /* Virtio GPIO request types */
123a29355aSViresh Kumar #define VIRTIO_GPIO_MSG_GET_NAMES		0x0001
133a29355aSViresh Kumar #define VIRTIO_GPIO_MSG_GET_DIRECTION		0x0002
143a29355aSViresh Kumar #define VIRTIO_GPIO_MSG_SET_DIRECTION		0x0003
153a29355aSViresh Kumar #define VIRTIO_GPIO_MSG_GET_VALUE		0x0004
163a29355aSViresh Kumar #define VIRTIO_GPIO_MSG_SET_VALUE		0x0005
17eff5cdd7SViresh Kumar #define VIRTIO_GPIO_MSG_IRQ_TYPE		0x0006
183a29355aSViresh Kumar 
193a29355aSViresh Kumar /* Possible values of the status field */
203a29355aSViresh Kumar #define VIRTIO_GPIO_STATUS_OK			0x0
213a29355aSViresh Kumar #define VIRTIO_GPIO_STATUS_ERR			0x1
223a29355aSViresh Kumar 
233a29355aSViresh Kumar /* Direction types */
243a29355aSViresh Kumar #define VIRTIO_GPIO_DIRECTION_NONE		0x00
253a29355aSViresh Kumar #define VIRTIO_GPIO_DIRECTION_OUT		0x01
263a29355aSViresh Kumar #define VIRTIO_GPIO_DIRECTION_IN		0x02
273a29355aSViresh Kumar 
28eff5cdd7SViresh Kumar /* Virtio GPIO IRQ types */
29eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_NONE		0x00
30eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_EDGE_RISING	0x01
31eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_EDGE_FALLING	0x02
32eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_EDGE_BOTH		0x03
33eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_LEVEL_HIGH		0x04
34eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_TYPE_LEVEL_LOW		0x08
35eff5cdd7SViresh Kumar 
363a29355aSViresh Kumar struct virtio_gpio_config {
3717395d77SViresh Kumar 	__le16 ngpio;
383a29355aSViresh Kumar 	__u8 padding[2];
3917395d77SViresh Kumar 	__le32 gpio_names_size;
40*7d0003daSMichael S. Tsirkin };
413a29355aSViresh Kumar 
423a29355aSViresh Kumar /* Virtio GPIO Request / Response */
433a29355aSViresh Kumar struct virtio_gpio_request {
4417395d77SViresh Kumar 	__le16 type;
4517395d77SViresh Kumar 	__le16 gpio;
4617395d77SViresh Kumar 	__le32 value;
473a29355aSViresh Kumar };
483a29355aSViresh Kumar 
493a29355aSViresh Kumar struct virtio_gpio_response {
503a29355aSViresh Kumar 	__u8 status;
513a29355aSViresh Kumar 	__u8 value;
523a29355aSViresh Kumar };
533a29355aSViresh Kumar 
543a29355aSViresh Kumar struct virtio_gpio_response_get_names {
553a29355aSViresh Kumar 	__u8 status;
563a29355aSViresh Kumar 	__u8 value[];
573a29355aSViresh Kumar };
583a29355aSViresh Kumar 
59eff5cdd7SViresh Kumar /* Virtio GPIO IRQ Request / Response */
60eff5cdd7SViresh Kumar struct virtio_gpio_irq_request {
61eff5cdd7SViresh Kumar 	__le16 gpio;
62eff5cdd7SViresh Kumar };
63eff5cdd7SViresh Kumar 
64eff5cdd7SViresh Kumar struct virtio_gpio_irq_response {
65eff5cdd7SViresh Kumar 	__u8 status;
66eff5cdd7SViresh Kumar };
67eff5cdd7SViresh Kumar 
68eff5cdd7SViresh Kumar /* Possible values of the interrupt status field */
69eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_STATUS_INVALID		0x0
70eff5cdd7SViresh Kumar #define VIRTIO_GPIO_IRQ_STATUS_VALID		0x1
71eff5cdd7SViresh Kumar 
723a29355aSViresh Kumar #endif /* _LINUX_VIRTIO_GPIO_H */
73