diff options
author | Michael Meissner <gnu@the-meissners.org> | 1996-04-17 20:09:36 +0000 |
---|---|---|
committer | Michael Meissner <gnu@the-meissners.org> | 1996-04-17 20:09:36 +0000 |
commit | d4d3c7adbb45714fb2d1ddc7a94627729bf0a82a (patch) | |
tree | 4770b119db1d5938bf458b014ea5e16693838448 /sim/ppc/hw_iobus.c | |
parent | 221d1e19de5852f4b176484cdbc17f0233702c82 (diff) | |
download | gdb-d4d3c7adbb45714fb2d1ddc7a94627729bf0a82a.zip gdb-d4d3c7adbb45714fb2d1ddc7a94627729bf0a82a.tar.gz gdb-d4d3c7adbb45714fb2d1ddc7a94627729bf0a82a.tar.bz2 |
update from Andrew
Diffstat (limited to 'sim/ppc/hw_iobus.c')
-rw-r--r-- | sim/ppc/hw_iobus.c | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/sim/ppc/hw_iobus.c b/sim/ppc/hw_iobus.c new file mode 100644 index 0000000..5001223 --- /dev/null +++ b/sim/ppc/hw_iobus.c @@ -0,0 +1,98 @@ +/* This file is part of the program psim. + + Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au> + + 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 + (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. + + */ + + +#ifndef _HW_IOBUS_C_ +#define _HW_IOBUS_C_ + +#ifndef STATIC_INLINE_HW_IOBUS +#define STATIC_INLINE_HW_IOBUS STATIC_INLINE +#endif + +#include "device_table.h" + + +/* Device: + + iobus@<address> - bus for attaching devices + + + Description: + + IOBUS provides a simple `local' bus for attaching (hanging) + programmed IO devices from. All child devices are mapped into this + devices parent address space (after adjusting for the iobus's base + address). + + + Properties: + + None. + + */ + +static void +hw_iobus_attach_address_callback(device *me, + const char *name, + attach_type type, + int space, + unsigned_word addr, + unsigned nr_bytes, + access_type access, + device *who) /*callback/default*/ +{ + unsigned_word hw_iobus_addr; + /* sanity check */ + if (space != 0) + error("hw_iobus_attach_address_callback() no space for %s/%s\n", + device_name(me), name); + /* get the bus address */ + if (device_unit_address(me)->nr_cells != 1) + error("hw_iobus_attach_address_callback() invalid address for %s\n", + device_name(me)); + hw_iobus_addr = device_unit_address(me)->cells[0]; + device_attach_address(device_parent(me), + device_name(me), + type, + 0 /*space*/, + hw_iobus_addr + addr, + nr_bytes, + access, + who); +} + + +static device_callbacks const hw_iobus_callbacks = { + { NULL, }, + { hw_iobus_attach_address_callback, }, + { NULL, }, /* IO */ + { NULL, }, /* DMA */ + { NULL, }, /* interrupt */ + { generic_device_unit_decode, + generic_device_unit_encode, } +}; + + +const device_descriptor hw_iobus_device_descriptor[] = { + { "iobus", NULL, &hw_iobus_callbacks }, + { NULL, }, +}; + +#endif /* _HW_IOBUS_ */ |