Statistics
| Branch: | Revision:

root / hw / misc / debugexit.c @ a8aec295

History | View | Annotate | Download (2.1 kB)

1 bb355b18 Gerd Hoffmann
/*
2 bb355b18 Gerd Hoffmann
 * debug exit port emulation
3 bb355b18 Gerd Hoffmann
 *
4 bb355b18 Gerd Hoffmann
 * This program is free software; you can redistribute it and/or
5 bb355b18 Gerd Hoffmann
 * modify it under the terms of the GNU General Public License as
6 bb355b18 Gerd Hoffmann
 * published by the Free Software Foundation; either version 2 or
7 bb355b18 Gerd Hoffmann
 * (at your option) any later version.
8 bb355b18 Gerd Hoffmann
 */
9 bb355b18 Gerd Hoffmann
10 83c9f4ca Paolo Bonzini
#include "hw/hw.h"
11 0d09e41a Paolo Bonzini
#include "hw/isa/isa.h"
12 bb355b18 Gerd Hoffmann
13 bb355b18 Gerd Hoffmann
#define TYPE_ISA_DEBUG_EXIT_DEVICE "isa-debug-exit"
14 bb355b18 Gerd Hoffmann
#define ISA_DEBUG_EXIT_DEVICE(obj) \
15 bb355b18 Gerd Hoffmann
     OBJECT_CHECK(ISADebugExitState, (obj), TYPE_ISA_DEBUG_EXIT_DEVICE)
16 bb355b18 Gerd Hoffmann
17 bb355b18 Gerd Hoffmann
typedef struct ISADebugExitState {
18 bb355b18 Gerd Hoffmann
    ISADevice parent_obj;
19 bb355b18 Gerd Hoffmann
20 bb355b18 Gerd Hoffmann
    uint32_t iobase;
21 bb355b18 Gerd Hoffmann
    uint32_t iosize;
22 bb355b18 Gerd Hoffmann
    MemoryRegion io;
23 bb355b18 Gerd Hoffmann
} ISADebugExitState;
24 bb355b18 Gerd Hoffmann
25 bb355b18 Gerd Hoffmann
static void debug_exit_write(void *opaque, hwaddr addr, uint64_t val,
26 bb355b18 Gerd Hoffmann
                             unsigned width)
27 bb355b18 Gerd Hoffmann
{
28 bb355b18 Gerd Hoffmann
    exit((val << 1) | 1);
29 bb355b18 Gerd Hoffmann
}
30 bb355b18 Gerd Hoffmann
31 bb355b18 Gerd Hoffmann
static const MemoryRegionOps debug_exit_ops = {
32 bb355b18 Gerd Hoffmann
    .write = debug_exit_write,
33 bb355b18 Gerd Hoffmann
    .valid.min_access_size = 1,
34 bb355b18 Gerd Hoffmann
    .valid.max_access_size = 4,
35 bb355b18 Gerd Hoffmann
    .endianness = DEVICE_LITTLE_ENDIAN,
36 bb355b18 Gerd Hoffmann
};
37 bb355b18 Gerd Hoffmann
38 db895a1e Andreas Färber
static void debug_exit_realizefn(DeviceState *d, Error **errp)
39 bb355b18 Gerd Hoffmann
{
40 db895a1e Andreas Färber
    ISADevice *dev = ISA_DEVICE(d);
41 db895a1e Andreas Färber
    ISADebugExitState *isa = ISA_DEBUG_EXIT_DEVICE(d);
42 bb355b18 Gerd Hoffmann
43 bb355b18 Gerd Hoffmann
    memory_region_init_io(&isa->io, &debug_exit_ops, isa,
44 bb355b18 Gerd Hoffmann
                          TYPE_ISA_DEBUG_EXIT_DEVICE, isa->iosize);
45 bb355b18 Gerd Hoffmann
    memory_region_add_subregion(isa_address_space_io(dev),
46 bb355b18 Gerd Hoffmann
                                isa->iobase, &isa->io);
47 bb355b18 Gerd Hoffmann
}
48 bb355b18 Gerd Hoffmann
49 bb355b18 Gerd Hoffmann
static Property debug_exit_properties[] = {
50 bb355b18 Gerd Hoffmann
    DEFINE_PROP_HEX32("iobase", ISADebugExitState, iobase, 0x501),
51 bb355b18 Gerd Hoffmann
    DEFINE_PROP_HEX32("iosize", ISADebugExitState, iosize, 0x02),
52 bb355b18 Gerd Hoffmann
    DEFINE_PROP_END_OF_LIST(),
53 bb355b18 Gerd Hoffmann
};
54 bb355b18 Gerd Hoffmann
55 bb355b18 Gerd Hoffmann
static void debug_exit_class_initfn(ObjectClass *klass, void *data)
56 bb355b18 Gerd Hoffmann
{
57 bb355b18 Gerd Hoffmann
    DeviceClass *dc = DEVICE_CLASS(klass);
58 db895a1e Andreas Färber
59 db895a1e Andreas Färber
    dc->realize = debug_exit_realizefn;
60 bb355b18 Gerd Hoffmann
    dc->props = debug_exit_properties;
61 bb355b18 Gerd Hoffmann
}
62 bb355b18 Gerd Hoffmann
63 8c43a6f0 Andreas Färber
static const TypeInfo debug_exit_info = {
64 bb355b18 Gerd Hoffmann
    .name          = TYPE_ISA_DEBUG_EXIT_DEVICE,
65 bb355b18 Gerd Hoffmann
    .parent        = TYPE_ISA_DEVICE,
66 bb355b18 Gerd Hoffmann
    .instance_size = sizeof(ISADebugExitState),
67 bb355b18 Gerd Hoffmann
    .class_init    = debug_exit_class_initfn,
68 bb355b18 Gerd Hoffmann
};
69 bb355b18 Gerd Hoffmann
70 bb355b18 Gerd Hoffmann
static void debug_exit_register_types(void)
71 bb355b18 Gerd Hoffmann
{
72 bb355b18 Gerd Hoffmann
    type_register_static(&debug_exit_info);
73 bb355b18 Gerd Hoffmann
}
74 bb355b18 Gerd Hoffmann
75 bb355b18 Gerd Hoffmann
type_init(debug_exit_register_types)