iob.hh revision 4104
14104Ssaidi@eecs.umich.edu/* 24104Ssaidi@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan 34104Ssaidi@eecs.umich.edu * All rights reserved. 44104Ssaidi@eecs.umich.edu * 54104Ssaidi@eecs.umich.edu * Redistribution and use in source and binary forms, with or without 64104Ssaidi@eecs.umich.edu * modification, are permitted provided that the following conditions are 74104Ssaidi@eecs.umich.edu * met: redistributions of source code must retain the above copyright 84104Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer; 94104Ssaidi@eecs.umich.edu * redistributions in binary form must reproduce the above copyright 104104Ssaidi@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the 114104Ssaidi@eecs.umich.edu * documentation and/or other materials provided with the distribution; 124104Ssaidi@eecs.umich.edu * neither the name of the copyright holders nor the names of its 134104Ssaidi@eecs.umich.edu * contributors may be used to endorse or promote products derived from 144104Ssaidi@eecs.umich.edu * this software without specific prior written permission. 154104Ssaidi@eecs.umich.edu * 164104Ssaidi@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 174104Ssaidi@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 184104Ssaidi@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 194104Ssaidi@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 204104Ssaidi@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 214104Ssaidi@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 224104Ssaidi@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 234104Ssaidi@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 244104Ssaidi@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 254104Ssaidi@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 264104Ssaidi@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 274104Ssaidi@eecs.umich.edu * 284104Ssaidi@eecs.umich.edu * Authors: Ali Saidi 294104Ssaidi@eecs.umich.edu */ 304104Ssaidi@eecs.umich.edu 314104Ssaidi@eecs.umich.edu/** @file 324104Ssaidi@eecs.umich.edu * This device implements the niagara I/O Bridge chip. The device manages 334104Ssaidi@eecs.umich.edu * internal (ipi) and external (serial, pci via jbus). 344104Ssaidi@eecs.umich.edu */ 354104Ssaidi@eecs.umich.edu 364104Ssaidi@eecs.umich.edu#ifndef __DEV_SPARC_IOB_HH__ 374104Ssaidi@eecs.umich.edu#define __DEV_SPARC_IOB_HH__ 384104Ssaidi@eecs.umich.edu 394104Ssaidi@eecs.umich.edu#include "base/range.hh" 404104Ssaidi@eecs.umich.edu#include "dev/io_device.hh" 414104Ssaidi@eecs.umich.edu#include "dev/disk_image.hh" 424104Ssaidi@eecs.umich.edu 434104Ssaidi@eecs.umich.educlass IntrControl; 444104Ssaidi@eecs.umich.edu 454104Ssaidi@eecs.umich.educonst int MaxNiagaraProcs = 32; 464104Ssaidi@eecs.umich.edu// IOB Managment Addresses 474104Ssaidi@eecs.umich.educonst Addr IntManAddr = 0x0000; 484104Ssaidi@eecs.umich.educonst Addr IntManSize = 0x0020; 494104Ssaidi@eecs.umich.educonst Addr IntCtlAddr = 0x0400; 504104Ssaidi@eecs.umich.educonst Addr IntCtlSize = 0x0020; 514104Ssaidi@eecs.umich.educonst Addr JIntVecAddr = 0x0A00; 524104Ssaidi@eecs.umich.educonst Addr IntVecDisAddr = 0x0800; 534104Ssaidi@eecs.umich.educonst Addr IntVecDisSize = 0x0100; 544104Ssaidi@eecs.umich.edu 554104Ssaidi@eecs.umich.edu 564104Ssaidi@eecs.umich.edu// IOB Control Addresses 574104Ssaidi@eecs.umich.educonst Addr JIntData0Addr = 0x0400; 584104Ssaidi@eecs.umich.educonst Addr JIntData1Addr = 0x0500; 594104Ssaidi@eecs.umich.educonst Addr JIntDataA0Addr = 0x0600; 604104Ssaidi@eecs.umich.educonst Addr JIntDataA1Addr = 0x0700; 614104Ssaidi@eecs.umich.educonst Addr JIntBusyAddr = 0x0900; 624104Ssaidi@eecs.umich.educonst Addr JIntBusySize = 0x0100; 634104Ssaidi@eecs.umich.educonst Addr JIntABusyAddr = 0x0B00; 644104Ssaidi@eecs.umich.edu 654104Ssaidi@eecs.umich.edu 664104Ssaidi@eecs.umich.edu// IOB Masks 674104Ssaidi@eecs.umich.educonst uint64_t IntManMask = 0x01F3F; 684104Ssaidi@eecs.umich.educonst uint64_t IntCtlMask = 0x00006; 694104Ssaidi@eecs.umich.educonst uint64_t JIntVecMask = 0x0003F; 704104Ssaidi@eecs.umich.educonst uint64_t IntVecDis = 0x31F3F; 714104Ssaidi@eecs.umich.educonst uint64_t JIntBusyMask = 0x0003F; 724104Ssaidi@eecs.umich.edu 734104Ssaidi@eecs.umich.edu 744104Ssaidi@eecs.umich.educlass Iob : public PioDevice 754104Ssaidi@eecs.umich.edu{ 764104Ssaidi@eecs.umich.edu private: 774104Ssaidi@eecs.umich.edu IntrControl *ic; 784104Ssaidi@eecs.umich.edu Addr iobManAddr; 794104Ssaidi@eecs.umich.edu Addr iobManSize; 804104Ssaidi@eecs.umich.edu Addr iobJBusAddr; 814104Ssaidi@eecs.umich.edu Addr iobJBusSize; 824104Ssaidi@eecs.umich.edu Tick pioDelay; 834104Ssaidi@eecs.umich.edu 844104Ssaidi@eecs.umich.edu enum DeviceId { 854104Ssaidi@eecs.umich.edu Interal = 0, 864104Ssaidi@eecs.umich.edu Error = 1, 874104Ssaidi@eecs.umich.edu SSI = 2, 884104Ssaidi@eecs.umich.edu Reserved = 3, 894104Ssaidi@eecs.umich.edu NumDeviceIds 904104Ssaidi@eecs.umich.edu }; 914104Ssaidi@eecs.umich.edu 924104Ssaidi@eecs.umich.edu struct IntMan { 934104Ssaidi@eecs.umich.edu int cpu; 944104Ssaidi@eecs.umich.edu int vector; 954104Ssaidi@eecs.umich.edu }; 964104Ssaidi@eecs.umich.edu 974104Ssaidi@eecs.umich.edu struct IntCtl { 984104Ssaidi@eecs.umich.edu bool mask; 994104Ssaidi@eecs.umich.edu bool pend; 1004104Ssaidi@eecs.umich.edu }; 1014104Ssaidi@eecs.umich.edu 1024104Ssaidi@eecs.umich.edu struct IntBusy { 1034104Ssaidi@eecs.umich.edu bool busy; 1044104Ssaidi@eecs.umich.edu int source; 1054104Ssaidi@eecs.umich.edu }; 1064104Ssaidi@eecs.umich.edu 1074104Ssaidi@eecs.umich.edu enum Type { 1084104Ssaidi@eecs.umich.edu Interrupt, 1094104Ssaidi@eecs.umich.edu Reset, 1104104Ssaidi@eecs.umich.edu Idle, 1114104Ssaidi@eecs.umich.edu Resume 1124104Ssaidi@eecs.umich.edu }; 1134104Ssaidi@eecs.umich.edu 1144104Ssaidi@eecs.umich.edu IntMan intMan[NumDeviceIds]; 1154104Ssaidi@eecs.umich.edu IntCtl intCtl[NumDeviceIds]; 1164104Ssaidi@eecs.umich.edu uint64_t jIntVec; 1174104Ssaidi@eecs.umich.edu uint64_t jBusData0[MaxNiagaraProcs]; 1184104Ssaidi@eecs.umich.edu uint64_t jBusData1[MaxNiagaraProcs]; 1194104Ssaidi@eecs.umich.edu IntBusy jIntBusy[MaxNiagaraProcs]; 1204104Ssaidi@eecs.umich.edu 1214104Ssaidi@eecs.umich.edu void writeIob(PacketPtr pkt); 1224104Ssaidi@eecs.umich.edu void writeJBus(PacketPtr pkt); 1234104Ssaidi@eecs.umich.edu void readIob(PacketPtr pkt); 1244104Ssaidi@eecs.umich.edu void readJBus(PacketPtr pkt); 1254104Ssaidi@eecs.umich.edu 1264104Ssaidi@eecs.umich.edu 1274104Ssaidi@eecs.umich.edu public: 1284104Ssaidi@eecs.umich.edu struct Params : public PioDevice::Params 1294104Ssaidi@eecs.umich.edu { 1304104Ssaidi@eecs.umich.edu Tick pio_delay; 1314104Ssaidi@eecs.umich.edu }; 1324104Ssaidi@eecs.umich.edu protected: 1334104Ssaidi@eecs.umich.edu const Params *params() const { return (const Params*)_params; } 1344104Ssaidi@eecs.umich.edu 1354104Ssaidi@eecs.umich.edu public: 1364104Ssaidi@eecs.umich.edu Iob(Params *p); 1374104Ssaidi@eecs.umich.edu 1384104Ssaidi@eecs.umich.edu virtual Tick read(PacketPtr pkt); 1394104Ssaidi@eecs.umich.edu virtual Tick write(PacketPtr pkt); 1404104Ssaidi@eecs.umich.edu void generateIpi(Type type, int cpu_id, int vector); 1414104Ssaidi@eecs.umich.edu void receiveDeviceInterrupt(DeviceId devid); 1424104Ssaidi@eecs.umich.edu bool receiveJBusInterrupt(int cpu_id, int source, uint64_t d0, uint64_t d1); 1434104Ssaidi@eecs.umich.edu 1444104Ssaidi@eecs.umich.edu 1454104Ssaidi@eecs.umich.edu void addressRanges(AddrRangeList &range_list); 1464104Ssaidi@eecs.umich.edu 1474104Ssaidi@eecs.umich.edu virtual void serialize(std::ostream &os); 1484104Ssaidi@eecs.umich.edu virtual void unserialize(Checkpoint *cp, const std::string §ion); 1494104Ssaidi@eecs.umich.edu 1504104Ssaidi@eecs.umich.edu}; 1514104Ssaidi@eecs.umich.edu 1524104Ssaidi@eecs.umich.edu#endif //__DEV_SPARC_IOB_HH__ 1534104Ssaidi@eecs.umich.edu 154