#include <linux/completion.h>
#include <linux/err.h>
#include <linux/gpio/driver.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/spinlock.h>
#include <linux/virtio_config.h>
#include <uapi/linux/virtio_gpio.h>
#include <uapi/linux/virtio_ids.h>
struct virtio_gpio_line { … };
struct vgpio_irq_line { … };
struct virtio_gpio { … };
static int _virtio_gpio_req(struct virtio_gpio *vgpio, u16 type, u16 gpio,
u8 txvalue, u8 *rxvalue, void *response, u32 rxlen)
{ … }
static int virtio_gpio_req(struct virtio_gpio *vgpio, u16 type, u16 gpio,
u8 txvalue, u8 *rxvalue)
{ … }
static void virtio_gpio_free(struct gpio_chip *gc, unsigned int gpio)
{ … }
static int virtio_gpio_get_direction(struct gpio_chip *gc, unsigned int gpio)
{ … }
static int virtio_gpio_direction_input(struct gpio_chip *gc, unsigned int gpio)
{ … }
static int virtio_gpio_direction_output(struct gpio_chip *gc, unsigned int gpio,
int value)
{ … }
static int virtio_gpio_get(struct gpio_chip *gc, unsigned int gpio)
{ … }
static void virtio_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
{ … }
static void virtio_gpio_irq_prepare(struct virtio_gpio *vgpio, u16 gpio)
{ … }
static void virtio_gpio_irq_enable(struct irq_data *d)
{ … }
static void virtio_gpio_irq_disable(struct irq_data *d)
{ … }
static void virtio_gpio_irq_mask(struct irq_data *d)
{ … }
static void virtio_gpio_irq_unmask(struct irq_data *d)
{ … }
static int virtio_gpio_irq_set_type(struct irq_data *d, unsigned int type)
{ … }
static void virtio_gpio_irq_bus_lock(struct irq_data *d)
{ … }
static void virtio_gpio_irq_bus_sync_unlock(struct irq_data *d)
{ … }
static struct irq_chip vgpio_irq_chip = …;
static bool ignore_irq(struct virtio_gpio *vgpio, int gpio,
struct vgpio_irq_line *irq_line)
{ … }
static void virtio_gpio_event_vq(struct virtqueue *vq)
{ … }
static void virtio_gpio_request_vq(struct virtqueue *vq)
{ … }
static void virtio_gpio_free_vqs(struct virtio_device *vdev)
{ … }
static int virtio_gpio_alloc_vqs(struct virtio_gpio *vgpio,
struct virtio_device *vdev)
{ … }
static const char **virtio_gpio_get_names(struct virtio_gpio *vgpio,
u32 gpio_names_size, u16 ngpio)
{ … }
static int virtio_gpio_probe(struct virtio_device *vdev)
{ … }
static void virtio_gpio_remove(struct virtio_device *vdev)
{ … }
static const struct virtio_device_id id_table[] = …;
MODULE_DEVICE_TABLE(virtio, id_table);
static const unsigned int features[] = …;
static struct virtio_driver virtio_gpio_driver = …;
module_virtio_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;