vtd: Make some pci access functions architecture independent.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
This commit is contained in:
Keir Fraser committed 2008-10-09 12:47:31 +01:00
1 parent aa2c2fc508
commit b79e6e11f8
4 files changed
+67 -60

No files matched your search

+1 -60
View File
@@ -1,12 +1,9 @@
/******************************************************************************
* pci.c
*
* PCI access functions.
* Architecture-dependent PCI access functions.
*/
#include <xen/config.h>
#include <xen/pci.h>
#include <xen/pci_regs.h>
#include <xen/spinlock.h>
#include <asm/io.h>
@@ -118,59 +115,3 @@ void pci_conf_write32(
pci_conf_write(PCI_CONF_ADDRESS(bus, dev, func, reg), 0, 4, data);
}
int pci_find_cap_offset(u8 bus, u8 dev, u8 func, u8 cap)
{
u8 id;
int max_cap = 48;
u8 pos = PCI_CAPABILITY_LIST;
u16 status;
status = pci_conf_read16(bus, dev, func, PCI_STATUS);
if ( (status & PCI_STATUS_CAP_LIST) == 0 )
return 0;
while ( max_cap-- )
{
pos = pci_conf_read8(bus, dev, func, pos);
if ( pos < 0x40 )
break;
pos &= ~3;
id = pci_conf_read8(bus, dev, func, pos + PCI_CAP_LIST_ID);
if ( id == 0xff )
break;
else if ( id == cap )
return pos;
pos += PCI_CAP_LIST_NEXT;
}
return 0;
}
int pci_find_next_cap(u8 bus, unsigned int devfn, u8 pos, int cap)
{
u8 id;
int ttl = 48;
while ( ttl-- )
{
pos = pci_conf_read8(bus, PCI_SLOT(devfn), PCI_FUNC(devfn), pos);
if ( pos < 0x40 )
break;
pos &= ~3;
id = pci_conf_read8(bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
pos + PCI_CAP_LIST_ID);
if ( id == 0xff )
break;
if ( id == cap )
return pos;
pos += PCI_CAP_LIST_NEXT;
}
return 0;
}
+1
View File
@@ -1,5 +1,6 @@
subdir-y += char
subdir-y += cpufreq
subdir-y += pci
subdir-$(x86) += passthrough
subdir-$(HAS_ACPI) += acpi
subdir-$(HAS_VGA) += video
+1
View File
@@ -0,0 +1 @@
obj-y += pci.o
+64
View File
@@ -0,0 +1,64 @@
/******************************************************************************
* pci.c
*
* Architecture-independent PCI access functions.
*/
#include <xen/pci.h>
#include <xen/pci_regs.h>
int pci_find_cap_offset(u8 bus, u8 dev, u8 func, u8 cap)
{
u8 id;
int max_cap = 48;
u8 pos = PCI_CAPABILITY_LIST;
u16 status;
status = pci_conf_read16(bus, dev, func, PCI_STATUS);
if ( (status & PCI_STATUS_CAP_LIST) == 0 )
return 0;
while ( max_cap-- )
{
pos = pci_conf_read8(bus, dev, func, pos);
if ( pos < 0x40 )
break;
pos &= ~3;
id = pci_conf_read8(bus, dev, func, pos + PCI_CAP_LIST_ID);
if ( id == 0xff )
break;
else if ( id == cap )
return pos;
pos += PCI_CAP_LIST_NEXT;
}
return 0;
}
int pci_find_next_cap(u8 bus, unsigned int devfn, u8 pos, int cap)
{
u8 id;
int ttl = 48;
while ( ttl-- )
{
pos = pci_conf_read8(bus, PCI_SLOT(devfn), PCI_FUNC(devfn), pos);
if ( pos < 0x40 )
break;
pos &= ~3;
id = pci_conf_read8(bus, PCI_SLOT(devfn), PCI_FUNC(devfn),
pos + PCI_CAP_LIST_ID);
if ( id == 0xff )
break;
if ( id == cap )
return pos;
pos += PCI_CAP_LIST_NEXT;
}
return 0;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.