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