11854eb28SPhilippe Mathieu-Daudé /* 21854eb28SPhilippe Mathieu-Daudé * Generic ISA Super I/O 31854eb28SPhilippe Mathieu-Daudé * 41854eb28SPhilippe Mathieu-Daudé * Copyright (c) 2018 Philippe Mathieu-Daudé 51854eb28SPhilippe Mathieu-Daudé * 61854eb28SPhilippe Mathieu-Daudé * This code is licensed under the GNU GPLv2 and later. 71854eb28SPhilippe Mathieu-Daudé * See the COPYING file in the top-level directory. 81854eb28SPhilippe Mathieu-Daudé * SPDX-License-Identifier: GPL-2.0-or-later 91854eb28SPhilippe Mathieu-Daudé */ 101854eb28SPhilippe Mathieu-Daudé #ifndef HW_ISA_SUPERIO_H 111854eb28SPhilippe Mathieu-Daudé #define HW_ISA_SUPERIO_H 121854eb28SPhilippe Mathieu-Daudé 131854eb28SPhilippe Mathieu-Daudé #include "qemu-common.h" 141854eb28SPhilippe Mathieu-Daudé #include "sysemu/sysemu.h" 151854eb28SPhilippe Mathieu-Daudé #include "hw/isa/isa.h" 161854eb28SPhilippe Mathieu-Daudé 171854eb28SPhilippe Mathieu-Daudé #define TYPE_ISA_SUPERIO "isa-superio" 181854eb28SPhilippe Mathieu-Daudé #define ISA_SUPERIO(obj) \ 191854eb28SPhilippe Mathieu-Daudé OBJECT_CHECK(ISASuperIODevice, (obj), TYPE_ISA_SUPERIO) 201854eb28SPhilippe Mathieu-Daudé #define ISA_SUPERIO_GET_CLASS(obj) \ 211854eb28SPhilippe Mathieu-Daudé OBJECT_GET_CLASS(ISASuperIOClass, (obj), TYPE_ISA_SUPERIO) 221854eb28SPhilippe Mathieu-Daudé #define ISA_SUPERIO_CLASS(klass) \ 231854eb28SPhilippe Mathieu-Daudé OBJECT_CLASS_CHECK(ISASuperIOClass, (klass), TYPE_ISA_SUPERIO) 241854eb28SPhilippe Mathieu-Daudé 251854eb28SPhilippe Mathieu-Daudé typedef struct ISASuperIODevice { 264c3119a6SPhilippe Mathieu-Daudé /*< private >*/ 271854eb28SPhilippe Mathieu-Daudé ISADevice parent_obj; 284c3119a6SPhilippe Mathieu-Daudé /*< public >*/ 294c3119a6SPhilippe Mathieu-Daudé 304c3119a6SPhilippe Mathieu-Daudé ISADevice *parallel[MAX_PARALLEL_PORTS]; 31cd9526abSPhilippe Mathieu-Daudé ISADevice *serial[MAX_SERIAL_PORTS]; 326f6695b1SPhilippe Mathieu-Daudé ISADevice *floppy; 3372d3d8f0SPhilippe Mathieu-Daudé ISADevice *kbc; 34*c16a4e1bSPhilippe Mathieu-Daudé ISADevice *ide; 351854eb28SPhilippe Mathieu-Daudé } ISASuperIODevice; 361854eb28SPhilippe Mathieu-Daudé 371854eb28SPhilippe Mathieu-Daudé typedef struct ISASuperIOFuncs { 381854eb28SPhilippe Mathieu-Daudé size_t count; 391854eb28SPhilippe Mathieu-Daudé bool (*is_enabled)(ISASuperIODevice *sio, uint8_t index); 401854eb28SPhilippe Mathieu-Daudé uint16_t (*get_iobase)(ISASuperIODevice *sio, uint8_t index); 411854eb28SPhilippe Mathieu-Daudé unsigned int (*get_irq)(ISASuperIODevice *sio, uint8_t index); 421854eb28SPhilippe Mathieu-Daudé unsigned int (*get_dma)(ISASuperIODevice *sio, uint8_t index); 431854eb28SPhilippe Mathieu-Daudé } ISASuperIOFuncs; 441854eb28SPhilippe Mathieu-Daudé 451854eb28SPhilippe Mathieu-Daudé typedef struct ISASuperIOClass { 461854eb28SPhilippe Mathieu-Daudé /*< private >*/ 471854eb28SPhilippe Mathieu-Daudé ISADeviceClass parent_class; 481854eb28SPhilippe Mathieu-Daudé /*< public >*/ 491854eb28SPhilippe Mathieu-Daudé DeviceRealize parent_realize; 504c3119a6SPhilippe Mathieu-Daudé 514c3119a6SPhilippe Mathieu-Daudé ISASuperIOFuncs parallel; 52cd9526abSPhilippe Mathieu-Daudé ISASuperIOFuncs serial; 536f6695b1SPhilippe Mathieu-Daudé ISASuperIOFuncs floppy; 54*c16a4e1bSPhilippe Mathieu-Daudé ISASuperIOFuncs ide; 551854eb28SPhilippe Mathieu-Daudé } ISASuperIOClass; 561854eb28SPhilippe Mathieu-Daudé 571854eb28SPhilippe Mathieu-Daudé #endif /* HW_ISA_SUPERIO_H */ 58