/*
* Copyright (c) 2006 The Regents of The University of Michigan
+ * Copyright (c) 2010 Advanced Micro Devices, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
{ SET3(IsWrite, NeedsExclusive, IsResponse),
InvalidCmd, "WriteInvalidateResp" },
/* UpgradeReq */
- { SET4(IsInvalidate, NeedsExclusive, IsRequest, NeedsResponse),
+ { SET5(IsInvalidate, NeedsExclusive, IsUpgrade, IsRequest, NeedsResponse),
UpgradeResp, "UpgradeReq" },
+ /* SCUpgradeReq: response could be UpgradeResp or UpgradeFailResp */
+ { SET6(IsInvalidate, NeedsExclusive, IsUpgrade, IsLlsc,
+ IsRequest, NeedsResponse),
+ UpgradeResp, "SCUpgradeReq" },
/* UpgradeResp */
- { SET2(NeedsExclusive, IsResponse),
+ { SET3(NeedsExclusive, IsUpgrade, IsResponse),
InvalidCmd, "UpgradeResp" },
+ /* SCUpgradeFailReq: generates UpgradeFailResp ASAP */
+ { SET5(IsInvalidate, NeedsExclusive, IsLlsc,
+ IsRequest, NeedsResponse),
+ UpgradeFailResp, "SCUpgradeFailReq" },
+ /* UpgradeFailResp */
+ { SET2(NeedsExclusive, IsResponse),
+ InvalidCmd, "UpgradeFailResp" },
/* ReadExReq */
{ SET5(IsRead, NeedsExclusive, IsInvalidate, IsRequest, NeedsResponse),
ReadExResp, "ReadExReq" },
InvalidCmd, "ReadExResp" },
/* LoadLockedReq: note that we use plain ReadResp as response, so that
* we can also use ReadRespWithInvalidate when needed */
- { SET4(IsRead, IsLocked, IsRequest, NeedsResponse),
+ { SET4(IsRead, IsLlsc, IsRequest, NeedsResponse),
ReadResp, "LoadLockedReq" },
/* StoreCondReq */
- { SET6(IsWrite, NeedsExclusive, IsLocked,
+ { SET6(IsWrite, NeedsExclusive, IsLlsc,
IsRequest, NeedsResponse, HasData),
StoreCondResp, "StoreCondReq" },
+ /* StoreCondFailReq: generates failing StoreCondResp ASAP */
+ { SET6(IsWrite, NeedsExclusive, IsLlsc,
+ IsRequest, NeedsResponse, HasData),
+ StoreCondResp, "StoreCondFailReq" },
/* StoreCondResp */
- { SET4(IsWrite, NeedsExclusive, IsLocked, IsResponse),
+ { SET4(IsWrite, NeedsExclusive, IsLlsc, IsResponse),
InvalidCmd, "StoreCondResp" },
/* SwapReq -- for Swap ldstub type operations */
{ SET6(IsRead, IsWrite, NeedsExclusive, IsRequest, HasData, NeedsResponse),
InvalidCmd, "SwapResp" },
/* IntReq -- for interrupts */
{ SET4(IsWrite, IsRequest, NeedsResponse, HasData),
- MessageReq, "MessageReq" },
+ MessageResp, "MessageReq" },
/* IntResp -- for interrupts */
- { SET2(IsWrite, IsResponse), MessageResp, "MessageResp" },
+ { SET2(IsWrite, IsResponse), InvalidCmd, "MessageResp" },
/* NetworkNackError -- nacked at network layer (not by protocol) */
{ SET2(IsResponse, IsError), InvalidCmd, "NetworkNackError" },
/* InvalidDestError -- packet dest field invalid */
if (func_start >= val_start && func_end <= val_end) {
allocate();
memcpy(getPtr<uint8_t>(), data + offset, getSize());
- makeResponse();
return true;
} else {
// In this case the timing packet only partially satisfies