/* * Generic ISA Super I/O * * Copyright (c) 2018 Philippe Mathieu-Daudé * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef HW_ISA_SUPERIO_H #define HW_ISA_SUPERIO_H #include "sysemu/sysemu.h" #include "hw/isa/isa.h" #include "qom/object.h" #define TYPE_ISA_SUPERIO "isa-superio" typedef struct ISASuperIOClass ISASuperIOClass; typedef struct ISASuperIODevice ISASuperIODevice; DECLARE_OBJ_CHECKERS(ISASuperIODevice, ISASuperIOClass, ISA_SUPERIO, TYPE_ISA_SUPERIO) #define SUPERIO_MAX_SERIAL_PORTS 4 struct ISASuperIODevice { /*< private >*/ ISADevice parent_obj; /*< public >*/ ISADevice *parallel[MAX_PARALLEL_PORTS]; ISADevice *serial[SUPERIO_MAX_SERIAL_PORTS]; ISADevice *floppy; ISADevice *kbc; ISADevice *ide; }; typedef struct ISASuperIOFuncs { size_t count; bool (*is_enabled)(ISASuperIODevice *sio, uint8_t index); uint16_t (*get_iobase)(ISASuperIODevice *sio, uint8_t index); unsigned int (*get_irq)(ISASuperIODevice *sio, uint8_t index); unsigned int (*get_dma)(ISASuperIODevice *sio, uint8_t index); } ISASuperIOFuncs; struct ISASuperIOClass { /*< private >*/ DeviceClass parent_class; /*< public >*/ DeviceRealize parent_realize; ISASuperIOFuncs parallel; ISASuperIOFuncs serial; ISASuperIOFuncs floppy; ISASuperIOFuncs ide; }; #define TYPE_FDC37M81X_SUPERIO "fdc37m81x-superio" #define TYPE_SMC37C669_SUPERIO "smc37c669-superio" #endif /* HW_ISA_SUPERIO_H */