qemu

Форк
0
/
smc37c669-superio.c 
97 строк · 2.2 Кб
1
/*
2
 * SMC FDC37C669 Super I/O controller
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

11
#include "qemu/osdep.h"
12
#include "hw/isa/superio.h"
13
#include "qemu/module.h"
14

15
/* UARTs (compatible with NS16450 or PC16550) */
16

17
static uint16_t get_serial_iobase(ISASuperIODevice *sio, uint8_t index)
18
{
19
    return index ? 0x2f8 : 0x3f8;
20
}
21

22
static unsigned int get_serial_irq(ISASuperIODevice *sio, uint8_t index)
23
{
24
    return index ? 3 : 4;
25
}
26

27
/* Parallel port */
28

29
static uint16_t get_parallel_iobase(ISASuperIODevice *sio, uint8_t index)
30
{
31
    return 0x378;
32
}
33

34
static unsigned int get_parallel_irq(ISASuperIODevice *sio, uint8_t index)
35
{
36
    return 7;
37
}
38

39
static unsigned int get_parallel_dma(ISASuperIODevice *sio, uint8_t index)
40
{
41
    return 3;
42
}
43

44
/* Diskette controller (Software compatible with the Intel PC8477) */
45

46
static uint16_t get_fdc_iobase(ISASuperIODevice *sio, uint8_t index)
47
{
48
    return 0x3f0;
49
}
50

51
static unsigned int get_fdc_irq(ISASuperIODevice *sio, uint8_t index)
52
{
53
    return 6;
54
}
55

56
static unsigned int get_fdc_dma(ISASuperIODevice *sio, uint8_t index)
57
{
58
    return 2;
59
}
60

61
static void smc37c669_class_init(ObjectClass *klass, void *data)
62
{
63
    ISASuperIOClass *sc = ISA_SUPERIO_CLASS(klass);
64

65
    sc->parallel = (ISASuperIOFuncs){
66
        .count = 1,
67
        .get_iobase = get_parallel_iobase,
68
        .get_irq    = get_parallel_irq,
69
        .get_dma    = get_parallel_dma,
70
    };
71
    sc->serial = (ISASuperIOFuncs){
72
        .count = 2,
73
        .get_iobase = get_serial_iobase,
74
        .get_irq    = get_serial_irq,
75
    };
76
    sc->floppy = (ISASuperIOFuncs){
77
        .count = 1,
78
        .get_iobase = get_fdc_iobase,
79
        .get_irq    = get_fdc_irq,
80
        .get_dma    = get_fdc_dma,
81
    };
82
    sc->ide.count = 0;
83
}
84

85
static const TypeInfo smc37c669_type_info = {
86
    .name          = TYPE_SMC37C669_SUPERIO,
87
    .parent        = TYPE_ISA_SUPERIO,
88
    .class_size    = sizeof(ISASuperIOClass),
89
    .class_init    = smc37c669_class_init,
90
};
91

92
static void smc37c669_register_types(void)
93
{
94
    type_register_static(&smc37c669_type_info);
95
}
96

97
type_init(smc37c669_register_types)
98

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.