pvpanic.c (e47dccc64b6ca570e4db96fd5fdb3bef251eb559) pvpanic.c (db895a1e6a97e919f9b86d60c969377357b05066)
1/*
2 * QEMU simulated pvpanic device.
3 *
4 * Copyright Fujitsu, Corp. 2013
5 *
6 * Authors:
7 * Wen Congyang <wency@cn.fujitsu.com>
8 * Hu Tao <hutao@cn.fujitsu.com>

--- 72 unchanged lines hidden (view full) ---

81 .read = pvpanic_ioport_read,
82 .write = pvpanic_ioport_write,
83 .impl = {
84 .min_access_size = 1,
85 .max_access_size = 1,
86 },
87};
88
1/*
2 * QEMU simulated pvpanic device.
3 *
4 * Copyright Fujitsu, Corp. 2013
5 *
6 * Authors:
7 * Wen Congyang <wency@cn.fujitsu.com>
8 * Hu Tao <hutao@cn.fujitsu.com>

--- 72 unchanged lines hidden (view full) ---

81 .read = pvpanic_ioport_read,
82 .write = pvpanic_ioport_write,
83 .impl = {
84 .min_access_size = 1,
85 .max_access_size = 1,
86 },
87};
88
89static int pvpanic_isa_initfn(ISADevice *dev)
89static void pvpanic_isa_initfn(Object *obj)
90{
90{
91 PVPanicState *s = ISA_PVPANIC_DEVICE(obj);
92
93 memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
94}
95
96static void pvpanic_isa_realizefn(DeviceState *dev, Error **errp)
97{
98 ISADevice *d = ISA_DEVICE(dev);
91 PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
92 static bool port_configured;
93 FWCfgState *fw_cfg;
94
99 PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
100 static bool port_configured;
101 FWCfgState *fw_cfg;
102
95 memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
96 isa_register_ioport(dev, &s->io, s->ioport);
103 isa_register_ioport(d, &s->io, s->ioport);
97
98 if (!port_configured) {
99 fw_cfg = fw_cfg_find();
100 if (fw_cfg) {
101 fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
102 g_memdup(&s->ioport, sizeof(s->ioport)),
103 sizeof(s->ioport));
104 port_configured = true;
105 }
106 }
104
105 if (!port_configured) {
106 fw_cfg = fw_cfg_find();
107 if (fw_cfg) {
108 fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
109 g_memdup(&s->ioport, sizeof(s->ioport)),
110 sizeof(s->ioport));
111 port_configured = true;
112 }
113 }
107
108 return 0;
109}
110
111int pvpanic_init(ISABus *bus)
112{
113 isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
114 return 0;
115}
116
117static Property pvpanic_isa_properties[] = {
118 DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505),
119 DEFINE_PROP_END_OF_LIST(),
120};
121
122static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
123{
124 DeviceClass *dc = DEVICE_CLASS(klass);
114}
115
116int pvpanic_init(ISABus *bus)
117{
118 isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE);
119 return 0;
120}
121
122static Property pvpanic_isa_properties[] = {
123 DEFINE_PROP_UINT16("ioport", PVPanicState, ioport, 0x505),
124 DEFINE_PROP_END_OF_LIST(),
125};
126
127static void pvpanic_isa_class_init(ObjectClass *klass, void *data)
128{
129 DeviceClass *dc = DEVICE_CLASS(klass);
125 ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
126
130
127 ic->init = pvpanic_isa_initfn;
131 dc->realize = pvpanic_isa_realizefn;
128 dc->no_user = 1;
129 dc->props = pvpanic_isa_properties;
130}
131
132static TypeInfo pvpanic_isa_info = {
133 .name = TYPE_ISA_PVPANIC_DEVICE,
134 .parent = TYPE_ISA_DEVICE,
135 .instance_size = sizeof(PVPanicState),
132 dc->no_user = 1;
133 dc->props = pvpanic_isa_properties;
134}
135
136static TypeInfo pvpanic_isa_info = {
137 .name = TYPE_ISA_PVPANIC_DEVICE,
138 .parent = TYPE_ISA_DEVICE,
139 .instance_size = sizeof(PVPanicState),
140 .instance_init = pvpanic_isa_initfn,
136 .class_init = pvpanic_isa_class_init,
137};
138
139static void pvpanic_register_types(void)
140{
141 type_register_static(&pvpanic_isa_info);
142}
143
144type_init(pvpanic_register_types)
141 .class_init = pvpanic_isa_class_init,
142};
143
144static void pvpanic_register_types(void)
145{
146 type_register_static(&pvpanic_isa_info);
147}
148
149type_init(pvpanic_register_types)