X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fmn10300%2Fdv-mn103int.c;h=bbd6ceb0060fde91db120675654d10951ffe2237;hb=034685f9ce92cf6dfb6656745365b6a5904a8e84;hp=3056331d6aeabebf5dc4098e6f425d28dbb88156;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git
diff --git a/sim/mn10300/dv-mn103int.c b/sim/mn10300/dv-mn103int.c
index 3056331d6a..bbd6ceb006 100644
--- a/sim/mn10300/dv-mn103int.c
+++ b/sim/mn10300/dv-mn103int.c
@@ -1,27 +1,27 @@
/* This file is part of the program GDB, the GNU debugger.
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998-2015 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
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
- the Free Software Foundation; either version 2 of the License, or
+ the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ along with this program. If not, see .
*/
#include "sim-main.h"
#include "hw-main.h"
+#include "sim-hw.h"
/* DEVICE
@@ -41,7 +41,7 @@
reg =
- Specify the address of the ICR (total of 25 registers), IAGR and
+ Specify the address of the ICR (total of 30 registers), IAGR and
EXTMD registers (within the parent bus).
The reg property value `0x34000100 0x7C 0x34000200 0x8 0x3400280
@@ -291,6 +291,9 @@ static const struct hw_port_descriptor mn103int_ports[] = {
static hw_io_read_buffer_method mn103int_io_read_buffer;
static hw_io_write_buffer_method mn103int_io_write_buffer;
static hw_port_event_method mn103int_port_event;
+static hw_ioctl_method mn103int_ioctl;
+
+
static void
attach_mn103int_regs (struct hw *me,
@@ -336,6 +339,7 @@ mn103int_finish (struct hw *me)
set_hw_io_write_buffer (me, mn103int_io_write_buffer);
set_hw_ports (me, mn103int_ports);
set_hw_port_event (me, mn103int_port_event);
+ me->to_ioctl = mn103int_ioctl;
/* Attach ourself to our parent bus */
attach_mn103int_regs (me, controller);
@@ -344,15 +348,16 @@ mn103int_finish (struct hw *me)
for (gid = 0; gid < NR_GROUPS; gid++)
{
struct mn103int_group *group = &controller->group[gid];
- group->enable = 0xf;
group->trigger = NEGATIVE_EDGE;
group->gid = gid;
if (FIRST_NMI_GROUP <= gid && gid <= LAST_NMI_GROUP)
{
+ group->enable = 0xf;
group->type = NMI_GROUP;
}
else if (FIRST_LEVEL_GROUP <= gid && gid <= LAST_LEVEL_GROUP)
{
+ group->enable = 0x0;
group->type = LEVEL_GROUP;
}
else
@@ -579,6 +584,12 @@ write_icr (struct hw *me,
group->gid, val));
group->request &= ~EXTRACT_ID (val);
break;
+ /* Special backdoor access to SYSEF flag from CPU. See
+ interp.c:program_interrupt(). */
+ case 3:
+ HW_TRACE ((me, "write-icr-special group=%d:0 nmi 0x%02x",
+ group->gid, val));
+ group->request |= EXTRACT_ID (val);
default:
break;
}
@@ -801,6 +812,17 @@ mn103int_io_write_buffer (struct hw *me,
return nr_bytes;
}
+static int
+mn103int_ioctl(struct hw *me,
+ hw_ioctl_request request,
+ va_list ap)
+{
+ struct mn103int *controller = (struct mn103int *)hw_data(me);
+ controller->group[0].request = EXTRACT_ID(4);
+ mn103int_port_event(me, 2 /* nmi_port(syserr) */, NULL, 0, 0);
+ return 0;
+}
+
const struct hw_descriptor dv_mn103int_descriptor[] = {
{ "mn103int", mn103int_finish, },