static uint64_t cuda_get_counter_value(MOS6522State *s, MOS6522Timer *ti)
{
MOS6522CUDAState *mcs = container_of(s, MOS6522CUDAState, parent_obj);
- CUDAState *cs = mcs->cuda;
+ CUDAState *cs = container_of(mcs, CUDAState, mos6522_cuda);
/* Reverse of the tb calculation algorithm that Mac OS X uses on bootup */
uint64_t tb_diff = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
static uint64_t cuda_get_load_time(MOS6522State *s, MOS6522Timer *ti)
{
MOS6522CUDAState *mcs = container_of(s, MOS6522CUDAState, parent_obj);
- CUDAState *cs = mcs->cuda;
+ CUDAState *cs = container_of(mcs, CUDAState, mos6522_cuda);
uint64_t load_time = muldiv64(qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL),
cs->tb_frequency, NANOSECONDS_PER_SECOND);
static void cuda_set_sr_int(void *opaque)
{
CUDAState *s = opaque;
- MOS6522CUDAState *mcs = s->mos6522_cuda;
+ MOS6522CUDAState *mcs = &s->mos6522_cuda;
MOS6522State *ms = MOS6522(mcs);
MOS6522DeviceClass *mdc = MOS6522_DEVICE_GET_CLASS(ms);
static void cuda_delay_set_sr_int(CUDAState *s)
{
- MOS6522CUDAState *mcs = s->mos6522_cuda;
+ MOS6522CUDAState *mcs = &s->mos6522_cuda;
MOS6522State *ms = MOS6522(mcs);
MOS6522DeviceClass *mdc = MOS6522_DEVICE_GET_CLASS(ms);
int64_t expire;
/* NOTE: TIP and TREQ are negated */
static void cuda_update(CUDAState *s)
{
- MOS6522CUDAState *mcs = s->mos6522_cuda;
+ MOS6522CUDAState *mcs = &s->mos6522_cuda;
MOS6522State *ms = MOS6522(mcs);
int packet_received, len;
static uint64_t mos6522_cuda_read(void *opaque, hwaddr addr, unsigned size)
{
CUDAState *s = opaque;
- MOS6522CUDAState *mcs = s->mos6522_cuda;
+ MOS6522CUDAState *mcs = &s->mos6522_cuda;
MOS6522State *ms = MOS6522(mcs);
addr = (addr >> 9) & 0xf;
unsigned size)
{
CUDAState *s = opaque;
- MOS6522CUDAState *mcs = s->mos6522_cuda;
+ MOS6522CUDAState *mcs = &s->mos6522_cuda;
MOS6522State *ms = MOS6522(mcs);
addr = (addr >> 9) & 0xf;
static const VMStateDescription vmstate_cuda = {
.name = "cuda",
- .version_id = 4,
- .minimum_version_id = 4,
+ .version_id = 5,
+ .minimum_version_id = 5,
.fields = (VMStateField[]) {
+ VMSTATE_STRUCT(mos6522_cuda.parent_obj, CUDAState, 0, vmstate_mos6522,
+ MOS6522State),
VMSTATE_UINT8(last_b, CUDAState),
VMSTATE_UINT8(last_acr, CUDAState),
VMSTATE_INT32(data_in_size, CUDAState),
DeviceState *d;
struct tm tm;
- d = qdev_create(NULL, TYPE_MOS6522_CUDA);
- object_property_set_link(OBJECT(d), OBJECT(s), "cuda", errp);
- qdev_init_nofail(d);
- s->mos6522_cuda = MOS6522_CUDA(d);
-
/* Pass IRQ from 6522 */
+ d = DEVICE(&s->mos6522_cuda);
ms = MOS6522(d);
sbd = SYS_BUS_DEVICE(s);
sysbus_pass_irq(sbd, SYS_BUS_DEVICE(ms));
CUDAState *s = CUDA(obj);
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
+ object_initialize(&s->mos6522_cuda, sizeof(s->mos6522_cuda),
+ TYPE_MOS6522_CUDA);
+ qdev_set_parent_bus(DEVICE(&s->mos6522_cuda), sysbus_get_default());
+
memory_region_init_io(&s->mem, obj, &mos6522_cuda_ops, s, "cuda", 0x2000);
sysbus_init_mmio(sbd, &s->mem);
static void mos6522_cuda_portB_write(MOS6522State *s)
{
MOS6522CUDAState *mcs = container_of(s, MOS6522CUDAState, parent_obj);
+ CUDAState *cs = container_of(mcs, CUDAState, mos6522_cuda);
- cuda_update(mcs->cuda);
+ cuda_update(cs);
}
static void mos6522_cuda_realize(DeviceState *dev, Error **errp)
ms->timers[1].frequency = (SCALE_US * 6000) / 4700;
}
-static void mos6522_cuda_init(Object *obj)
-{
- MOS6522CUDAState *s = MOS6522_CUDA(obj);
-
- object_property_add_link(obj, "cuda", TYPE_CUDA,
- (Object **) &s->cuda,
- qdev_prop_allow_set_link_before_realize,
- 0, NULL);
-}
-
static void mos6522_cuda_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
.name = TYPE_MOS6522_CUDA,
.parent = TYPE_MOS6522,
.instance_size = sizeof(MOS6522CUDAState),
- .instance_init = mos6522_cuda_init,
.class_init = mos6522_cuda_class_init,
};