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