1 #ifndef QEMU_HW_MILKYMIST_H
2 #define QEMU_HW_MILKYMIST_H
4 static inline DeviceState
*milkymist_uart_create(target_phys_addr_t base
,
5 qemu_irq rx_irq
, qemu_irq tx_irq
)
9 dev
= qdev_create(NULL
, "milkymist-uart");
10 qdev_init_nofail(dev
);
11 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
12 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, rx_irq
);
13 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, tx_irq
);
18 static inline DeviceState
*milkymist_hpdmc_create(target_phys_addr_t base
)
22 dev
= qdev_create(NULL
, "milkymist-hpdmc");
23 qdev_init_nofail(dev
);
24 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
29 static inline DeviceState
*milkymist_memcard_create(target_phys_addr_t base
)
33 dev
= qdev_create(NULL
, "milkymist-memcard");
34 qdev_init_nofail(dev
);
35 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
40 static inline DeviceState
*milkymist_vgafb_create(target_phys_addr_t base
,
41 uint32_t fb_offset
, uint32_t fb_mask
)
45 dev
= qdev_create(NULL
, "milkymist-vgafb");
46 qdev_prop_set_uint32(dev
, "fb_offset", fb_offset
);
47 qdev_prop_set_uint32(dev
, "fb_mask", fb_mask
);
48 qdev_init_nofail(dev
);
49 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
54 static inline DeviceState
*milkymist_sysctl_create(target_phys_addr_t base
,
55 qemu_irq gpio_irq
, qemu_irq timer0_irq
, qemu_irq timer1_irq
,
56 uint32_t freq_hz
, uint32_t system_id
, uint32_t capabilities
,
57 uint32_t gpio_strappings
)
61 dev
= qdev_create(NULL
, "milkymist-sysctl");
62 qdev_prop_set_uint32(dev
, "frequency", freq_hz
);
63 qdev_prop_set_uint32(dev
, "systemid", system_id
);
64 qdev_prop_set_uint32(dev
, "capabilities", capabilities
);
65 qdev_prop_set_uint32(dev
, "gpio_strappings", gpio_strappings
);
66 qdev_init_nofail(dev
);
67 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
68 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, gpio_irq
);
69 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, timer0_irq
);
70 sysbus_connect_irq(sysbus_from_qdev(dev
), 2, timer1_irq
);
75 static inline DeviceState
*milkymist_pfpu_create(target_phys_addr_t base
,
80 dev
= qdev_create(NULL
, "milkymist-pfpu");
81 qdev_init_nofail(dev
);
82 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
83 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
90 static const int glx_fbconfig_attr
[] = {
98 static inline DeviceState
*milkymist_tmu2_create(target_phys_addr_t base
,
104 GLXFBConfig
*configs
;
106 int ver_major
, ver_minor
;
108 if (display_type
== DT_NOGRAPHIC
) {
112 /* check that GLX will work */
113 d
= XOpenDisplay(NULL
);
118 if (!glXQueryVersion(d
, &ver_major
, &ver_minor
)) {
119 /* Yeah, sometimes getting the GLX version can fail.
120 * Isn't X beautiful? */
125 if ((ver_major
< 1) || ((ver_major
== 1) && (ver_minor
< 3))) {
126 printf("Your GLX version is %d.%d,"
127 "but TMU emulation needs at least 1.3. TMU disabled.\n",
128 ver_major
, ver_minor
);
133 configs
= glXChooseFBConfig(d
, 0, glx_fbconfig_attr
, &nelements
);
134 if (configs
== NULL
) {
142 dev
= qdev_create(NULL
, "milkymist-tmu2");
143 qdev_init_nofail(dev
);
144 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
145 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
153 static inline DeviceState
*milkymist_ac97_create(target_phys_addr_t base
,
154 qemu_irq crrequest_irq
, qemu_irq crreply_irq
, qemu_irq dmar_irq
,
159 dev
= qdev_create(NULL
, "milkymist-ac97");
160 qdev_init_nofail(dev
);
161 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
162 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, crrequest_irq
);
163 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, crreply_irq
);
164 sysbus_connect_irq(sysbus_from_qdev(dev
), 2, dmar_irq
);
165 sysbus_connect_irq(sysbus_from_qdev(dev
), 3, dmaw_irq
);
170 static inline DeviceState
*milkymist_minimac_create(target_phys_addr_t base
,
171 qemu_irq rx_irq
, qemu_irq tx_irq
)
175 qemu_check_nic_model(&nd_table
[0], "minimac");
176 dev
= qdev_create(NULL
, "milkymist-minimac");
177 qdev_set_nic_properties(dev
, &nd_table
[0]);
178 qdev_init_nofail(dev
);
179 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
180 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, rx_irq
);
181 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, tx_irq
);
186 static inline DeviceState
*milkymist_softusb_create(target_phys_addr_t base
,
187 qemu_irq irq
, uint32_t pmem_base
, uint32_t pmem_size
,
188 uint32_t dmem_base
, uint32_t dmem_size
)
192 dev
= qdev_create(NULL
, "milkymist-softusb");
193 qdev_prop_set_uint32(dev
, "pmem_base", pmem_base
);
194 qdev_prop_set_uint32(dev
, "pmem_size", pmem_size
);
195 qdev_prop_set_uint32(dev
, "dmem_base", dmem_base
);
196 qdev_prop_set_uint32(dev
, "dmem_size", dmem_size
);
197 qdev_init_nofail(dev
);
198 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
199 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
204 #endif /* QEMU_HW_MILKYMIST_H */