Add a pci:mechanism driver setting
* This should be use to force a config mechanism in case another one crashes. * Actually doesn't seem to catch the setting passed by the boot_loader, maybe it should be pci_config_mechanism in safemode instead ? * Added a TODO about respecting the "don't call the BIOS" setting.
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <KernelExport.h>
|
#include <KernelExport.h>
|
||||||
|
#include <driver_settings.h>
|
||||||
|
#include <string.h>
|
||||||
#include "pci_irq.h"
|
#include "pci_irq.h"
|
||||||
#include "pci_bios.h"
|
#include "pci_bios.h"
|
||||||
#include "pci_private.h"
|
#include "pci_private.h"
|
||||||
@@ -211,12 +213,33 @@ pci_controller_init(void)
|
|||||||
bool search_mech1 = true;
|
bool search_mech1 = true;
|
||||||
bool search_mech2 = true;
|
bool search_mech2 = true;
|
||||||
bool search_bios = true;
|
bool search_bios = true;
|
||||||
|
void *config = NULL;
|
||||||
status_t status;
|
status_t status;
|
||||||
|
|
||||||
status = pci_x86_irq_init();
|
status = pci_x86_irq_init();
|
||||||
if (status != B_OK)
|
if (status != B_OK)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
config = load_driver_settings("pci");
|
||||||
|
if (config) {
|
||||||
|
const char *mech = get_driver_parameter(config, "mechanism",
|
||||||
|
NULL, NULL);
|
||||||
|
if (mech) {
|
||||||
|
search_mech1 = search_mech2 = search_bios = false;
|
||||||
|
if (strcmp(mech, "1") == 0)
|
||||||
|
search_mech1 = true;
|
||||||
|
else if (strcmp(mech, "2") == 0)
|
||||||
|
search_mech2 = true;
|
||||||
|
else if (strcmp(mech, "bios") == 0)
|
||||||
|
search_bios = true;
|
||||||
|
else
|
||||||
|
panic("Unknown pci config mechanism setting %s\n", mech);
|
||||||
|
}
|
||||||
|
unload_driver_settings(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: check safemode "don't call the BIOS" setting and unset search_bios!
|
||||||
|
|
||||||
// PCI configuration mechanism 1 is the preferred one.
|
// PCI configuration mechanism 1 is the preferred one.
|
||||||
// If it doesn't work, try mechanism 2.
|
// If it doesn't work, try mechanism 2.
|
||||||
// Finally, try to fallback to PCI BIOS
|
// Finally, try to fallback to PCI BIOS
|
||||||
|
|||||||
Reference in New Issue
Block a user