56,57d55
< friend class Packet;
<
100a99,102
> /** These flags are *not* cleared when a Request object is reused
> (assigned a new address). */
> static const FlagsType STICKY_FLAGS = INST_READ;
>
102,103c104,105
< static const FlagsType PUBLIC_FLAGS = 0x00FFFFFF;
< static const FlagsType PRIVATE_FLAGS = 0xFF000000;
---
> typedef uint8_t PrivateFlagsType;
> typedef ::Flags<PrivateFlagsType> PrivateFlags;
106c108
< static const FlagsType VALID_SIZE = 0x01000000;
---
> static const PrivateFlagsType VALID_SIZE = 0x00000001;
108c110
< static const FlagsType VALID_PADDR = 0x02000000;
---
> static const PrivateFlagsType VALID_PADDR = 0x00000002;
110c112
< static const FlagsType VALID_VADDR = 0x04000000;
---
> static const PrivateFlagsType VALID_VADDR = 0x00000004;
112c114
< static const FlagsType VALID_PC = 0x10000000;
---
> static const PrivateFlagsType VALID_PC = 0x00000010;
114,115c116,117
< static const FlagsType VALID_CONTEXT_ID = 0x20000000;
< static const FlagsType VALID_THREAD_ID = 0x40000000;
---
> static const PrivateFlagsType VALID_CONTEXT_ID = 0x00000020;
> static const PrivateFlagsType VALID_THREAD_ID = 0x00000040;
117c119
< static const FlagsType VALID_EXTRA_DATA = 0x80000000;
---
> static const PrivateFlagsType VALID_EXTRA_DATA = 0x00000080;
118a121,125
> /** These flags are *not* cleared when a Request object is reused
> (assigned a new address). */
> static const PrivateFlagsType STICKY_PRIVATE_FLAGS =
> VALID_CONTEXT_ID | VALID_THREAD_ID;
>
135a143,145
> /** Private flags for field validity checking. */
> PrivateFlags privateFlags;
>
180d189
< setThreadContext(cid, tid);
181a191
> setThreadContext(cid, tid);
194c204
< flags.set(VALID_CONTEXT_ID|VALID_THREAD_ID);
---
> privateFlags.set(VALID_CONTEXT_ID|VALID_THREAD_ID);
209,211c219,222
< flags.set(VALID_PADDR|VALID_SIZE);
< flags.clear(VALID_VADDR|VALID_PC|VALID_EXTRA_DATA|MMAPED_IPR);
< flags.update(_flags, PUBLIC_FLAGS);
---
> flags.clear(~STICKY_FLAGS);
> flags.set(_flags);
> privateFlags.clear(~STICKY_PRIVATE_FLAGS);
> privateFlags.set(VALID_PADDR|VALID_SIZE);
224a236
> flags = _flags;
228,230c240,243
< flags.set(VALID_VADDR|VALID_SIZE|VALID_PC);
< flags.clear(VALID_PADDR|VALID_EXTRA_DATA|MMAPED_IPR);
< flags.update(_flags, PUBLIC_FLAGS);
---
> flags.clear(~STICKY_FLAGS);
> flags.set(_flags);
> privateFlags.clear(~STICKY_PRIVATE_FLAGS);
> privateFlags.set(VALID_VADDR|VALID_SIZE|VALID_PC);
242c255
< assert(flags.isSet(VALID_VADDR));
---
> assert(privateFlags.isSet(VALID_VADDR));
244c257
< flags.set(VALID_PADDR);
---
> privateFlags.set(VALID_PADDR);
253,254c266,267
< assert(flags.isSet(VALID_VADDR));
< assert(flags.noneSet(VALID_PADDR));
---
> assert(privateFlags.isSet(VALID_VADDR));
> assert(privateFlags.noneSet(VALID_PADDR));
267a281,286
> bool
> hasPaddr()
> {
> return privateFlags.isSet(VALID_PADDR);
> }
>
271c290
< assert(flags.isSet(VALID_PADDR));
---
> assert(privateFlags.isSet(VALID_PADDR));
277a297,302
> bool
> hasSize()
> {
> return privateFlags.isSet(VALID_SIZE);
> }
>
281c306
< assert(flags.isSet(VALID_SIZE));
---
> assert(privateFlags.isSet(VALID_SIZE));
289c314
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
---
> assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
293,299d317
< void
< setTime(Tick when)
< {
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< time = when;
< }
<
304,305c322,323
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< return flags & PUBLIC_FLAGS;
---
> assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
> return flags;
308,324d325
< Flags
< anyFlags(Flags _flags)
< {
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< assert(_flags.noneSet(~PUBLIC_FLAGS));
< return flags.isSet(_flags);
< }
<
< Flags
< allFlags(Flags _flags)
< {
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< assert(_flags.noneSet(~PUBLIC_FLAGS));
< return flags.allSet(_flags);
< }
<
< /** Accessor for flags. */
328,329c329
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< assert(_flags.noneSet(~PUBLIC_FLAGS));
---
> assert(privateFlags.isSet(VALID_PADDR|VALID_VADDR));
333,347d332
< void
< clearFlags(Flags _flags)
< {
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< assert(_flags.noneSet(~PUBLIC_FLAGS));
< flags.clear(_flags);
< }
<
< void
< clearFlags()
< {
< assert(flags.isSet(VALID_PADDR|VALID_VADDR));
< flags.clear(PUBLIC_FLAGS);
< }
<
352c337
< assert(flags.isSet(VALID_VADDR));
---
> assert(privateFlags.isSet(VALID_VADDR));
360c345
< assert(flags.isSet(VALID_VADDR));
---
> assert(privateFlags.isSet(VALID_VADDR));
368c353
< assert(flags.isSet(VALID_VADDR));
---
> assert(privateFlags.isSet(VALID_VADDR));
372,380c357
< /** Accessor function for asi.*/
< void
< setAsi(uint8_t a)
< {
< assert(flags.isSet(VALID_VADDR));
< flags.update(a, ASI_BITS);
< }
<
< /** Accessor function for asi.*/
---
> /** Accessor function for MMAPED_IPR flag. */
384c361
< assert(flags.isSet(VALID_PADDR));
---
> assert(privateFlags.isSet(VALID_PADDR));
388d364
< /** Accessor function for asi.*/
400c376
< return flags.isSet(VALID_EXTRA_DATA);
---
> return privateFlags.isSet(VALID_EXTRA_DATA);
407c383
< assert(flags.isSet(VALID_EXTRA_DATA));
---
> assert(privateFlags.isSet(VALID_EXTRA_DATA));
416c392
< flags.set(VALID_EXTRA_DATA);
---
> privateFlags.set(VALID_EXTRA_DATA);
422c398
< return flags.isSet(VALID_CONTEXT_ID);
---
> return privateFlags.isSet(VALID_CONTEXT_ID);
429c405
< assert(flags.isSet(VALID_CONTEXT_ID));
---
> assert(privateFlags.isSet(VALID_CONTEXT_ID));
437c413
< assert(flags.isSet(VALID_THREAD_ID));
---
> assert(privateFlags.isSet(VALID_THREAD_ID));
444c420
< return flags.isSet(VALID_PC);
---
> return privateFlags.isSet(VALID_PC);
451c427
< assert(flags.isSet(VALID_PC));
---
> assert(privateFlags.isSet(VALID_PC));