static int cxl_pcie_write_config(struct pci_bus *bus, unsigned int devfn, int offset, int len, u32 val) { int rc, record; struct cxl_afu *afu; rc = cxl_pcie_config_info(bus, devfn, &afu, &record); if (rc) return rc; switch (len) { case 1: rc = cxl_ops->afu_cr_write8(afu, record, offset, val & 0xff); break; case 2: rc = cxl_ops->afu_cr_write16(afu, record, offset, val & 0xffff); break; case 4: rc = cxl_ops->afu_cr_write32(afu, record, offset, val); break; default: WARN_ON(1); } if (rc) return PCIBIOS_SET_FAILED; return PCIBIOS_SUCCESSFUL; }
static int cxl_pcie_write_config(struct pci_bus *bus, unsigned int devfn, int offset, int len, u32 val) { int rc, record; struct cxl_afu *afu; afu = pci_bus_to_afu(bus); /* Grab a reader lock on afu. */ if (afu == NULL || !cxl_afu_configured_get(afu)) return PCIBIOS_DEVICE_NOT_FOUND; rc = cxl_pcie_config_info(bus, devfn, afu, &record); if (rc) goto out; switch (len) { case 1: rc = cxl_ops->afu_cr_write8(afu, record, offset, val & 0xff); break; case 2: rc = cxl_ops->afu_cr_write16(afu, record, offset, val & 0xffff); break; case 4: rc = cxl_ops->afu_cr_write32(afu, record, offset, val); break; default: WARN_ON(1); } out: cxl_afu_configured_put(afu); return rc ? PCIBIOS_SET_FAILED : PCIBIOS_SUCCESSFUL; }
static int cxl_pcie_read_config(struct pci_bus *bus, unsigned int devfn, int offset, int len, u32 *val) { int rc, record; struct cxl_afu *afu; u8 val8; u16 val16; u32 val32; rc = cxl_pcie_config_info(bus, devfn, &afu, &record); if (rc) return rc; switch (len) { case 1: rc = cxl_ops->afu_cr_read8(afu, record, offset, &val8); *val = val8; break; case 2: rc = cxl_ops->afu_cr_read16(afu, record, offset, &val16); *val = val16; break; case 4: rc = cxl_ops->afu_cr_read32(afu, record, offset, &val32); *val = val32; break; default: WARN_ON(1); } if (rc) return PCIBIOS_DEVICE_NOT_FOUND; return PCIBIOS_SUCCESSFUL; }
static int cxl_pcie_read_config(struct pci_bus *bus, unsigned int devfn, int offset, int len, u32 *val) { int rc, record; struct cxl_afu *afu; u8 val8; u16 val16; u32 val32; afu = pci_bus_to_afu(bus); /* Grab a reader lock on afu. */ if (afu == NULL || !cxl_afu_configured_get(afu)) return PCIBIOS_DEVICE_NOT_FOUND; rc = cxl_pcie_config_info(bus, devfn, afu, &record); if (rc) goto out; switch (len) { case 1: rc = cxl_ops->afu_cr_read8(afu, record, offset, &val8); *val = val8; break; case 2: rc = cxl_ops->afu_cr_read16(afu, record, offset, &val16); *val = val16; break; case 4: rc = cxl_ops->afu_cr_read32(afu, record, offset, &val32); *val = val32; break; default: WARN_ON(1); } out: cxl_afu_configured_put(afu); return rc ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL; }