.. _OPAL_PCI_SET_PHB_MEM_WINDOW: OPAL_PCI_SET_PHB_MEM_WINDOW =========================== .. code-block:: c #define OPAL_PCI_SET_PHB_MEM_WINDOW 28 int64_t opal_pci_set_phb_mem_window(uint64_t phb_id, uint16_t window_type, uint16_t window_num, uint64_t addr, uint64_t pci_addr, uint64_t size); .. note:: Appears to be POWER7 p7ioc specific. Likely to be removed soon. **WARNING:** following documentation is from old sources, and is possibly not representative of OPALv3 as implemented by skiboot. This should be used as a starting point for full documentation. The host calls this function to set the PHB PCI memory window parameters for PHBs. OPAL sets IO space for P7IOC and KVM cannot relocate this. KVM should changes these windows only while all devices below the PHB are disabled for PCI memory ops, and with the target window in disabled state (where supported by PHB hardware). ``phb_id`` is the value from the PHB node ibm,opal-phbid property. ``window_type`` specifies 32-bit or 64-bit PCI memory '0' selects IO space, and is not supported for relocation. OPAL returns OPAL_UNSUPPORTED for this value. '1' selects 32-bit PCI memory space '2' selects 64 bit PCI memory space ``window_num`` is the MMIO window number within the specified PCI memory space ``starting_real_address`` specifies the location within sytsem (processor)real address space this MMIO window starts. This must be a location within the IO Hub or PHB node ibm,opal-mmio-real property. ``starting_pci_address`` specifies the location within PCI 32 or 64-bit address space that this MMIO window starts. For 64-bit PCI memory, this must be within the low order 60 bit (1 Exabyte) region of PCI memory. Addresses above 1EB are reserved to IODA definitions. ``segment_size`` defines the segment size of this window, in the same format as and a matching value from the ibm,opal-memwin32/64 property. The window total size, in bytes, is the segment_size times the ibm,opal-memwin32/64 property and must not extend beyond the ibm,opal-mmio-real property range within system real address space. The total MMIO window size is the segment_size times the num_segments supported for the specifice window. The host must assure that the cumulative address space for all enabled windows does not exceed the total PHB 32-bit or 64-bit real address window space, or extend outside these address ranges, and that no windows overlap each other in real or PCI address space. OPAL does not validate those conditions. A segment size of '0' indicates to disable this MMIO window. If the PHB hardware does not support disabling a window, OPAL returns OPAL_UNSUPPORTED status. The size of the system real and PCI memory spaces are equal and defined by segment_size times the number of segments within this MMIO window. The host must set PHB memory windows to be within the system real address ranges indicated in the PHB parent HDT hub node ibm,opal-mmio-real property. Return value: .. code-block:: c if (!phb) return OPAL_PARAMETER; if (!phb->ops->set_phb_mem_window) return OPAL_UNSUPPORTED;