i82094aa.hh revision 5643
111794Sbrandon.potter@amd.com/* 211794Sbrandon.potter@amd.com * Copyright (c) 2008 The Regents of The University of Michigan 311794Sbrandon.potter@amd.com * All rights reserved. 411794Sbrandon.potter@amd.com * 511794Sbrandon.potter@amd.com * Redistribution and use in source and binary forms, with or without 611794Sbrandon.potter@amd.com * modification, are permitted provided that the following conditions are 711794Sbrandon.potter@amd.com * met: redistributions of source code must retain the above copyright 811794Sbrandon.potter@amd.com * notice, this list of conditions and the following disclaimer; 911794Sbrandon.potter@amd.com * redistributions in binary form must reproduce the above copyright 1011794Sbrandon.potter@amd.com * notice, this list of conditions and the following disclaimer in the 1111794Sbrandon.potter@amd.com * documentation and/or other materials provided with the distribution; 1211794Sbrandon.potter@amd.com * neither the name of the copyright holders nor the names of its 1311794Sbrandon.potter@amd.com * contributors may be used to endorse or promote products derived from 1411794Sbrandon.potter@amd.com * this software without specific prior written permission. 1511794Sbrandon.potter@amd.com * 1611794Sbrandon.potter@amd.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1711794Sbrandon.potter@amd.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1811794Sbrandon.potter@amd.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1911794Sbrandon.potter@amd.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2011794Sbrandon.potter@amd.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2111794Sbrandon.potter@amd.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2211794Sbrandon.potter@amd.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2311794Sbrandon.potter@amd.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2411794Sbrandon.potter@amd.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2511794Sbrandon.potter@amd.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2611794Sbrandon.potter@amd.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2711794Sbrandon.potter@amd.com * 2811794Sbrandon.potter@amd.com * Authors: Gabe Black 2911794Sbrandon.potter@amd.com */ 3011794Sbrandon.potter@amd.com 3111794Sbrandon.potter@amd.com#ifndef __DEV_X86_I82094AA_HH__ 3211794Sbrandon.potter@amd.com#define __DEV_X86_I82094AA_HH__ 3311794Sbrandon.potter@amd.com 3411794Sbrandon.potter@amd.com#include "base/bitunion.hh" 3511794Sbrandon.potter@amd.com#include "base/range_map.hh" 3611794Sbrandon.potter@amd.com#include "dev/io_device.hh" 3711794Sbrandon.potter@amd.com#include "dev/x86/intdev.hh" 3811794Sbrandon.potter@amd.com#include "params/I82094AA.hh" 3911794Sbrandon.potter@amd.com 4011794Sbrandon.potter@amd.comnamespace X86ISA 4111794Sbrandon.potter@amd.com{ 4211794Sbrandon.potter@amd.com 4311794Sbrandon.potter@amd.comclass I82094AA : public PioDevice, public IntDev 4411794Sbrandon.potter@amd.com{ 4511794Sbrandon.potter@amd.com public: 4611794Sbrandon.potter@amd.com BitUnion64(RedirTableEntry) 4711794Sbrandon.potter@amd.com Bitfield<63, 32> topDW; 4811794Sbrandon.potter@amd.com Bitfield<55, 32> topReserved; 4911794Sbrandon.potter@amd.com Bitfield<31, 0> bottomDW; 5011794Sbrandon.potter@amd.com Bitfield<31, 17> bottomReserved; 5111877Sbrandon.potter@amd.com Bitfield<63, 56> dest; 5211877Sbrandon.potter@amd.com Bitfield<16> mask; 5311851Sbrandon.potter@amd.com Bitfield<15> trigger; 5411794Sbrandon.potter@amd.com Bitfield<14> remoteIRR; 5511794Sbrandon.potter@amd.com Bitfield<13> polarity; 5611794Sbrandon.potter@amd.com Bitfield<12> deliveryStatus; 5711794Sbrandon.potter@amd.com Bitfield<11> destMode; 5811794Sbrandon.potter@amd.com Bitfield<10, 8> deliveryMode; 5911794Sbrandon.potter@amd.com Bitfield<7, 0> vector; 6011794Sbrandon.potter@amd.com EndBitUnion(RedirTableEntry) 6111794Sbrandon.potter@amd.com 6211794Sbrandon.potter@amd.com protected: 6311794Sbrandon.potter@amd.com Tick latency; 6411794Sbrandon.potter@amd.com Addr pioAddr; 6511794Sbrandon.potter@amd.com 6611794Sbrandon.potter@amd.com uint8_t regSel; 6711851Sbrandon.potter@amd.com uint8_t id; 6811794Sbrandon.potter@amd.com uint8_t arbId; 6911794Sbrandon.potter@amd.com 7011794Sbrandon.potter@amd.com static const uint8_t TableSize = 24; 7111794Sbrandon.potter@amd.com // This implementation is based on version 0x11, but 0x14 avoids having 7211794Sbrandon.potter@amd.com // to deal with the arbitration and APIC bus guck. 7311794Sbrandon.potter@amd.com static const uint8_t APICVersion = 0x14; 7411794Sbrandon.potter@amd.com 7511794Sbrandon.potter@amd.com RedirTableEntry redirTable[TableSize]; 7611794Sbrandon.potter@amd.com 7711794Sbrandon.potter@amd.com public: 7811794Sbrandon.potter@amd.com typedef I82094AAParams Params; 7911794Sbrandon.potter@amd.com 8011794Sbrandon.potter@amd.com const Params * 8111794Sbrandon.potter@amd.com params() const 8211794Sbrandon.potter@amd.com { 8311794Sbrandon.potter@amd.com return dynamic_cast<const Params *>(_params); 8411794Sbrandon.potter@amd.com } 8511794Sbrandon.potter@amd.com 8611794Sbrandon.potter@amd.com I82094AA(Params *p); 8711794Sbrandon.potter@amd.com 8811794Sbrandon.potter@amd.com Tick read(PacketPtr pkt); 8911794Sbrandon.potter@amd.com Tick write(PacketPtr pkt); 9011794Sbrandon.potter@amd.com 9111794Sbrandon.potter@amd.com void addressRanges(AddrRangeList &range_list) 9211794Sbrandon.potter@amd.com { 9311794Sbrandon.potter@amd.com range_list.clear(); 9411794Sbrandon.potter@amd.com range_list.push_back(RangeEx(pioAddr, pioAddr + 4)); 9511794Sbrandon.potter@amd.com range_list.push_back(RangeEx(pioAddr + 16, pioAddr + 20)); 9611877Sbrandon.potter@amd.com } 9711877Sbrandon.potter@amd.com 9811794Sbrandon.potter@amd.com void writeReg(uint8_t offset, uint32_t value); 9911794Sbrandon.potter@amd.com uint32_t readReg(uint8_t offset); 10011794Sbrandon.potter@amd.com 10111794Sbrandon.potter@amd.com void signalInterrupt(int line); 10211794Sbrandon.potter@amd.com}; 10311794Sbrandon.potter@amd.com 10411794Sbrandon.potter@amd.com}; // namespace X86ISA 10511794Sbrandon.potter@amd.com 10611794Sbrandon.potter@amd.com#endif //__DEV_X86_SOUTH_BRIDGE_I8254_HH__ 10711794Sbrandon.potter@amd.com