0001
0002
0003 #ifndef _LINUX_VIRTIO_GPIO_H
0004 #define _LINUX_VIRTIO_GPIO_H
0005
0006 #include <linux/types.h>
0007
0008
0009 #define VIRTIO_GPIO_F_IRQ 0
0010
0011
0012 #define VIRTIO_GPIO_MSG_GET_NAMES 0x0001
0013 #define VIRTIO_GPIO_MSG_GET_DIRECTION 0x0002
0014 #define VIRTIO_GPIO_MSG_SET_DIRECTION 0x0003
0015 #define VIRTIO_GPIO_MSG_GET_VALUE 0x0004
0016 #define VIRTIO_GPIO_MSG_SET_VALUE 0x0005
0017 #define VIRTIO_GPIO_MSG_IRQ_TYPE 0x0006
0018
0019
0020 #define VIRTIO_GPIO_STATUS_OK 0x0
0021 #define VIRTIO_GPIO_STATUS_ERR 0x1
0022
0023
0024 #define VIRTIO_GPIO_DIRECTION_NONE 0x00
0025 #define VIRTIO_GPIO_DIRECTION_OUT 0x01
0026 #define VIRTIO_GPIO_DIRECTION_IN 0x02
0027
0028
0029 #define VIRTIO_GPIO_IRQ_TYPE_NONE 0x00
0030 #define VIRTIO_GPIO_IRQ_TYPE_EDGE_RISING 0x01
0031 #define VIRTIO_GPIO_IRQ_TYPE_EDGE_FALLING 0x02
0032 #define VIRTIO_GPIO_IRQ_TYPE_EDGE_BOTH 0x03
0033 #define VIRTIO_GPIO_IRQ_TYPE_LEVEL_HIGH 0x04
0034 #define VIRTIO_GPIO_IRQ_TYPE_LEVEL_LOW 0x08
0035
0036 struct virtio_gpio_config {
0037 __le16 ngpio;
0038 __u8 padding[2];
0039 __le32 gpio_names_size;
0040 };
0041
0042
0043 struct virtio_gpio_request {
0044 __le16 type;
0045 __le16 gpio;
0046 __le32 value;
0047 };
0048
0049 struct virtio_gpio_response {
0050 __u8 status;
0051 __u8 value;
0052 };
0053
0054 struct virtio_gpio_response_get_names {
0055 __u8 status;
0056 __u8 value[];
0057 };
0058
0059
0060 struct virtio_gpio_irq_request {
0061 __le16 gpio;
0062 };
0063
0064 struct virtio_gpio_irq_response {
0065 __u8 status;
0066 };
0067
0068
0069 #define VIRTIO_GPIO_IRQ_STATUS_INVALID 0x0
0070 #define VIRTIO_GPIO_IRQ_STATUS_VALID 0x1
0071
0072 #endif