2
0

pci.c 2.0 KB

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