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)
 |