mmapped_ipr.hh (9180:ee8d7a51651d) | mmapped_ipr.hh (9897:e105fbf799e7) |
---|---|
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 --- 32 unchanged lines hidden (view full) --- 41#define __ARCH_X86_MMAPPEDIPR_HH__ 42 43/** 44 * @file 45 * 46 * ISA-specific helper functions for memory mapped IPR accesses. 47 */ 48 | 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 --- 32 unchanged lines hidden (view full) --- 41#define __ARCH_X86_MMAPPEDIPR_HH__ 42 43/** 44 * @file 45 * 46 * ISA-specific helper functions for memory mapped IPR accesses. 47 */ 48 |
49#include "arch/generic/mmapped_ipr.hh" |
|
49#include "arch/x86/regs/misc.hh" 50#include "cpu/base.hh" 51#include "cpu/thread_context.hh" 52#include "mem/packet.hh" 53 54namespace X86ISA 55{ 56 inline Cycles 57 handleIprRead(ThreadContext *xc, Packet *pkt) 58 { | 50#include "arch/x86/regs/misc.hh" 51#include "cpu/base.hh" 52#include "cpu/thread_context.hh" 53#include "mem/packet.hh" 54 55namespace X86ISA 56{ 57 inline Cycles 58 handleIprRead(ThreadContext *xc, Packet *pkt) 59 { |
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); 65 return Cycles(1); | 60 if (GenericISA::isGenericIprAccess(pkt)) { 61 return GenericISA::handleGenericIprRead(xc, pkt); 62 } else { 63 Addr offset = pkt->getAddr() & mask(3); 64 MiscRegIndex index = (MiscRegIndex)( 65 pkt->getAddr() / sizeof(MiscReg)); 66 MiscReg data = htog(xc->readMiscReg(index)); 67 // Make sure we don't trot off the end of data. 68 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 69 pkt->setData(((uint8_t *)&data) + offset); 70 return Cycles(1); 71 } |
66 } 67 68 inline Cycles 69 handleIprWrite(ThreadContext *xc, Packet *pkt) 70 { | 72 } 73 74 inline Cycles 75 handleIprWrite(ThreadContext *xc, Packet *pkt) 76 { |
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)); 79 return Cycles(1); | 77 if (GenericISA::isGenericIprAccess(pkt)) { 78 return GenericISA::handleGenericIprWrite(xc, pkt); 79 } else { 80 Addr offset = pkt->getAddr() & mask(3); 81 MiscRegIndex index = (MiscRegIndex)( 82 pkt->getAddr() / sizeof(MiscReg)); 83 MiscReg data; 84 data = htog(xc->readMiscRegNoEffect(index)); 85 // Make sure we don't trot off the end of data. 86 assert(offset + pkt->getSize() <= sizeof(MiscReg)); 87 pkt->writeData(((uint8_t *)&data) + offset); 88 xc->setMiscReg(index, gtoh(data)); 89 return Cycles(1); 90 } |
80 } 81} 82 83#endif // __ARCH_X86_MMAPPEDIPR_HH__ | 91 } 92} 93 94#endif // __ARCH_X86_MMAPPEDIPR_HH__ |