86
88
QLIST_HEAD(, AppleSMCData) data_def;
89
static void applesmc_io_cmd_writeb(void *opaque, uint32_t addr, uint32_t val)
91
static void applesmc_io_cmd_write(void *opaque, hwaddr addr, uint64_t val,
91
94
AppleSMCState *s = opaque;
201
206
applesmc_add_key(s, "MSSD", 1, "\0x3");
204
static int applesmc_isa_init(ISADevice *dev)
209
static const MemoryRegionOps applesmc_data_io_ops = {
210
.write = applesmc_io_data_write,
211
.read = applesmc_io_data_read,
212
.endianness = DEVICE_NATIVE_ENDIAN,
214
.min_access_size = 1,
215
.max_access_size = 1,
219
static const MemoryRegionOps applesmc_cmd_io_ops = {
220
.write = applesmc_io_cmd_write,
221
.read = applesmc_io_cmd_read,
222
.endianness = DEVICE_NATIVE_ENDIAN,
224
.min_access_size = 1,
225
.max_access_size = 1,
229
static void applesmc_isa_realize(DeviceState *dev, Error **errp)
206
231
AppleSMCState *s = APPLE_SMC(dev);
208
register_ioport_read(s->iobase + APPLESMC_DATA_PORT, 4, 1,
209
applesmc_io_data_readb, s);
210
register_ioport_read(s->iobase + APPLESMC_CMD_PORT, 4, 1,
211
applesmc_io_cmd_readb, s);
212
register_ioport_write(s->iobase + APPLESMC_DATA_PORT, 4, 1,
213
applesmc_io_data_writeb, s);
214
register_ioport_write(s->iobase + APPLESMC_CMD_PORT, 4, 1,
215
applesmc_io_cmd_writeb, s);
233
memory_region_init_io(&s->io_data, OBJECT(s), &applesmc_data_io_ops, s,
235
isa_register_ioport(&s->parent_obj, &s->io_data,
236
s->iobase + APPLESMC_DATA_PORT);
238
memory_region_init_io(&s->io_cmd, OBJECT(s), &applesmc_cmd_io_ops, s,
240
isa_register_ioport(&s->parent_obj, &s->io_cmd,
241
s->iobase + APPLESMC_CMD_PORT);
217
243
if (!s->osk || (strlen(s->osk) != 64)) {
218
244
fprintf(stderr, "WARNING: Using AppleSMC with invalid key\n");
235
259
static void qdev_applesmc_class_init(ObjectClass *klass, void *data)
237
261
DeviceClass *dc = DEVICE_CLASS(klass);
238
ISADeviceClass *ic = ISA_DEVICE_CLASS(klass);
239
ic->init = applesmc_isa_init;
263
dc->realize = applesmc_isa_realize;
240
264
dc->reset = qdev_applesmc_isa_reset;
241
265
dc->props = applesmc_isa_properties;
266
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
244
269
static const TypeInfo applesmc_isa_info = {