Switch to vc 0 and softscrolling when /dev/video is opened and switch back
at the close. This should prevent problems with X on (emulated) Cirrus cards.
This commit is contained in:
parent
0d9976ae9f
commit
f6d1f6fdf6
@ -83,6 +83,13 @@ PRIVATE unsigned scr_width; /* # characters on a line */
|
|||||||
PRIVATE unsigned scr_lines; /* # lines on the screen */
|
PRIVATE unsigned scr_lines; /* # lines on the screen */
|
||||||
PRIVATE unsigned scr_size; /* # characters on the screen */
|
PRIVATE unsigned scr_size; /* # characters on the screen */
|
||||||
|
|
||||||
|
PRIVATE int disabled_vc = -1; /* Virtual console that was active when
|
||||||
|
* disable_console was called.
|
||||||
|
*/
|
||||||
|
PRIVATE int disabled_sm; /* Scroll mode to be restored when re-enabling
|
||||||
|
* console
|
||||||
|
*/
|
||||||
|
|
||||||
/* Per console data. */
|
/* Per console data. */
|
||||||
typedef struct console {
|
typedef struct console {
|
||||||
tty_t *c_tty; /* associated TTY struct */
|
tty_t *c_tty; /* associated TTY struct */
|
||||||
@ -133,9 +140,11 @@ FORWARD _PROTOTYPE( void set_6845, (int reg, unsigned val) );
|
|||||||
FORWARD _PROTOTYPE( void get_6845, (int reg, unsigned *val) );
|
FORWARD _PROTOTYPE( void get_6845, (int reg, unsigned *val) );
|
||||||
FORWARD _PROTOTYPE( void stop_beep, (timer_t *tmrp) );
|
FORWARD _PROTOTYPE( void stop_beep, (timer_t *tmrp) );
|
||||||
FORWARD _PROTOTYPE( void cons_org0, (void) );
|
FORWARD _PROTOTYPE( void cons_org0, (void) );
|
||||||
|
FORWARD _PROTOTYPE( void disable_console, (void) );
|
||||||
|
FORWARD _PROTOTYPE( void reenable_console, (void) );
|
||||||
FORWARD _PROTOTYPE( int ga_program, (struct sequence *seq) );
|
FORWARD _PROTOTYPE( int ga_program, (struct sequence *seq) );
|
||||||
FORWARD _PROTOTYPE( int cons_ioctl, (tty_t *tp, int) );
|
FORWARD _PROTOTYPE( int cons_ioctl, (tty_t *tp, int) );
|
||||||
PRIVATE _PROTOTYPE( void ser_putc, (char c) );
|
FORWARD _PROTOTYPE( void ser_putc, (char c) );
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* cons_write *
|
* cons_write *
|
||||||
@ -792,9 +801,11 @@ PUBLIC void do_video(message *m)
|
|||||||
switch (m->m_type) {
|
switch (m->m_type) {
|
||||||
case DEV_OPEN:
|
case DEV_OPEN:
|
||||||
/* Should grant IOPL */
|
/* Should grant IOPL */
|
||||||
|
disable_console();
|
||||||
r= OK;
|
r= OK;
|
||||||
break;
|
break;
|
||||||
case DEV_CLOSE:
|
case DEV_CLOSE:
|
||||||
|
reenable_console();
|
||||||
r= OK;
|
r= OK;
|
||||||
break;
|
break;
|
||||||
case DEV_IOCTL_S:
|
case DEV_IOCTL_S:
|
||||||
@ -1214,6 +1225,37 @@ PRIVATE void cons_org0()
|
|||||||
select_console(ccurrent);
|
select_console(ccurrent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* disable_console *
|
||||||
|
*===========================================================================*/
|
||||||
|
PRIVATE void disable_console()
|
||||||
|
{
|
||||||
|
if (disabled_vc != -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
disabled_vc = ccurrent;
|
||||||
|
disabled_sm = softscroll;
|
||||||
|
|
||||||
|
cons_org0();
|
||||||
|
softscroll = 1;
|
||||||
|
select_console(0);
|
||||||
|
|
||||||
|
/* Should also disable further output to virtual consoles */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* reenable_console *
|
||||||
|
*===========================================================================*/
|
||||||
|
PRIVATE void reenable_console()
|
||||||
|
{
|
||||||
|
if (disabled_vc == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
softscroll = disabled_sm;
|
||||||
|
select_console(disabled_vc);
|
||||||
|
disabled_vc = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* select_console *
|
* select_console *
|
||||||
*===========================================================================*/
|
*===========================================================================*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user