intelmp.hh revision 7087
15625Sgblack@eecs.umich.edu/*
25625Sgblack@eecs.umich.edu * Copyright (c) 2008 The Hewlett-Packard Development Company
35625Sgblack@eecs.umich.edu * All rights reserved.
45625Sgblack@eecs.umich.edu *
57087Snate@binkert.org * The license below extends only to copyright in the software and shall
67087Snate@binkert.org * not be construed as granting a license to any other intellectual
77087Snate@binkert.org * property including but not limited to intellectual property relating
87087Snate@binkert.org * to a hardware implementation of the functionality of the software
97087Snate@binkert.org * licensed hereunder.  You may use the software subject to the license
107087Snate@binkert.org * terms below provided that you ensure that this notice is replicated
117087Snate@binkert.org * unmodified and in its entirety in all distributions of the software,
127087Snate@binkert.org * modified or unmodified, in source code or in binary form.
135625Sgblack@eecs.umich.edu *
147087Snate@binkert.org * Redistribution and use in source and binary forms, with or without
157087Snate@binkert.org * modification, are permitted provided that the following conditions are
167087Snate@binkert.org * met: redistributions of source code must retain the above copyright
177087Snate@binkert.org * notice, this list of conditions and the following disclaimer;
187087Snate@binkert.org * redistributions in binary form must reproduce the above copyright
197087Snate@binkert.org * notice, this list of conditions and the following disclaimer in the
207087Snate@binkert.org * documentation and/or other materials provided with the distribution;
217087Snate@binkert.org * neither the name of the copyright holders nor the names of its
225625Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
237087Snate@binkert.org * this software without specific prior written permission.
245625Sgblack@eecs.umich.edu *
255625Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
265625Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
275625Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
285625Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
295625Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
305625Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
315625Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
325625Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
335625Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
345625Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
355625Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
365625Sgblack@eecs.umich.edu *
375625Sgblack@eecs.umich.edu * Authors: Gabe Black
385625Sgblack@eecs.umich.edu */
395625Sgblack@eecs.umich.edu
405625Sgblack@eecs.umich.edu#ifndef __ARCH_X86_BIOS_INTELMP_HH__
415625Sgblack@eecs.umich.edu#define __ARCH_X86_BIOS_INTELMP_HH__
425625Sgblack@eecs.umich.edu
435625Sgblack@eecs.umich.edu#include <string>
445625Sgblack@eecs.umich.edu#include <vector>
455625Sgblack@eecs.umich.edu
465625Sgblack@eecs.umich.edu#include "base/bitfield.hh"
475625Sgblack@eecs.umich.edu#include "sim/sim_object.hh"
485625Sgblack@eecs.umich.edu
495625Sgblack@eecs.umich.edu#include "enums/X86IntelMPAddressType.hh"
505625Sgblack@eecs.umich.edu#include "enums/X86IntelMPInterruptType.hh"
515625Sgblack@eecs.umich.edu#include "enums/X86IntelMPPolarity.hh"
525625Sgblack@eecs.umich.edu#include "enums/X86IntelMPRangeList.hh"
535625Sgblack@eecs.umich.edu#include "enums/X86IntelMPTriggerMode.hh"
545625Sgblack@eecs.umich.edu
555625Sgblack@eecs.umich.educlass FunctionalPort;
565625Sgblack@eecs.umich.edu
575625Sgblack@eecs.umich.edu// Config entry types
585625Sgblack@eecs.umich.educlass X86IntelMPBaseConfigEntryParams;
595625Sgblack@eecs.umich.educlass X86IntelMPExtConfigEntryParams;
605625Sgblack@eecs.umich.edu
615625Sgblack@eecs.umich.edu// General table structures
625625Sgblack@eecs.umich.educlass X86IntelMPConfigTableParams;
635625Sgblack@eecs.umich.educlass X86IntelMPFloatingPointerParams;
645625Sgblack@eecs.umich.edu
655625Sgblack@eecs.umich.edu// Base entry types
665625Sgblack@eecs.umich.educlass X86IntelMPBusParams;
675625Sgblack@eecs.umich.educlass X86IntelMPIOAPICParams;
685625Sgblack@eecs.umich.educlass X86IntelMPIOIntAssignmentParams;
695625Sgblack@eecs.umich.educlass X86IntelMPLocalIntAssignmentParams;
705625Sgblack@eecs.umich.educlass X86IntelMPProcessorParams;
715625Sgblack@eecs.umich.edu
725625Sgblack@eecs.umich.edu// Extended entry types
735625Sgblack@eecs.umich.educlass X86IntelMPAddrSpaceMappingParams;
745625Sgblack@eecs.umich.educlass X86IntelMPBusHierarchyParams;
755625Sgblack@eecs.umich.educlass X86IntelMPCompatAddrSpaceModParams;
765625Sgblack@eecs.umich.edu
775625Sgblack@eecs.umich.edunamespace X86ISA
785625Sgblack@eecs.umich.edu{
795625Sgblack@eecs.umich.edu
805625Sgblack@eecs.umich.edunamespace IntelMP
815625Sgblack@eecs.umich.edu{
825625Sgblack@eecs.umich.edu
835625Sgblack@eecs.umich.educlass FloatingPointer : public SimObject
845625Sgblack@eecs.umich.edu{
855625Sgblack@eecs.umich.edu  protected:
865625Sgblack@eecs.umich.edu    typedef X86IntelMPFloatingPointerParams Params;
875625Sgblack@eecs.umich.edu
885625Sgblack@eecs.umich.edu    uint32_t tableAddr;
895625Sgblack@eecs.umich.edu    uint8_t specRev;
905625Sgblack@eecs.umich.edu    uint8_t defaultConfig;
915625Sgblack@eecs.umich.edu    bool imcrPresent;
925625Sgblack@eecs.umich.edu
935625Sgblack@eecs.umich.edu    static const char signature[];
945625Sgblack@eecs.umich.edu
955625Sgblack@eecs.umich.edu  public:
965625Sgblack@eecs.umich.edu
975625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr);
985625Sgblack@eecs.umich.edu
995625Sgblack@eecs.umich.edu    Addr getTableAddr()
1005625Sgblack@eecs.umich.edu    {
1015625Sgblack@eecs.umich.edu        return tableAddr;
1025625Sgblack@eecs.umich.edu    }
1035625Sgblack@eecs.umich.edu
1045625Sgblack@eecs.umich.edu    void setTableAddr(Addr addr)
1055625Sgblack@eecs.umich.edu    {
1065625Sgblack@eecs.umich.edu        tableAddr = addr;
1075625Sgblack@eecs.umich.edu    }
1085625Sgblack@eecs.umich.edu
1095625Sgblack@eecs.umich.edu    FloatingPointer(Params * p);
1105625Sgblack@eecs.umich.edu};
1115625Sgblack@eecs.umich.edu
1125625Sgblack@eecs.umich.educlass BaseConfigEntry : public SimObject
1135625Sgblack@eecs.umich.edu{
1145625Sgblack@eecs.umich.edu  protected:
1155625Sgblack@eecs.umich.edu    typedef X86IntelMPBaseConfigEntryParams Params;
1165625Sgblack@eecs.umich.edu
1175625Sgblack@eecs.umich.edu    uint8_t type;
1185625Sgblack@eecs.umich.edu
1195625Sgblack@eecs.umich.edu  public:
1205625Sgblack@eecs.umich.edu
1215625Sgblack@eecs.umich.edu    virtual Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1225625Sgblack@eecs.umich.edu
1235625Sgblack@eecs.umich.edu    BaseConfigEntry(Params * p, uint8_t _type);
1245625Sgblack@eecs.umich.edu};
1255625Sgblack@eecs.umich.edu
1265625Sgblack@eecs.umich.educlass ExtConfigEntry : public SimObject
1275625Sgblack@eecs.umich.edu{
1285625Sgblack@eecs.umich.edu  protected:
1295625Sgblack@eecs.umich.edu    typedef X86IntelMPExtConfigEntryParams Params;
1305625Sgblack@eecs.umich.edu
1315625Sgblack@eecs.umich.edu    uint8_t type;
1325625Sgblack@eecs.umich.edu    uint8_t length;
1335625Sgblack@eecs.umich.edu
1345625Sgblack@eecs.umich.edu  public:
1355625Sgblack@eecs.umich.edu
1365625Sgblack@eecs.umich.edu    virtual Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1375625Sgblack@eecs.umich.edu
1385625Sgblack@eecs.umich.edu    ExtConfigEntry(Params * p, uint8_t _type, uint8_t _length);
1395625Sgblack@eecs.umich.edu};
1405625Sgblack@eecs.umich.edu
1415625Sgblack@eecs.umich.educlass ConfigTable : public SimObject
1425625Sgblack@eecs.umich.edu{
1435625Sgblack@eecs.umich.edu  protected:
1445625Sgblack@eecs.umich.edu    typedef X86IntelMPConfigTableParams Params;
1455625Sgblack@eecs.umich.edu
1465625Sgblack@eecs.umich.edu    static const char signature[];
1475625Sgblack@eecs.umich.edu
1485625Sgblack@eecs.umich.edu    uint8_t specRev;
1495625Sgblack@eecs.umich.edu    std::string oemID;
1505625Sgblack@eecs.umich.edu    std::string productID;
1515625Sgblack@eecs.umich.edu    uint32_t oemTableAddr;
1525625Sgblack@eecs.umich.edu    uint16_t oemTableSize;
1535625Sgblack@eecs.umich.edu    uint32_t localApic;
1545625Sgblack@eecs.umich.edu
1555625Sgblack@eecs.umich.edu    std::vector<BaseConfigEntry *> baseEntries;
1565625Sgblack@eecs.umich.edu    std::vector<ExtConfigEntry *> extEntries;
1575625Sgblack@eecs.umich.edu
1585625Sgblack@eecs.umich.edu  public:
1595625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr);
1605625Sgblack@eecs.umich.edu
1615625Sgblack@eecs.umich.edu    ConfigTable(Params * p);
1625625Sgblack@eecs.umich.edu};
1635625Sgblack@eecs.umich.edu
1645625Sgblack@eecs.umich.educlass Processor : public BaseConfigEntry
1655625Sgblack@eecs.umich.edu{
1665625Sgblack@eecs.umich.edu  protected:
1675625Sgblack@eecs.umich.edu    typedef X86IntelMPProcessorParams Params;
1685625Sgblack@eecs.umich.edu
1695625Sgblack@eecs.umich.edu    uint8_t localApicID;
1705625Sgblack@eecs.umich.edu    uint8_t localApicVersion;
1715625Sgblack@eecs.umich.edu    uint8_t cpuFlags;
1725625Sgblack@eecs.umich.edu    uint32_t cpuSignature;
1735625Sgblack@eecs.umich.edu    uint32_t featureFlags;
1745625Sgblack@eecs.umich.edu
1755625Sgblack@eecs.umich.edu  public:
1765625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1775625Sgblack@eecs.umich.edu
1785625Sgblack@eecs.umich.edu    Processor(Params * p);
1795625Sgblack@eecs.umich.edu};
1805625Sgblack@eecs.umich.edu
1815625Sgblack@eecs.umich.educlass Bus : public BaseConfigEntry
1825625Sgblack@eecs.umich.edu{
1835625Sgblack@eecs.umich.edu  protected:
1845625Sgblack@eecs.umich.edu    typedef X86IntelMPBusParams Params;
1855625Sgblack@eecs.umich.edu
1865625Sgblack@eecs.umich.edu    uint8_t busID;
1875625Sgblack@eecs.umich.edu    std::string busType;
1885625Sgblack@eecs.umich.edu
1895625Sgblack@eecs.umich.edu  public:
1905625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1915625Sgblack@eecs.umich.edu
1925625Sgblack@eecs.umich.edu    Bus(Params * p);
1935625Sgblack@eecs.umich.edu};
1945625Sgblack@eecs.umich.edu
1955625Sgblack@eecs.umich.educlass IOAPIC : public BaseConfigEntry
1965625Sgblack@eecs.umich.edu{
1975625Sgblack@eecs.umich.edu  protected:
1985625Sgblack@eecs.umich.edu    typedef X86IntelMPIOAPICParams Params;
1995625Sgblack@eecs.umich.edu
2005625Sgblack@eecs.umich.edu    uint8_t id;
2015625Sgblack@eecs.umich.edu    uint8_t version;
2025625Sgblack@eecs.umich.edu    uint8_t flags;
2035625Sgblack@eecs.umich.edu    uint32_t address;
2045625Sgblack@eecs.umich.edu
2055625Sgblack@eecs.umich.edu  public:
2065625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2075625Sgblack@eecs.umich.edu
2085625Sgblack@eecs.umich.edu    IOAPIC(Params * p);
2095625Sgblack@eecs.umich.edu};
2105625Sgblack@eecs.umich.edu
2115625Sgblack@eecs.umich.educlass IntAssignment : public BaseConfigEntry
2125625Sgblack@eecs.umich.edu{
2135625Sgblack@eecs.umich.edu  protected:
2145625Sgblack@eecs.umich.edu    uint8_t interruptType;
2155625Sgblack@eecs.umich.edu
2165625Sgblack@eecs.umich.edu    uint16_t flags;
2175625Sgblack@eecs.umich.edu
2185625Sgblack@eecs.umich.edu    uint8_t sourceBusID;
2195625Sgblack@eecs.umich.edu    uint8_t sourceBusIRQ;
2205625Sgblack@eecs.umich.edu
2215625Sgblack@eecs.umich.edu    uint8_t destApicID;
2225625Sgblack@eecs.umich.edu    uint8_t destApicIntIn;
2235625Sgblack@eecs.umich.edu
2245625Sgblack@eecs.umich.edu  public:
2255625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2265625Sgblack@eecs.umich.edu
2275625Sgblack@eecs.umich.edu    IntAssignment(X86IntelMPBaseConfigEntryParams * p,
2285625Sgblack@eecs.umich.edu            Enums::X86IntelMPInterruptType _interruptType,
2295625Sgblack@eecs.umich.edu            Enums::X86IntelMPPolarity polarity,
2305625Sgblack@eecs.umich.edu            Enums::X86IntelMPTriggerMode trigger,
2315625Sgblack@eecs.umich.edu            uint8_t _type,
2325625Sgblack@eecs.umich.edu            uint8_t _sourceBusID, uint8_t _sourceBusIRQ,
2335625Sgblack@eecs.umich.edu            uint8_t _destApicID, uint8_t _destApicIntIn) :
2345625Sgblack@eecs.umich.edu        BaseConfigEntry(p, _type),
2355625Sgblack@eecs.umich.edu        interruptType(_interruptType), flags(0),
2365625Sgblack@eecs.umich.edu        sourceBusID(_sourceBusID), sourceBusIRQ(_sourceBusIRQ),
2375625Sgblack@eecs.umich.edu        destApicID(_destApicID), destApicIntIn(_destApicIntIn)
2385625Sgblack@eecs.umich.edu    {
2395625Sgblack@eecs.umich.edu        replaceBits(flags, 0, 1, polarity);
2405625Sgblack@eecs.umich.edu        replaceBits(flags, 2, 3, trigger);
2415625Sgblack@eecs.umich.edu    }
2425625Sgblack@eecs.umich.edu};
2435625Sgblack@eecs.umich.edu
2445625Sgblack@eecs.umich.educlass IOIntAssignment : public IntAssignment
2455625Sgblack@eecs.umich.edu{
2465625Sgblack@eecs.umich.edu  protected:
2475625Sgblack@eecs.umich.edu    typedef X86IntelMPIOIntAssignmentParams Params;
2485625Sgblack@eecs.umich.edu
2495625Sgblack@eecs.umich.edu  public:
2505625Sgblack@eecs.umich.edu    IOIntAssignment(Params * p);
2515625Sgblack@eecs.umich.edu};
2525625Sgblack@eecs.umich.edu
2535625Sgblack@eecs.umich.educlass LocalIntAssignment : public IntAssignment
2545625Sgblack@eecs.umich.edu{
2555625Sgblack@eecs.umich.edu  protected:
2565625Sgblack@eecs.umich.edu    typedef X86IntelMPLocalIntAssignmentParams Params;
2575625Sgblack@eecs.umich.edu
2585625Sgblack@eecs.umich.edu  public:
2595625Sgblack@eecs.umich.edu    LocalIntAssignment(Params * p);
2605625Sgblack@eecs.umich.edu};
2615625Sgblack@eecs.umich.edu
2625625Sgblack@eecs.umich.educlass AddrSpaceMapping : public ExtConfigEntry
2635625Sgblack@eecs.umich.edu{
2645625Sgblack@eecs.umich.edu  protected:
2655625Sgblack@eecs.umich.edu    typedef X86IntelMPAddrSpaceMappingParams Params;
2665625Sgblack@eecs.umich.edu
2675625Sgblack@eecs.umich.edu    uint8_t busID;
2685625Sgblack@eecs.umich.edu    uint8_t addrType;
2695625Sgblack@eecs.umich.edu    uint64_t addr;
2705625Sgblack@eecs.umich.edu    uint64_t addrLength;
2715625Sgblack@eecs.umich.edu
2725625Sgblack@eecs.umich.edu  public:
2735625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2745625Sgblack@eecs.umich.edu
2755625Sgblack@eecs.umich.edu    AddrSpaceMapping(Params * p);
2765625Sgblack@eecs.umich.edu};
2775625Sgblack@eecs.umich.edu
2785625Sgblack@eecs.umich.educlass BusHierarchy : public ExtConfigEntry
2795625Sgblack@eecs.umich.edu{
2805625Sgblack@eecs.umich.edu  protected:
2815625Sgblack@eecs.umich.edu    typedef X86IntelMPBusHierarchyParams Params;
2825625Sgblack@eecs.umich.edu
2835625Sgblack@eecs.umich.edu    uint8_t busID;
2845625Sgblack@eecs.umich.edu    uint8_t info;
2855625Sgblack@eecs.umich.edu    uint8_t parentBus;
2865625Sgblack@eecs.umich.edu
2875625Sgblack@eecs.umich.edu  public:
2885625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2895625Sgblack@eecs.umich.edu
2905625Sgblack@eecs.umich.edu    BusHierarchy(Params * p);
2915625Sgblack@eecs.umich.edu};
2925625Sgblack@eecs.umich.edu
2935625Sgblack@eecs.umich.educlass CompatAddrSpaceMod : public ExtConfigEntry
2945625Sgblack@eecs.umich.edu{
2955625Sgblack@eecs.umich.edu  protected:
2965625Sgblack@eecs.umich.edu    typedef X86IntelMPCompatAddrSpaceModParams Params;
2975625Sgblack@eecs.umich.edu
2985625Sgblack@eecs.umich.edu    uint8_t busID;
2995625Sgblack@eecs.umich.edu    uint8_t mod;
3005625Sgblack@eecs.umich.edu    uint32_t rangeList;
3015625Sgblack@eecs.umich.edu
3025625Sgblack@eecs.umich.edu  public:
3035625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
3045625Sgblack@eecs.umich.edu
3055625Sgblack@eecs.umich.edu    CompatAddrSpaceMod(Params * p);
3065625Sgblack@eecs.umich.edu};
3075625Sgblack@eecs.umich.edu
3085625Sgblack@eecs.umich.edu} //IntelMP
3095625Sgblack@eecs.umich.edu
3105625Sgblack@eecs.umich.edu} //X86ISA
3115625Sgblack@eecs.umich.edu
3125625Sgblack@eecs.umich.edu#endif
313