xilinx.h 2.8 KB

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