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