packet.hh (10660:87f7b5a07584) | packet.hh (10694:1a6785e37d81) |
---|---|
1/* | 1/* |
2 * Copyright (c) 2012-2014 ARM Limited | 2 * Copyright (c) 2012-2015 ARM Limited |
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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 297 unchanged lines hidden (view full) --- 308 * functional read. 309 */ 310 uint16_t bytesValidStart; 311 uint16_t bytesValidEnd; 312 313 public: 314 315 /** | 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 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 297 unchanged lines hidden (view full) --- 308 * functional read. 309 */ 310 uint16_t bytesValidStart; 311 uint16_t bytesValidEnd; 312 313 public: 314 315 /** |
316 * The extra delay from seeing the packet until the first word is | 316 * The extra delay from seeing the packet until the header is |
317 * transmitted. This delay is used to communicate the crossbar 318 * forwarding latency to the neighbouring object (e.g. a cache) 319 * that actually makes the packet wait. As the delay is relative, 320 * a 32-bit unsigned should be sufficient. 321 */ | 317 * transmitted. This delay is used to communicate the crossbar 318 * forwarding latency to the neighbouring object (e.g. a cache) 319 * that actually makes the packet wait. As the delay is relative, 320 * a 32-bit unsigned should be sufficient. 321 */ |
322 uint32_t firstWordDelay; | 322 uint32_t headerDelay; |
323 324 /** | 323 324 /** |
325 * The extra pipelining delay from seeing the packet until the 326 * last word is transmitted by the component that provided it (if 327 * any). This includes the first word delay. Similar to the first 328 * word delay, this is used to make up for the fact that the | 325 * The extra pipelining delay from seeing the packet until the end of 326 * payload is transmitted by the component that provided it (if 327 * any). This includes the header delay. Similar to the header 328 * delay, this is used to make up for the fact that the |
329 * crossbar does not make the packet wait. As the delay is 330 * relative, a 32-bit unsigned should be sufficient. 331 */ | 329 * crossbar does not make the packet wait. As the delay is 330 * relative, a 32-bit unsigned should be sufficient. 331 */ |
332 uint32_t lastWordDelay; | 332 uint32_t payloadDelay; |
333 334 /** 335 * A virtual base opaque structure used to hold state associated 336 * with the packet (e.g., an MSHR), specific to a MemObject that 337 * sees the packet. A pointer to this state is returned in the 338 * packet's response so that the MemObject in question can quickly 339 * look up the state needed to process it. A specific subclass 340 * would be derived from this to carry state specific to a --- 228 unchanged lines hidden (view full) --- 569 /** 570 * Constructor. Note that a Request object must be constructed 571 * first, but the Requests's physical address and size fields need 572 * not be valid. The command must be supplied. 573 */ 574 Packet(const RequestPtr _req, MemCmd _cmd) 575 : cmd(_cmd), req(_req), data(nullptr), addr(0), _isSecure(false), 576 size(0), bytesValidStart(0), bytesValidEnd(0), | 333 334 /** 335 * A virtual base opaque structure used to hold state associated 336 * with the packet (e.g., an MSHR), specific to a MemObject that 337 * sees the packet. A pointer to this state is returned in the 338 * packet's response so that the MemObject in question can quickly 339 * look up the state needed to process it. A specific subclass 340 * would be derived from this to carry state specific to a --- 228 unchanged lines hidden (view full) --- 569 /** 570 * Constructor. Note that a Request object must be constructed 571 * first, but the Requests's physical address and size fields need 572 * not be valid. The command must be supplied. 573 */ 574 Packet(const RequestPtr _req, MemCmd _cmd) 575 : cmd(_cmd), req(_req), data(nullptr), addr(0), _isSecure(false), 576 size(0), bytesValidStart(0), bytesValidEnd(0), |
577 firstWordDelay(0), lastWordDelay(0), | 577 headerDelay(0), payloadDelay(0), |
578 senderState(NULL) 579 { 580 if (req->hasPaddr()) { 581 addr = req->getPaddr(); 582 flags.set(VALID_ADDR); 583 _isSecure = req->isSecure(); 584 } 585 if (req->hasSize()) { --- 5 unchanged lines hidden (view full) --- 591 /** 592 * Alternate constructor if you are trying to create a packet with 593 * a request that is for a whole block, not the address from the 594 * req. this allows for overriding the size/addr of the req. 595 */ 596 Packet(const RequestPtr _req, MemCmd _cmd, int _blkSize) 597 : cmd(_cmd), req(_req), data(nullptr), addr(0), _isSecure(false), 598 bytesValidStart(0), bytesValidEnd(0), | 578 senderState(NULL) 579 { 580 if (req->hasPaddr()) { 581 addr = req->getPaddr(); 582 flags.set(VALID_ADDR); 583 _isSecure = req->isSecure(); 584 } 585 if (req->hasSize()) { --- 5 unchanged lines hidden (view full) --- 591 /** 592 * Alternate constructor if you are trying to create a packet with 593 * a request that is for a whole block, not the address from the 594 * req. this allows for overriding the size/addr of the req. 595 */ 596 Packet(const RequestPtr _req, MemCmd _cmd, int _blkSize) 597 : cmd(_cmd), req(_req), data(nullptr), addr(0), _isSecure(false), 598 bytesValidStart(0), bytesValidEnd(0), |
599 firstWordDelay(0), lastWordDelay(0), | 599 headerDelay(0), payloadDelay(0), |
600 senderState(NULL) 601 { 602 if (req->hasPaddr()) { 603 addr = req->getPaddr() & ~(_blkSize - 1); 604 flags.set(VALID_ADDR); 605 _isSecure = req->isSecure(); 606 } 607 size = _blkSize; --- 8 unchanged lines hidden (view full) --- 616 * packet should allocate its own data. 617 */ 618 Packet(PacketPtr pkt, bool clear_flags, bool alloc_data) 619 : cmd(pkt->cmd), req(pkt->req), 620 data(nullptr), 621 addr(pkt->addr), _isSecure(pkt->_isSecure), size(pkt->size), 622 bytesValidStart(pkt->bytesValidStart), 623 bytesValidEnd(pkt->bytesValidEnd), | 600 senderState(NULL) 601 { 602 if (req->hasPaddr()) { 603 addr = req->getPaddr() & ~(_blkSize - 1); 604 flags.set(VALID_ADDR); 605 _isSecure = req->isSecure(); 606 } 607 size = _blkSize; --- 8 unchanged lines hidden (view full) --- 616 * packet should allocate its own data. 617 */ 618 Packet(PacketPtr pkt, bool clear_flags, bool alloc_data) 619 : cmd(pkt->cmd), req(pkt->req), 620 data(nullptr), 621 addr(pkt->addr), _isSecure(pkt->_isSecure), size(pkt->size), 622 bytesValidStart(pkt->bytesValidStart), 623 bytesValidEnd(pkt->bytesValidEnd), |
624 firstWordDelay(pkt->firstWordDelay), 625 lastWordDelay(pkt->lastWordDelay), | 624 headerDelay(pkt->headerDelay), 625 payloadDelay(pkt->payloadDelay), |
626 senderState(pkt->senderState) 627 { 628 if (!clear_flags) 629 flags.set(pkt->flags & COPY_FLAGS); 630 631 flags.set(pkt->flags & (VALID_ADDR|VALID_SIZE)); 632 633 // should we allocate space for data, or not, the express --- 344 unchanged lines hidden --- | 626 senderState(pkt->senderState) 627 { 628 if (!clear_flags) 629 flags.set(pkt->flags & COPY_FLAGS); 630 631 flags.set(pkt->flags & (VALID_ADDR|VALID_SIZE)); 632 633 // should we allocate space for data, or not, the express --- 344 unchanged lines hidden --- |