xref: /OK3568_Linux_fs/external/xserver/hw/kdrive/ephyr/ephyrinit.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Xephyr - A kdrive X server thats runs in a host X window.
3*4882a593Smuzhiyun  *          Authored by Matthew Allum <mallum@o-hand.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright © 2004 Nokia
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Permission to use, copy, modify, distribute, and sell this software and its
8*4882a593Smuzhiyun  * documentation for any purpose is hereby granted without fee, provided that
9*4882a593Smuzhiyun  * the above copyright notice appear in all copies and that both that
10*4882a593Smuzhiyun  * copyright notice and this permission notice appear in supporting
11*4882a593Smuzhiyun  * documentation, and that the name of Nokia not be used in
12*4882a593Smuzhiyun  * advertising or publicity pertaining to distribution of the software without
13*4882a593Smuzhiyun  * specific, written prior permission. Nokia makes no
14*4882a593Smuzhiyun  * representations about the suitability of this software for any purpose.  It
15*4882a593Smuzhiyun  * is provided "as is" without express or implied warranty.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * NOKIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18*4882a593Smuzhiyun  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19*4882a593Smuzhiyun  * EVENT SHALL NOKIA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20*4882a593Smuzhiyun  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21*4882a593Smuzhiyun  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22*4882a593Smuzhiyun  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23*4882a593Smuzhiyun  * PERFORMANCE OF THIS SOFTWARE.
24*4882a593Smuzhiyun  */
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun #ifdef HAVE_DIX_CONFIG_H
27*4882a593Smuzhiyun #include <dix-config.h>
28*4882a593Smuzhiyun #endif
29*4882a593Smuzhiyun #include "ephyr.h"
30*4882a593Smuzhiyun #include "ephyrlog.h"
31*4882a593Smuzhiyun #include "glx_extinit.h"
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun extern Window EphyrPreExistingHostWin;
34*4882a593Smuzhiyun extern Bool EphyrWantGrayScale;
35*4882a593Smuzhiyun extern Bool EphyrWantResize;
36*4882a593Smuzhiyun extern Bool EphyrWantNoHostGrab;
37*4882a593Smuzhiyun extern Bool kdHasPointer;
38*4882a593Smuzhiyun extern Bool kdHasKbd;
39*4882a593Smuzhiyun extern Bool ephyr_glamor, ephyr_glamor_gles2, ephyr_glamor_skip_present;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun extern Bool ephyrNoXV;
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun void processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id);
44*4882a593Smuzhiyun void processOutputArg(const char *output, char *parent_id);
45*4882a593Smuzhiyun void processScreenArg(const char *screen_size, char *parent_id);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun int
main(int argc,char * argv[],char * envp[])48*4882a593Smuzhiyun main(int argc, char *argv[], char *envp[])
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun     hostx_use_resname(basename(argv[0]), 0);
51*4882a593Smuzhiyun     return dix_main(argc, argv, envp);
52*4882a593Smuzhiyun }
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun void
InitCard(char * name)55*4882a593Smuzhiyun InitCard(char *name)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun     EPHYR_DBG("mark");
58*4882a593Smuzhiyun     KdCardInfoAdd(&ephyrFuncs, 0);
59*4882a593Smuzhiyun }
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun void
InitOutput(ScreenInfo * pScreenInfo,int argc,char ** argv)62*4882a593Smuzhiyun InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun     KdInitOutput(pScreenInfo, argc, argv);
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun void
InitInput(int argc,char ** argv)68*4882a593Smuzhiyun InitInput(int argc, char **argv)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun     KdKeyboardInfo *ki;
71*4882a593Smuzhiyun     KdPointerInfo *pi;
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun     if (!SeatId) {
74*4882a593Smuzhiyun         KdAddKeyboardDriver(&EphyrKeyboardDriver);
75*4882a593Smuzhiyun         KdAddPointerDriver(&EphyrMouseDriver);
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun         if (!kdHasKbd) {
78*4882a593Smuzhiyun             ki = KdNewKeyboard();
79*4882a593Smuzhiyun             if (!ki)
80*4882a593Smuzhiyun                 FatalError("Couldn't create Xephyr keyboard\n");
81*4882a593Smuzhiyun             ki->driver = &EphyrKeyboardDriver;
82*4882a593Smuzhiyun             KdAddKeyboard(ki);
83*4882a593Smuzhiyun         }
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun         if (!kdHasPointer) {
86*4882a593Smuzhiyun             pi = KdNewPointer();
87*4882a593Smuzhiyun             if (!pi)
88*4882a593Smuzhiyun                 FatalError("Couldn't create Xephyr pointer\n");
89*4882a593Smuzhiyun             pi->driver = &EphyrMouseDriver;
90*4882a593Smuzhiyun             KdAddPointer(pi);
91*4882a593Smuzhiyun         }
92*4882a593Smuzhiyun     }
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun     KdInitInput();
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun void
CloseInput(void)98*4882a593Smuzhiyun CloseInput(void)
99*4882a593Smuzhiyun {
100*4882a593Smuzhiyun     KdCloseInput();
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun #if INPUTTHREAD
104*4882a593Smuzhiyun /** This function is called in Xserver/os/inputthread.c when starting
105*4882a593Smuzhiyun     the input thread. */
106*4882a593Smuzhiyun void
ddxInputThreadInit(void)107*4882a593Smuzhiyun ddxInputThreadInit(void)
108*4882a593Smuzhiyun {
109*4882a593Smuzhiyun }
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun #ifdef DDXBEFORERESET
113*4882a593Smuzhiyun void
ddxBeforeReset(void)114*4882a593Smuzhiyun ddxBeforeReset(void)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun }
117*4882a593Smuzhiyun #endif
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun void
ddxUseMsg(void)120*4882a593Smuzhiyun ddxUseMsg(void)
121*4882a593Smuzhiyun {
122*4882a593Smuzhiyun     KdUseMsg();
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun     ErrorF("\nXephyr Option Usage:\n");
125*4882a593Smuzhiyun     ErrorF("-parent <XID>        Use existing window as Xephyr root win\n");
126*4882a593Smuzhiyun     ErrorF("-sw-cursor           Render cursors in software in Xephyr\n");
127*4882a593Smuzhiyun     ErrorF("-fullscreen          Attempt to run Xephyr fullscreen\n");
128*4882a593Smuzhiyun     ErrorF("-output <NAME>       Attempt to run Xephyr fullscreen (restricted to given output geometry)\n");
129*4882a593Smuzhiyun     ErrorF("-grayscale           Simulate 8bit grayscale\n");
130*4882a593Smuzhiyun     ErrorF("-resizeable          Make Xephyr windows resizeable\n");
131*4882a593Smuzhiyun #ifdef GLAMOR
132*4882a593Smuzhiyun     ErrorF("-glamor              Enable 2D acceleration using glamor\n");
133*4882a593Smuzhiyun     ErrorF("-glamor_gles2        Enable 2D acceleration using glamor (with GLES2 only)\n");
134*4882a593Smuzhiyun     ErrorF("-glamor-skip-present Skip presenting the output when using glamor (for internal testing optimization)\n");
135*4882a593Smuzhiyun #endif
136*4882a593Smuzhiyun     ErrorF
137*4882a593Smuzhiyun         ("-fakexa              Simulate acceleration using software rendering\n");
138*4882a593Smuzhiyun     ErrorF("-verbosity <level>   Set log verbosity level\n");
139*4882a593Smuzhiyun     ErrorF("-noxv                do not use XV\n");
140*4882a593Smuzhiyun     ErrorF("-name [name]         define the name in the WM_CLASS property\n");
141*4882a593Smuzhiyun     ErrorF
142*4882a593Smuzhiyun         ("-title [title]       set the window title in the WM_NAME property\n");
143*4882a593Smuzhiyun     ErrorF("-no-host-grab        Disable grabbing the keyboard and mouse.\n");
144*4882a593Smuzhiyun     ErrorF("\n");
145*4882a593Smuzhiyun }
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun void
processScreenOrOutputArg(const char * screen_size,const char * output,char * parent_id)148*4882a593Smuzhiyun processScreenOrOutputArg(const char *screen_size, const char *output, char *parent_id)
149*4882a593Smuzhiyun {
150*4882a593Smuzhiyun     KdCardInfo *card;
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun     InitCard(0);                /*Put each screen on a separate card */
153*4882a593Smuzhiyun     card = KdCardInfoLast();
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun     if (card) {
156*4882a593Smuzhiyun         KdScreenInfo *screen;
157*4882a593Smuzhiyun         unsigned long p_id = 0;
158*4882a593Smuzhiyun         Bool use_geometry;
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun         screen = KdScreenInfoAdd(card);
161*4882a593Smuzhiyun         KdParseScreen(screen, screen_size);
162*4882a593Smuzhiyun         screen->driver = calloc(1, sizeof(EphyrScrPriv));
163*4882a593Smuzhiyun         if (!screen->driver)
164*4882a593Smuzhiyun             FatalError("Couldn't alloc screen private\n");
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun         if (parent_id) {
167*4882a593Smuzhiyun             p_id = strtol(parent_id, NULL, 0);
168*4882a593Smuzhiyun         }
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun         use_geometry = (strchr(screen_size, '+') != NULL);
171*4882a593Smuzhiyun         EPHYR_DBG("screen number:%d\n", screen->mynum);
172*4882a593Smuzhiyun         hostx_add_screen(screen, p_id, screen->mynum, use_geometry, output);
173*4882a593Smuzhiyun     }
174*4882a593Smuzhiyun     else {
175*4882a593Smuzhiyun         ErrorF("No matching card found!\n");
176*4882a593Smuzhiyun     }
177*4882a593Smuzhiyun }
178*4882a593Smuzhiyun 
179*4882a593Smuzhiyun void
processScreenArg(const char * screen_size,char * parent_id)180*4882a593Smuzhiyun processScreenArg(const char *screen_size, char *parent_id)
181*4882a593Smuzhiyun {
182*4882a593Smuzhiyun     processScreenOrOutputArg(screen_size, NULL, parent_id);
183*4882a593Smuzhiyun }
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun void
processOutputArg(const char * output,char * parent_id)186*4882a593Smuzhiyun processOutputArg(const char *output, char *parent_id)
187*4882a593Smuzhiyun {
188*4882a593Smuzhiyun     processScreenOrOutputArg("100x100+0+0", output, parent_id);
189*4882a593Smuzhiyun }
190*4882a593Smuzhiyun 
191*4882a593Smuzhiyun int
ddxProcessArgument(int argc,char ** argv,int i)192*4882a593Smuzhiyun ddxProcessArgument(int argc, char **argv, int i)
193*4882a593Smuzhiyun {
194*4882a593Smuzhiyun     static char *parent = NULL;
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun     EPHYR_DBG("mark argv[%d]='%s'", i, argv[i]);
197*4882a593Smuzhiyun 
198*4882a593Smuzhiyun     if (!strcmp(argv[i], "-parent")) {
199*4882a593Smuzhiyun         if (i + 1 < argc) {
200*4882a593Smuzhiyun             int j;
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun             /* If parent is specified and a screen argument follows, don't do
203*4882a593Smuzhiyun              * anything, let the -screen handling init the rest */
204*4882a593Smuzhiyun             for (j = i; j < argc; j++) {
205*4882a593Smuzhiyun                 if (!strcmp(argv[j], "-screen")) {
206*4882a593Smuzhiyun                     parent = argv[i + 1];
207*4882a593Smuzhiyun                     return 2;
208*4882a593Smuzhiyun                 }
209*4882a593Smuzhiyun             }
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun             processScreenArg("100x100", argv[i + 1]);
212*4882a593Smuzhiyun             return 2;
213*4882a593Smuzhiyun         }
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun         UseMsg();
216*4882a593Smuzhiyun         exit(1);
217*4882a593Smuzhiyun     }
218*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-screen")) {
219*4882a593Smuzhiyun         if ((i + 1) < argc) {
220*4882a593Smuzhiyun             processScreenArg(argv[i + 1], parent);
221*4882a593Smuzhiyun             parent = NULL;
222*4882a593Smuzhiyun             return 2;
223*4882a593Smuzhiyun         }
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun         UseMsg();
226*4882a593Smuzhiyun         exit(1);
227*4882a593Smuzhiyun     }
228*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-output")) {
229*4882a593Smuzhiyun         if (i + 1 < argc) {
230*4882a593Smuzhiyun             processOutputArg(argv[i + 1], NULL);
231*4882a593Smuzhiyun             return 2;
232*4882a593Smuzhiyun         }
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun         UseMsg();
235*4882a593Smuzhiyun         exit(1);
236*4882a593Smuzhiyun     }
237*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-sw-cursor")) {
238*4882a593Smuzhiyun         hostx_use_sw_cursor();
239*4882a593Smuzhiyun         return 1;
240*4882a593Smuzhiyun     }
241*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-host-cursor")) {
242*4882a593Smuzhiyun         /* Compatibility with the old command line argument, now the default. */
243*4882a593Smuzhiyun         return 1;
244*4882a593Smuzhiyun     }
245*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-fullscreen")) {
246*4882a593Smuzhiyun         hostx_use_fullscreen();
247*4882a593Smuzhiyun         return 1;
248*4882a593Smuzhiyun     }
249*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-grayscale")) {
250*4882a593Smuzhiyun         EphyrWantGrayScale = 1;
251*4882a593Smuzhiyun         return 1;
252*4882a593Smuzhiyun     }
253*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-resizeable")) {
254*4882a593Smuzhiyun         EphyrWantResize = 1;
255*4882a593Smuzhiyun         return 1;
256*4882a593Smuzhiyun     }
257*4882a593Smuzhiyun #ifdef GLAMOR
258*4882a593Smuzhiyun     else if (!strcmp (argv[i], "-glamor")) {
259*4882a593Smuzhiyun         ephyr_glamor = TRUE;
260*4882a593Smuzhiyun         ephyrFuncs.initAccel = ephyr_glamor_init;
261*4882a593Smuzhiyun         ephyrFuncs.enableAccel = ephyr_glamor_enable;
262*4882a593Smuzhiyun         ephyrFuncs.disableAccel = ephyr_glamor_disable;
263*4882a593Smuzhiyun         ephyrFuncs.finiAccel = ephyr_glamor_fini;
264*4882a593Smuzhiyun         return 1;
265*4882a593Smuzhiyun     }
266*4882a593Smuzhiyun     else if (!strcmp (argv[i], "-glamor_gles2")) {
267*4882a593Smuzhiyun         ephyr_glamor = TRUE;
268*4882a593Smuzhiyun         ephyr_glamor_gles2 = TRUE;
269*4882a593Smuzhiyun         ephyrFuncs.initAccel = ephyr_glamor_init;
270*4882a593Smuzhiyun         ephyrFuncs.enableAccel = ephyr_glamor_enable;
271*4882a593Smuzhiyun         ephyrFuncs.disableAccel = ephyr_glamor_disable;
272*4882a593Smuzhiyun         ephyrFuncs.finiAccel = ephyr_glamor_fini;
273*4882a593Smuzhiyun         return 1;
274*4882a593Smuzhiyun     }
275*4882a593Smuzhiyun     else if (!strcmp (argv[i], "-glamor-skip-present")) {
276*4882a593Smuzhiyun         ephyr_glamor_skip_present = TRUE;
277*4882a593Smuzhiyun         return 1;
278*4882a593Smuzhiyun     }
279*4882a593Smuzhiyun #endif
280*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-fakexa")) {
281*4882a593Smuzhiyun         ephyrFuncs.initAccel = ephyrDrawInit;
282*4882a593Smuzhiyun         ephyrFuncs.enableAccel = ephyrDrawEnable;
283*4882a593Smuzhiyun         ephyrFuncs.disableAccel = ephyrDrawDisable;
284*4882a593Smuzhiyun         ephyrFuncs.finiAccel = ephyrDrawFini;
285*4882a593Smuzhiyun         return 1;
286*4882a593Smuzhiyun     }
287*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-verbosity")) {
288*4882a593Smuzhiyun         if (i + 1 < argc && argv[i + 1][0] != '-') {
289*4882a593Smuzhiyun             int verbosity = atoi(argv[i + 1]);
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun             LogSetParameter(XLOG_VERBOSITY, verbosity);
292*4882a593Smuzhiyun             EPHYR_LOG("set verbosiry to %d\n", verbosity);
293*4882a593Smuzhiyun             return 2;
294*4882a593Smuzhiyun         }
295*4882a593Smuzhiyun         else {
296*4882a593Smuzhiyun             UseMsg();
297*4882a593Smuzhiyun             exit(1);
298*4882a593Smuzhiyun         }
299*4882a593Smuzhiyun     }
300*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-noxv")) {
301*4882a593Smuzhiyun         ephyrNoXV = TRUE;
302*4882a593Smuzhiyun         EPHYR_LOG("no XVideo enabled\n");
303*4882a593Smuzhiyun         return 1;
304*4882a593Smuzhiyun     }
305*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-name")) {
306*4882a593Smuzhiyun         if (i + 1 < argc && argv[i + 1][0] != '-') {
307*4882a593Smuzhiyun             hostx_use_resname(argv[i + 1], 1);
308*4882a593Smuzhiyun             return 2;
309*4882a593Smuzhiyun         }
310*4882a593Smuzhiyun         else {
311*4882a593Smuzhiyun             UseMsg();
312*4882a593Smuzhiyun             return 0;
313*4882a593Smuzhiyun         }
314*4882a593Smuzhiyun     }
315*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-title")) {
316*4882a593Smuzhiyun         if (i + 1 < argc && argv[i + 1][0] != '-') {
317*4882a593Smuzhiyun             hostx_set_title(argv[i + 1]);
318*4882a593Smuzhiyun             return 2;
319*4882a593Smuzhiyun         }
320*4882a593Smuzhiyun         else {
321*4882a593Smuzhiyun             UseMsg();
322*4882a593Smuzhiyun             return 0;
323*4882a593Smuzhiyun         }
324*4882a593Smuzhiyun     }
325*4882a593Smuzhiyun     else if (argv[i][0] == ':') {
326*4882a593Smuzhiyun         hostx_set_display_name(argv[i]);
327*4882a593Smuzhiyun     }
328*4882a593Smuzhiyun     /* Xnest compatibility */
329*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-display")) {
330*4882a593Smuzhiyun         hostx_set_display_name(argv[i + 1]);
331*4882a593Smuzhiyun         return 2;
332*4882a593Smuzhiyun     }
333*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-sync") ||
334*4882a593Smuzhiyun              !strcmp(argv[i], "-full") ||
335*4882a593Smuzhiyun              !strcmp(argv[i], "-sss") || !strcmp(argv[i], "-install")) {
336*4882a593Smuzhiyun         return 1;
337*4882a593Smuzhiyun     }
338*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-bw") ||
339*4882a593Smuzhiyun              !strcmp(argv[i], "-class") ||
340*4882a593Smuzhiyun              !strcmp(argv[i], "-geometry") || !strcmp(argv[i], "-scrns")) {
341*4882a593Smuzhiyun         return 2;
342*4882a593Smuzhiyun     }
343*4882a593Smuzhiyun     /* end Xnest compat */
344*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-no-host-grab")) {
345*4882a593Smuzhiyun         EphyrWantNoHostGrab = 1;
346*4882a593Smuzhiyun         return 1;
347*4882a593Smuzhiyun     }
348*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-sharevts") ||
349*4882a593Smuzhiyun              !strcmp(argv[i], "-novtswitch")) {
350*4882a593Smuzhiyun         return 1;
351*4882a593Smuzhiyun     }
352*4882a593Smuzhiyun     else if (!strcmp(argv[i], "-layout")) {
353*4882a593Smuzhiyun         return 2;
354*4882a593Smuzhiyun     }
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun     return KdProcessArgument(argc, argv, i);
357*4882a593Smuzhiyun }
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun void
OsVendorInit(void)360*4882a593Smuzhiyun OsVendorInit(void)
361*4882a593Smuzhiyun {
362*4882a593Smuzhiyun     EPHYR_DBG("mark");
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun     if (SeatId)
365*4882a593Smuzhiyun         hostx_use_sw_cursor();
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun     if (hostx_want_host_cursor())
368*4882a593Smuzhiyun         ephyrFuncs.initCursor = &ephyrCursorInit;
369*4882a593Smuzhiyun 
370*4882a593Smuzhiyun     if (serverGeneration == 1) {
371*4882a593Smuzhiyun         if (!KdCardInfoLast()) {
372*4882a593Smuzhiyun             processScreenArg("640x480", NULL);
373*4882a593Smuzhiyun         }
374*4882a593Smuzhiyun         hostx_init();
375*4882a593Smuzhiyun     }
376*4882a593Smuzhiyun }
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun KdCardFuncs ephyrFuncs = {
379*4882a593Smuzhiyun     ephyrCardInit,              /* cardinit */
380*4882a593Smuzhiyun     ephyrScreenInitialize,      /* scrinit */
381*4882a593Smuzhiyun     ephyrInitScreen,            /* initScreen */
382*4882a593Smuzhiyun     ephyrFinishInitScreen,      /* finishInitScreen */
383*4882a593Smuzhiyun     ephyrCreateResources,       /* createRes */
384*4882a593Smuzhiyun     ephyrScreenFini,            /* scrfini */
385*4882a593Smuzhiyun     ephyrCardFini,              /* cardfini */
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun     0,                          /* initCursor */
388*4882a593Smuzhiyun 
389*4882a593Smuzhiyun     0,                          /* initAccel */
390*4882a593Smuzhiyun     0,                          /* enableAccel */
391*4882a593Smuzhiyun     0,                          /* disableAccel */
392*4882a593Smuzhiyun     0,                          /* finiAccel */
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun     ephyrGetColors,             /* getColors */
395*4882a593Smuzhiyun     ephyrPutColors,             /* putColors */
396*4882a593Smuzhiyun 
397*4882a593Smuzhiyun     ephyrCloseScreen,           /* closeScreen */
398*4882a593Smuzhiyun };
399