Files
qemu-xteink/include/hw/gpio/esp32_gpio.h
T

41 lines
1.1 KiB
C

#pragma once
#include "hw/sysbus.h"
#include "hw/hw.h"
#include "hw/registerfields.h"
#define TYPE_ESP32_GPIO "esp32.gpio"
#define ESP32_GPIO(obj) OBJECT_CHECK(Esp32GpioState, (obj), TYPE_ESP32_GPIO)
#define ESP32_GPIO_GET_CLASS(obj) OBJECT_GET_CLASS(Esp32GpioClass, obj, TYPE_ESP32_GPIO)
#define ESP32_GPIO_CLASS(klass) OBJECT_CLASS_CHECK(Esp32GpioClass, klass, TYPE_ESP32_GPIO)
REG32(GPIO_STRAP, 0x0038)
#define ESP32_STRAP_MODE_FLASH_BOOT 0x12
#define ESP32_STRAP_MODE_UART_BOOT 0x0f
#define ESP32_GPIO_COUNT 32
#define ESP32_GPIO_INPUT "gpio-in"
#define ESP32_GPIO_OUTPUT "gpio-out"
typedef struct Esp32GpioState {
SysBusDevice parent_obj;
MemoryRegion iomem;
qemu_irq irq;
qemu_irq output_lines[ESP32_GPIO_COUNT];
uint32_t strap_mode;
uint32_t input_level;
uint32_t output_level;
uint32_t output_enable;
uint32_t interrupt_status;
uint32_t pin_config[ESP32_GPIO_COUNT];
hwaddr pin_config_base;
} Esp32GpioState;
typedef struct Esp32GpioClass {
SysBusDeviceClass parent_class;
} Esp32GpioClass;
void esp32_gpio_set_input_level(Esp32GpioState *s, int pin, bool level);