12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /*
- * SMC FDC37C669 Super I/O controller
- *
- * 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
- */
- #include "qemu/osdep.h"
- #include "hw/isa/superio.h"
- #include "qemu/module.h"
- /* UARTs (compatible with NS16450 or PC16550) */
- static uint16_t get_serial_iobase(ISASuperIODevice *sio, uint8_t index)
- {
- return index ? 0x2f8 : 0x3f8;
- }
- static unsigned int get_serial_irq(ISASuperIODevice *sio, uint8_t index)
- {
- return index ? 3 : 4;
- }
- /* Parallel port */
- static uint16_t get_parallel_iobase(ISASuperIODevice *sio, uint8_t index)
- {
- return 0x378;
- }
- static unsigned int get_parallel_irq(ISASuperIODevice *sio, uint8_t index)
- {
- return 7;
- }
- static unsigned int get_parallel_dma(ISASuperIODevice *sio, uint8_t index)
- {
- return 3;
- }
- /* Diskette controller (Software compatible with the Intel PC8477) */
- static uint16_t get_fdc_iobase(ISASuperIODevice *sio, uint8_t index)
- {
- return 0x3f0;
- }
- static unsigned int get_fdc_irq(ISASuperIODevice *sio, uint8_t index)
- {
- return 6;
- }
- static unsigned int get_fdc_dma(ISASuperIODevice *sio, uint8_t index)
- {
- return 2;
- }
- static void smc37c669_class_init(ObjectClass *klass, void *data)
- {
- ISASuperIOClass *sc = ISA_SUPERIO_CLASS(klass);
- sc->parallel = (ISASuperIOFuncs){
- .count = 1,
- .get_iobase = get_parallel_iobase,
- .get_irq = get_parallel_irq,
- .get_dma = get_parallel_dma,
- };
- sc->serial = (ISASuperIOFuncs){
- .count = 2,
- .get_iobase = get_serial_iobase,
- .get_irq = get_serial_irq,
- };
- sc->floppy = (ISASuperIOFuncs){
- .count = 1,
- .get_iobase = get_fdc_iobase,
- .get_irq = get_fdc_irq,
- .get_dma = get_fdc_dma,
- };
- sc->ide.count = 0;
- }
- static const TypeInfo smc37c669_type_info = {
- .name = TYPE_SMC37C669_SUPERIO,
- .parent = TYPE_ISA_SUPERIO,
- .class_size = sizeof(ISASuperIOClass),
- .class_init = smc37c669_class_init,
- };
- static void smc37c669_register_types(void)
- {
- type_register_static(&smc37c669_type_info);
- }
- type_init(smc37c669_register_types)
|