X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fmn10300%2Fdv-mn103ser.c;h=02d0aa54c766a3547586a9b260308fffba2bdc91;hb=d768f160a99558a07a2463899c8bfeec0f0a67a7;hp=6ec8d27d6deb3e3e408ff8e8db04c47cdece6a17;hpb=dc3cf14f35b666eed7be13100ff58639450aa5cf;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/mn10300/dv-mn103ser.c b/sim/mn10300/dv-mn103ser.c index 6ec8d27d6d..02d0aa54c7 100644 --- a/sim/mn10300/dv-mn103ser.c +++ b/sim/mn10300/dv-mn103ser.c @@ -1,6 +1,6 @@ /* This file is part of the program GDB, the GNU debugger. - Copyright (C) 1998, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Cygnus Solutions. This program is free software; you can redistribute it and/or modify @@ -74,11 +74,6 @@ enum serial_register_types { }; -/* Access dv-sockser state */ -extern char* sockser_addr; -#define USE_SOCKSER_P (sockser_addr != NULL) - - #define NR_SERIAL_DEVS 3 #define SIO_STAT_RRDY 0x0010 @@ -238,15 +233,17 @@ static void do_polling_event (struct hw *me, void *data) { + SIM_DESC sd = hw_system (me); struct mn103ser *serial = hw_data(me); long serial_reg = (long) data; char c; - int count; + int count, status; - if(USE_SOCKSER_P) + status = dv_sockser_status (sd); + if (!(status & DV_SOCKSER_DISCONNECTED)) { int rd; - rd = dv_sockser_read (hw_system (me)); + rd = dv_sockser_read (sd); if(rd != -1) { c = (char) rd; @@ -375,6 +372,9 @@ read_status_reg (struct hw *me, if ( (serial->device[serial_reg].status & SIO_STAT_RRDY) == 0 ) { + SIM_DESC sd = hw_system (me); + int status; + /* FIFO is empty */ /* Kill current poll event */ if ( NULL != serial->device[serial_reg].event ) @@ -383,10 +383,11 @@ read_status_reg (struct hw *me, serial->device[serial_reg].event = NULL; } - if(USE_SOCKSER_P) + status = dv_sockser_status (sd); + if (!(status & DV_SOCKSER_DISCONNECTED)) { int rd; - rd = dv_sockser_read (hw_system (me)); + rd = dv_sockser_read (sd); if(rd != -1) { c = (char) rd; @@ -597,16 +598,20 @@ write_txb (struct hw *me, { if ( nr_bytes == 1 ) { + SIM_DESC sd = hw_system (me); + int status; + serial->device[serial_reg].txb = *(unsigned8 *)source; - if(USE_SOCKSER_P) + status = dv_sockser_status (sd); + if (!(status & DV_SOCKSER_DISCONNECTED)) { - dv_sockser_write(hw_system (me), * (char*) source); + dv_sockser_write(sd, * (char*) source); } else { - sim_io_write_stdout(hw_system (me), (char *)source, 1); - sim_io_flush_stdout(hw_system (me)); + sim_io_write_stdout(sd, (char *)source, 1); + sim_io_flush_stdout(sd); } hw_port_event (me, serial_reg+SERIAL0_SEND, 1);