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é * 6b822dfaeSPhilippe Mathieu-Daudé * This work is licensed under the terms of the GNU GPL, version 2 or 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 "sysemu/sysemu.h" 141854eb28SPhilippe Mathieu-Daudé #include "hw/isa/isa.h" 15db1015e9SEduardo Habkost #include "qom/object.h" 161854eb28SPhilippe Mathieu-Daudé 171854eb28SPhilippe Mathieu-Daudé #define TYPE_ISA_SUPERIO "isa-superio" 18db1015e9SEduardo Habkost typedef struct ISASuperIOClass ISASuperIOClass; 19db1015e9SEduardo Habkost typedef struct ISASuperIODevice ISASuperIODevice; 208110fa1dSEduardo Habkost DECLARE_OBJ_CHECKERS(ISASuperIODevice, ISASuperIOClass, 218110fa1dSEduardo Habkost ISA_SUPERIO, TYPE_ISA_SUPERIO) 221854eb28SPhilippe Mathieu-Daudé 232cd4f8acSPeter Maydell #define SUPERIO_MAX_SERIAL_PORTS 4 242cd4f8acSPeter Maydell 25db1015e9SEduardo Habkost 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]; 312cd4f8acSPeter Maydell ISADevice *serial[SUPERIO_MAX_SERIAL_PORTS]; 326f6695b1SPhilippe Mathieu-Daudé ISADevice *floppy; 3372d3d8f0SPhilippe Mathieu-Daudé ISADevice *kbc; 34c16a4e1bSPhilippe Mathieu-Daudé ISADevice *ide; 35db1015e9SEduardo Habkost }; 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é 45db1015e9SEduardo Habkost struct ISASuperIOClass { 461854eb28SPhilippe Mathieu-Daudé /*< private >*/ 47*97cfb5e4SPhilippe Mathieu-Daudé DeviceClass 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; 54c16a4e1bSPhilippe Mathieu-Daudé ISASuperIOFuncs ide; 55db1015e9SEduardo Habkost }; 561854eb28SPhilippe Mathieu-Daudé 577313b1f2SPhilippe Mathieu-Daudé #define TYPE_FDC37M81X_SUPERIO "fdc37m81x-superio" 587bea0dd4SPhilippe Mathieu-Daudé #define TYPE_SMC37C669_SUPERIO "smc37c669-superio" 597313b1f2SPhilippe Mathieu-Daudé 601854eb28SPhilippe Mathieu-Daudé #endif /* HW_ISA_SUPERIO_H */ 61