mmapped_ipr.hh (8105:906864dd0937) | mmapped_ipr.hh (8768:314eb1e2fa94) |
---|---|
1/* 2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42 43/** 44 * @file 45 * 46 * ISA-specific helper functions for memory mapped IPR accesses. 47 */ 48 49#include "arch/x86/regs/misc.hh" | 1/* 2 * Copyright (c) 2007-2008 The Hewlett-Packard Development Company 3 * All rights reserved. 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software --- 33 unchanged lines hidden (view full) --- 42 43/** 44 * @file 45 * 46 * ISA-specific helper functions for memory mapped IPR accesses. 47 */ 48 49#include "arch/x86/regs/misc.hh" |
50#include "config/full_system.hh" | |
51#include "cpu/base.hh" 52#include "cpu/thread_context.hh" 53#include "mem/packet.hh" 54 55namespace X86ISA 56{ 57 inline Tick 58 handleIprRead(ThreadContext *xc, Packet *pkt) 59 { | 50#include "cpu/base.hh" 51#include "cpu/thread_context.hh" 52#include "mem/packet.hh" 53 54namespace X86ISA 55{ 56 inline Tick 57 handleIprRead(ThreadContext *xc, Packet *pkt) 58 { |
60#if !FULL_SYSTEM 61 panic("Shouldn't have a memory mapped register in SE\n"); 62#else | |
63 Addr offset = pkt->getAddr() & mask(3); 64 MiscRegIndex index = (MiscRegIndex)(pkt->getAddr() / sizeof(MiscReg)); 65 MiscReg data = htog(xc->readMiscReg(index)); 66 // Make sure we don't trot off the end of data. 67 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 68 pkt->setData(((uint8_t *)&data) + offset); | 59 Addr offset = pkt->getAddr() & mask(3); 60 MiscRegIndex index = (MiscRegIndex)(pkt->getAddr() / sizeof(MiscReg)); 61 MiscReg data = htog(xc->readMiscReg(index)); 62 // Make sure we don't trot off the end of data. 63 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 64 pkt->setData(((uint8_t *)&data) + offset); |
69#endif | |
70 return xc->getCpuPtr()->ticks(1); 71 } 72 73 inline Tick 74 handleIprWrite(ThreadContext *xc, Packet *pkt) 75 { | 65 return xc->getCpuPtr()->ticks(1); 66 } 67 68 inline Tick 69 handleIprWrite(ThreadContext *xc, Packet *pkt) 70 { |
76#if !FULL_SYSTEM 77 panic("Shouldn't have a memory mapped register in SE\n"); 78#else | |
79 Addr offset = pkt->getAddr() & mask(3); 80 MiscRegIndex index = (MiscRegIndex)(pkt->getAddr() / sizeof(MiscReg)); 81 MiscReg data; 82 data = htog(xc->readMiscRegNoEffect(index)); 83 // Make sure we don't trot off the end of data. 84 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 85 pkt->writeData(((uint8_t *)&data) + offset); 86 xc->setMiscReg(index, gtoh(data)); | 71 Addr offset = pkt->getAddr() & mask(3); 72 MiscRegIndex index = (MiscRegIndex)(pkt->getAddr() / sizeof(MiscReg)); 73 MiscReg data; 74 data = htog(xc->readMiscRegNoEffect(index)); 75 // Make sure we don't trot off the end of data. 76 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 77 pkt->writeData(((uint8_t *)&data) + offset); 78 xc->setMiscReg(index, gtoh(data)); |
87#endif | |
88 return xc->getCpuPtr()->ticks(1); 89 } 90}; 91 92#endif // __ARCH_X86_MMAPPEDIPR_HH__ | 79 return xc->getCpuPtr()->ticks(1); 80 } 81}; 82 83#endif // __ARCH_X86_MMAPPEDIPR_HH__ |