#ifndef SUPERIO_H
#define SUPERIO_H
typedef enum superio_vendor {
SUPERIO_VENDOR_NONE,
SUPERIO_VENDOR_ITE,
SUPERIO_VENDOR_NUVOTON,
SUPERIO_VENDOR_FINTEK,
SUPERIO_VENDOR_MAX
} superio_vendor_t;
typedef enum superio_dev_type {
SUPERIO_DEV_NONE,
SUPERIO_DEV_HWM,
SUPERIO_DEV_WDT,
SUPERIO_DEV_GPIO,
SUPERIO_DEV_MAX
} superio_dev_type_t;
superio_vendor_t superio_vendor(device_t dev);
uint16_t superio_devid(device_t dev);
uint8_t superio_revid(device_t dev);
int superio_extid(device_t dev);
uint8_t superio_read(device_t dev, uint8_t reg);
uint8_t superio_ldn_read(device_t dev, uint8_t ldn, uint8_t reg);
void superio_write(device_t dev, uint8_t reg, uint8_t val);
void superio_ldn_write(device_t dev, uint8_t ldn, uint8_t reg, uint8_t val);
bool superio_dev_enabled(device_t dev, uint8_t mask);
void superio_dev_enable(device_t dev, uint8_t mask);
void superio_dev_disable(device_t dev, uint8_t mask);
device_t superio_find_dev(device_t superio, superio_dev_type_t type,
int ldn);
enum superio_ivars {
SUPERIO_IVAR_LDN = BUS_IVARS_SUPERIO,
SUPERIO_IVAR_TYPE,
SUPERIO_IVAR_IOBASE,
SUPERIO_IVAR_IOBASE2,
SUPERIO_IVAR_IRQ,
SUPERIO_IVAR_DMA
};
#define SUPERIO_ACCESSOR(var, ivar, type) \
__BUS_ACCESSOR(superio, var, SUPERIO, ivar, type)
SUPERIO_ACCESSOR(ldn, LDN, uint8_t)
SUPERIO_ACCESSOR(type, TYPE, superio_dev_type_t)
SUPERIO_ACCESSOR(iobase, IOBASE, uint16_t)
SUPERIO_ACCESSOR(iobase2, IOBASE2, uint16_t)
SUPERIO_ACCESSOR(irq, IRQ, uint8_t)
SUPERIO_ACCESSOR(dma, DMA, uint8_t)
#undef SUPERIO_ACCESSOR
#endif