diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/driver.c b/src/add-ons/kernel/drivers/graphics/nvidia/driver.c index be87b7e1e5..d92be2d528 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia/driver.c +++ b/src/add-ons/kernel/drivers/graphics/nvidia/driver.c @@ -352,21 +352,22 @@ static struct { }; static nv_settings current_settings = { // see comments in nv.settings - // for driver + /* for driver */ DRIVER_PREFIX ".accelerant", - false, // dumprom - // for accelerant - 0x00000000, // logmask - 0, // memory - 0, // tv_output - true, // usebios - true, // hardcursor - false, // switchhead - false, // force_pci - false, // unhide_fw - true, // pgm_panel - true, // dma_acc - false, // vga_on_tv + "none", // primary + false, // dumprom + /* for accelerant */ + 0x00000000, // logmask + 0, // memory + 0, // tv_output + true, // usebios + true, // hardcursor + false, // switchhead + false, // force_pci + false, // unhide_fw + true, // pgm_panel + true, // dma_acc + false, // vga_on_tv }; static void dumprom (void *rom, uint32 size, pci_info pcii) @@ -490,6 +491,10 @@ init_driver(void) { if ((strlen (item) > 0) && (strlen (item) < sizeof (current_settings.accelerant) - 1)) { strcpy (current_settings.accelerant, item); } + item = get_driver_parameter (settings_handle, "primary", "", ""); + if ((strlen (item) > 0) && (strlen (item) < sizeof (current_settings.primary) - 1)) { + strcpy (current_settings.primary, item); + } current_settings.dumprom = get_driver_boolean_parameter (settings_handle, "dumprom", false, false); // for accelerant @@ -781,6 +786,7 @@ static void probe_devices(void) { uint32 pci_index = 0; uint32 count = 0; device_info *di = pd->di; + char tmp_name[B_OS_NAME_LENGTH]; /* while there are more pci devices */ while ((count < MAX_DEVICES) && ((*pci_bus->get_nth_pci_info)(pci_index, &(di->pcii)) == B_NO_ERROR)) { @@ -795,10 +801,16 @@ static void probe_devices(void) { /* if we match a supported device */ if (*devices == di->pcii.device_id ) { /* publish the device name */ - sprintf(di->name, "graphics/" DEVICE_FORMAT, + sprintf(tmp_name, DEVICE_FORMAT, di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); - + /* tweak the exported name to show first in the alphabetically ordered /dev/ + * hierarchy folder, so the system will use it as primary adaptor if requested + * via nv.settings. */ + if (strcmp(tmp_name, current_settings.primary) == 0) + sprintf(tmp_name, "-%s", current_settings.primary); + /* add /dev/ hierarchy path */ + sprintf(di->name, "graphics/%s", tmp_name); /* remember the name */ pd->device_names[count] = di->name; /* mark the driver as available for R/W open */ diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/nv.settings b/src/add-ons/kernel/drivers/graphics/nvidia/nv.settings index 133b59caaf..1cf5075bcf 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia/nv.settings +++ b/src/add-ons/kernel/drivers/graphics/nvidia/nv.settings @@ -4,17 +4,18 @@ # ~/config/settings/kernel/drivers/ # -# nv.driver parameters -# accelerant "nv.accelerant" +# nv.driver parameters: +# accelerant "nv.accelerant" # if enabled selects accelerant filename to be used +#primary "10de_0110_000000" # if enabled selects device to be used as primary device ('hack') +dumprom false # dump bios rom to file (in home folder) -# nv.accelerant parameters +# nv.accelerant parameters: usebios true # if true rely on bios to coldstart the card #memory 2 # in MB, override builtin memory size detection hardcursor true # if true use on-chip cursor capabilities #logmask 0x00000000 # nothing logged, is default -#logmask 0x08000604 # log overlay use in full -#logmask 0xffffffff # log everything -dumprom false # dump bios rom in ~/nv.rom +#logmask 0x08000604 # log overlay use in full to file (in home folder) +#logmask 0xffffffff # log everything to file (in home folder) switchhead false # switch head assignment (dualhead cards only) force_pci false # block AGP mode use if true (AGP cards only) dma_acc true # if true enable DMA cmd fetching for 2D acc (instead of using PIO)