s390/pci: provide support for MIO instructions
Provide support for PCI I/O instructions that work on mapped IO addresses. Signed-off-by: Sebastian Ott <sebott@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:

committed by
Martin Schwidefsky

parent
c475f1770a
commit
71ba41c9b1
@@ -163,7 +163,14 @@ static int clp_store_query_pci_fn(struct zpci_dev *zdev,
|
||||
memcpy(zdev->util_str, response->util_str,
|
||||
sizeof(zdev->util_str));
|
||||
}
|
||||
zdev->mio_capable = response->mio_addr_avail;
|
||||
for (i = 0; i < PCI_BAR_COUNT; i++) {
|
||||
if (!(response->mio_valid & (1 << (PCI_BAR_COUNT - i - 1))))
|
||||
continue;
|
||||
|
||||
zdev->bars[i].mio_wb = (void __iomem *) response->addr[i].wb;
|
||||
zdev->bars[i].mio_wt = (void __iomem *) response->addr[i].wt;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -279,11 +286,18 @@ int clp_enable_fh(struct zpci_dev *zdev, u8 nr_dma_as)
|
||||
int rc;
|
||||
|
||||
rc = clp_set_pci_fn(&fh, nr_dma_as, CLP_SET_ENABLE_PCI_FN);
|
||||
if (!rc)
|
||||
/* Success -> store enabled handle in zdev */
|
||||
zdev->fh = fh;
|
||||
zpci_dbg(3, "ena fid:%x, fh:%x, rc:%d\n", zdev->fid, fh, rc);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
zpci_dbg(3, "ena fid:%x, fh:%x, rc:%d\n", zdev->fid, zdev->fh, rc);
|
||||
zdev->fh = fh;
|
||||
if (zdev->mio_capable) {
|
||||
rc = clp_set_pci_fn(&fh, nr_dma_as, CLP_SET_ENABLE_MIO);
|
||||
zpci_dbg(3, "ena mio fid:%x, fh:%x, rc:%d\n", zdev->fid, fh, rc);
|
||||
if (rc)
|
||||
clp_disable_fh(zdev);
|
||||
}
|
||||
out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -296,11 +310,10 @@ int clp_disable_fh(struct zpci_dev *zdev)
|
||||
return 0;
|
||||
|
||||
rc = clp_set_pci_fn(&fh, 0, CLP_SET_DISABLE_PCI_FN);
|
||||
zpci_dbg(3, "dis fid:%x, fh:%x, rc:%d\n", zdev->fid, fh, rc);
|
||||
if (!rc)
|
||||
/* Success -> store disabled handle in zdev */
|
||||
zdev->fh = fh;
|
||||
|
||||
zpci_dbg(3, "dis fid:%x, fh:%x, rc:%d\n", zdev->fid, zdev->fh, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user