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