Refactor linuxGetIOSize and linuxGetSizes. Eliminate the unnecessary
optimization in the search loop.
This commit is contained in:
parent
704e645207
commit
8d07ee070e
|
@ -421,7 +421,7 @@ xf86GetPciHostConfigFromTag(PCITAG Tag)
|
||||||
*
|
*
|
||||||
* Please keep this table in ascending vendor/device order.
|
* Please keep this table in ascending vendor/device order.
|
||||||
*/
|
*/
|
||||||
static struct pciSizes {
|
static const struct pciSizes {
|
||||||
unsigned short vendor, device;
|
unsigned short vendor, device;
|
||||||
unsigned long io_size, mem_size;
|
unsigned long io_size, mem_size;
|
||||||
} pciControllerSizes[] = {
|
} pciControllerSizes[] = {
|
||||||
|
@ -444,9 +444,12 @@ static struct pciSizes {
|
||||||
};
|
};
|
||||||
#define NUM_SIZES (sizeof(pciControllerSizes) / sizeof(pciControllerSizes[0]))
|
#define NUM_SIZES (sizeof(pciControllerSizes) / sizeof(pciControllerSizes[0]))
|
||||||
|
|
||||||
static unsigned long
|
static const struct pciSizes *
|
||||||
linuxGetIOSize(PCITAG Tag)
|
linuxGetSizesStruct(PCITAG Tag)
|
||||||
{
|
{
|
||||||
|
static const struct pciSizes default_size = {
|
||||||
|
0, 0, 1U << 16, (unsigned long)(1ULL << 32)
|
||||||
|
};
|
||||||
pciConfigPtr pPCI;
|
pciConfigPtr pPCI;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -454,47 +457,31 @@ linuxGetIOSize(PCITAG Tag)
|
||||||
if ((pPCI = xf86GetPciHostConfigFromTag(Tag))) {
|
if ((pPCI = xf86GetPciHostConfigFromTag(Tag))) {
|
||||||
/* Look up vendor/device */
|
/* Look up vendor/device */
|
||||||
for (i = 0; i < NUM_SIZES; i++) {
|
for (i = 0; i < NUM_SIZES; i++) {
|
||||||
if (pPCI->pci_vendor > pciControllerSizes[i].vendor)
|
if ((pPCI->pci_vendor == pciControllerSizes[i].vendor)
|
||||||
continue;
|
&& (pPCI->pci_device == pciControllerSizes[i].device)) {
|
||||||
if (pPCI->pci_vendor < pciControllerSizes[i].vendor)
|
return & pciControllerSizes[i];
|
||||||
break;
|
}
|
||||||
if (pPCI->pci_device > pciControllerSizes[i].device)
|
|
||||||
continue;
|
|
||||||
if (pPCI->pci_device < pciControllerSizes[i].device)
|
|
||||||
break;
|
|
||||||
return pciControllerSizes[i].io_size;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1U << 16; /* Default to 64K */
|
/* Default to 64KB I/O and 4GB memory. */
|
||||||
|
return & default_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static __inline__ unsigned long
|
||||||
|
linuxGetIOSize(PCITAG Tag)
|
||||||
|
{
|
||||||
|
const struct pciSizes * const sizes = linuxGetSizesStruct(Tag);
|
||||||
|
return sizes->io_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline__ void
|
||||||
linuxGetSizes(PCITAG Tag, unsigned long *io_size, unsigned long *mem_size)
|
linuxGetSizes(PCITAG Tag, unsigned long *io_size, unsigned long *mem_size)
|
||||||
{
|
{
|
||||||
pciConfigPtr pPCI;
|
const struct pciSizes * const sizes = linuxGetSizesStruct(Tag);
|
||||||
int i;
|
|
||||||
|
|
||||||
*io_size = (1U << 16); /* Default to 64K */
|
*io_size = sizes->io_size;
|
||||||
*mem_size = (unsigned long)(1ULL << 32); /* Default to 4G */
|
*mem_size = sizes->mem_size;
|
||||||
|
|
||||||
/* Find host bridge */
|
|
||||||
if ((pPCI = xf86GetPciHostConfigFromTag(Tag))) {
|
|
||||||
/* Look up vendor/device */
|
|
||||||
for (i = 0; i < NUM_SIZES; i++) {
|
|
||||||
if (pPCI->pci_vendor > pciControllerSizes[i].vendor)
|
|
||||||
continue;
|
|
||||||
if (pPCI->pci_vendor < pciControllerSizes[i].vendor)
|
|
||||||
break;
|
|
||||||
if (pPCI->pci_device > pciControllerSizes[i].device)
|
|
||||||
continue;
|
|
||||||
if (pPCI->pci_device < pciControllerSizes[i].device)
|
|
||||||
break;
|
|
||||||
*io_size = pciControllerSizes[i].io_size;
|
|
||||||
*mem_size = pciControllerSizes[i].mem_size;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT int
|
_X_EXPORT int
|
||||||
|
|
Loading…
Reference in New Issue
Block a user