intelmp.hh revision 8852
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 "enums/X86IntelMPAddressType.hh"
485625Sgblack@eecs.umich.edu#include "enums/X86IntelMPInterruptType.hh"
495625Sgblack@eecs.umich.edu#include "enums/X86IntelMPPolarity.hh"
505625Sgblack@eecs.umich.edu#include "enums/X86IntelMPRangeList.hh"
515625Sgblack@eecs.umich.edu#include "enums/X86IntelMPTriggerMode.hh"
528229Snate@binkert.org#include "sim/sim_object.hh"
535625Sgblack@eecs.umich.edu
548706Sandreas.hansson@arm.comclass PortProxy;
555625Sgblack@eecs.umich.edu
565625Sgblack@eecs.umich.edu// Config entry types
578737Skoansin.tan@gmail.comstruct X86IntelMPBaseConfigEntryParams;
588737Skoansin.tan@gmail.comstruct X86IntelMPExtConfigEntryParams;
595625Sgblack@eecs.umich.edu
605625Sgblack@eecs.umich.edu// General table structures
618737Skoansin.tan@gmail.comstruct X86IntelMPConfigTableParams;
628737Skoansin.tan@gmail.comstruct X86IntelMPFloatingPointerParams;
635625Sgblack@eecs.umich.edu
645625Sgblack@eecs.umich.edu// Base entry types
658737Skoansin.tan@gmail.comstruct X86IntelMPBusParams;
668737Skoansin.tan@gmail.comstruct X86IntelMPIOAPICParams;
678737Skoansin.tan@gmail.comstruct X86IntelMPIOIntAssignmentParams;
688737Skoansin.tan@gmail.comstruct X86IntelMPLocalIntAssignmentParams;
698737Skoansin.tan@gmail.comstruct X86IntelMPProcessorParams;
705625Sgblack@eecs.umich.edu
715625Sgblack@eecs.umich.edu// Extended entry types
728737Skoansin.tan@gmail.comstruct X86IntelMPAddrSpaceMappingParams;
738737Skoansin.tan@gmail.comstruct X86IntelMPBusHierarchyParams;
748737Skoansin.tan@gmail.comstruct X86IntelMPCompatAddrSpaceModParams;
755625Sgblack@eecs.umich.edu
765625Sgblack@eecs.umich.edunamespace X86ISA
775625Sgblack@eecs.umich.edu{
785625Sgblack@eecs.umich.edu
795625Sgblack@eecs.umich.edunamespace IntelMP
805625Sgblack@eecs.umich.edu{
815625Sgblack@eecs.umich.edu
825625Sgblack@eecs.umich.educlass FloatingPointer : public SimObject
835625Sgblack@eecs.umich.edu{
845625Sgblack@eecs.umich.edu  protected:
855625Sgblack@eecs.umich.edu    typedef X86IntelMPFloatingPointerParams Params;
865625Sgblack@eecs.umich.edu
875625Sgblack@eecs.umich.edu    uint32_t tableAddr;
885625Sgblack@eecs.umich.edu    uint8_t specRev;
895625Sgblack@eecs.umich.edu    uint8_t defaultConfig;
905625Sgblack@eecs.umich.edu    bool imcrPresent;
915625Sgblack@eecs.umich.edu
925625Sgblack@eecs.umich.edu    static const char signature[];
935625Sgblack@eecs.umich.edu
945625Sgblack@eecs.umich.edu  public:
955625Sgblack@eecs.umich.edu
968852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr);
975625Sgblack@eecs.umich.edu
985625Sgblack@eecs.umich.edu    Addr getTableAddr()
995625Sgblack@eecs.umich.edu    {
1005625Sgblack@eecs.umich.edu        return tableAddr;
1015625Sgblack@eecs.umich.edu    }
1025625Sgblack@eecs.umich.edu
1035625Sgblack@eecs.umich.edu    void setTableAddr(Addr addr)
1045625Sgblack@eecs.umich.edu    {
1055625Sgblack@eecs.umich.edu        tableAddr = addr;
1065625Sgblack@eecs.umich.edu    }
1075625Sgblack@eecs.umich.edu
1085625Sgblack@eecs.umich.edu    FloatingPointer(Params * p);
1095625Sgblack@eecs.umich.edu};
1105625Sgblack@eecs.umich.edu
1115625Sgblack@eecs.umich.educlass BaseConfigEntry : public SimObject
1125625Sgblack@eecs.umich.edu{
1135625Sgblack@eecs.umich.edu  protected:
1145625Sgblack@eecs.umich.edu    typedef X86IntelMPBaseConfigEntryParams Params;
1155625Sgblack@eecs.umich.edu
1165625Sgblack@eecs.umich.edu    uint8_t type;
1175625Sgblack@eecs.umich.edu
1185625Sgblack@eecs.umich.edu  public:
1195625Sgblack@eecs.umich.edu
1208852Sandreas.hansson@arm.com    virtual Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
1215625Sgblack@eecs.umich.edu
1225625Sgblack@eecs.umich.edu    BaseConfigEntry(Params * p, uint8_t _type);
1235625Sgblack@eecs.umich.edu};
1245625Sgblack@eecs.umich.edu
1255625Sgblack@eecs.umich.educlass ExtConfigEntry : public SimObject
1265625Sgblack@eecs.umich.edu{
1275625Sgblack@eecs.umich.edu  protected:
1285625Sgblack@eecs.umich.edu    typedef X86IntelMPExtConfigEntryParams Params;
1295625Sgblack@eecs.umich.edu
1305625Sgblack@eecs.umich.edu    uint8_t type;
1315625Sgblack@eecs.umich.edu    uint8_t length;
1325625Sgblack@eecs.umich.edu
1335625Sgblack@eecs.umich.edu  public:
1345625Sgblack@eecs.umich.edu
1358852Sandreas.hansson@arm.com    virtual Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
1365625Sgblack@eecs.umich.edu
1375625Sgblack@eecs.umich.edu    ExtConfigEntry(Params * p, uint8_t _type, uint8_t _length);
1385625Sgblack@eecs.umich.edu};
1395625Sgblack@eecs.umich.edu
1405625Sgblack@eecs.umich.educlass ConfigTable : public SimObject
1415625Sgblack@eecs.umich.edu{
1425625Sgblack@eecs.umich.edu  protected:
1435625Sgblack@eecs.umich.edu    typedef X86IntelMPConfigTableParams Params;
1445625Sgblack@eecs.umich.edu
1455625Sgblack@eecs.umich.edu    static const char signature[];
1465625Sgblack@eecs.umich.edu
1475625Sgblack@eecs.umich.edu    uint8_t specRev;
1485625Sgblack@eecs.umich.edu    std::string oemID;
1495625Sgblack@eecs.umich.edu    std::string productID;
1505625Sgblack@eecs.umich.edu    uint32_t oemTableAddr;
1515625Sgblack@eecs.umich.edu    uint16_t oemTableSize;
1525625Sgblack@eecs.umich.edu    uint32_t localApic;
1535625Sgblack@eecs.umich.edu
1545625Sgblack@eecs.umich.edu    std::vector<BaseConfigEntry *> baseEntries;
1555625Sgblack@eecs.umich.edu    std::vector<ExtConfigEntry *> extEntries;
1565625Sgblack@eecs.umich.edu
1575625Sgblack@eecs.umich.edu  public:
1588852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr);
1595625Sgblack@eecs.umich.edu
1605625Sgblack@eecs.umich.edu    ConfigTable(Params * p);
1615625Sgblack@eecs.umich.edu};
1625625Sgblack@eecs.umich.edu
1635625Sgblack@eecs.umich.educlass Processor : public BaseConfigEntry
1645625Sgblack@eecs.umich.edu{
1655625Sgblack@eecs.umich.edu  protected:
1665625Sgblack@eecs.umich.edu    typedef X86IntelMPProcessorParams Params;
1675625Sgblack@eecs.umich.edu
1685625Sgblack@eecs.umich.edu    uint8_t localApicID;
1695625Sgblack@eecs.umich.edu    uint8_t localApicVersion;
1705625Sgblack@eecs.umich.edu    uint8_t cpuFlags;
1715625Sgblack@eecs.umich.edu    uint32_t cpuSignature;
1725625Sgblack@eecs.umich.edu    uint32_t featureFlags;
1735625Sgblack@eecs.umich.edu
1745625Sgblack@eecs.umich.edu  public:
1758852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
1765625Sgblack@eecs.umich.edu
1775625Sgblack@eecs.umich.edu    Processor(Params * p);
1785625Sgblack@eecs.umich.edu};
1795625Sgblack@eecs.umich.edu
1805625Sgblack@eecs.umich.educlass Bus : public BaseConfigEntry
1815625Sgblack@eecs.umich.edu{
1825625Sgblack@eecs.umich.edu  protected:
1835625Sgblack@eecs.umich.edu    typedef X86IntelMPBusParams Params;
1845625Sgblack@eecs.umich.edu
1855625Sgblack@eecs.umich.edu    uint8_t busID;
1865625Sgblack@eecs.umich.edu    std::string busType;
1875625Sgblack@eecs.umich.edu
1885625Sgblack@eecs.umich.edu  public:
1898852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
1905625Sgblack@eecs.umich.edu
1915625Sgblack@eecs.umich.edu    Bus(Params * p);
1925625Sgblack@eecs.umich.edu};
1935625Sgblack@eecs.umich.edu
1945625Sgblack@eecs.umich.educlass IOAPIC : public BaseConfigEntry
1955625Sgblack@eecs.umich.edu{
1965625Sgblack@eecs.umich.edu  protected:
1975625Sgblack@eecs.umich.edu    typedef X86IntelMPIOAPICParams Params;
1985625Sgblack@eecs.umich.edu
1995625Sgblack@eecs.umich.edu    uint8_t id;
2005625Sgblack@eecs.umich.edu    uint8_t version;
2015625Sgblack@eecs.umich.edu    uint8_t flags;
2025625Sgblack@eecs.umich.edu    uint32_t address;
2035625Sgblack@eecs.umich.edu
2045625Sgblack@eecs.umich.edu  public:
2058852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
2065625Sgblack@eecs.umich.edu
2075625Sgblack@eecs.umich.edu    IOAPIC(Params * p);
2085625Sgblack@eecs.umich.edu};
2095625Sgblack@eecs.umich.edu
2105625Sgblack@eecs.umich.educlass IntAssignment : public BaseConfigEntry
2115625Sgblack@eecs.umich.edu{
2125625Sgblack@eecs.umich.edu  protected:
2135625Sgblack@eecs.umich.edu    uint8_t interruptType;
2145625Sgblack@eecs.umich.edu
2155625Sgblack@eecs.umich.edu    uint16_t flags;
2165625Sgblack@eecs.umich.edu
2175625Sgblack@eecs.umich.edu    uint8_t sourceBusID;
2185625Sgblack@eecs.umich.edu    uint8_t sourceBusIRQ;
2195625Sgblack@eecs.umich.edu
2205625Sgblack@eecs.umich.edu    uint8_t destApicID;
2215625Sgblack@eecs.umich.edu    uint8_t destApicIntIn;
2225625Sgblack@eecs.umich.edu
2235625Sgblack@eecs.umich.edu  public:
2248852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
2255625Sgblack@eecs.umich.edu
2265625Sgblack@eecs.umich.edu    IntAssignment(X86IntelMPBaseConfigEntryParams * p,
2275625Sgblack@eecs.umich.edu            Enums::X86IntelMPInterruptType _interruptType,
2285625Sgblack@eecs.umich.edu            Enums::X86IntelMPPolarity polarity,
2295625Sgblack@eecs.umich.edu            Enums::X86IntelMPTriggerMode trigger,
2305625Sgblack@eecs.umich.edu            uint8_t _type,
2315625Sgblack@eecs.umich.edu            uint8_t _sourceBusID, uint8_t _sourceBusIRQ,
2325625Sgblack@eecs.umich.edu            uint8_t _destApicID, uint8_t _destApicIntIn) :
2335625Sgblack@eecs.umich.edu        BaseConfigEntry(p, _type),
2345625Sgblack@eecs.umich.edu        interruptType(_interruptType), flags(0),
2355625Sgblack@eecs.umich.edu        sourceBusID(_sourceBusID), sourceBusIRQ(_sourceBusIRQ),
2365625Sgblack@eecs.umich.edu        destApicID(_destApicID), destApicIntIn(_destApicIntIn)
2375625Sgblack@eecs.umich.edu    {
2385625Sgblack@eecs.umich.edu        replaceBits(flags, 0, 1, polarity);
2395625Sgblack@eecs.umich.edu        replaceBits(flags, 2, 3, trigger);
2405625Sgblack@eecs.umich.edu    }
2415625Sgblack@eecs.umich.edu};
2425625Sgblack@eecs.umich.edu
2435625Sgblack@eecs.umich.educlass IOIntAssignment : public IntAssignment
2445625Sgblack@eecs.umich.edu{
2455625Sgblack@eecs.umich.edu  protected:
2465625Sgblack@eecs.umich.edu    typedef X86IntelMPIOIntAssignmentParams Params;
2475625Sgblack@eecs.umich.edu
2485625Sgblack@eecs.umich.edu  public:
2495625Sgblack@eecs.umich.edu    IOIntAssignment(Params * p);
2505625Sgblack@eecs.umich.edu};
2515625Sgblack@eecs.umich.edu
2525625Sgblack@eecs.umich.educlass LocalIntAssignment : public IntAssignment
2535625Sgblack@eecs.umich.edu{
2545625Sgblack@eecs.umich.edu  protected:
2555625Sgblack@eecs.umich.edu    typedef X86IntelMPLocalIntAssignmentParams Params;
2565625Sgblack@eecs.umich.edu
2575625Sgblack@eecs.umich.edu  public:
2585625Sgblack@eecs.umich.edu    LocalIntAssignment(Params * p);
2595625Sgblack@eecs.umich.edu};
2605625Sgblack@eecs.umich.edu
2615625Sgblack@eecs.umich.educlass AddrSpaceMapping : public ExtConfigEntry
2625625Sgblack@eecs.umich.edu{
2635625Sgblack@eecs.umich.edu  protected:
2645625Sgblack@eecs.umich.edu    typedef X86IntelMPAddrSpaceMappingParams Params;
2655625Sgblack@eecs.umich.edu
2665625Sgblack@eecs.umich.edu    uint8_t busID;
2675625Sgblack@eecs.umich.edu    uint8_t addrType;
2685625Sgblack@eecs.umich.edu    uint64_t addr;
2695625Sgblack@eecs.umich.edu    uint64_t addrLength;
2705625Sgblack@eecs.umich.edu
2715625Sgblack@eecs.umich.edu  public:
2728852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
2735625Sgblack@eecs.umich.edu
2745625Sgblack@eecs.umich.edu    AddrSpaceMapping(Params * p);
2755625Sgblack@eecs.umich.edu};
2765625Sgblack@eecs.umich.edu
2775625Sgblack@eecs.umich.educlass BusHierarchy : public ExtConfigEntry
2785625Sgblack@eecs.umich.edu{
2795625Sgblack@eecs.umich.edu  protected:
2805625Sgblack@eecs.umich.edu    typedef X86IntelMPBusHierarchyParams Params;
2815625Sgblack@eecs.umich.edu
2825625Sgblack@eecs.umich.edu    uint8_t busID;
2835625Sgblack@eecs.umich.edu    uint8_t info;
2845625Sgblack@eecs.umich.edu    uint8_t parentBus;
2855625Sgblack@eecs.umich.edu
2865625Sgblack@eecs.umich.edu  public:
2878852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
2885625Sgblack@eecs.umich.edu
2895625Sgblack@eecs.umich.edu    BusHierarchy(Params * p);
2905625Sgblack@eecs.umich.edu};
2915625Sgblack@eecs.umich.edu
2925625Sgblack@eecs.umich.educlass CompatAddrSpaceMod : public ExtConfigEntry
2935625Sgblack@eecs.umich.edu{
2945625Sgblack@eecs.umich.edu  protected:
2955625Sgblack@eecs.umich.edu    typedef X86IntelMPCompatAddrSpaceModParams Params;
2965625Sgblack@eecs.umich.edu
2975625Sgblack@eecs.umich.edu    uint8_t busID;
2985625Sgblack@eecs.umich.edu    uint8_t mod;
2995625Sgblack@eecs.umich.edu    uint32_t rangeList;
3005625Sgblack@eecs.umich.edu
3015625Sgblack@eecs.umich.edu  public:
3028852Sandreas.hansson@arm.com    Addr writeOut(PortProxy& proxy, Addr addr, uint8_t &checkSum);
3035625Sgblack@eecs.umich.edu
3045625Sgblack@eecs.umich.edu    CompatAddrSpaceMod(Params * p);
3055625Sgblack@eecs.umich.edu};
3065625Sgblack@eecs.umich.edu
3075625Sgblack@eecs.umich.edu} //IntelMP
3085625Sgblack@eecs.umich.edu
3095625Sgblack@eecs.umich.edu} //X86ISA
3105625Sgblack@eecs.umich.edu
3115625Sgblack@eecs.umich.edu#endif
312