1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using Antmicro.Renode.Utilities; 10 11 namespace Antmicro.Renode.Core.Structure.Registers 12 { 13 [Flags] 14 public enum FieldMode 15 { 16 Read = 1 << 0, 17 Write = 1 << 1, 18 Set = 1 << 2, 19 Toggle = 1 << 3, 20 WriteOneToClear = 1 << 4, 21 WriteZeroToClear = 1 << 5, 22 ReadToClear = 1 << 6, 23 WriteZeroToSet = 1 << 7, 24 WriteZeroToToggle = 1 << 8, 25 ReadToSet = 1 << 11, 26 WriteToClear = 1 << 12 27 } 28 29 public static class FieldModeHelper 30 { IsFlagSet(this FieldMode mode, FieldMode value)31 public static bool IsFlagSet(this FieldMode mode, FieldMode value) 32 { 33 return (mode & value) != 0; 34 } 35 IsReadable(this FieldMode mode)36 public static bool IsReadable(this FieldMode mode) 37 { 38 return (mode & (FieldMode.Read | FieldMode.ReadToClear | FieldMode.ReadToSet)) != 0; 39 } 40 IsWritable(this FieldMode mode)41 public static bool IsWritable(this FieldMode mode) 42 { 43 return (mode & (FieldMode.Write | FieldMode.Set | FieldMode.Toggle | FieldMode.WriteOneToClear | FieldMode.WriteZeroToClear | 44 FieldMode.WriteZeroToSet | FieldMode.WriteZeroToToggle | FieldMode.WriteToClear)) != 0; 45 } 46 WriteBits(this FieldMode mode)47 public static FieldMode WriteBits(this FieldMode mode) 48 { 49 return mode & ~(FieldMode.Read | FieldMode.ReadToClear | FieldMode.ReadToSet); 50 } 51 ReadBits(this FieldMode mode)52 public static FieldMode ReadBits(this FieldMode mode) 53 { 54 return mode & (FieldMode.Read | FieldMode.ReadToClear | FieldMode.ReadToSet); 55 } 56 IsValid(this FieldMode mode)57 public static bool IsValid(this FieldMode mode) 58 { 59 //the assumption that write flags are exclusive is used in BusRegister logic (switch instead of ifs) 60 return !(BitHelper.GetSetBits((uint)ReadBits(mode)).Count > 1) && !(BitHelper.GetSetBits((uint)WriteBits(mode)).Count > 1); 61 } 62 } 63 } 64