pci.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * QEMU Alpha PCI support functions.
  3. *
  4. * Some of this isn't very Alpha specific at all.
  5. *
  6. * ??? Sparse memory access not implemented.
  7. */
  8. #include "qemu/osdep.h"
  9. #include "hw/pci/pci_host.h"
  10. #include "alpha_sys.h"
  11. #include "qemu/log.h"
  12. #include "trace.h"
  13. /* Fallback for unassigned PCI I/O operations. Avoids MCHK. */
  14. static uint64_t ignore_read(void *opaque, hwaddr addr, unsigned size)
  15. {
  16. return 0;
  17. }
  18. static void ignore_write(void *opaque, hwaddr addr, uint64_t v, unsigned size)
  19. {
  20. }
  21. const MemoryRegionOps alpha_pci_ignore_ops = {
  22. .read = ignore_read,
  23. .write = ignore_write,
  24. .endianness = DEVICE_LITTLE_ENDIAN,
  25. .valid = {
  26. .min_access_size = 1,
  27. .max_access_size = 8,
  28. },
  29. .impl = {
  30. .min_access_size = 1,
  31. .max_access_size = 8,
  32. },
  33. };
  34. /* PCI config space reads/writes, to byte-word addressable memory. */
  35. static uint64_t bw_conf1_read(void *opaque, hwaddr addr,
  36. unsigned size)
  37. {
  38. PCIBus *b = opaque;
  39. return pci_data_read(b, addr, size);
  40. }
  41. static void bw_conf1_write(void *opaque, hwaddr addr,
  42. uint64_t val, unsigned size)
  43. {
  44. PCIBus *b = opaque;
  45. pci_data_write(b, addr, val, size);
  46. }
  47. const MemoryRegionOps alpha_pci_conf1_ops = {
  48. .read = bw_conf1_read,
  49. .write = bw_conf1_write,
  50. .endianness = DEVICE_LITTLE_ENDIAN,
  51. .impl = {
  52. .min_access_size = 1,
  53. .max_access_size = 4,
  54. },
  55. };
  56. /* PCI/EISA Interrupt Acknowledge Cycle. */
  57. static uint64_t iack_read(void *opaque, hwaddr addr, unsigned size)
  58. {
  59. return pic_read_irq(isa_pic);
  60. }
  61. static void special_write(void *opaque, hwaddr addr,
  62. uint64_t val, unsigned size)
  63. {
  64. trace_alpha_pci_iack_write();
  65. }
  66. const MemoryRegionOps alpha_pci_iack_ops = {
  67. .read = iack_read,
  68. .write = special_write,
  69. .endianness = DEVICE_LITTLE_ENDIAN,
  70. .valid = {
  71. .min_access_size = 4,
  72. .max_access_size = 4,
  73. },
  74. .impl = {
  75. .min_access_size = 4,
  76. .max_access_size = 4,
  77. },
  78. };