[PATCH] Add video driver flag to indicate that console access is not needed.
Jamey Sharp
jamey at minilop.net
Wed Oct 28 16:45:44 PDT 2009
Existing video drivers will get the console enabled by default.
Signed-off-by: Jamey Sharp <jamey at minilop.net>
---
On Wed, Oct 28, 2009 at 08:20:22AM -0700, Keith Packard wrote:
> Excerpts from Jamey Sharp's message of Fri Oct 02 20:32:43 -0700 2009:
> > +static Bool xorgHWSkipConsole = TRUE;
>
> I'd make this xorgHWOpenConsole instead; negative booleans are harder
> to figure out.
That makes sense. Here's the patch with that corrected.
> Using the HW_SKIP_CONSOLE flag seems necessary though, to retain
> compatibility with existing drivers.
That's what I figured.
hw/xfree86/common/xf86Init.c | 32 +++++++++++++++++++++-----------
hw/xfree86/common/xf86str.h | 1 +
2 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index c9baff3..2d682aa 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -97,6 +97,7 @@ static Bool add_matching_devices_to_configure_list(DriverPtr drvp);
#ifdef XF86PM
void (*xf86OSPMClose)(void) = NULL;
#endif
+static Bool xorgHWOpenConsole = FALSE;
/* Common pixmap formats */
@@ -601,8 +602,6 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
if (xf86DoShowOptions)
DoShowOptions();
- xf86OpenConsole();
-
/* Do a general bus probe. This will be a PCI probe for x86 platforms */
xf86BusProbe();
@@ -676,20 +675,29 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
*/
for (i = 0; i < xf86NumDrivers; i++) {
- xorgHWFlags flags;
-
if (xf86DriverList[i]->Identify != NULL)
xf86DriverList[i]->Identify(0);
- if (!xorgHWAccess
- && (!xf86DriverList[i]->driverFunc
+ if (!xorgHWAccess || !xorgHWOpenConsole) {
+ xorgHWFlags flags;
+ if(!xf86DriverList[i]->driverFunc
|| !xf86DriverList[i]->driverFunc(NULL,
GET_REQUIRED_HW_INTERFACES,
- &flags)
- || NEED_IO_ENABLED(flags)))
- xorgHWAccess = TRUE;
+ &flags))
+ flags = HW_IO;
+
+ if(NEED_IO_ENABLED(flags))
+ xorgHWAccess = TRUE;
+ if(!(flags & HW_SKIP_CONSOLE))
+ xorgHWOpenConsole = TRUE;
+ }
}
+ if (xorgHWOpenConsole)
+ xf86OpenConsole();
+ else
+ xf86Info.dontVTSwitch = TRUE;
+
/* Enable full I/O access */
if (xorgHWAccess)
xorgHWAccess = xf86EnableIO();
@@ -966,7 +974,8 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
/*
* serverGeneration != 1; some OSs have to do things here, too.
*/
- xf86OpenConsole();
+ if (xorgHWOpenConsole)
+ xf86OpenConsole();
#ifdef XF86PM
/*
@@ -1203,7 +1212,8 @@ ddxGiveUp(void)
DGAShutdown();
#endif
- xf86CloseConsole();
+ if (xorgHWOpenConsole)
+ xf86CloseConsole();
xf86CloseLog();
diff --git a/hw/xfree86/common/xf86str.h b/hw/xfree86/common/xf86str.h
index b9a2e06..7b0b758 100644
--- a/hw/xfree86/common/xf86str.h
+++ b/hw/xfree86/common/xf86str.h
@@ -299,6 +299,7 @@ typedef struct {
/* GET_REQUIRED_HW_INTERFACES */
#define HW_IO 1
#define HW_MMIO 2
+#define HW_SKIP_CONSOLE 4
#define NEED_IO_ENABLED(x) (x & HW_IO)
typedef CARD32 xorgHWFlags;
--
1.6.3.3
More information about the xorg-devel
mailing list