diff --git a/chip_data/chip-data-json.md b/chip_data/chip-data-json.md
index 5918689..8f12fad 100644
--- a/chip_data/chip-data-json.md
+++ b/chip_data/chip-data-json.md
@@ -449,13 +449,15 @@
 **Important:** If a group instance is not defined in this map, the register
 simply will not be captured.
 
+---
+
 ## 10) Operation Rule JSON Object
 
 The object describes the operation and register required to perform some write
 operation to a FIR. The operation to be performed is specified by the key value
 of the `op_rules` property of a Isolation Node JSON object.
 
-### 11.1) Property: `op_rule` (required, string)
+### 10.1) Property: `op_rule` (required, string)
 
 A string used to describe what action will need to be taken to write the
 indicated register.
@@ -467,7 +469,7 @@
 | `read_set_write`   | Read, modify, write indicated reg to set a bit          |
 | `read_clear_write` | Read, modify, write indicated reg to clear a bit        |
 
-### 11.2) Property: `reg_name` (required, string)
+### 10.2) Property: `reg_name` (required, string)
 
 A string used to indicate the register to be written to perform the desired
 write operation to the FIR or it's mask. The name of the register should match a
@@ -475,9 +477,9 @@
 
 ---
 
-## 10) Appendix
+## 11) Appendix
 
-### 10.1) Number Formats
+### 11.1) Number Formats
 
 All numbers in the Chip Data files are unsigned integers. When possible, the
 JSON integer data type should be used for performance and file size.
@@ -486,19 +488,19 @@
 specifically for numbers that are better served to be in the hexadecimal format.
 In which case, the string value must start with '0x'.
 
-### 10.2) Number Ranges
+### 11.2) Number Ranges
 
 A number range represents consecutive ascending or descending numbers (including
 both endpoints) and are expressed using a colon (e.g. "8:15" or "15:8").
 
-### 10.3) Instance Maps
+### 11.3) Instance Maps
 
 Instance Maps are a simple JSON object mapping one type of instance to another.
 Say for example you are targeting a specific capture group instance and you want
 to capture all of the associated registers for FFDC. The Capture Register JSON
 object instance maps define how group instances map to register instances.
 
-### 10.4) Supported Chip Models and EC Levels
+### 11.4) Supported Chip Models and EC Levels
 
 | Value         | Description          |
 | ------------- | -------------------- |
@@ -508,7 +510,7 @@
 | `P10_10`      | P10 EC 1.0           |
 | `P10_20`      | P10 EC 2.0           |
 
-### 10.5) Supported Attention Types
+### 11.5) Supported Attention Types
 
 **Important:** A chip checkstop is often associated with a system checkstop,
 which is certainly true for processor chips. However, systems may, but not
@@ -523,7 +525,7 @@
 | `SP_ATTN`   | SW or HW event requiring action by the SP firmware.    |
 | `HOST_ATTN` | SW or HW event requiring action by the host firmware.  |
 
-### 10.6) Supported Register Types
+### 11.6) Supported Register Types
 
 - POWER Systems SCOM register (default)
 
@@ -538,7 +540,7 @@
   - Register length: 8 bytes
   - Bit order: ascending (0-63, left to right)
 
-### 10.7) Supported Register Access Types
+### 11.7) Supported Register Access Types
 
 | Value | Description                     |
 | ----- | ------------------------------- |
diff --git a/chip_data/pyprd/chip_data/binary.py b/chip_data/pyprd/chip_data/binary.py
index cbd281d..ce0307d 100644
--- a/chip_data/pyprd/chip_data/binary.py
+++ b/chip_data/pyprd/chip_data/binary.py
@@ -91,7 +91,18 @@
 
 
 def _op_name(name: str) -> bytes:
-    return _hash(1, name)
+    m = {"FIR_SET": 1, "FIR_CLEAR": 2, "MASK_SET": 3, "MASK_CLEAR": 4}
+    return _bin(1, m[name])
+
+
+def _op_rule(rule: str) -> bytes:
+    m = {
+        "atomic_or": 1,
+        "atomic_and": 2,
+        "read_set_write": 3,
+        "read_clear_write": 4,
+    }
+    return _bin(1, m[rule])
 
 
 def _num_op_rules(iterable: iter) -> bytes:
@@ -279,7 +290,7 @@
         data += _num_op_rules(iso_node.op_rules)
         for op_name, op_rule in sorted(iso_node.op_rules.items()):
             data += _op_name(op_name)
