| |
| .. _OPAL_PCI_CONFIG: |
| |
| ============================ |
| OPAL PCI Config Space Access |
| ============================ |
| |
| PCI Config space is read or written to through OPAL calls. All of these calls |
| |
| .. _OPAL_PCI_CONFIG_return_codes: |
| |
| OPAL_PCI_CONFIG_* Return codes |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| :ref:`OPAL_SUCCESS` |
| Read/Write operation completed successfully. |
| :ref:`OPAL_PARAMETER` |
| Invalid parameter. e.g. invalid `phb_id` or `bus_dev_func`. |
| :ref:`OPAL_HARDWARE` |
| Invalid request for the hardware either permanently or in its |
| current state. Can also be a hardware problem, e.g. fenced or |
| config access is currently blocked. |
| :ref:`OPAL_UNSUPPORTED` |
| Unsupported operation. For example, phb4 doesn't support ASB config |
| space writes. |
| Other return codes |
| Should be handled gracefully. For example, for any return code other than |
| :ref:`OPAL_SUCCESS`, Linux will return all bits set for the specified size |
| for a read, and will ignore the error on a write. |
| |
| .. _OPAL_PCI_CONFIG_READ_BYTE: |
| |
| OPAL_PCI_CONFIG_READ_BYTE |
| ------------------------- |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_READ_BYTE 13 |
| |
| int64_t opal_pci_config_read_byte(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint8_t *data); |
| |
| Reads a single byte from PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |
| .. _OPAL_PCI_CONFIG_READ_HALF_WORD: |
| |
| OPAL_PCI_CONFIG_READ_HALF_WORD |
| ------------------------------ |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_READ_HALF_WORD 14 |
| |
| int64_t opal_pci_config_read_half_word(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint16_t *data); |
| |
| Reads a half word (16 bits) from PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |
| .. _OPAL_PCI_CONFIG_READ_WORD: |
| |
| OPAL_PCI_CONFIG_READ_WORD |
| ------------------------- |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_READ_WORD 15 |
| |
| int64_t opal_pci_config_read_word(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint32_t *data); |
| |
| Reads a word (32 bits) from PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |
| .. _OPAL_PCI_CONFIG_WRITE_BYTE: |
| |
| OPAL_PCI_CONFIG_WRITE_BYTE |
| -------------------------- |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_WRITE_BYTE 16 |
| |
| int64_t opal_pci_config_write_byte(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint8_t data); |
| |
| Writes a byte (8 bits) to PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |
| .. _OPAL_PCI_CONFIG_WRITE_HALF_WORD: |
| |
| OPAL_PCI_CONFIG_WRITE_HALF_WORD |
| ------------------------------- |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_WRITE_HALF_WORD 17 |
| |
| int64_t opal_pci_config_read_half_word(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint16_t data); |
| |
| Writes a half word (16 bits) to PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |
| .. _OPAL_PCI_CONFIG_WRITE_WORD: |
| |
| OPAL_PCI_CONFIG_WRITE_WORD |
| -------------------------- |
| |
| .. code-block:: c |
| |
| #define OPAL_PCI_CONFIG_WRITE_WORD 18 |
| |
| int64_t opal_pci_config_read_word(uint64_t phb_id, |
| uint64_t bus_dev_func, |
| uint64_t offset, |
| uint32_t data); |
| |
| Writes a word (32 bits) to PCI config space, |
| see :ref:`OPAL_PCI_CONFIG_return_codes`. |
| |