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