mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 0b8fa32f55
			
		
	
	
		0b8fa32f55
		
	
	
	
	
		
			
			Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20190523143508.25387-4-armbru@redhat.com> [Rebased with conflicts resolved automatically, except for hw/usb/dev-hub.c hw/misc/exynos4210_rng.c hw/misc/bcm2835_rng.c hw/misc/aspeed_scu.c hw/display/virtio-vga.c hw/arm/stm32f205_soc.c; ui/cocoa.m fixed up]
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * SMC FDC37C669 Super I/O controller
 | |
|  *
 | |
|  * Copyright (c) 2018 Philippe Mathieu-Daudé
 | |
|  *
 | |
|  * This code is licensed under the GNU GPLv2 and 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 bool is_serial_enabled(ISASuperIODevice *sio, uint8_t index)
 | |
| {
 | |
|     return index < 2;
 | |
| }
 | |
| 
 | |
| 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 bool is_parallel_enabled(ISASuperIODevice *sio, uint8_t index)
 | |
| {
 | |
|     return index < 1;
 | |
| }
 | |
| 
 | |
| 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 bool is_fdc_enabled(ISASuperIODevice *sio, uint8_t index)
 | |
| {
 | |
|     return index < 1;
 | |
| }
 | |
| 
 | |
| 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,
 | |
|         .is_enabled = is_parallel_enabled,
 | |
|         .get_iobase = get_parallel_iobase,
 | |
|         .get_irq    = get_parallel_irq,
 | |
|         .get_dma    = get_parallel_dma,
 | |
|     };
 | |
|     sc->serial = (ISASuperIOFuncs){
 | |
|         .count = 2,
 | |
|         .is_enabled = is_serial_enabled,
 | |
|         .get_iobase = get_serial_iobase,
 | |
|         .get_irq    = get_serial_irq,
 | |
|     };
 | |
|     sc->floppy = (ISASuperIOFuncs){
 | |
|         .count = 1,
 | |
|         .is_enabled = is_fdc_enabled,
 | |
|         .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,
 | |
|     .instance_size = sizeof(ISASuperIODevice),
 | |
|     .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)
 |