xilinx.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef HW_XILINX_H
  2. #define HW_XILINX_H 1
  3. #include "stream.h"
  4. #include "qemu-common.h"
  5. #include "net/net.h"
  6. static inline DeviceState *
  7. xilinx_intc_create(hwaddr base, qemu_irq irq, int kind_of_intr)
  8. {
  9. DeviceState *dev;
  10. dev = qdev_create(NULL, "xlnx.xps-intc");
  11. qdev_prop_set_uint32(dev, "kind-of-intr", kind_of_intr);
  12. qdev_init_nofail(dev);
  13. sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
  14. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
  15. return dev;
  16. }
  17. /* OPB Timer/Counter. */
  18. static inline DeviceState *
  19. xilinx_timer_create(hwaddr base, qemu_irq irq, int oto, int freq)
  20. {
  21. DeviceState *dev;
  22. dev = qdev_create(NULL, "xlnx.xps-timer");
  23. qdev_prop_set_uint32(dev, "one-timer-only", oto);
  24. qdev_prop_set_uint32(dev, "clock-frequency", freq);
  25. qdev_init_nofail(dev);
  26. sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
  27. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
  28. return dev;
  29. }
  30. /* XPS Ethernet Lite MAC. */
  31. static inline DeviceState *
  32. xilinx_ethlite_create(NICInfo *nd, hwaddr base, qemu_irq irq,
  33. int txpingpong, int rxpingpong)
  34. {
  35. DeviceState *dev;
  36. qemu_check_nic_model(nd, "xlnx.xps-ethernetlite");
  37. dev = qdev_create(NULL, "xlnx.xps-ethernetlite");
  38. qdev_set_nic_properties(dev, nd);
  39. qdev_prop_set_uint32(dev, "tx-ping-pong", txpingpong);
  40. qdev_prop_set_uint32(dev, "rx-ping-pong", rxpingpong);
  41. qdev_init_nofail(dev);
  42. sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
  43. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
  44. return dev;
  45. }
  46. static inline void
  47. xilinx_axiethernet_init(DeviceState *dev, NICInfo *nd, StreamSlave *peer,
  48. hwaddr base, qemu_irq irq, int txmem, int rxmem)
  49. {
  50. Error *errp = NULL;
  51. qdev_set_nic_properties(dev, nd);
  52. qdev_prop_set_uint32(dev, "rxmem", rxmem);
  53. qdev_prop_set_uint32(dev, "txmem", txmem);
  54. object_property_set_link(OBJECT(dev), OBJECT(peer), "axistream-connected",
  55. &errp);
  56. assert_no_error(errp);
  57. qdev_init_nofail(dev);
  58. sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
  59. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
  60. }
  61. static inline void
  62. xilinx_axidma_init(DeviceState *dev, StreamSlave *peer, hwaddr base,
  63. qemu_irq irq, qemu_irq irq2, int freqhz)
  64. {
  65. Error *errp = NULL;
  66. qdev_prop_set_uint32(dev, "freqhz", freqhz);
  67. object_property_set_link(OBJECT(dev), OBJECT(peer), "axistream-connected",
  68. &errp);
  69. assert_no_error(errp);
  70. qdev_init_nofail(dev);
  71. sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
  72. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
  73. sysbus_connect_irq(SYS_BUS_DEVICE(dev), 1, irq2);
  74. }
  75. #endif