/* Remote serial interface for local (hardwired) serial ports for GO32.
- Copyright (C) 1992, 1993, 2000, 2001, 2007, 2008, 2009
- Free Software Foundation, Inc.
+ Copyright (C) 1992-1993, 2000-2001, 2007-2012 Free Software
+ Foundation, Inc.
Contributed by Nigel Stephens, Algorithmics Ltd. (nigel@algor.co.uk).
static int cnts[NCNT];
static char *cntnames[NCNT] =
{
- /* h/w interrupt counts. */
+ /* h/w interrupt counts. */
"mlsc", "nopend", "txrdy", "?3",
"rxrdy", "?5", "rls", "?7",
"?8", "?9", "?a", "?b",
"rxtout", "?d", "?e", "?f",
- /* s/w counts. */
+ /* s/w counts. */
"rxcnt", "txcnt", "stray", "swoflo"
};
#define COUNT(x)
#endif
-/* Main interrupt controller port addresses. */
+/* Main interrupt controller port addresses. */
#define ICU_BASE 0x20
#define ICU_OCW2 (ICU_BASE + 0)
#define ICU_MASK (ICU_BASE + 1)
-/* Original interrupt controller mask register. */
+/* Original interrupt controller mask register. */
unsigned char icu_oldmask;
-/* Maximum of 8 interrupts (we don't handle the slave icu yet). */
+/* Maximum of 8 interrupts (we don't handle the slave icu yet). */
#define NINTR 8
static struct intrupt
break;
case IIR_NOPEND:
- /* no more pending interrupts, all done */
+ /* No more pending interrupts, all done. */
return;
default:
- /* unexpected interrupt, ignore */
+ /* Unexpected interrupt, ignore. */
break;
}
COUNT (iir);
vec = 0x08 + irq;
isr = isrs[irq];
- /* setup real mode handler */
+ /* Setup real mode handler. */
_go32_dpmi_get_real_mode_interrupt_vector (vec, &intr->old_rmhandler);
intr->new_rmhandler.pm_selector = _go32_my_cs ();
return 0;
}
- /* setup protected mode handler */
+ /* Setup protected mode handler. */
_go32_dpmi_get_protected_mode_interrupt_vector (vec, &intr->old_pmhandler);
intr->new_pmhandler.pm_selector = _go32_my_cs ();
return 0;
}
- /* setup interrupt controller mask */
+ /* Setup interrupt controller mask. */
disable ();
outportb (ICU_MASK, inportb (ICU_MASK) & ~(1 << irq));
enable ();
irq = intr - intrupts;
vec = 0x08 + irq;
- /* restore old interrupt mask bit */
+ /* Restore old interrupt mask bit. */
mask = 1 << irq;
disable ();
outportb (ICU_MASK, inportb (ICU_MASK) | (mask & icu_oldmask));
enable ();
- /* remove real mode handler */
+ /* Remove real mode handler. */
_go32_dpmi_set_real_mode_interrupt_vector (vec, &intr->old_rmhandler);
_go32_dpmi_free_real_mode_callback (&intr->new_rmhandler);
- /* remove protected mode handler */
+ /* Remove protected mode handler. */
_go32_dpmi_set_protected_mode_interrupt_vector (vec, &intr->old_pmhandler);
_go32_dpmi_free_iret_wrapper (&intr->new_pmhandler);
intr->inuse = 0;
port = &ports[fd];
if (port->refcnt++ > 0)
{
- /* Device already opened another user. Just point at it. */
+ /* Device already opened another user. Just point at it. */
scb->fd = fd;
return 0;
}
- /* force access to ID reg */
+ /* Force access to ID reg. */
outb (port, com_cfcr, 0);
outb (port, com_iir, 0);
for (i = 0; i < 17; i++)
return -1;
ok:
- /* disable all interrupts in chip */
+ /* Disable all interrupts in chip. */
outb (port, com_ier, 0);
- /* tentatively enable 16550 fifo, and see if it responds */
+ /* Tentatively enable 16550 fifo, and see if it responds. */
outb (port, com_fifo,
FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER);
sleep (1);
port->fifo = ((inb (port, com_iir) & IIR_FIFO_MASK) == IIR_FIFO_MASK);
- /* clear pending status reports. */
+ /* clear pending status reports. */
(void) inb (port, com_lsr);
(void) inb (port, com_msr);
- /* enable external interrupt gate (to avoid floating IRQ) */
+ /* Enable external interrupt gate (to avoid floating IRQ). */
outb (port, com_mcr, MCR_IENABLE);
- /* hook up interrupt handler and initialise icu */
+ /* Hook up interrupt handler and initialise icu. */
port->intrupt = dos_hookirq (port->irq);
if (!port->intrupt)
{
port->intrupt->port = port;
scb->fd = fd;
- /* clear rx buffer, tx busy flag and overflow count */
+ /* Clear rx buffer, tx busy flag and overflow count. */
port->first = port->count = 0;
port->txbusy = 0;
port->oflo = 0;
- /* set default baud rate and mode: 9600,8,n,1 */
+ /* Set default baud rate and mode: 9600,8,n,1 */
i = dos_baudconv (port->baudrate = 9600);
outb (port, com_cfcr, CFCR_DLAB);
outb (port, com_dlbl, i & 0xff);
outb (port, com_dlbh, i >> 8);
outb (port, com_cfcr, CFCR_8BITS);
- /* enable all interrupts */
+ /* Enable all interrupts. */
outb (port, com_ier, IER_ETXRDY | IER_ERXRDY | IER_ERLS | IER_EMSC);
- /* enable DTR & RTS */
+ /* Enable DTR & RTS. */
outb (port, com_mcr, MCR_DTR | MCR_RTS | MCR_IENABLE);
enable ();
if (!(intrupt = port->intrupt))
return;
- /* disable interrupts, fifo, flow control */
+ /* Disable interrupts, fifo, flow control. */
disable ();
port->intrupt = 0;
intrupt->port = 0;
outb (port, com_ier, 0);
enable ();
- /* unhook handler, and disable interrupt gate */
+ /* Unhook handler, and disable interrupt gate. */
dos_unhookirq (intrupt);
outb (port, com_mcr, 0);
- /* Check for overflow errors */
+ /* Check for overflow errors. */
if (port->oflo)
{
fprintf_unfiltered (gdb_stderr,
static void
dos_raw (struct serial *scb)
{
- /* Always in raw mode */
+ /* Always in raw mode. */
}
static int
return (serial_ttystate) state;
}
+static serial_ttystate
+dos_copy_tty_state (struct serial *scb, serial_ttystate ttystate)
+{
+ struct dos_ttystate *state;
+
+ state = (struct dos_ttystate *) xmalloc (sizeof *state);
+ *state = *(struct dos_ttystate *) ttystate;
+
+ return (serial_ttystate) state;
+}
+
static int
dos_set_tty_state (struct serial *scb, serial_ttystate ttystate)
{
dos_flush_input (struct serial *scb)
{
struct dos_ttystate *port = &ports[scb->fd];
+
disable ();
port->first = port->count = 0;
if (port->fifo)
dos_print_tty_state (struct serial *scb, serial_ttystate ttystate,
struct ui_file *stream)
{
- /* Nothing to print */
+ /* Nothing to print. */
return;
}
if (rate <= 0)
return -1;
-#define divrnd(n, q) (((n) * 2 / (q) + 1) / 2) /* divide and round off */
+#define divrnd(n, q) (((n) * 2 / (q) + 1) / 2) /* Divide and round off. */
x = divrnd (COMTICK, rate);
if (x <= 0)
return -1;
while (len > 0)
{
- /* send the data, fifosize bytes at a time */
+ /* Send the data, fifosize bytes at a time. */
cnt = fifosize > len ? len : fifosize;
port->txbusy = 1;
/* Francisco Pastor <fpastor.etra-id@etra.es> says OUTSB messes
#ifdef DOS_STATS
cnts[CNT_TX] += cnt;
#endif
- /* wait for transmission to complete (max 1 sec) */
+ /* Wait for transmission to complete (max 1 sec). */
then = rawclock () + RAWHZ;
while (port->txbusy)
{
0,
dos_open,
dos_close,
+ NULL, /* fdopen, not implemented */
dos_readchar,
dos_write,
dos_noop, /* flush output */
dos_sendbreak,
dos_raw,
dos_get_tty_state,
+ dos_copy_tty_state,
dos_set_tty_state,
dos_print_tty_state,
dos_noflush_set_tty_state,
dos_setbaudrate,
dos_setstopbits,
- dos_noop, /* wait for output to drain */
- (void (*)(struct serial *, int))NULL /* change into async mode */
+ dos_noop, /* Wait for output to drain. */
+ (void (*)(struct serial *, int))NULL /* Change into async mode. */
};
+int
+gdb_pipe (int pdes[2])
+{
+ /* No support for pipes. */
+ errno = ENOSYS;
+ return -1;
+}
static void
dos_info (char *arg, int from_tty)
#endif
}
+/* -Wmissing-prototypes */
+extern initialize_file_ftype _initialize_ser_dos;
void
_initialize_ser_dos (void)
{
serial_add_interface (&dos_ops);
- /* Save original interrupt mask register. */
+ /* Save original interrupt mask register. */
icu_oldmask = inportb (ICU_MASK);
- /* Mark fixed motherboard irqs as inuse. */
+ /* Mark fixed motherboard irqs as inuse. */
intrupts[0].inuse = /* timer tick */
intrupts[1].inuse = /* keyboard */
intrupts[2].inuse = 1; /* slave icu */