freebsd_network: Use Haiku's PCI capability finding functions.

Instead of reimplementing them in here, for which there is no need.
This commit is contained in:
Augustin Cavalier
2022-05-19 23:07:01 -04:00
parent 458c40fb27
commit f43b88e836
+16 -35
View File
@@ -236,47 +236,28 @@ pci_enable_io(device_t dev, int space)
int int
pci_find_cap(device_t dev, int capability, int *capreg) pci_find_cap(device_t dev, int capability, int *capreg)
{ {
return pci_find_extcap(dev, capability, capreg); pci_info* info = get_device_pci_info(dev);
uint8 offset;
status_t status;
status = gPci->find_pci_capability(info->bus, info->device, info->function,
capability, &offset);
*capreg = offset;
return status;
} }
int int
pci_find_extcap(device_t child, int capability, int *_capabilityRegister) pci_find_extcap(device_t dev, int capability, int *capreg)
{ {
uint8 capabilityPointer; pci_info* info = get_device_pci_info(dev);
uint8 headerType; uint16 offset;
uint16 status; status_t status;
status = pci_read_config(child, PCIR_STATUS, 2); status = gPci->find_pci_extended_capability(info->bus, info->device, info->function,
if ((status & PCIM_STATUS_CAPPRESENT) == 0) capability, &offset);
return ENXIO; *capreg = offset;
return status;
headerType = pci_read_config(child, PCI_header_type, 1);
switch (headerType & PCIM_HDRTYPE) {
case 0:
case 1:
capabilityPointer = PCIR_CAP_PTR;
break;
case 2:
capabilityPointer = PCIR_CAP_PTR_2;
break;
default:
return ENXIO;
}
capabilityPointer = pci_read_config(child, capabilityPointer, 1);
while (capabilityPointer != 0) {
if (pci_read_config(child, capabilityPointer + PCICAP_ID, 1)
== capability) {
if (_capabilityRegister != NULL)
*_capabilityRegister = capabilityPointer;
return 0;
}
capabilityPointer = pci_read_config(child,
capabilityPointer + PCICAP_NEXTPTR, 1);
}
return ENOENT;
} }