Added /dev/video for mapping video memory.
This commit is contained in:
parent
4102a5db28
commit
5556281540
3 changed files with 64 additions and 2 deletions
|
@ -18,6 +18,8 @@
|
|||
|
||||
#include "../drivers.h"
|
||||
#include <termios.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/vm.h>
|
||||
#include <minix/callnr.h>
|
||||
#include <minix/com.h>
|
||||
#include "tty.h"
|
||||
|
@ -766,6 +768,61 @@ PRIVATE void beep()
|
|||
}
|
||||
|
||||
|
||||
/*===========================================================================*
|
||||
* do_video *
|
||||
*===========================================================================*/
|
||||
PUBLIC void do_video(message *m)
|
||||
{
|
||||
int i, n, r, ops, watch;
|
||||
unsigned char c;
|
||||
|
||||
/* Execute the requested device driver function. */
|
||||
r= EINVAL; /* just in case */
|
||||
switch (m->m_type) {
|
||||
case DEV_OPEN:
|
||||
/* Should grant IOPL */
|
||||
r= OK;
|
||||
break;
|
||||
case DEV_CLOSE:
|
||||
r= OK;
|
||||
break;
|
||||
case DEV_IOCTL:
|
||||
if (m->TTY_REQUEST == MIOCMAP || m->TTY_REQUEST == MIOCUNMAP)
|
||||
{
|
||||
int r, do_map;
|
||||
struct mapreq mapreq;
|
||||
|
||||
do_map= (m->REQUEST == MIOCMAP); /* else unmap */
|
||||
|
||||
/* Get request structure */
|
||||
r= sys_vircopy(m->PROC_NR, D,
|
||||
(vir_bytes)m->ADDRESS,
|
||||
SELF, D, (vir_bytes)&mapreq, sizeof(mapreq));
|
||||
if (r != OK)
|
||||
{
|
||||
tty_reply(TASK_REPLY, m->m_source, m->PROC_NR,
|
||||
r);
|
||||
return;
|
||||
}
|
||||
r= sys_vm_map(m->PROC_NR, do_map,
|
||||
(phys_bytes)mapreq.base, mapreq.size,
|
||||
mapreq.offset);
|
||||
tty_reply(TASK_REPLY, m->m_source, m->PROC_NR, r);
|
||||
return;
|
||||
}
|
||||
r= ENOTTY;
|
||||
break;
|
||||
|
||||
default:
|
||||
printf(
|
||||
"Warning, TTY(video) got unexpected request %d from %d\n",
|
||||
m->m_type, m->m_source);
|
||||
r= EINVAL;
|
||||
}
|
||||
tty_reply(TASK_REPLY, m->m_source, m->PROC_NR, r);
|
||||
}
|
||||
|
||||
|
||||
/*===========================================================================*
|
||||
* beep_x *
|
||||
*===========================================================================*/
|
||||
|
|
|
@ -272,6 +272,9 @@ PUBLIC void main(void)
|
|||
} else if (line == KBDAUX_MINOR) {
|
||||
do_kbdaux(&tty_mess);
|
||||
continue;
|
||||
} else if (line == VIDEO_MINOR) {
|
||||
do_video(&tty_mess);
|
||||
continue;
|
||||
} else if ((line - CONS_MINOR) < NR_CONS) {
|
||||
tp = tty_addr(line - CONS_MINOR);
|
||||
} else if (line == LOG_MINOR) {
|
||||
|
|
|
@ -9,10 +9,11 @@
|
|||
|
||||
/* First minor numbers for the various classes of TTY devices. */
|
||||
#define CONS_MINOR 0
|
||||
#define KBD_MINOR 13
|
||||
#define KBDAUX_MINOR 14
|
||||
#define LOG_MINOR 15
|
||||
#define RS232_MINOR 16
|
||||
#define KBD_MINOR 127
|
||||
#define KBDAUX_MINOR 126
|
||||
#define VIDEO_MINOR 125
|
||||
#define TTYPX_MINOR 128
|
||||
#define PTYPX_MINOR 192
|
||||
|
||||
|
@ -167,6 +168,7 @@ _PROTOTYPE( void toggle_scroll, (void) );
|
|||
_PROTOTYPE( int con_loadfont, (message *m) );
|
||||
_PROTOTYPE( void select_console, (int cons_line) );
|
||||
_PROTOTYPE( void beep_x, ( unsigned freq, clock_t dur) );
|
||||
_PROTOTYPE( void do_video, (message *m) );
|
||||
|
||||
/* keyboard.c */
|
||||
_PROTOTYPE( void kb_init, (struct tty *tp) );
|
||||
|
|
Loading…
Reference in a new issue