/* Remote serial interface for local (hardwired) serial ports for GO32.
- Copyright 1992, 1993, 2000 Free Software Foundation, Inc.
+ Copyright 1992, 1993, 2000, 2001 Free Software Foundation, Inc.
Contributed by Nigel Stephens, Algorithmics Ltd. (nigel@algor.co.uk).
- This version uses DPMI interrupts to handle buffered i/o
+ This version uses DPMI interrupts to handle buffered i/o
without the separate "asynctsr" program.
- This file is part of GDB.
+ This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "defs.h"
#include "gdbcmd.h"
#include "serial.h"
+#include "gdb_string.h"
/*
#define MSR_DDSR 0x02
#define MSR_DCTS 0x01
-#include <string.h>
+#include <time.h>
#include <dos.h>
#include <go32.h>
#include <dpmi.h>
/* input buffer size */
#define CBSIZE 4096
-/* return raw 18Hz clock count */
-extern long rawclock (void);
-
#define RAWHZ 18
#ifdef DOS_STATS
}
};
-static int dos_open (serial_t scb, const char *name);
-static void dos_raw (serial_t scb);
-static int dos_readchar (serial_t scb, int timeout);
-static int dos_setbaudrate (serial_t scb, int rate);
-static int dos_write (serial_t scb, const char *str, int len);
-static void dos_close (serial_t scb);
-static serial_ttystate dos_get_tty_state (serial_t scb);
-static int dos_set_tty_state (serial_t scb, serial_ttystate state);
+static int dos_open (struct serial *scb, const char *name);
+static void dos_raw (struct serial *scb);
+static int dos_readchar (struct serial *scb, int timeout);
+static int dos_setbaudrate (struct serial *scb, int rate);
+static int dos_write (struct serial *scb, const char *str, int len);
+static void dos_close (struct serial *scb);
+static serial_ttystate dos_get_tty_state (struct serial *scb);
+static int dos_set_tty_state (struct serial *scb, serial_ttystate state);
static int dos_baudconv (int rate);
#define inb(p,a) inportb((p)->base + (a))
}
}
-#ifdef __STDC__
#define ISRNAME(x) dos_comisr##x
-#else
-#define ISRNAME(x) dos_comisr/**/x
-#endif
-#define ISR(x) static void ISRNAME(x)() {dos_comisr(x);}
+#define ISR(x) static void ISRNAME(x)(void) {dos_comisr(x);}
-ISR (0) ISR (1) ISR (2) ISR (3)
-ISR (4) ISR (5) ISR (6) ISR (7)
+ISR (0) ISR (1) ISR (2) ISR (3) /* OK */
+ISR (4) ISR (5) ISR (6) ISR (7) /* OK */
- typedef void (*isr_t) ();
+typedef void (*isr_t) (void);
- static isr_t isrs[NINTR] =
- {
+static isr_t isrs[NINTR] =
+ {
ISRNAME (0), ISRNAME (1), ISRNAME (2), ISRNAME (3),
ISRNAME (4), ISRNAME (5), ISRNAME (6), ISRNAME (7)
-};
+ };
\f
- static struct intrupt *
- dos_hookirq (irq)
- unsigned int irq;
+static struct intrupt *
+dos_hookirq (unsigned int irq)
{
struct intrupt *intr;
unsigned int vec;
intr->new_pmhandler.pm_offset = (u_long) isr;
_go32_dpmi_allocate_iret_wrapper (&intr->new_pmhandler);
- if (_go32_dpmi_set_protected_mode_interrupt_vector (vec, &intr->new_pmhandler))
+ if (_go32_dpmi_set_protected_mode_interrupt_vector (vec,
+ &intr->new_pmhandler))
{
return 0;
}
static int
-dos_open (serial_t scb, const char *name)
+dos_open (struct serial *scb, const char *name)
{
struct dos_ttystate *port;
int fd, i;
outb (port, com_ier, 0);
/* tentatively enable 16550 fifo, and see if it responds */
- outb (port, com_fifo, FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER);
+ 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);
static void
-dos_close (serial_t scb)
+dos_close (struct serial *scb)
{
struct dos_ttystate *port;
struct intrupt *intrupt;
static int
-dos_noop (serial_t scb ATTRIBUTE_UNUSED)
+dos_noop (struct serial *scb)
{
return 0;
}
static void
-dos_raw (serial_t scb ATTRIBUTE_UNUSED)
+dos_raw (struct serial *scb)
{
/* Always in raw mode */
}
static int
-dos_readchar (serial_t scb, int timeout)
+dos_readchar (struct serial *scb, int timeout)
{
struct dos_ttystate *port = &ports[scb->fd];
long then;
{
if (timeout >= 0 && (rawclock () - then) >= 0)
return SERIAL_TIMEOUT;
- notice_quit ();
}
return c;
static serial_ttystate
-dos_get_tty_state (serial_t scb)
+dos_get_tty_state (struct serial *scb)
{
struct dos_ttystate *port = &ports[scb->fd];
struct dos_ttystate *state;
}
static int
-dos_set_tty_state (serial_t scb, serial_ttystate ttystate)
+dos_set_tty_state (struct serial *scb, serial_ttystate ttystate)
{
struct dos_ttystate *state;
}
static int
-dos_noflush_set_tty_state (serial_t scb, serial_ttystate new_ttystate,
- serial_ttystate old_ttystate ATTRIBUTE_UNUSED)
+dos_noflush_set_tty_state (struct serial *scb, serial_ttystate new_ttystate,
+ serial_ttystate old_ttystate)
{
struct dos_ttystate *state;
}
static int
-dos_flush_input (serial_t scb)
+dos_flush_input (struct serial *scb)
{
struct dos_ttystate *port = &ports[scb->fd];
disable ();
}
static void
-dos_print_tty_state (serial_t scb ATTRIBUTE_UNUSED,
- serial_ttystate ttystate ATTRIBUTE_UNUSED,
- struct ui_file *stream ATTRIBUTE_UNUSED)
+dos_print_tty_state (struct serial *scb, serial_ttystate ttystate,
+ struct ui_file *stream)
{
/* 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;
static int
-dos_setbaudrate (serial_t scb, int rate)
+dos_setbaudrate (struct serial *scb, int rate)
{
struct dos_ttystate *port = &ports[scb->fd];
}
static int
-dos_setstopbits (serial_t scb, int num)
+dos_setstopbits (struct serial *scb, int num)
{
struct dos_ttystate *port = &ports[scb->fd];
unsigned char cfcr;
}
static int
-dos_write (serial_t scb, const char *str, int len)
+dos_write (struct serial *scb, const char *str, int len)
{
volatile struct dos_ttystate *port = &ports[scb->fd];
int fifosize = port->fifo ? 16 : 1;
static int
-dos_sendbreak (serial_t scb)
+dos_sendbreak (struct serial *scb)
{
volatile struct dos_ttystate *port = &ports[scb->fd];
unsigned char cfcr;
dos_setbaudrate,
dos_setstopbits,
dos_noop, /* wait for output to drain */
- (void (*)(serial_t, int))NULL /* change into async mode */
+ (void (*)(struct serial *, int))NULL /* change into async mode */
};
static void
-dos_info (char *arg ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED)
+dos_info (char *arg, int from_tty)
{
struct dos_ttystate *port;
#ifdef DOS_STATS
intrupts[1].inuse = /* keyboard */
intrupts[2].inuse = 1; /* slave icu */
- add_show_from_set (
- add_set_cmd ("com1base", class_obscure, var_zinteger,
- (char *) &ports[0].base,
- "Set COM1 base i/o port address.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com1irq", class_obscure, var_zinteger,
- (char *) &ports[0].irq,
- "Set COM1 interrupt request.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com2base", class_obscure, var_zinteger,
- (char *) &ports[1].base,
- "Set COM2 base i/o port address.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com2irq", class_obscure, var_zinteger,
- (char *) &ports[1].irq,
- "Set COM2 interrupt request.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com3base", class_obscure, var_zinteger,
- (char *) &ports[2].base,
- "Set COM3 base i/o port address.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com3irq", class_obscure, var_zinteger,
- (char *) &ports[2].irq,
- "Set COM3 interrupt request.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com4base", class_obscure, var_zinteger,
- (char *) &ports[3].base,
- "Set COM4 base i/o port address.",
- &setlist),
- &showlist);
-
- add_show_from_set (
- add_set_cmd ("com4irq", class_obscure, var_zinteger,
- (char *) &ports[3].irq,
- "Set COM4 interrupt request.",
- &setlist),
- &showlist);
+ add_setshow_zinteger_cmd ("com1base", class_obscure, &ports[0].base, _("\
+Set COM1 base i/o port address."), _("\
+Show COM1 base i/o port address."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com1irq", class_obscure, &ports[0].irq, _("\
+Set COM1 interrupt request."), _("\
+Show COM1 interrupt request."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com2base", class_obscure, &ports[1].base, _("\
+Set COM2 base i/o port address."), _("\
+Show COM2 base i/o port address."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com2irq", class_obscure, &ports[1].irq, _("\
+Set COM2 interrupt request."), _("\
+Show COM2 interrupt request."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com3base", class_obscure, &ports[2].base, _("\
+Set COM3 base i/o port address."), _("\
+Show COM3 base i/o port address."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com3irq", class_obscure, &ports[2].irq, _("\
+Set COM3 interrupt request."), _("\
+Show COM3 interrupt request."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com4base", class_obscure, &ports[3].base, _("\
+Set COM4 base i/o port address."), _("\
+Show COM4 base i/o port address."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
+
+ add_setshow_zinteger_cmd ("com4irq", class_obscure, &ports[3].irq, _("\
+Set COM4 interrupt request."), _("\
+Show COM4 interrupt request."), NULL,
+ NULL,
+ NULL, /* FIXME: i18n: */
+ &setlist, &showlist);
add_info ("serial", dos_info,
- "Print DOS serial port status.");
+ _("Print DOS serial port status."));
}