]>
Commit | Line | Data |
---|---|---|
cb9c377f PB |
1 | #ifndef HW_XILINX_H |
2 | #define HW_XILINX_H 1 | |
3 | ||
4 | ||
669b4983 | 5 | #include "stream.h" |
0d877c66 | 6 | #include "qemu-common.h" |
1422e32d | 7 | #include "net/net.h" |
6a8b1ae2 | 8 | |
6a8b1ae2 | 9 | static inline DeviceState * |
a8170e5e | 10 | xilinx_intc_create(hwaddr base, qemu_irq irq, int kind_of_intr) |
6a8b1ae2 EI |
11 | { |
12 | DeviceState *dev; | |
13 | ||
24739ab4 | 14 | dev = qdev_create(NULL, "xlnx.xps-intc"); |
ee6847d1 | 15 | qdev_prop_set_uint32(dev, "kind-of-intr", kind_of_intr); |
e23a1b33 | 16 | qdev_init_nofail(dev); |
6a8b1ae2 EI |
17 | sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); |
18 | sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); | |
19 | return dev; | |
20 | } | |
21 | ||
22 | /* OPB Timer/Counter. */ | |
23 | static inline DeviceState * | |
a8170e5e | 24 | xilinx_timer_create(hwaddr base, qemu_irq irq, int oto, int freq) |
6a8b1ae2 EI |
25 | { |
26 | DeviceState *dev; | |
27 | ||
c0a1dcb9 | 28 | dev = qdev_create(NULL, "xlnx.xps-timer"); |
abe098e4 | 29 | qdev_prop_set_uint32(dev, "one-timer-only", oto); |
919f89f4 | 30 | qdev_prop_set_uint32(dev, "clock-frequency", freq); |
e23a1b33 | 31 | qdev_init_nofail(dev); |
6a8b1ae2 EI |
32 | sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); |
33 | sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); | |
34 | return dev; | |
35 | } | |
36 | ||
37 | /* XPS Ethernet Lite MAC. */ | |
38 | static inline DeviceState * | |
a8170e5e | 39 | xilinx_ethlite_create(NICInfo *nd, hwaddr base, qemu_irq irq, |
6a8b1ae2 EI |
40 | int txpingpong, int rxpingpong) |
41 | { | |
42 | DeviceState *dev; | |
43 | ||
7f4d6755 | 44 | qemu_check_nic_model(nd, "xlnx.xps-ethernetlite"); |
6a8b1ae2 | 45 | |
7f4d6755 | 46 | dev = qdev_create(NULL, "xlnx.xps-ethernetlite"); |
17d1ae3c | 47 | qdev_set_nic_properties(dev, nd); |
b2d85c34 PC |
48 | qdev_prop_set_uint32(dev, "tx-ping-pong", txpingpong); |
49 | qdev_prop_set_uint32(dev, "rx-ping-pong", rxpingpong); | |
e23a1b33 | 50 | qdev_init_nofail(dev); |
6a8b1ae2 EI |
51 | sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); |
52 | sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); | |
53 | return dev; | |
54 | } | |
00914b7d MS |
55 | |
56 | static inline DeviceState * | |
669b4983 | 57 | xilinx_axiethernet_create(NICInfo *nd, StreamSlave *peer, |
a8170e5e | 58 | hwaddr base, qemu_irq irq, |
00914b7d MS |
59 | int txmem, int rxmem) |
60 | { | |
61 | DeviceState *dev; | |
4b5e5210 PC |
62 | Error *errp = NULL; |
63 | ||
cec6f8ca | 64 | qemu_check_nic_model(nd, "xlnx.axi-ethernet"); |
00914b7d | 65 | |
cec6f8ca | 66 | dev = qdev_create(NULL, "xlnx.axi-ethernet"); |
00914b7d | 67 | qdev_set_nic_properties(dev, nd); |
ab034c26 PC |
68 | qdev_prop_set_uint32(dev, "rxmem", rxmem); |
69 | qdev_prop_set_uint32(dev, "txmem", txmem); | |
c9b6e1f6 PC |
70 | object_property_set_link(OBJECT(dev), OBJECT(peer), "axistream-connected", |
71 | &errp); | |
4b5e5210 | 72 | assert_no_error(errp); |
00914b7d MS |
73 | qdev_init_nofail(dev); |
74 | sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); | |
75 | sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); | |
76 | ||
77 | return dev; | |
78 | } | |
79 | ||
669b4983 PC |
80 | static inline void |
81 | xilinx_axiethernetdma_init(DeviceState *dev, StreamSlave *peer, | |
a8170e5e | 82 | hwaddr base, qemu_irq irq, |
669b4983 | 83 | qemu_irq irq2, int freqhz) |
00914b7d | 84 | { |
4b5e5210 PC |
85 | Error *errp = NULL; |
86 | ||
00914b7d | 87 | qdev_prop_set_uint32(dev, "freqhz", freqhz); |
c9b6e1f6 PC |
88 | object_property_set_link(OBJECT(dev), OBJECT(peer), "axistream-connected", |
89 | &errp); | |
4b5e5210 | 90 | assert_no_error(errp); |
00914b7d MS |
91 | qdev_init_nofail(dev); |
92 | ||
93 | sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); | |
d85ba787 PC |
94 | sysbus_connect_irq(sysbus_from_qdev(dev), 0, irq); |
95 | sysbus_connect_irq(sysbus_from_qdev(dev), 1, irq2); | |
00914b7d | 96 | } |
cb9c377f PB |
97 | |
98 | #endif |