- hz dynamic
- new map /dev/video implementation - ser_putc into library
This commit is contained in:
parent
fe56202038
commit
f4d0d635fd
4 changed files with 33 additions and 82 deletions
|
@ -25,6 +25,7 @@
|
|||
#include <minix/callnr.h>
|
||||
#include <minix/com.h>
|
||||
#include <minix/sys_config.h>
|
||||
#include <minix/vm.h>
|
||||
#include "tty.h"
|
||||
|
||||
/* Set this to 1 if you want console output duplicated on the first
|
||||
|
@ -142,10 +143,6 @@ FORWARD _PROTOTYPE( void reenable_console, (void) );
|
|||
FORWARD _PROTOTYPE( int ga_program, (struct sequence *seq) );
|
||||
FORWARD _PROTOTYPE( int cons_ioctl, (tty_t *tp, int) );
|
||||
|
||||
#if DUP_CONS_TO_SER
|
||||
FORWARD _PROTOTYPE( void ser_putc, (char c) );
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
FORWARD _PROTOTYPE( void get_6845, (int reg, unsigned *val) );
|
||||
#endif
|
||||
|
@ -826,47 +823,6 @@ PUBLIC void do_video(message *m)
|
|||
case DEV_IOCTL_S:
|
||||
safe=1;
|
||||
switch(m->TTY_REQUEST) {
|
||||
case MIOCMAP:
|
||||
case MIOCUNMAP: {
|
||||
#if 0
|
||||
int r, do_map;
|
||||
struct mapreq mapreq;
|
||||
|
||||
do_map= (m->REQUEST == MIOCMAP); /* else unmap */
|
||||
|
||||
/* Get request structure */
|
||||
if(safe) {
|
||||
r = sys_safecopyfrom(m->IO_ENDPT,
|
||||
(vir_bytes)m->ADDRESS, 0, (vir_bytes) &mapreq,
|
||||
sizeof(mapreq), D);
|
||||
} else {
|
||||
r= sys_vircopy(m->IO_ENDPT, D,
|
||||
(vir_bytes)m->ADDRESS,
|
||||
SELF, D, (vir_bytes)&mapreq, sizeof(mapreq));
|
||||
}
|
||||
if (r != OK)
|
||||
{
|
||||
tty_reply(TASK_REPLY, m->m_source, m->IO_ENDPT,
|
||||
r);
|
||||
return;
|
||||
}
|
||||
|
||||
/* In safe ioctl mode, the POSITION field contains
|
||||
* the endpt number of the original requestor.
|
||||
* IO_ENDPT is always FS.
|
||||
*/
|
||||
|
||||
r= sys_vm_map(safe ? m->POSITION : m->IO_ENDPT,
|
||||
do_map, (phys_bytes)mapreq.base, mapreq.size,
|
||||
mapreq.offset);
|
||||
#else
|
||||
r = ENOSYS;
|
||||
printf("tty: %ld used old MIOCMAP interface\n",
|
||||
safe ? m->POSITION : m->IO_ENDPT);
|
||||
#endif
|
||||
tty_reply(TASK_REPLY, m->m_source, m->IO_ENDPT, r);
|
||||
return;
|
||||
}
|
||||
case TIOCMAPMEM:
|
||||
case TIOCUNMAPMEM: {
|
||||
int r, do_map;
|
||||
|
@ -876,17 +832,18 @@ PUBLIC void do_video(message *m)
|
|||
do_map= (m->REQUEST == TIOCMAPMEM); /* else unmap */
|
||||
|
||||
/* Get request structure */
|
||||
if(safe) {
|
||||
r = sys_safecopyfrom(m->IO_ENDPT,
|
||||
(vir_bytes)m->ADDRESS, 0, (vir_bytes) &mapreqvm,
|
||||
sizeof(mapreqvm), D);
|
||||
} else {
|
||||
r= sys_vircopy(m->IO_ENDPT, D,
|
||||
(vir_bytes)m->ADDRESS,
|
||||
SELF, D, (vir_bytes)&mapreqvm,sizeof(mapreqvm));
|
||||
if(!safe) {
|
||||
printf("tty: safecopy only\n");
|
||||
return;
|
||||
}
|
||||
|
||||
r = sys_safecopyfrom(m->IO_ENDPT,
|
||||
(vir_bytes)m->ADDRESS, 0, (vir_bytes) &mapreqvm,
|
||||
sizeof(mapreqvm), D);
|
||||
|
||||
if (r != OK)
|
||||
{
|
||||
printf("tty: sys_safecopyfrom failed\n");
|
||||
tty_reply(TASK_REPLY, m->m_source, m->IO_ENDPT,
|
||||
r);
|
||||
return;
|
||||
|
@ -898,7 +855,17 @@ PUBLIC void do_video(message *m)
|
|||
*/
|
||||
|
||||
if(do_map) {
|
||||
mapreqvm.vaddr_ret = vm_map_phys(m->POSITION,
|
||||
(void *) mapreqvm.phys_offset, mapreqvm.size);
|
||||
if((r = sys_safecopyto(m->IO_ENDPT,
|
||||
(vir_bytes)m->ADDRESS, 0,
|
||||
(vir_bytes) &mapreqvm,
|
||||
sizeof(mapreqvm), D)) != OK) {
|
||||
printf("tty: sys_safecopyto failed\n");
|
||||
}
|
||||
} else {
|
||||
r = vm_unmap_phys(m->POSITION,
|
||||
mapreqvm.vaddr, mapreqvm.size);
|
||||
}
|
||||
tty_reply(TASK_REPLY, m->m_source, m->IO_ENDPT, r);
|
||||
return;
|
||||
|
@ -1267,10 +1234,12 @@ PUBLIC void toggle_scroll()
|
|||
PUBLIC void cons_stop()
|
||||
{
|
||||
/* Prepare for halt or reboot. */
|
||||
select_console(0);
|
||||
#if 0
|
||||
cons_org0();
|
||||
softscroll = 1;
|
||||
select_console(0);
|
||||
cons_table[0].c_attr = cons_table[0].c_blank = BLANK_COLOR;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*===========================================================================*
|
||||
|
@ -1417,26 +1386,3 @@ int try;
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if DUP_CONS_TO_SER
|
||||
#define COM1_BASE 0x3F8
|
||||
#define COM1_THR (COM1_BASE + 0)
|
||||
#define LSR_THRE 0x20
|
||||
#define COM1_LSR (COM1_BASE + 5)
|
||||
|
||||
PRIVATE void ser_putc(char c)
|
||||
{
|
||||
unsigned long b;
|
||||
int i;
|
||||
int lsr, thr;
|
||||
|
||||
lsr= COM1_LSR;
|
||||
thr= COM1_THR;
|
||||
for (i= 0; i<10000; i++)
|
||||
{
|
||||
sys_inb(lsr, &b);
|
||||
if (b & LSR_THRE)
|
||||
break;
|
||||
}
|
||||
sys_outb(thr, c);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -371,8 +371,8 @@ message *m;
|
|||
if (r != OK)
|
||||
break;
|
||||
|
||||
ticks= bell.kb_duration.tv_usec * HZ / 1000000;
|
||||
ticks += bell.kb_duration.tv_sec * HZ;
|
||||
ticks= bell.kb_duration.tv_usec * system_hz / 1000000;
|
||||
ticks += bell.kb_duration.tv_sec * system_hz;
|
||||
if (!ticks)
|
||||
ticks++;
|
||||
beep_x(bell.kb_pitch, ticks);
|
||||
|
@ -669,7 +669,7 @@ PRIVATE void kbd_send()
|
|||
*/
|
||||
if ((r= getuptime(&now)) != OK)
|
||||
panic("TTY","Keyboard couldn't get clock's uptime.", r);
|
||||
tmrs_settimer(&tty_timers, &tmr_kbd_wd, now+HZ, kbd_watchdog,
|
||||
tmrs_settimer(&tty_timers, &tmr_kbd_wd, now+system_hz, kbd_watchdog,
|
||||
NULL);
|
||||
if (tty_timers->tmr_exp_time != tty_next_timeout) {
|
||||
tty_next_timeout = tty_timers->tmr_exp_time;
|
||||
|
@ -1269,7 +1269,7 @@ timer_t *tmrp;
|
|||
|
||||
if ((r= getuptime(&now)) != OK)
|
||||
panic("TTY","Keyboard couldn't get clock's uptime.", r);
|
||||
tmrs_settimer(&tty_timers, &tmr_kbd_wd, now+HZ, kbd_watchdog,
|
||||
tmrs_settimer(&tty_timers, &tmr_kbd_wd, now+system_hz, kbd_watchdog,
|
||||
NULL);
|
||||
if (tty_timers->tmr_exp_time != tty_next_timeout) {
|
||||
tty_next_timeout = tty_timers->tmr_exp_time;
|
||||
|
|
|
@ -138,6 +138,7 @@ PUBLIC int ccurrent; /* currently active console */
|
|||
PUBLIC timer_t *tty_timers; /* queue of TTY timers */
|
||||
PUBLIC clock_t tty_next_timeout; /* time that the next alarm is due */
|
||||
PUBLIC struct machine machine; /* kernel environment variables */
|
||||
PUBLIC u32_t system_hz;
|
||||
|
||||
extern PUBLIC unsigned info_location;
|
||||
extern PUBLIC phys_bytes vid_size; /* 0x2000 for color or 0x0800 for mono */
|
||||
|
@ -1537,6 +1538,8 @@ PRIVATE void tty_init()
|
|||
register tty_t *tp;
|
||||
int s;
|
||||
|
||||
system_hz = sys_hz();
|
||||
|
||||
/* Initialize the terminal lines. */
|
||||
for (tp = FIRST_TTY,s=0; tp < END_TTY; tp++,s++) {
|
||||
|
||||
|
@ -1565,6 +1568,7 @@ PRIVATE void tty_init()
|
|||
tp->tty_minor = s - (NR_CONS+NR_RS_LINES) + TTYPX_MINOR;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*===========================================================================*
|
||||
|
@ -1621,7 +1625,7 @@ int enable; /* set timer if true, otherwise unset */
|
|||
if ((s=getuptime(&now)) != OK)
|
||||
panic("TTY","Couldn't get uptime from clock.", s);
|
||||
if (enable) {
|
||||
exp_time = now + tty_ptr->tty_termios.c_cc[VTIME] * (HZ/10);
|
||||
exp_time = now + tty_ptr->tty_termios.c_cc[VTIME] * (system_hz/10);
|
||||
/* Set a new timer for enabling the TTY events flags. */
|
||||
tmrs_settimer(&tty_timers, &tty_ptr->tty_tmr,
|
||||
exp_time, tty_timed_out, NULL);
|
||||
|
|
|
@ -107,6 +107,7 @@ typedef struct tty {
|
|||
extern tty_t tty_table[NR_CONS+NR_RS_LINES+NR_PTYS];
|
||||
extern int ccurrent; /* currently visible console */
|
||||
extern int irq_hook_id; /* hook id for keyboard irq */
|
||||
extern u32_t system_hz; /* system clock frequency */
|
||||
|
||||
extern unsigned long kbd_irq_set;
|
||||
extern unsigned long rs_irq_set;
|
||||
|
|
Loading…
Reference in a new issue