hw/rtc/mc146818rtc: Pass MC146818RtcState instead of ISADevice argument
rtc_get_memory() and rtc_set_memory() methods can not take any TYPE_ISA_DEVICE object. They expect a TYPE_MC146818_RTC one. Simplify the API by passing a MC146818RtcState. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20230210233116.80311-3-philmd@linaro.org>
This commit is contained in:
parent
8df7129790
commit
55c86cb803
@ -57,7 +57,7 @@
|
||||
#define MICROVM_QBOOT_FILENAME "qboot.rom"
|
||||
#define MICROVM_BIOS_FILENAME "bios-microvm.bin"
|
||||
|
||||
static void microvm_set_rtc(MicrovmMachineState *mms, ISADevice *s)
|
||||
static void microvm_set_rtc(MicrovmMachineState *mms, MC146818RtcState *s)
|
||||
{
|
||||
X86MachineState *x86ms = X86_MACHINE(mms);
|
||||
int val;
|
||||
@ -161,7 +161,6 @@ static void microvm_devices_init(MicrovmMachineState *mms)
|
||||
const char *default_firmware;
|
||||
X86MachineState *x86ms = X86_MACHINE(mms);
|
||||
ISABus *isa_bus;
|
||||
ISADevice *rtc_state;
|
||||
GSIState *gsi_state;
|
||||
int ioapics;
|
||||
int i;
|
||||
@ -267,8 +266,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
|
||||
|
||||
if (mms->rtc == ON_OFF_AUTO_ON ||
|
||||
(mms->rtc == ON_OFF_AUTO_AUTO && !kvm_enabled())) {
|
||||
rtc_state = mc146818_rtc_init(isa_bus, 2000, NULL);
|
||||
microvm_set_rtc(mms, rtc_state);
|
||||
microvm_set_rtc(mms, mc146818_rtc_init(isa_bus, 2000, NULL));
|
||||
}
|
||||
|
||||
if (mms->isa_serial) {
|
||||
|
16
hw/i386/pc.c
16
hw/i386/pc.c
@ -438,7 +438,7 @@ static uint64_t ioportF0_read(void *opaque, hwaddr addr, unsigned size)
|
||||
|
||||
#define REG_EQUIPMENT_BYTE 0x14
|
||||
|
||||
static void cmos_init_hd(ISADevice *s, int type_ofs, int info_ofs,
|
||||
static void cmos_init_hd(MC146818RtcState *s, int type_ofs, int info_ofs,
|
||||
int16_t cylinders, int8_t heads, int8_t sectors)
|
||||
{
|
||||
rtc_set_memory(s, type_ofs, 47);
|
||||
@ -470,7 +470,8 @@ static int boot_device2nibble(char boot_device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void set_boot_dev(ISADevice *s, const char *boot_device, Error **errp)
|
||||
static void set_boot_dev(MC146818RtcState *s, const char *boot_device,
|
||||
Error **errp)
|
||||
{
|
||||
#define PC_MAX_BOOT_DEVICES 3
|
||||
int nbds, bds[3] = { 0, };
|
||||
@ -498,7 +499,7 @@ static void pc_boot_set(void *opaque, const char *boot_device, Error **errp)
|
||||
set_boot_dev(opaque, boot_device, errp);
|
||||
}
|
||||
|
||||
static void pc_cmos_init_floppy(ISADevice *rtc_state, ISADevice *floppy)
|
||||
static void pc_cmos_init_floppy(MC146818RtcState *rtc_state, ISADevice *floppy)
|
||||
{
|
||||
int val, nb, i;
|
||||
FloppyDriveType fd_type[2] = { FLOPPY_DRIVE_TYPE_NONE,
|
||||
@ -536,7 +537,7 @@ static void pc_cmos_init_floppy(ISADevice *rtc_state, ISADevice *floppy)
|
||||
}
|
||||
|
||||
typedef struct pc_cmos_init_late_arg {
|
||||
ISADevice *rtc_state;
|
||||
MC146818RtcState *rtc_state;
|
||||
BusState *idebus[2];
|
||||
} pc_cmos_init_late_arg;
|
||||
|
||||
@ -603,7 +604,7 @@ static ISADevice *pc_find_fdc0(void)
|
||||
static void pc_cmos_init_late(void *opaque)
|
||||
{
|
||||
pc_cmos_init_late_arg *arg = opaque;
|
||||
ISADevice *s = arg->rtc_state;
|
||||
MC146818RtcState *s = arg->rtc_state;
|
||||
int16_t cylinders;
|
||||
int8_t heads, sectors;
|
||||
int val;
|
||||
@ -645,11 +646,12 @@ static void pc_cmos_init_late(void *opaque)
|
||||
|
||||
void pc_cmos_init(PCMachineState *pcms,
|
||||
BusState *idebus0, BusState *idebus1,
|
||||
ISADevice *s)
|
||||
ISADevice *rtc)
|
||||
{
|
||||
int val;
|
||||
static pc_cmos_init_late_arg arg;
|
||||
X86MachineState *x86ms = X86_MACHINE(pcms);
|
||||
MC146818RtcState *s = MC146818_RTC(rtc);
|
||||
|
||||
/* various important CMOS locations needed by PC/Bochs bios */
|
||||
|
||||
@ -1303,7 +1305,7 @@ void pc_basic_device_init(struct PCMachineState *pcms,
|
||||
pit_alt_irq = qdev_get_gpio_in(hpet, HPET_LEGACY_PIT_INT);
|
||||
rtc_irq = qdev_get_gpio_in(hpet, HPET_LEGACY_RTC_INT);
|
||||
}
|
||||
*rtc_state = mc146818_rtc_init(isa_bus, 2000, rtc_irq);
|
||||
*rtc_state = ISA_DEVICE(mc146818_rtc_init(isa_bus, 2000, rtc_irq));
|
||||
|
||||
qemu_register_boot_set(pc_boot_set, *rtc_state);
|
||||
|
||||
|
@ -150,8 +150,10 @@ void x86_cpus_init(X86MachineState *x86ms, int default_cpu_version)
|
||||
}
|
||||
}
|
||||
|
||||
void x86_rtc_set_cpus_count(ISADevice *rtc, uint16_t cpus_count)
|
||||
void x86_rtc_set_cpus_count(ISADevice *s, uint16_t cpus_count)
|
||||
{
|
||||
MC146818RtcState *rtc = MC146818_RTC(s);
|
||||
|
||||
if (cpus_count > 0xff) {
|
||||
/*
|
||||
* If the number of CPUs can't be represented in 8 bits, the
|
||||
|
@ -212,10 +212,9 @@ static int PPC_NVRAM_set_params (Nvram *nvram, uint16_t NVRAM_size,
|
||||
static int prep_set_cmos_checksum(DeviceState *dev, void *opaque)
|
||||
{
|
||||
uint16_t checksum = *(uint16_t *)opaque;
|
||||
ISADevice *rtc;
|
||||
|
||||
if (object_dynamic_cast(OBJECT(dev), TYPE_MC146818_RTC)) {
|
||||
rtc = ISA_DEVICE(dev);
|
||||
MC146818RtcState *rtc = MC146818_RTC(dev);
|
||||
rtc_set_memory(rtc, 0x2e, checksum & 0xff);
|
||||
rtc_set_memory(rtc, 0x3e, checksum & 0xff);
|
||||
rtc_set_memory(rtc, 0x2f, checksum >> 8);
|
||||
|
@ -739,16 +739,14 @@ static uint64_t cmos_ioport_read(void *opaque, hwaddr addr,
|
||||
}
|
||||
}
|
||||
|
||||
void rtc_set_memory(ISADevice *dev, int addr, int val)
|
||||
void rtc_set_memory(MC146818RtcState *s, int addr, int val)
|
||||
{
|
||||
MC146818RtcState *s = MC146818_RTC(dev);
|
||||
if (addr >= 0 && addr <= 127)
|
||||
s->cmos_data[addr] = val;
|
||||
}
|
||||
|
||||
int rtc_get_memory(ISADevice *dev, int addr)
|
||||
int rtc_get_memory(MC146818RtcState *s, int addr)
|
||||
{
|
||||
MC146818RtcState *s = MC146818_RTC(dev);
|
||||
assert(addr >= 0 && addr <= 127);
|
||||
return s->cmos_data[addr];
|
||||
}
|
||||
@ -859,7 +857,7 @@ static void rtc_notify_suspend(Notifier *notifier, void *data)
|
||||
{
|
||||
MC146818RtcState *s = container_of(notifier, MC146818RtcState,
|
||||
suspend_notifier);
|
||||
rtc_set_memory(ISA_DEVICE(s), 0xF, 0xFE);
|
||||
rtc_set_memory(s, 0xF, 0xFE);
|
||||
}
|
||||
|
||||
static const MemoryRegionOps cmos_ops = {
|
||||
@ -946,7 +944,8 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
|
||||
QLIST_INSERT_HEAD(&rtc_devices, s, link);
|
||||
}
|
||||
|
||||
ISADevice *mc146818_rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
|
||||
MC146818RtcState *mc146818_rtc_init(ISABus *bus, int base_year,
|
||||
qemu_irq intercept_irq)
|
||||
{
|
||||
DeviceState *dev;
|
||||
ISADevice *isadev;
|
||||
@ -966,7 +965,7 @@ ISADevice *mc146818_rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
|
||||
object_property_add_alias(qdev_get_machine(), "rtc-time", OBJECT(isadev),
|
||||
"date");
|
||||
|
||||
return isadev;
|
||||
return s;
|
||||
}
|
||||
|
||||
static Property mc146818rtc_properties[] = {
|
||||
|
@ -51,10 +51,10 @@ struct MC146818RtcState {
|
||||
|
||||
#define RTC_ISA_IRQ 8
|
||||
|
||||
ISADevice *mc146818_rtc_init(ISABus *bus, int base_year,
|
||||
qemu_irq intercept_irq);
|
||||
void rtc_set_memory(ISADevice *dev, int addr, int val);
|
||||
int rtc_get_memory(ISADevice *dev, int addr);
|
||||
MC146818RtcState *mc146818_rtc_init(ISABus *bus, int base_year,
|
||||
qemu_irq intercept_irq);
|
||||
void rtc_set_memory(MC146818RtcState *s, int addr, int val);
|
||||
int rtc_get_memory(MC146818RtcState *s, int addr);
|
||||
void qmp_rtc_reset_reinjection(Error **errp);
|
||||
|
||||
#endif /* HW_RTC_MC146818RTC_H */
|
||||
|
Loading…
Reference in New Issue
Block a user