-            data += _op_name(op_rule.op_rule)
+            data += _op_rule(op_rule.op_rule)
             data += _reg_name(op_rule.reg_name)
 
         for node_inst in sorted(iso_node.instances):
diff --git a/src/chip_data/chip_data_binary.md b/src/chip_data/chip_data_binary.md
index 54f21bc..f26cd39 100644
--- a/src/chip_data/chip_data_binary.md
+++ b/src/chip_data/chip_data_binary.md
@@ -101,6 +101,24 @@
 the same register type expressed in this field. This will ensure there is no
 ambiguity when resolving the bitwise expressions in the isolation rules.
 
+**Version 3 and newer:**
+
+Beginning with **version 3** the chip data binary will support defining write
+operations for FIR bits. The following will be appended to the Isolation Node
+data after the number of node instances:
+
+| Bytes | Desc                  | Value/Example               |
+| :---: | :-------------------- | :-------------------------- |
+|   1   | # of write operations | Number of write ops defined |
+
+Then, each write operation will have the following data:
+
+| Bytes | Desc              | Value/Example                    |
+| :---: | :---------------- | :------------------------------- |
+|   1   | operation name ID | See appendix for supported names |
+|   1   | operation rule ID | See appendix for supported rules |
+|   3   | register ID       | See section 2 for details        |
+
 #### 3.1) Isolation Node Instances
 
 Much like a register, a node can have multiple instances. Each instance will
@@ -344,3 +362,21 @@
 |   1   | expression type = 0x14 |
 |   1   | shift value            |
 |  \*   | sub-expression         |
+
+### 4) Supported Write Operation Names
+
+| Value | Description                                |
+| :---: | :----------------------------------------- |
+|   1   | Operation to set a bit in the FIR          |
+|   2   | Operation to clear a bit in the FIR        |
+|   3   | Operation to set a bit in the FIR's mask   |
+|   4   | Operation to clear a bit in the FIR's mask |
+
+### 5) Supported Write Operation Rules
+
+| Value | Description                                          |
+| :---: | :--------------------------------------------------- |
+|   1   | Indicated reg ID is an atomic OR reg to set a bit    |
+|   2   | Indicated reg ID is an atomic AND reg to clear a bit |
+|   3   | Read, modify, write indicated reg ID to set a bit    |
+|   4   | Read, modify, write indicated reg ID to clear a bit  |
diff --git a/src/hei_types.hpp b/src/hei_types.hpp
index dc88351..665a41d 100644
--- a/src/hei_types.hpp
+++ b/src/hei_types.hpp
@@ -138,26 +138,36 @@
  * defined in the Chip Data Files.
  *
  * Values:
- *   This is a hashed value of one of the following string names:
- *   "FIR_SET", "FIR_CLEAR", "MASK_SET", "MASK_CLEAR".
+ *   The supported write operation values are listed in the enum.
  *
  * Range:
  *   This is defined as a 1-byte field in the Chip Data Files.
  */
-using OpRuleName_t = uint8_t;
+enum OpRuleName_t : uint8_t
+{
+    FIR_SET = 1,    ///< Operation to set a FIR bit
+    FIR_CLEAR = 2,  ///< Operation to clear a FIR bit
+    MASK_SET = 3,   ///< Operation to set a FIR mask bit
+    MASK_CLEAR = 4, ///< Operation to set a FIR mask bit
+};
 
 /**
  * This is used to define the type of a write operation rule for a FIR,
  * defined in the Chip Data Files.
  *
  * Values:
- *   This is a hashed value of one of the following string names:
- *   "atomic_or", "atomic_and", "read_set_write", "read_clear_write".
+ *   The supported write operation types are listed in the enum.
  *
  * Range:
  *   This is defined as a 1-byte field in the Chip Data Files.
  */
-using OpRuleType_t = uint8_t;
+enum OpRuleType_t : uint8_t
+{
+    ATOMIC_OR = 1,        ///< Indicated reg ID is an atomic OR used to write
+    ATOMIC_AND = 2,       ///< Indicated reg ID is an atomic AND used to clear
+    READ_SET_WRITE = 3,   ///< Read, set, write indicated reg ID
+    READ_CLEAR_WRITE = 4, ///< Read, clear, write indicated reg ID
+};
 
 /**
  * The hardware register attribute flags.
