superio.h (1635B)
1/* 2 * Generic ISA Super I/O 3 * 4 * Copyright (c) 2018 Philippe Mathieu-Daudé 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2 or later. 7 * See the COPYING file in the top-level directory. 8 * SPDX-License-Identifier: GPL-2.0-or-later 9 */ 10#ifndef HW_ISA_SUPERIO_H 11#define HW_ISA_SUPERIO_H 12 13#include "sysemu/sysemu.h" 14#include "hw/isa/isa.h" 15#include "qom/object.h" 16 17#define TYPE_ISA_SUPERIO "isa-superio" 18typedef struct ISASuperIOClass ISASuperIOClass; 19typedef struct ISASuperIODevice ISASuperIODevice; 20DECLARE_OBJ_CHECKERS(ISASuperIODevice, ISASuperIOClass, 21 ISA_SUPERIO, TYPE_ISA_SUPERIO) 22 23#define SUPERIO_MAX_SERIAL_PORTS 4 24 25struct ISASuperIODevice { 26 /*< private >*/ 27 ISADevice parent_obj; 28 /*< public >*/ 29 30 ISADevice *parallel[MAX_PARALLEL_PORTS]; 31 ISADevice *serial[SUPERIO_MAX_SERIAL_PORTS]; 32 ISADevice *floppy; 33 ISADevice *kbc; 34 ISADevice *ide; 35}; 36 37typedef struct ISASuperIOFuncs { 38 size_t count; 39 bool (*is_enabled)(ISASuperIODevice *sio, uint8_t index); 40 uint16_t (*get_iobase)(ISASuperIODevice *sio, uint8_t index); 41 unsigned int (*get_irq)(ISASuperIODevice *sio, uint8_t index); 42 unsigned int (*get_dma)(ISASuperIODevice *sio, uint8_t index); 43} ISASuperIOFuncs; 44 45struct ISASuperIOClass { 46 /*< private >*/ 47 ISADeviceClass parent_class; 48 /*< public >*/ 49 DeviceRealize parent_realize; 50 51 ISASuperIOFuncs parallel; 52 ISASuperIOFuncs serial; 53 ISASuperIOFuncs floppy; 54 ISASuperIOFuncs ide; 55}; 56 57#define TYPE_FDC37M81X_SUPERIO "fdc37m81x-superio" 58#define TYPE_SMC37C669_SUPERIO "smc37c669-superio" 59 60#endif /* HW_ISA_SUPERIO_H */