diff options
-rw-r--r-- | src/aticonfig.c | 2 | ||||
-rw-r--r-- | src/atioption.c | 7 | ||||
-rw-r--r-- | src/atioption.h | 1 | ||||
-rw-r--r-- | src/atiprobe.c | 24 | ||||
-rw-r--r-- | src/atistruct.h | 1 |
5 files changed, 35 insertions, 0 deletions
diff --git a/src/aticonfig.c b/src/aticonfig.c index 604fbae..988edfd 100644 --- a/src/aticonfig.c +++ b/src/aticonfig.c @@ -112,6 +112,7 @@ ATIProcessOptions (void)memcpy(PublicOption, ATIPublicOptions, ATIPublicOptionSize); +# define ProbeSparse PublicOption[ATI_OPTION_PROBE_SPARSE].value.bool # define Accel PublicOption[ATI_OPTION_ACCEL].value.bool # define BIOSDisplay PrivateOption[ATI_OPTION_BIOS_DISPLAY].value.bool # define Blend PrivateOption[ATI_OPTION_BLEND].value.bool @@ -188,6 +189,7 @@ ATIProcessOptions PrivateOption); /* Move option values into driver private structure */ + pATI->OptionProbeSparse = ProbeSparse; pATI->OptionAccel = Accel; pATI->OptionBIOSDisplay = BIOSDisplay; pATI->OptionBlend = Blend; diff --git a/src/atioption.c b/src/atioption.c index 7ef580b..4cb965d 100644 --- a/src/atioption.c +++ b/src/atioption.c @@ -61,6 +61,13 @@ const char *ATITVStandardNames[ATI_TV_STDS_MAX_VALID+1] = { const OptionInfoRec ATIPublicOptions[] = { { + ATI_OPTION_PROBE_SPARSE, + "probe_sparse", + OPTV_BOOLEAN, + {0, }, + FALSE + }, + { ATI_OPTION_ACCEL, "accel", OPTV_BOOLEAN, diff --git a/src/atioption.h b/src/atioption.h index 569debd..f68f641 100644 --- a/src/atioption.h +++ b/src/atioption.h @@ -33,6 +33,7 @@ */ typedef enum { + ATI_OPTION_PROBE_SPARSE, ATI_OPTION_ACCEL, ATI_OPTION_CRT_DISPLAY, ATI_OPTION_CSYNC, diff --git a/src/atiprobe.c b/src/atiprobe.c index 1cd62bd..e869bf0 100644 --- a/src/atiprobe.c +++ b/src/atiprobe.c @@ -67,6 +67,18 @@ ATIVGAWonderProbe { CARD8 IOValue1, IOValue2, IOValue3, IOValue4, IOValue5, IOValue6; + if (!pATI->OptionProbeSparse) + { + xf86Msg(X_WARNING, + ATI_NAME ": Expected VGA Wonder capability at I/O port" + " 0x%04lX will not be probed\n" + "set option \"probe_sparse\" to force probing.\n", + pATI->CPIO_VGAWonder); + + pATI->CPIO_VGAWonder = 0; + return; + } + if (pVideo && !xf86IsPrimaryPci(pVideo) && (pATI->Chip <= ATI_CHIP_88800GXD)) { @@ -414,7 +426,19 @@ ATIMach64ProbeIO * build a list of registered I/O ports. If there was a conflict * between a mach64 sparse I/O base and a registered I/0 port, probing * that port was not allowed... + * + * We just add an option and let the user decide, this will not work + * with "X -configure" though... */ + if (!pATI->OptionProbeSparse) + { + xf86Msg(X_WARNING, ATI_NAME ": " + "PCI Mach64 in slot %d:%d:%d will not be probed\n" + "set option \"probe_sparse\" to force sparse I/O probing.\n", + pVideo->bus, pVideo->device, pVideo->func); + + goto SkipSparse; + } /* Possibly fix block I/O indicator */ if (PciReg & 0x00000004U) diff --git a/src/atistruct.h b/src/atistruct.h index 4498e8e..430b565 100644 --- a/src/atistruct.h +++ b/src/atistruct.h @@ -454,6 +454,7 @@ typedef struct _ATIRec /* * Driver options. */ + unsigned int OptionProbeSparse:1; /* Force probe for fixed (sparse) I/O */ unsigned int OptionAccel:1; /* Use hardware draw engine */ unsigned int OptionBIOSDisplay:1; /* Allow BIOS interference */ unsigned int OptionBlend:1; /* Force horizontal blending */ |