intelmp.hh revision 5625
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 *
55625Sgblack@eecs.umich.edu * Redistribution and use of this software in source and binary forms,
65625Sgblack@eecs.umich.edu * with or without modification, are permitted provided that the
75625Sgblack@eecs.umich.edu * following conditions are met:
85625Sgblack@eecs.umich.edu *
95625Sgblack@eecs.umich.edu * The software must be used only for Non-Commercial Use which means any
105625Sgblack@eecs.umich.edu * use which is NOT directed to receiving any direct monetary
115625Sgblack@eecs.umich.edu * compensation for, or commercial advantage from such use.  Illustrative
125625Sgblack@eecs.umich.edu * examples of non-commercial use are academic research, personal study,
135625Sgblack@eecs.umich.edu * teaching, education and corporate research & development.
145625Sgblack@eecs.umich.edu * Illustrative examples of commercial use are distributing products for
155625Sgblack@eecs.umich.edu * commercial advantage and providing services using the software for
165625Sgblack@eecs.umich.edu * commercial advantage.
175625Sgblack@eecs.umich.edu *
185625Sgblack@eecs.umich.edu * If you wish to use this software or functionality therein that may be
195625Sgblack@eecs.umich.edu * covered by patents for commercial use, please contact:
205625Sgblack@eecs.umich.edu *     Director of Intellectual Property Licensing
215625Sgblack@eecs.umich.edu *     Office of Strategy and Technology
225625Sgblack@eecs.umich.edu *     Hewlett-Packard Company
235625Sgblack@eecs.umich.edu *     1501 Page Mill Road
245625Sgblack@eecs.umich.edu *     Palo Alto, California  94304
255625Sgblack@eecs.umich.edu *
265625Sgblack@eecs.umich.edu * Redistributions of source code must retain the above copyright notice,
275625Sgblack@eecs.umich.edu * this list of conditions and the following disclaimer.  Redistributions
285625Sgblack@eecs.umich.edu * in binary form must reproduce the above copyright notice, this list of
295625Sgblack@eecs.umich.edu * conditions and the following disclaimer in the documentation and/or
305625Sgblack@eecs.umich.edu * other materials provided with the distribution.  Neither the name of
315625Sgblack@eecs.umich.edu * the COPYRIGHT HOLDER(s), HEWLETT-PACKARD COMPANY, nor the names of its
325625Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
335625Sgblack@eecs.umich.edu * this software without specific prior written permission.  No right of
345625Sgblack@eecs.umich.edu * sublicense is granted herewith.  Derivatives of the software and
355625Sgblack@eecs.umich.edu * output created using the software may be prepared, but only for
365625Sgblack@eecs.umich.edu * Non-Commercial Uses.  Derivatives of the software may be shared with
375625Sgblack@eecs.umich.edu * others provided: (i) the others agree to abide by the list of
385625Sgblack@eecs.umich.edu * conditions herein which includes the Non-Commercial Use restrictions;
395625Sgblack@eecs.umich.edu * and (ii) such Derivatives of the software include the above copyright
405625Sgblack@eecs.umich.edu * notice to acknowledge the contribution from this software where
415625Sgblack@eecs.umich.edu * applicable, this list of conditions and the disclaimer below.
425625Sgblack@eecs.umich.edu *
435625Sgblack@eecs.umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
445625Sgblack@eecs.umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
455625Sgblack@eecs.umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
465625Sgblack@eecs.umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
475625Sgblack@eecs.umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
485625Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
495625Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
505625Sgblack@eecs.umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
515625Sgblack@eecs.umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
525625Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
535625Sgblack@eecs.umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
545625Sgblack@eecs.umich.edu *
555625Sgblack@eecs.umich.edu * Authors: Gabe Black
565625Sgblack@eecs.umich.edu */
575625Sgblack@eecs.umich.edu
585625Sgblack@eecs.umich.edu#ifndef __ARCH_X86_BIOS_INTELMP_HH__
595625Sgblack@eecs.umich.edu#define __ARCH_X86_BIOS_INTELMP_HH__
605625Sgblack@eecs.umich.edu
615625Sgblack@eecs.umich.edu#include <string>
625625Sgblack@eecs.umich.edu#include <vector>
635625Sgblack@eecs.umich.edu
645625Sgblack@eecs.umich.edu#include "base/bitfield.hh"
655625Sgblack@eecs.umich.edu#include "sim/sim_object.hh"
665625Sgblack@eecs.umich.edu
675625Sgblack@eecs.umich.edu#include "enums/X86IntelMPAddressType.hh"
685625Sgblack@eecs.umich.edu#include "enums/X86IntelMPInterruptType.hh"
695625Sgblack@eecs.umich.edu#include "enums/X86IntelMPPolarity.hh"
705625Sgblack@eecs.umich.edu#include "enums/X86IntelMPRangeList.hh"
715625Sgblack@eecs.umich.edu#include "enums/X86IntelMPTriggerMode.hh"
725625Sgblack@eecs.umich.edu
735625Sgblack@eecs.umich.educlass FunctionalPort;
745625Sgblack@eecs.umich.edu
755625Sgblack@eecs.umich.edu// Config entry types
765625Sgblack@eecs.umich.educlass X86IntelMPBaseConfigEntryParams;
775625Sgblack@eecs.umich.educlass X86IntelMPExtConfigEntryParams;
785625Sgblack@eecs.umich.edu
795625Sgblack@eecs.umich.edu// General table structures
805625Sgblack@eecs.umich.educlass X86IntelMPConfigTableParams;
815625Sgblack@eecs.umich.educlass X86IntelMPFloatingPointerParams;
825625Sgblack@eecs.umich.edu
835625Sgblack@eecs.umich.edu// Base entry types
845625Sgblack@eecs.umich.educlass X86IntelMPBusParams;
855625Sgblack@eecs.umich.educlass X86IntelMPIOAPICParams;
865625Sgblack@eecs.umich.educlass X86IntelMPIOIntAssignmentParams;
875625Sgblack@eecs.umich.educlass X86IntelMPLocalIntAssignmentParams;
885625Sgblack@eecs.umich.educlass X86IntelMPProcessorParams;
895625Sgblack@eecs.umich.edu
905625Sgblack@eecs.umich.edu// Extended entry types
915625Sgblack@eecs.umich.educlass X86IntelMPAddrSpaceMappingParams;
925625Sgblack@eecs.umich.educlass X86IntelMPBusHierarchyParams;
935625Sgblack@eecs.umich.educlass X86IntelMPCompatAddrSpaceModParams;
945625Sgblack@eecs.umich.edu
955625Sgblack@eecs.umich.edunamespace X86ISA
965625Sgblack@eecs.umich.edu{
975625Sgblack@eecs.umich.edu
985625Sgblack@eecs.umich.edunamespace IntelMP
995625Sgblack@eecs.umich.edu{
1005625Sgblack@eecs.umich.edu
1015625Sgblack@eecs.umich.educlass FloatingPointer : public SimObject
1025625Sgblack@eecs.umich.edu{
1035625Sgblack@eecs.umich.edu  protected:
1045625Sgblack@eecs.umich.edu    typedef X86IntelMPFloatingPointerParams Params;
1055625Sgblack@eecs.umich.edu
1065625Sgblack@eecs.umich.edu    uint32_t tableAddr;
1075625Sgblack@eecs.umich.edu    uint8_t specRev;
1085625Sgblack@eecs.umich.edu    uint8_t defaultConfig;
1095625Sgblack@eecs.umich.edu    bool imcrPresent;
1105625Sgblack@eecs.umich.edu
1115625Sgblack@eecs.umich.edu    static const char signature[];
1125625Sgblack@eecs.umich.edu
1135625Sgblack@eecs.umich.edu  public:
1145625Sgblack@eecs.umich.edu
1155625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr);
1165625Sgblack@eecs.umich.edu
1175625Sgblack@eecs.umich.edu    Addr getTableAddr()
1185625Sgblack@eecs.umich.edu    {
1195625Sgblack@eecs.umich.edu        return tableAddr;
1205625Sgblack@eecs.umich.edu    }
1215625Sgblack@eecs.umich.edu
1225625Sgblack@eecs.umich.edu    void setTableAddr(Addr addr)
1235625Sgblack@eecs.umich.edu    {
1245625Sgblack@eecs.umich.edu        tableAddr = addr;
1255625Sgblack@eecs.umich.edu    }
1265625Sgblack@eecs.umich.edu
1275625Sgblack@eecs.umich.edu    FloatingPointer(Params * p);
1285625Sgblack@eecs.umich.edu};
1295625Sgblack@eecs.umich.edu
1305625Sgblack@eecs.umich.educlass BaseConfigEntry : public SimObject
1315625Sgblack@eecs.umich.edu{
1325625Sgblack@eecs.umich.edu  protected:
1335625Sgblack@eecs.umich.edu    typedef X86IntelMPBaseConfigEntryParams Params;
1345625Sgblack@eecs.umich.edu
1355625Sgblack@eecs.umich.edu    uint8_t type;
1365625Sgblack@eecs.umich.edu
1375625Sgblack@eecs.umich.edu  public:
1385625Sgblack@eecs.umich.edu
1395625Sgblack@eecs.umich.edu    virtual Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1405625Sgblack@eecs.umich.edu
1415625Sgblack@eecs.umich.edu    BaseConfigEntry(Params * p, uint8_t _type);
1425625Sgblack@eecs.umich.edu};
1435625Sgblack@eecs.umich.edu
1445625Sgblack@eecs.umich.educlass ExtConfigEntry : public SimObject
1455625Sgblack@eecs.umich.edu{
1465625Sgblack@eecs.umich.edu  protected:
1475625Sgblack@eecs.umich.edu    typedef X86IntelMPExtConfigEntryParams Params;
1485625Sgblack@eecs.umich.edu
1495625Sgblack@eecs.umich.edu    uint8_t type;
1505625Sgblack@eecs.umich.edu    uint8_t length;
1515625Sgblack@eecs.umich.edu
1525625Sgblack@eecs.umich.edu  public:
1535625Sgblack@eecs.umich.edu
1545625Sgblack@eecs.umich.edu    virtual Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1555625Sgblack@eecs.umich.edu
1565625Sgblack@eecs.umich.edu    ExtConfigEntry(Params * p, uint8_t _type, uint8_t _length);
1575625Sgblack@eecs.umich.edu};
1585625Sgblack@eecs.umich.edu
1595625Sgblack@eecs.umich.educlass ConfigTable : public SimObject
1605625Sgblack@eecs.umich.edu{
1615625Sgblack@eecs.umich.edu  protected:
1625625Sgblack@eecs.umich.edu    typedef X86IntelMPConfigTableParams Params;
1635625Sgblack@eecs.umich.edu
1645625Sgblack@eecs.umich.edu    static const char signature[];
1655625Sgblack@eecs.umich.edu
1665625Sgblack@eecs.umich.edu    uint8_t specRev;
1675625Sgblack@eecs.umich.edu    std::string oemID;
1685625Sgblack@eecs.umich.edu    std::string productID;
1695625Sgblack@eecs.umich.edu    uint32_t oemTableAddr;
1705625Sgblack@eecs.umich.edu    uint16_t oemTableSize;
1715625Sgblack@eecs.umich.edu    uint32_t localApic;
1725625Sgblack@eecs.umich.edu
1735625Sgblack@eecs.umich.edu    std::vector<BaseConfigEntry *> baseEntries;
1745625Sgblack@eecs.umich.edu    std::vector<ExtConfigEntry *> extEntries;
1755625Sgblack@eecs.umich.edu
1765625Sgblack@eecs.umich.edu  public:
1775625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr);
1785625Sgblack@eecs.umich.edu
1795625Sgblack@eecs.umich.edu    ConfigTable(Params * p);
1805625Sgblack@eecs.umich.edu};
1815625Sgblack@eecs.umich.edu
1825625Sgblack@eecs.umich.educlass Processor : public BaseConfigEntry
1835625Sgblack@eecs.umich.edu{
1845625Sgblack@eecs.umich.edu  protected:
1855625Sgblack@eecs.umich.edu    typedef X86IntelMPProcessorParams Params;
1865625Sgblack@eecs.umich.edu
1875625Sgblack@eecs.umich.edu    uint8_t localApicID;
1885625Sgblack@eecs.umich.edu    uint8_t localApicVersion;
1895625Sgblack@eecs.umich.edu    uint8_t cpuFlags;
1905625Sgblack@eecs.umich.edu    uint32_t cpuSignature;
1915625Sgblack@eecs.umich.edu    uint32_t featureFlags;
1925625Sgblack@eecs.umich.edu
1935625Sgblack@eecs.umich.edu  public:
1945625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
1955625Sgblack@eecs.umich.edu
1965625Sgblack@eecs.umich.edu    Processor(Params * p);
1975625Sgblack@eecs.umich.edu};
1985625Sgblack@eecs.umich.edu
1995625Sgblack@eecs.umich.educlass Bus : public BaseConfigEntry
2005625Sgblack@eecs.umich.edu{
2015625Sgblack@eecs.umich.edu  protected:
2025625Sgblack@eecs.umich.edu    typedef X86IntelMPBusParams Params;
2035625Sgblack@eecs.umich.edu
2045625Sgblack@eecs.umich.edu    uint8_t busID;
2055625Sgblack@eecs.umich.edu    std::string busType;
2065625Sgblack@eecs.umich.edu
2075625Sgblack@eecs.umich.edu  public:
2085625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2095625Sgblack@eecs.umich.edu
2105625Sgblack@eecs.umich.edu    Bus(Params * p);
2115625Sgblack@eecs.umich.edu};
2125625Sgblack@eecs.umich.edu
2135625Sgblack@eecs.umich.educlass IOAPIC : public BaseConfigEntry
2145625Sgblack@eecs.umich.edu{
2155625Sgblack@eecs.umich.edu  protected:
2165625Sgblack@eecs.umich.edu    typedef X86IntelMPIOAPICParams Params;
2175625Sgblack@eecs.umich.edu
2185625Sgblack@eecs.umich.edu    uint8_t id;
2195625Sgblack@eecs.umich.edu    uint8_t version;
2205625Sgblack@eecs.umich.edu    uint8_t flags;
2215625Sgblack@eecs.umich.edu    uint32_t address;
2225625Sgblack@eecs.umich.edu
2235625Sgblack@eecs.umich.edu  public:
2245625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2255625Sgblack@eecs.umich.edu
2265625Sgblack@eecs.umich.edu    IOAPIC(Params * p);
2275625Sgblack@eecs.umich.edu};
2285625Sgblack@eecs.umich.edu
2295625Sgblack@eecs.umich.educlass IntAssignment : public BaseConfigEntry
2305625Sgblack@eecs.umich.edu{
2315625Sgblack@eecs.umich.edu  protected:
2325625Sgblack@eecs.umich.edu    uint8_t interruptType;
2335625Sgblack@eecs.umich.edu
2345625Sgblack@eecs.umich.edu    uint16_t flags;
2355625Sgblack@eecs.umich.edu
2365625Sgblack@eecs.umich.edu    uint8_t sourceBusID;
2375625Sgblack@eecs.umich.edu    uint8_t sourceBusIRQ;
2385625Sgblack@eecs.umich.edu
2395625Sgblack@eecs.umich.edu    uint8_t destApicID;
2405625Sgblack@eecs.umich.edu    uint8_t destApicIntIn;
2415625Sgblack@eecs.umich.edu
2425625Sgblack@eecs.umich.edu  public:
2435625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2445625Sgblack@eecs.umich.edu
2455625Sgblack@eecs.umich.edu    IntAssignment(X86IntelMPBaseConfigEntryParams * p,
2465625Sgblack@eecs.umich.edu            Enums::X86IntelMPInterruptType _interruptType,
2475625Sgblack@eecs.umich.edu            Enums::X86IntelMPPolarity polarity,
2485625Sgblack@eecs.umich.edu            Enums::X86IntelMPTriggerMode trigger,
2495625Sgblack@eecs.umich.edu            uint8_t _type,
2505625Sgblack@eecs.umich.edu            uint8_t _sourceBusID, uint8_t _sourceBusIRQ,
2515625Sgblack@eecs.umich.edu            uint8_t _destApicID, uint8_t _destApicIntIn) :
2525625Sgblack@eecs.umich.edu        BaseConfigEntry(p, _type),
2535625Sgblack@eecs.umich.edu        interruptType(_interruptType), flags(0),
2545625Sgblack@eecs.umich.edu        sourceBusID(_sourceBusID), sourceBusIRQ(_sourceBusIRQ),
2555625Sgblack@eecs.umich.edu        destApicID(_destApicID), destApicIntIn(_destApicIntIn)
2565625Sgblack@eecs.umich.edu    {
2575625Sgblack@eecs.umich.edu        replaceBits(flags, 0, 1, polarity);
2585625Sgblack@eecs.umich.edu        replaceBits(flags, 2, 3, trigger);
2595625Sgblack@eecs.umich.edu    }
2605625Sgblack@eecs.umich.edu};
2615625Sgblack@eecs.umich.edu
2625625Sgblack@eecs.umich.educlass IOIntAssignment : public IntAssignment
2635625Sgblack@eecs.umich.edu{
2645625Sgblack@eecs.umich.edu  protected:
2655625Sgblack@eecs.umich.edu    typedef X86IntelMPIOIntAssignmentParams Params;
2665625Sgblack@eecs.umich.edu
2675625Sgblack@eecs.umich.edu  public:
2685625Sgblack@eecs.umich.edu    IOIntAssignment(Params * p);
2695625Sgblack@eecs.umich.edu};
2705625Sgblack@eecs.umich.edu
2715625Sgblack@eecs.umich.educlass LocalIntAssignment : public IntAssignment
2725625Sgblack@eecs.umich.edu{
2735625Sgblack@eecs.umich.edu  protected:
2745625Sgblack@eecs.umich.edu    typedef X86IntelMPLocalIntAssignmentParams Params;
2755625Sgblack@eecs.umich.edu
2765625Sgblack@eecs.umich.edu  public:
2775625Sgblack@eecs.umich.edu    LocalIntAssignment(Params * p);
2785625Sgblack@eecs.umich.edu};
2795625Sgblack@eecs.umich.edu
2805625Sgblack@eecs.umich.educlass AddrSpaceMapping : public ExtConfigEntry
2815625Sgblack@eecs.umich.edu{
2825625Sgblack@eecs.umich.edu  protected:
2835625Sgblack@eecs.umich.edu    typedef X86IntelMPAddrSpaceMappingParams Params;
2845625Sgblack@eecs.umich.edu
2855625Sgblack@eecs.umich.edu    uint8_t busID;
2865625Sgblack@eecs.umich.edu    uint8_t addrType;
2875625Sgblack@eecs.umich.edu    uint64_t addr;
2885625Sgblack@eecs.umich.edu    uint64_t addrLength;
2895625Sgblack@eecs.umich.edu
2905625Sgblack@eecs.umich.edu  public:
2915625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
2925625Sgblack@eecs.umich.edu
2935625Sgblack@eecs.umich.edu    AddrSpaceMapping(Params * p);
2945625Sgblack@eecs.umich.edu};
2955625Sgblack@eecs.umich.edu
2965625Sgblack@eecs.umich.educlass BusHierarchy : public ExtConfigEntry
2975625Sgblack@eecs.umich.edu{
2985625Sgblack@eecs.umich.edu  protected:
2995625Sgblack@eecs.umich.edu    typedef X86IntelMPBusHierarchyParams Params;
3005625Sgblack@eecs.umich.edu
3015625Sgblack@eecs.umich.edu    uint8_t busID;
3025625Sgblack@eecs.umich.edu    uint8_t info;
3035625Sgblack@eecs.umich.edu    uint8_t parentBus;
3045625Sgblack@eecs.umich.edu
3055625Sgblack@eecs.umich.edu  public:
3065625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
3075625Sgblack@eecs.umich.edu
3085625Sgblack@eecs.umich.edu    BusHierarchy(Params * p);
3095625Sgblack@eecs.umich.edu};
3105625Sgblack@eecs.umich.edu
3115625Sgblack@eecs.umich.educlass CompatAddrSpaceMod : public ExtConfigEntry
3125625Sgblack@eecs.umich.edu{
3135625Sgblack@eecs.umich.edu  protected:
3145625Sgblack@eecs.umich.edu    typedef X86IntelMPCompatAddrSpaceModParams Params;
3155625Sgblack@eecs.umich.edu
3165625Sgblack@eecs.umich.edu    uint8_t busID;
3175625Sgblack@eecs.umich.edu    uint8_t mod;
3185625Sgblack@eecs.umich.edu    uint32_t rangeList;
3195625Sgblack@eecs.umich.edu
3205625Sgblack@eecs.umich.edu  public:
3215625Sgblack@eecs.umich.edu    Addr writeOut(FunctionalPort * port, Addr addr, uint8_t &checkSum);
3225625Sgblack@eecs.umich.edu
3235625Sgblack@eecs.umich.edu    CompatAddrSpaceMod(Params * p);
3245625Sgblack@eecs.umich.edu};
3255625Sgblack@eecs.umich.edu
3265625Sgblack@eecs.umich.edu} //IntelMP
3275625Sgblack@eecs.umich.edu
3285625Sgblack@eecs.umich.edu} //X86ISA
3295625Sgblack@eecs.umich.edu
3305625Sgblack@eecs.umich.edu#endif
331