1 #ifndef QEMU_HW_MILKYMIST_H
2 #define QEMU_HW_MILKYMIST_H
7 static inline DeviceState
*milkymist_uart_create(target_phys_addr_t base
,
12 dev
= qdev_create(NULL
, "milkymist-uart");
13 qdev_init_nofail(dev
);
14 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
15 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
20 static inline DeviceState
*milkymist_hpdmc_create(target_phys_addr_t base
)
24 dev
= qdev_create(NULL
, "milkymist-hpdmc");
25 qdev_init_nofail(dev
);
26 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
31 static inline DeviceState
*milkymist_memcard_create(target_phys_addr_t base
)
35 dev
= qdev_create(NULL
, "milkymist-memcard");
36 qdev_init_nofail(dev
);
37 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
42 static inline DeviceState
*milkymist_vgafb_create(target_phys_addr_t base
,
43 uint32_t fb_offset
, uint32_t fb_mask
)
47 dev
= qdev_create(NULL
, "milkymist-vgafb");
48 qdev_prop_set_uint32(dev
, "fb_offset", fb_offset
);
49 qdev_prop_set_uint32(dev
, "fb_mask", fb_mask
);
50 qdev_init_nofail(dev
);
51 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
56 static inline DeviceState
*milkymist_sysctl_create(target_phys_addr_t base
,
57 qemu_irq gpio_irq
, qemu_irq timer0_irq
, qemu_irq timer1_irq
,
58 uint32_t freq_hz
, uint32_t system_id
, uint32_t capabilities
,
59 uint32_t gpio_strappings
)
63 dev
= qdev_create(NULL
, "milkymist-sysctl");
64 qdev_prop_set_uint32(dev
, "frequency", freq_hz
);
65 qdev_prop_set_uint32(dev
, "systemid", system_id
);
66 qdev_prop_set_uint32(dev
, "capabilities", capabilities
);
67 qdev_prop_set_uint32(dev
, "gpio_strappings", gpio_strappings
);
68 qdev_init_nofail(dev
);
69 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
70 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, gpio_irq
);
71 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, timer0_irq
);
72 sysbus_connect_irq(sysbus_from_qdev(dev
), 2, timer1_irq
);
77 static inline DeviceState
*milkymist_pfpu_create(target_phys_addr_t base
,
82 dev
= qdev_create(NULL
, "milkymist-pfpu");
83 qdev_init_nofail(dev
);
84 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
85 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
92 static const int glx_fbconfig_attr
[] = {
100 static inline DeviceState
*milkymist_tmu2_create(target_phys_addr_t base
,
106 GLXFBConfig
*configs
;
108 int ver_major
, ver_minor
;
110 if (display_type
== DT_NOGRAPHIC
) {
114 /* check that GLX will work */
115 d
= XOpenDisplay(NULL
);
120 if (!glXQueryVersion(d
, &ver_major
, &ver_minor
)) {
121 /* Yeah, sometimes getting the GLX version can fail.
122 * Isn't X beautiful? */
127 if ((ver_major
< 1) || ((ver_major
== 1) && (ver_minor
< 3))) {
128 printf("Your GLX version is %d.%d,"
129 "but TMU emulation needs at least 1.3. TMU disabled.\n",
130 ver_major
, ver_minor
);
135 configs
= glXChooseFBConfig(d
, 0, glx_fbconfig_attr
, &nelements
);
136 if (configs
== NULL
) {
144 dev
= qdev_create(NULL
, "milkymist-tmu2");
145 qdev_init_nofail(dev
);
146 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
147 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
155 static inline DeviceState
*milkymist_ac97_create(target_phys_addr_t base
,
156 qemu_irq crrequest_irq
, qemu_irq crreply_irq
, qemu_irq dmar_irq
,
161 dev
= qdev_create(NULL
, "milkymist-ac97");
162 qdev_init_nofail(dev
);
163 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
164 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, crrequest_irq
);
165 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, crreply_irq
);
166 sysbus_connect_irq(sysbus_from_qdev(dev
), 2, dmar_irq
);
167 sysbus_connect_irq(sysbus_from_qdev(dev
), 3, dmaw_irq
);
172 static inline DeviceState
*milkymist_minimac_create(target_phys_addr_t base
,
173 qemu_irq rx_irq
, qemu_irq tx_irq
)
177 qemu_check_nic_model(&nd_table
[0], "minimac");
178 dev
= qdev_create(NULL
, "milkymist-minimac");
179 qdev_set_nic_properties(dev
, &nd_table
[0]);
180 qdev_init_nofail(dev
);
181 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
182 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, rx_irq
);
183 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, tx_irq
);
188 static inline DeviceState
*milkymist_minimac2_create(target_phys_addr_t base
,
189 target_phys_addr_t buffers_base
, qemu_irq rx_irq
, qemu_irq tx_irq
)
193 qemu_check_nic_model(&nd_table
[0], "minimac2");
194 dev
= qdev_create(NULL
, "milkymist-minimac2");
195 qdev_prop_set_taddr(dev
, "buffers_base", buffers_base
);
196 qdev_set_nic_properties(dev
, &nd_table
[0]);
197 qdev_init_nofail(dev
);
198 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
199 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, rx_irq
);
200 sysbus_connect_irq(sysbus_from_qdev(dev
), 1, tx_irq
);
205 static inline DeviceState
*milkymist_softusb_create(target_phys_addr_t base
,
206 qemu_irq irq
, uint32_t pmem_base
, uint32_t pmem_size
,
207 uint32_t dmem_base
, uint32_t dmem_size
)
211 dev
= qdev_create(NULL
, "milkymist-softusb");
212 qdev_prop_set_uint32(dev
, "pmem_base", pmem_base
);
213 qdev_prop_set_uint32(dev
, "pmem_size", pmem_size
);
214 qdev_prop_set_uint32(dev
, "dmem_base", dmem_base
);
215 qdev_prop_set_uint32(dev
, "dmem_size", dmem_size
);
216 qdev_init_nofail(dev
);
217 sysbus_mmio_map(sysbus_from_qdev(dev
), 0, base
);
218 sysbus_connect_irq(sysbus_from_qdev(dev
), 0, irq
);
223 #endif /* QEMU_HW_MILKYMIST_H */