1fa2ba3b8SLaurent Vivier /* 29bf674bcSMark Cave-Ayland * QEMU Nubus 3fa2ba3b8SLaurent Vivier * 4fa2ba3b8SLaurent Vivier * Copyright (c) 2013-2018 Laurent Vivier <laurent@vivier.eu> 5fa2ba3b8SLaurent Vivier * 6fa2ba3b8SLaurent Vivier * This work is licensed under the terms of the GNU GPL, version 2 or later. 7fa2ba3b8SLaurent Vivier * See the COPYING file in the top-level directory. 8fa2ba3b8SLaurent Vivier * 9fa2ba3b8SLaurent Vivier */ 10fa2ba3b8SLaurent Vivier 11fa2ba3b8SLaurent Vivier #include "qemu/osdep.h" 12fa2ba3b8SLaurent Vivier #include "hw/sysbus.h" 13fa2ba3b8SLaurent Vivier #include "hw/nubus/nubus.h" 14fa2ba3b8SLaurent Vivier 151fa04232SMark Cave-Ayland 161fa04232SMark Cave-Ayland static void nubus_bridge_init(Object *obj) 171fa04232SMark Cave-Ayland { 181fa04232SMark Cave-Ayland NubusBridge *s = NUBUS_BRIDGE(obj); 19d585d89dSMark Cave-Ayland NubusBus *bus = &s->bus; 201fa04232SMark Cave-Ayland 21d585d89dSMark Cave-Ayland qbus_create_inplace(bus, sizeof(s->bus), TYPE_NUBUS_BUS, DEVICE(s), NULL); 22*d2cf28a0SMark Cave-Ayland 23*d2cf28a0SMark Cave-Ayland qdev_init_gpio_out(DEVICE(s), bus->irqs, NUBUS_IRQS); 241fa04232SMark Cave-Ayland } 251fa04232SMark Cave-Ayland 26094f5b2bSMark Cave-Ayland static Property nubus_bridge_properties[] = { 27094f5b2bSMark Cave-Ayland DEFINE_PROP_UINT16("slot-available-mask", NubusBridge, 28094f5b2bSMark Cave-Ayland bus.slot_available_mask, 0xffff), 29094f5b2bSMark Cave-Ayland DEFINE_PROP_END_OF_LIST() 30094f5b2bSMark Cave-Ayland }; 31094f5b2bSMark Cave-Ayland 32fa2ba3b8SLaurent Vivier static void nubus_bridge_class_init(ObjectClass *klass, void *data) 33fa2ba3b8SLaurent Vivier { 34fa2ba3b8SLaurent Vivier DeviceClass *dc = DEVICE_CLASS(klass); 35fa2ba3b8SLaurent Vivier 36fa2ba3b8SLaurent Vivier dc->fw_name = "nubus"; 37094f5b2bSMark Cave-Ayland device_class_set_props(dc, nubus_bridge_properties); 38fa2ba3b8SLaurent Vivier } 39fa2ba3b8SLaurent Vivier 40fa2ba3b8SLaurent Vivier static const TypeInfo nubus_bridge_info = { 41fa2ba3b8SLaurent Vivier .name = TYPE_NUBUS_BRIDGE, 42fa2ba3b8SLaurent Vivier .parent = TYPE_SYS_BUS_DEVICE, 431fa04232SMark Cave-Ayland .instance_init = nubus_bridge_init, 449bf674bcSMark Cave-Ayland .instance_size = sizeof(NubusBridge), 45fa2ba3b8SLaurent Vivier .class_init = nubus_bridge_class_init, 46fa2ba3b8SLaurent Vivier }; 47fa2ba3b8SLaurent Vivier 48fa2ba3b8SLaurent Vivier static void nubus_register_types(void) 49fa2ba3b8SLaurent Vivier { 50fa2ba3b8SLaurent Vivier type_register_static(&nubus_bridge_info); 51fa2ba3b8SLaurent Vivier } 52fa2ba3b8SLaurent Vivier 53fa2ba3b8SLaurent Vivier type_init(nubus_register_types) 54