... instead of open coding them.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Wei Wang <wei.wang2@amd.com>
Acked-by: Keir Fraser <keir@xen.org>
unsigned int dest;
struct amd_iommu *iommu = desc->action->dev_id;
u16 seg = iommu->seg;
- u8 bus = (iommu->bdf >> 8) & 0xff;
- u8 dev = PCI_SLOT(iommu->bdf & 0xff);
- u8 func = PCI_FUNC(iommu->bdf & 0xff);
+ u8 bus = PCI_BUS(iommu->bdf);
+ u8 dev = PCI_SLOT(iommu->bdf);
+ u8 func = PCI_FUNC(iommu->bdf);
dest = set_desc_affinity(desc, mask);
static void amd_iommu_msi_enable(struct amd_iommu *iommu, int flag)
{
u16 control;
- int bus = (iommu->bdf >> 8) & 0xff;
- int dev = PCI_SLOT(iommu->bdf & 0xff);
- int func = PCI_FUNC(iommu->bdf & 0xff);
+ int bus = PCI_BUS(iommu->bdf);
+ int dev = PCI_SLOT(iommu->bdf);
+ int func = PCI_FUNC(iommu->bdf);
control = pci_conf_read16(iommu->seg, bus, dev, func,
iommu->msi_cap + PCI_MSI_FLAGS);
- control &= ~(1);
+ control &= ~PCI_MSI_FLAGS_ENABLE;
if ( flag )
control |= flag;
pci_conf_write16(iommu->seg, bus, dev, func,
spinlock_t *lock;
int offset;
- bdf = (pdev->bus << 8) | pdev->devfn;
+ bdf = PCI_BDF2(pdev->bus, pdev->devfn);
req_id = get_dma_requestor_id(pdev->seg, bdf);
alias_id = get_intremap_requestor_id(pdev->seg, bdf);
struct msi_desc *msi_desc, struct msi_msg *msg)
{
struct pci_dev *pdev = msi_desc->dev;
- struct amd_iommu *iommu = NULL;
+ int bdf = PCI_BDF2(pdev->bus, pdev->devfn);
+ struct amd_iommu *iommu;
if ( !iommu_intremap )
return;
- iommu = find_iommu_for_device(pdev->seg, (pdev->bus << 8) | pdev->devfn);
-
+ iommu = find_iommu_for_device(pdev->seg, bdf);
if ( !iommu )
{
- AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = 0x%x\n",
- (pdev->bus << 8) | pdev->devfn);
+ AMD_IOMMU_DEBUG("Fail to find iommu for MSI device id = %#x\n", bdf);
return;
}
/* Update device table entries using new root table and paging mode */
for_each_pdev( d, pdev )
{
- bdf = (pdev->bus << 8) | pdev->devfn;
+ bdf = PCI_BDF2(pdev->bus, pdev->devfn);
req_id = get_dma_requestor_id(pdev->seg, bdf);
iommu = find_iommu_for_device(pdev->seg, bdf);
if ( !iommu )
static int amd_iommu_assign_device(struct domain *d, u16 seg, u8 bus, u8 devfn)
{
struct ivrs_mappings *ivrs_mappings = get_ivrs_mappings(seg);
- int bdf = (bus << 8) | devfn;
+ int bdf = PCI_BDF2(bus, devfn);
int req_id = get_dma_requestor_id(seg, bdf);
if ( ivrs_mappings[req_id].unity_map_enable )
static int amd_iommu_group_id(u16 seg, u8 bus, u8 devfn)
{
- int rt;
- int bdf = (bus << 8) | devfn;
- rt = ( bdf < ivrs_bdf_entries ) ?
- get_dma_requestor_id(seg, bdf) :
- bdf;
- return rt;
+ int bdf = PCI_BDF2(bus, devfn);
+
+ return (bdf < ivrs_bdf_entries) ? get_dma_requestor_id(seg, bdf) : bdf;
}
#include <asm/io_apic.h>