180bb2ff7SRichard Henderson /* 280bb2ff7SRichard Henderson * QEMU Alpha PCI support functions. 380bb2ff7SRichard Henderson * 480bb2ff7SRichard Henderson * Some of this isn't very Alpha specific at all. 580bb2ff7SRichard Henderson * 680bb2ff7SRichard Henderson * ??? Sparse memory access not implemented. 780bb2ff7SRichard Henderson */ 880bb2ff7SRichard Henderson 9e2e5e114SPeter Maydell #include "qemu/osdep.h" 10*674b0a57SMarkus Armbruster #include "hw/pci/pci_host.h" 1147b43a1fSPaolo Bonzini #include "alpha_sys.h" 121de7afc9SPaolo Bonzini #include "qemu/log.h" 13c6ce9f17SPaolo Bonzini #include "trace.h" 1480bb2ff7SRichard Henderson 1580bb2ff7SRichard Henderson 163661049fSRichard Henderson /* Fallback for unassigned PCI I/O operations. Avoids MCHK. */ 173661049fSRichard Henderson 183661049fSRichard Henderson static uint64_t ignore_read(void *opaque, hwaddr addr, unsigned size) 193661049fSRichard Henderson { 203661049fSRichard Henderson return 0; 213661049fSRichard Henderson } 223661049fSRichard Henderson 233661049fSRichard Henderson static void ignore_write(void *opaque, hwaddr addr, uint64_t v, unsigned size) 243661049fSRichard Henderson { 253661049fSRichard Henderson } 263661049fSRichard Henderson 273661049fSRichard Henderson const MemoryRegionOps alpha_pci_ignore_ops = { 283661049fSRichard Henderson .read = ignore_read, 293661049fSRichard Henderson .write = ignore_write, 303661049fSRichard Henderson .endianness = DEVICE_LITTLE_ENDIAN, 313661049fSRichard Henderson .valid = { 323661049fSRichard Henderson .min_access_size = 1, 333661049fSRichard Henderson .max_access_size = 8, 343661049fSRichard Henderson }, 353661049fSRichard Henderson .impl = { 363661049fSRichard Henderson .min_access_size = 1, 373661049fSRichard Henderson .max_access_size = 8, 383661049fSRichard Henderson }, 393661049fSRichard Henderson }; 403661049fSRichard Henderson 413661049fSRichard Henderson 4280bb2ff7SRichard Henderson /* PCI config space reads/writes, to byte-word addressable memory. */ 43a8170e5eSAvi Kivity static uint64_t bw_conf1_read(void *opaque, hwaddr addr, 4480bb2ff7SRichard Henderson unsigned size) 4580bb2ff7SRichard Henderson { 4680bb2ff7SRichard Henderson PCIBus *b = opaque; 4780bb2ff7SRichard Henderson return pci_data_read(b, addr, size); 4880bb2ff7SRichard Henderson } 4980bb2ff7SRichard Henderson 50a8170e5eSAvi Kivity static void bw_conf1_write(void *opaque, hwaddr addr, 5180bb2ff7SRichard Henderson uint64_t val, unsigned size) 5280bb2ff7SRichard Henderson { 5380bb2ff7SRichard Henderson PCIBus *b = opaque; 5480bb2ff7SRichard Henderson pci_data_write(b, addr, val, size); 5580bb2ff7SRichard Henderson } 5680bb2ff7SRichard Henderson 5780bb2ff7SRichard Henderson const MemoryRegionOps alpha_pci_conf1_ops = { 5880bb2ff7SRichard Henderson .read = bw_conf1_read, 5980bb2ff7SRichard Henderson .write = bw_conf1_write, 6080bb2ff7SRichard Henderson .endianness = DEVICE_LITTLE_ENDIAN, 6180bb2ff7SRichard Henderson .impl = { 6280bb2ff7SRichard Henderson .min_access_size = 1, 6380bb2ff7SRichard Henderson .max_access_size = 4, 6480bb2ff7SRichard Henderson }, 6580bb2ff7SRichard Henderson }; 6680bb2ff7SRichard Henderson 6780bb2ff7SRichard Henderson /* PCI/EISA Interrupt Acknowledge Cycle. */ 6880bb2ff7SRichard Henderson 69a8170e5eSAvi Kivity static uint64_t iack_read(void *opaque, hwaddr addr, unsigned size) 7080bb2ff7SRichard Henderson { 7180bb2ff7SRichard Henderson return pic_read_irq(isa_pic); 7280bb2ff7SRichard Henderson } 7380bb2ff7SRichard Henderson 74a8170e5eSAvi Kivity static void special_write(void *opaque, hwaddr addr, 7580bb2ff7SRichard Henderson uint64_t val, unsigned size) 7680bb2ff7SRichard Henderson { 77c6ce9f17SPaolo Bonzini trace_alpha_pci_iack_write(); 7880bb2ff7SRichard Henderson } 7980bb2ff7SRichard Henderson 8080bb2ff7SRichard Henderson const MemoryRegionOps alpha_pci_iack_ops = { 8180bb2ff7SRichard Henderson .read = iack_read, 8280bb2ff7SRichard Henderson .write = special_write, 8380bb2ff7SRichard Henderson .endianness = DEVICE_LITTLE_ENDIAN, 8480bb2ff7SRichard Henderson .valid = { 8580bb2ff7SRichard Henderson .min_access_size = 4, 8680bb2ff7SRichard Henderson .max_access_size = 4, 8780bb2ff7SRichard Henderson }, 8880bb2ff7SRichard Henderson .impl = { 8980bb2ff7SRichard Henderson .min_access_size = 4, 9080bb2ff7SRichard Henderson .max_access_size = 4, 9180bb2ff7SRichard Henderson }, 9280bb2ff7SRichard Henderson }; 93