Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 
0003 #ifndef _LINUX_VIRTIO_GPIO_H
0004 #define _LINUX_VIRTIO_GPIO_H
0005 
0006 #include <linux/types.h>
0007 
0008 /* Virtio GPIO Feature bits */
0009 #define VIRTIO_GPIO_F_IRQ           0
0010 
0011 /* Virtio GPIO request types */
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 /* Possible values of the status field */
0020 #define VIRTIO_GPIO_STATUS_OK           0x0
0021 #define VIRTIO_GPIO_STATUS_ERR          0x1
0022 
0023 /* Direction types */
0024 #define VIRTIO_GPIO_DIRECTION_NONE      0x00
0025 #define VIRTIO_GPIO_DIRECTION_OUT       0x01
0026 #define VIRTIO_GPIO_DIRECTION_IN        0x02
0027 
0028 /* Virtio GPIO IRQ types */
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 /* Virtio GPIO Request / Response */
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 /* Virtio GPIO IRQ Request / Response */
0060 struct virtio_gpio_irq_request {
0061     __le16 gpio;
0062 };
0063 
0064 struct virtio_gpio_irq_response {
0065     __u8 status;
0066 };
0067 
0068 /* Possible values of the interrupt status field */
0069 #define VIRTIO_GPIO_IRQ_STATUS_INVALID      0x0
0070 #define VIRTIO_GPIO_IRQ_STATUS_VALID        0x1
0071 
0072 #endif /* _LINUX_VIRTIO_GPIO_H */