/* Remote serial interface using Hitachi E7000 PC ISA card in a PC
-
- Copyright 1994 Free Software Foundation, Inc.
+ Copyright 1994, 1999, 2000 Free Software Foundation, Inc.
This file is part of GDB.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#if defined __GO32__ || defined _WIN32
#include "defs.h"
#ifdef _MSC_VER
#define strncasecmp strnicmp
#define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifdef _WIN32
#include <windows.h>
-#define W32SUT_32
-#include "mswin/w32sut.h"
#endif
#ifdef __GO32__
static void e7000pc_close PARAMS ((serial_t scb));
static serial_ttystate e7000pc_get_tty_state PARAMS ((serial_t scb));
static int e7000pc_set_tty_state PARAMS ((serial_t scb, serial_ttystate state));
-static char *aptr PARAMS ((short p));
-
-static int dos_async_init PARAMS ((int port));
-static void dos_async_tx PARAMS ((const char c));
-static int dos_async_rx PARAMS (());
-
-
#define OFF_DPD 0x0000
#define OFF_DDP 0x1000
#define OFF_READY 0x300c
#define OFF_PON 0x300e
-#define IDLE 0x0000
-#define CMD_CI 0x4349
-#define CMD_CO 0x434f
-#define CMD_LO 0x4c4f
-#define CMD_LS 0x4c53
-#define CMD_SV 0x5356
-#define CMD_SS 0x5353
-#define CMD_OK 0x4f4b
-#define CMD_ER 0x4552
-#define CMD_NF 0x4e46
-#define CMD_AB 0x4142
-#define CMD_ED 0x4544
-#define CMD_CE 0x4345
+#define IDLE 0x0000
+#define CMD_CI 0x4349
+#define CMD_CO 0x434f
+#define CMD_LO 0x4c4f
+#define CMD_LS 0x4c53
+#define CMD_SV 0x5356
+#define CMD_SS 0x5353
+#define CMD_OK 0x4f4b
+#define CMD_ER 0x4552
+#define CMD_NF 0x4e46
+#define CMD_AB 0x4142
+#define CMD_ED 0x4544
+#define CMD_CE 0x4345
static unsigned long fa;
static unsigned long irqtod;
static unsigned long ready;
static unsigned long fb;
-static unsigned long cpd ;
-static unsigned long cdp ;
+static unsigned long cpd;
+static unsigned long cdp;
static unsigned long ready;
static unsigned long pon;
static unsigned long irqtop;
#define dosmemput(FROM, LEN, TO) memcpy ((void *)(TO), (void *)(FROM), (LEN))
#endif
-static struct sw
+static struct sw
+ {
+ int sw;
+ int addr;
+ }
+sigs[] =
{
- int sw;
- int addr;
-} sigs[] = {
- {0x14, 0xd0000},
- {0x15, 0xd4000},
- {0x16, 0xd8000},
- {0x17, 0xdc000},
- 0};
-
-#ifndef __GO32__
+ {
+ 0x14, 0xd0000
+ }
+ ,
+ {
+ 0x15, 0xd4000
+ }
+ ,
+ {
+ 0x16, 0xd8000
+ }
+ ,
+ {
+ 0x17, 0xdc000
+ }
+ ,
+ 0
+};
+
+#ifdef _MSC_VER
/* Get the base of the data segment. This is needed to calculate the offset
between data segment addresses and the base of linear memory, which is where
device registers reside. Note that this is really only necessary for
unsigned long dsbase;
__asm
- {
- mov dsval,ds
- }
+ {
+ mov dsval, ds
+ }
dsbase = 0;
- GetThreadSelectorEntry (GetCurrentThread(), dsval, &ldt);
+ GetThreadSelectorEntry (GetCurrentThread (), dsval, &ldt);
dsbase = ldt.HighWord.Bits.BaseHi << 24 | ldt.HighWord.Bits.BaseMid << 16
- | ldt.BaseLow;
+ | ldt.BaseLow;
return dsbase;
}
-#else /* !__GO32__ */
+#else /* !_MSC_VER */
#define get_ds_base() 0
-#endif /* __GO32__ */
+#endif /* _MSC_VER */
static int
e7000pc_init ()
{
int try;
unsigned long dsbase;
-
+
dsbase = get_ds_base ();
/* Look around in memory for the board's signature */
fb = board_at + OFF_FB;
cpd = board_at + OFF_CPD;
cdp = board_at + OFF_CDP;
- ready =board_at + OFF_READY;
- pon = board_at + OFF_PON;
+ ready = board_at + OFF_READY;
+ pon = board_at + OFF_PON;
irqtop = board_at + OFF_IRQTOP;
irqtod = board_at + OFF_IRQTOD;
-
+
val = GET_WORD (ready);
- if (val == (0xaaa0 | sigs[try].sw))
+ if (val == (0xaaa0 | sigs[try].sw))
{
if (GET_WORD (pon) & 0xf)
{
SET_WORD (fa, 0);
SET_WORD (fb, 0);
- SET_WORD (irqtop, 1); /* Disable interrupts from e7000 */
+ SET_WORD (irqtop, 1); /* Disable interrupts from e7000 */
SET_WORD (ready, 1);
- printf_filtered ("\nConnected to the E7000PC at address 0x%x\n",
+ printf_filtered ("\nConnected to the E7000PC at address 0x%x\n",
sigs[try].addr);
- return 1;
+ return 1;
}
error ("The E7000 PC board is working, but the E7000 is turned off.\n");
return 0;
/* Return next byte from cdp. If no more, then return -1. */
-static int
+static int
e7000_get (void)
{
static char pbuf[1000];
char tmp[1000];
int x;
- if (pbuf_index < pbuf_size)
+ if (pbuf_index < pbuf_size)
{
x = pbuf[pbuf_index++];
}
dosmemget (cdp + 8, pbuf_size + 1, tmp);
/* Tell the E7000 we've eaten */
- SET_WORD (fb, 0);
+ SET_WORD (fb, 0);
/* Swap it around */
- for (i = 0; i < pbuf_size; i++)
+ for (i = 0; i < pbuf_size; i++)
{
- pbuf[i] = tmp[i^1];
+ pbuf[i] = tmp[i ^ 1];
}
pbuf_index = 0;
- x = pbuf[pbuf_index++];
+ x = pbuf[pbuf_index++];
}
- else
- {
+ else
+ {
x = -1;
}
return x;
then = now + timeout;
while (i < len)
{
- int ch = e7000_get();
-
+ int ch = e7000_get ();
+
/* While there's room in the buffer, and we've already
- read the stuff in, suck it over */
- if (ch != -1)
+ read the stuff in, suck it over */
+ if (ch != -1)
{
buf[i++] = ch;
- while (i < len && pbuf_index < pbuf_size )
+ while (i < len && pbuf_index < pbuf_size)
{
- ch = e7000_get();
+ ch = e7000_get ();
if (ch == -1)
break;
buf[i++] = ch;
int len;
{
int i;
- char dummy[1000];
-
+ char dummy[1000];
+
/* Construct copy locally */
- ((short *)dummy)[0] = CMD_CI;
- ((short *)dummy)[1] = len;
- ((short *)dummy)[2] = 0;
- ((short *)dummy)[3] = 0;
- for (i = 0; i < len ; i++)
+ ((short *) dummy)[0] = CMD_CI;
+ ((short *) dummy)[1] = len;
+ ((short *) dummy)[2] = 0;
+ ((short *) dummy)[3] = 0;
+ for (i = 0; i < len; i++)
{
- dummy[8 + i ^ 1] = buf[i];
+ dummy[(8 + i) ^ 1] = buf[i];
}
/* Wait for the card to get ready */
- while (GET_WORD (fa) & 1) ;
+ while (GET_WORD (fa) & 1);
/* Blast onto the ISA card */
- dosmemput (dummy, 8 + len + 1, cpd);
+ dosmemput (dummy, 8 + len + 1, cpd);
SET_WORD (fa, 1);
- SET_WORD (irqtod, 1); /* Interrupt the E7000 */
+ SET_WORD (irqtod, 1); /* Interrupt the E7000 */
return len;
}
{
char buf;
- top:
+top:
if (dosasync_read (scb->fd, &buf, 1, timeout))
{
- if (buf == 0) goto top;
+ if (buf == 0)
+ goto top;
return buf;
}
else
return SERIAL_TIMEOUT;
}
-struct e7000pc_ttystate {
+struct e7000pc_ttystate
+{
int dummy;
};
}
static void
-e7000pc_print_tty_state (scb, ttystate)
- serial_t scb;
- serial_ttystate ttystate;
+e7000pc_print_tty_state (serial_t scb,
+ serial_ttystate ttystate,
+ struct ui_file *stream)
{
/* Nothing to print. */
return;
e7000pc_print_tty_state,
e7000pc_noflush_set_tty_state,
e7000pc_setbaudrate,
+ e7000pc_noop, /* wait for output to drain */
};
void