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 "dev/io_device.hh"
404762Snate@binkert.org#include "params/Iob.hh"
414104Ssaidi@eecs.umich.edu
424104Ssaidi@eecs.umich.educlass IntrControl;
434104Ssaidi@eecs.umich.edu
444104Ssaidi@eecs.umich.educonst int  MaxNiagaraProcs = 32;
454104Ssaidi@eecs.umich.edu// IOB Managment Addresses
464104Ssaidi@eecs.umich.educonst Addr IntManAddr       = 0x0000;
474104Ssaidi@eecs.umich.educonst Addr IntManSize       = 0x0020;
484104Ssaidi@eecs.umich.educonst Addr IntCtlAddr       = 0x0400;
494104Ssaidi@eecs.umich.educonst Addr IntCtlSize       = 0x0020;
504104Ssaidi@eecs.umich.educonst Addr JIntVecAddr      = 0x0A00;
514104Ssaidi@eecs.umich.educonst Addr IntVecDisAddr    = 0x0800;
524104Ssaidi@eecs.umich.educonst Addr IntVecDisSize    = 0x0100;
534104Ssaidi@eecs.umich.edu
544104Ssaidi@eecs.umich.edu
554104Ssaidi@eecs.umich.edu// IOB Control Addresses
564104Ssaidi@eecs.umich.educonst Addr JIntData0Addr   = 0x0400;
574104Ssaidi@eecs.umich.educonst Addr JIntData1Addr   = 0x0500;
584104Ssaidi@eecs.umich.educonst Addr JIntDataA0Addr  = 0x0600;
594104Ssaidi@eecs.umich.educonst Addr JIntDataA1Addr  = 0x0700;
604104Ssaidi@eecs.umich.educonst Addr JIntBusyAddr    = 0x0900;
614104Ssaidi@eecs.umich.educonst Addr JIntBusySize    = 0x0100;
624104Ssaidi@eecs.umich.educonst Addr JIntABusyAddr   = 0x0B00;
634104Ssaidi@eecs.umich.edu
644104Ssaidi@eecs.umich.edu
654104Ssaidi@eecs.umich.edu// IOB Masks
664104Ssaidi@eecs.umich.educonst uint64_t IntManMask   = 0x01F3F;
674104Ssaidi@eecs.umich.educonst uint64_t IntCtlMask   = 0x00006;
684104Ssaidi@eecs.umich.educonst uint64_t JIntVecMask  = 0x0003F;
694104Ssaidi@eecs.umich.educonst uint64_t IntVecDis    = 0x31F3F;
704104Ssaidi@eecs.umich.educonst uint64_t JIntBusyMask = 0x0003F;
714104Ssaidi@eecs.umich.edu
724104Ssaidi@eecs.umich.edu
734104Ssaidi@eecs.umich.educlass Iob : public PioDevice
744104Ssaidi@eecs.umich.edu{
754104Ssaidi@eecs.umich.edu  private:
764104Ssaidi@eecs.umich.edu    IntrControl *ic;
774104Ssaidi@eecs.umich.edu    Addr iobManAddr;
784104Ssaidi@eecs.umich.edu    Addr iobManSize;
794104Ssaidi@eecs.umich.edu    Addr iobJBusAddr;
804104Ssaidi@eecs.umich.edu    Addr iobJBusSize;
814104Ssaidi@eecs.umich.edu    Tick pioDelay;
824104Ssaidi@eecs.umich.edu
834104Ssaidi@eecs.umich.edu    enum DeviceId {
844104Ssaidi@eecs.umich.edu        Interal = 0,
854104Ssaidi@eecs.umich.edu        Error = 1,
864104Ssaidi@eecs.umich.edu        SSI = 2,
874104Ssaidi@eecs.umich.edu        Reserved = 3,
884104Ssaidi@eecs.umich.edu        NumDeviceIds
894104Ssaidi@eecs.umich.edu    };
904104Ssaidi@eecs.umich.edu
914104Ssaidi@eecs.umich.edu    struct IntMan {
924104Ssaidi@eecs.umich.edu        int cpu;
934104Ssaidi@eecs.umich.edu        int vector;
944104Ssaidi@eecs.umich.edu    };
954104Ssaidi@eecs.umich.edu
964104Ssaidi@eecs.umich.edu    struct IntCtl {
974104Ssaidi@eecs.umich.edu        bool mask;
984104Ssaidi@eecs.umich.edu        bool pend;
994104Ssaidi@eecs.umich.edu    };
1004104Ssaidi@eecs.umich.edu
1014104Ssaidi@eecs.umich.edu    struct IntBusy {
1024104Ssaidi@eecs.umich.edu        bool busy;
1034104Ssaidi@eecs.umich.edu        int source;
1044104Ssaidi@eecs.umich.edu    };
1054104Ssaidi@eecs.umich.edu
1064104Ssaidi@eecs.umich.edu    enum Type {
1074104Ssaidi@eecs.umich.edu        Interrupt,
1084104Ssaidi@eecs.umich.edu        Reset,
1094104Ssaidi@eecs.umich.edu        Idle,
1104104Ssaidi@eecs.umich.edu        Resume
1114104Ssaidi@eecs.umich.edu    };
1124104Ssaidi@eecs.umich.edu
1134104Ssaidi@eecs.umich.edu    IntMan intMan[NumDeviceIds];
1144104Ssaidi@eecs.umich.edu    IntCtl intCtl[NumDeviceIds];
1154104Ssaidi@eecs.umich.edu    uint64_t jIntVec;
1164104Ssaidi@eecs.umich.edu    uint64_t jBusData0[MaxNiagaraProcs];
1174104Ssaidi@eecs.umich.edu    uint64_t jBusData1[MaxNiagaraProcs];
1184104Ssaidi@eecs.umich.edu    IntBusy jIntBusy[MaxNiagaraProcs];
1194104Ssaidi@eecs.umich.edu
1204104Ssaidi@eecs.umich.edu    void writeIob(PacketPtr pkt);
1214104Ssaidi@eecs.umich.edu    void writeJBus(PacketPtr pkt);
1224104Ssaidi@eecs.umich.edu    void readIob(PacketPtr pkt);
1234104Ssaidi@eecs.umich.edu    void readJBus(PacketPtr pkt);
1244104Ssaidi@eecs.umich.edu
1254762Snate@binkert.org  public:
1264762Snate@binkert.org    typedef IobParams Params;
1274762Snate@binkert.org    Iob(const Params *p);
1284104Ssaidi@eecs.umich.edu
1294762Snate@binkert.org    const Params *
1304762Snate@binkert.org    params() const
1314104Ssaidi@eecs.umich.edu    {
1324762Snate@binkert.org        return dynamic_cast<const Params *>(_params);
1334762Snate@binkert.org    }
1344104Ssaidi@eecs.umich.edu
13511347Sandreas.hansson@arm.com    Tick read(PacketPtr pkt) override;
13611347Sandreas.hansson@arm.com    Tick write(PacketPtr pkt) override;
1374104Ssaidi@eecs.umich.edu    void generateIpi(Type type, int cpu_id, int vector);
1384104Ssaidi@eecs.umich.edu    void receiveDeviceInterrupt(DeviceId devid);
1394762Snate@binkert.org    bool receiveJBusInterrupt(int cpu_id, int source, uint64_t d0,
1404762Snate@binkert.org                              uint64_t d1);
1414104Ssaidi@eecs.umich.edu
14211347Sandreas.hansson@arm.com    AddrRangeList getAddrRanges() const override;
1434104Ssaidi@eecs.umich.edu
14411168Sandreas.hansson@arm.com    void serialize(CheckpointOut &cp) const override;
14511168Sandreas.hansson@arm.com    void unserialize(CheckpointIn &cp) override;
1464104Ssaidi@eecs.umich.edu};
1474104Ssaidi@eecs.umich.edu
1484104Ssaidi@eecs.umich.edu#endif //__DEV_SPARC_IOB_HH__
1494104Ssaidi@eecs.umich.edu
150