mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 b822dfaecd
			
		
	
	
		b822dfaecd
		
	
	
	
	
		
			
			The license is the 'GNU General Public License v2.0 or later', not 'and': This program is free software; you can redistribute it and/ori modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Fix the license comment. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20200312213712.16671-1-philmd@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
		
			
				
	
	
		
			117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			117 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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 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)
 |