[dif/gpio] migrate srcs to use autogen'd IRQ DIFs

This partially addresses #8142.

Signed-off-by: Timothy Trippel <ttrippel@google.com>
diff --git a/sw/device/boot_rom/bootstrap.c b/sw/device/boot_rom/bootstrap.c
index d84f3f8..6f442fb 100644
--- a/sw/device/boot_rom/bootstrap.c
+++ b/sw/device/boot_rom/bootstrap.c
@@ -38,12 +38,11 @@
 
   // Initialize GPIO device.
   dif_gpio_t gpio;
-  dif_gpio_params_t gpio_params = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR)};
-  CHECK(dif_gpio_init(gpio_params, &gpio) == kDifGpioOk);
+  CHECK(dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
+                      &gpio) == kDifOk);
 
   dif_gpio_state_t gpio_in;
-  CHECK(dif_gpio_read_all(&gpio, &gpio_in) == kDifGpioOk);
+  CHECK(dif_gpio_read_all(&gpio, &gpio_in) == kDifOk);
   return (gpio_in & GPIO_BOOTSTRAP_BIT_MASK) != 0;
 }
 
diff --git a/sw/device/examples/demos.c b/sw/device/examples/demos.c
index bb5db56..802f9e2 100644
--- a/sw/device/examples/demos.c
+++ b/sw/device/examples/demos.c
@@ -18,12 +18,12 @@
   LOG_INFO("Watch the LEDs!");
 
   // Give a LED pattern as startup indicator for 5 seconds.
-  CHECK(dif_gpio_write_all(gpio, 0xff00) == kDifGpioOk);
+  CHECK(dif_gpio_write_all(gpio, 0xff00) == kDifOk);
   for (int i = 0; i < 32; ++i) {
     usleep(5 * 1000);  // 5 ms
-    CHECK(dif_gpio_write(gpio, 8 + (i % 8), (i / 8) % 2) == kDifGpioOk);
+    CHECK(dif_gpio_write(gpio, 8 + (i % 8), (i / 8) % 2) == kDifOk);
   }
-  CHECK(dif_gpio_write_all(gpio, 0x0000) == kDifGpioOk);  // All LEDs off.
+  CHECK(dif_gpio_write_all(gpio, 0x0000) == kDifOk);  // All LEDs off.
 }
 
 /**
@@ -39,7 +39,7 @@
 
 uint32_t demo_gpio_to_log_echo(dif_gpio_t *gpio, uint32_t prev_gpio_state) {
   uint32_t gpio_state;
-  CHECK(dif_gpio_read_all(gpio, &gpio_state) == kDifGpioOk);
+  CHECK(dif_gpio_read_all(gpio, &gpio_state) == kDifOk);
   gpio_state &= kGpioMask;
 
   uint32_t state_delta = prev_gpio_state ^ gpio_state;
@@ -86,6 +86,6 @@
     uint8_t rcv_char;
     CHECK(dif_uart_bytes_receive(uart, 1, &rcv_char, NULL) == kDifOk);
     CHECK(dif_uart_byte_send_polled(uart, rcv_char) == kDifOk);
-    CHECK(dif_gpio_write_all(gpio, rcv_char << 8) == kDifGpioOk);
+    CHECK(dif_gpio_write_all(gpio, rcv_char << 8) == kDifOk);
   }
 }
diff --git a/sw/device/examples/hello_usbdev/hello_usbdev.c b/sw/device/examples/hello_usbdev/hello_usbdev.c
index 576ec67..0c808c5 100644
--- a/sw/device/examples/hello_usbdev/hello_usbdev.c
+++ b/sw/device/examples/hello_usbdev/hello_usbdev.c
@@ -137,12 +137,10 @@
                       .tx_fifo_len = kDifSpiDeviceBufferLen / 2,
                   }) == kDifSpiDeviceOk);
 
-  dif_gpio_params_t gpio_params = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
-  };
-  CHECK(dif_gpio_init(gpio_params, &gpio) == kDifGpioOk);
+  CHECK(dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
+                      &gpio) == kDifOk);
   // Enable GPIO: 0-7 and 16 is input; 8-15 is output.
-  CHECK(dif_gpio_output_set_enabled_all(&gpio, 0x0ff00) == kDifGpioOk);
+  CHECK(dif_gpio_output_set_enabled_all(&gpio, 0x0ff00) == kDifOk);
 
   LOG_INFO("Hello, USB!");
   LOG_INFO("Built at: " __DATE__ ", " __TIME__);
@@ -153,7 +151,7 @@
   // simulation has finished all of the printing, which takes a while
   // if `--trace` was passed in.
   uint32_t gpio_state;
-  CHECK(dif_gpio_read_all(&gpio, &gpio_state) == kDifGpioOk);
+  CHECK(dif_gpio_read_all(&gpio, &gpio_state) == kDifOk);
   bool pinflip = gpio_state & kPinflipMask ? true : false;
   bool differential = gpio_state & kDiffMask ? true : false;
   bool uphy = gpio_state & kUPhyMask ? true : false;
@@ -189,7 +187,7 @@
       CHECK(dif_uart_bytes_receive(&uart, 1, &rcv_char, NULL) == kDifOk);
       CHECK(dif_uart_byte_send_polled(&uart, rcv_char) == kDifOk);
 
-      CHECK(dif_gpio_write_all(&gpio, rcv_char << 8) == kDifGpioOk);
+      CHECK(dif_gpio_write_all(&gpio, rcv_char << 8) == kDifOk);
 
       if (rcv_char == '/') {
         uint32_t usb_irq_state =
diff --git a/sw/device/examples/hello_world/hello_world.c b/sw/device/examples/hello_world/hello_world.c
index c4c555d..593c4e9 100644
--- a/sw/device/examples/hello_world/hello_world.c
+++ b/sw/device/examples/hello_world/hello_world.c
@@ -50,12 +50,10 @@
                       .tx_fifo_len = kDifSpiDeviceBufferLen / 2,
                   }) == kDifSpiDeviceOk);
 
-  dif_gpio_params_t gpio_params = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
-  };
-  CHECK(dif_gpio_init(gpio_params, &gpio) == kDifGpioOk);
+  CHECK(dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
+                      &gpio) == kDifOk);
   // Enable GPIO: 0-7 and 16 is input; 8-15 is output.
-  CHECK(dif_gpio_output_set_enabled_all(&gpio, 0x0ff00) == kDifGpioOk);
+  CHECK(dif_gpio_output_set_enabled_all(&gpio, 0x0ff00) == kDifOk);
 
   // Add DATE and TIME because I keep fooling myself with old versions
   LOG_INFO("Hello World!");
@@ -65,7 +63,7 @@
 
   // Now have UART <-> Buttons/LEDs demo
   // all LEDs off
-  CHECK(dif_gpio_write_all(&gpio, 0x0000) == kDifGpioOk);
+  CHECK(dif_gpio_write_all(&gpio, 0x0000) == kDifOk);
   LOG_INFO("Try out the switches on the board");
   LOG_INFO("or type anything into the console window.");
   LOG_INFO("The LEDs show the ASCII code of the last character.");
diff --git a/sw/device/lib/dif/autogen/meson.build b/sw/device/lib/dif/autogen/meson.build
index 10968c7..b3f9cf5 100644
--- a/sw/device/lib/dif/autogen/meson.build
+++ b/sw/device/lib/dif/autogen/meson.build
@@ -2,6 +2,20 @@
 # Licensed under the Apache License, Version 2.0, see LICENSE for details.
 # SPDX-License-Identifier: Apache-2.0
 
+# Autogen GPIO DIF library
+sw_lib_dif_autogen_gpio = declare_dependency(
+  link_with: static_library(
+    'sw_lib_dif_autogen_gpio',
+    sources: [
+      hw_ip_gpio_reg_h,
+      'dif_gpio_autogen.c',
+    ],
+    dependencies: [
+      sw_lib_mmio,
+    ],
+  )
+)
+
 # Autogen AES DIF library
 sw_lib_dif_autogen_aes = declare_dependency(
   link_with: static_library(
diff --git a/sw/device/lib/dif/dif_base.h b/sw/device/lib/dif/dif_base.h
index c2a70d5..abe0d7a 100644
--- a/sw/device/lib/dif/dif_base.h
+++ b/sw/device/lib/dif/dif_base.h
@@ -63,13 +63,13 @@
  */
 typedef enum dif_toggle {
   /**
-   * The "enabled" state.
-   */
-  kDifToggleEnabled,
-  /**
    * The "disabled" state.
    */
-  kDifToggleDisabled,
+  kDifToggleDisabled = 0,
+  /**
+   * The "enabled" state.
+   */
+  kDifToggleEnabled = 1,
 } dif_toggle_t;
 
 #ifdef __cplusplus
diff --git a/sw/device/lib/dif/dif_gpio.c b/sw/device/lib/dif/dif_gpio.c
index 642ed7c..e0ba6a4 100644
--- a/sw/device/lib/dif/dif_gpio.c
+++ b/sw/device/lib/dif/dif_gpio.c
@@ -37,26 +37,26 @@
  * @param val Value to write.
  */
 OT_WARN_UNUSED_RESULT
-static dif_gpio_result_t gpio_masked_write(const dif_gpio_t *gpio,
-                                           ptrdiff_t reg_lower_offset,
-                                           ptrdiff_t reg_upper_offset,
-                                           uint32_t mask, uint32_t val) {
+static dif_result_t gpio_masked_write(const dif_gpio_t *gpio,
+                                      ptrdiff_t reg_lower_offset,
+                                      ptrdiff_t reg_upper_offset, uint32_t mask,
+                                      uint32_t val) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   const uint32_t mask_lower_half = mask & 0x0000FFFFu;
   const uint32_t mask_upper_half = mask & 0xFFFF0000u;
   if (mask_lower_half != 0) {
-    mmio_region_write32(gpio->params.base_addr, reg_lower_offset,
+    mmio_region_write32(gpio->base_addr, reg_lower_offset,
                         (mask_lower_half << 16) | (val & 0x0000FFFFu));
   }
   if (mask_upper_half != 0) {
-    mmio_region_write32(gpio->params.base_addr, reg_upper_offset,
+    mmio_region_write32(gpio->base_addr, reg_upper_offset,
                         mask_upper_half | ((val & 0xFFFF0000u) >> 16));
   }
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
 /**
@@ -79,12 +79,12 @@
  * @param val Value to write.
  */
 OT_WARN_UNUSED_RESULT
-static dif_gpio_result_t gpio_masked_bit_write(const dif_gpio_t *gpio,
-                                               ptrdiff_t reg_lower_offset,
-                                               ptrdiff_t reg_upper_offset,
-                                               uint32_t index, bool val) {
+static dif_result_t gpio_masked_bit_write(const dif_gpio_t *gpio,
+                                          ptrdiff_t reg_lower_offset,
+                                          ptrdiff_t reg_upper_offset,
+                                          uint32_t index, bool val) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   // Write to reg_lower_offset if the bit is in the lower half, write to
@@ -93,348 +93,195 @@
   // Since masked access writes to half of a register, index mod 16 gives the
   // index of the bit in the half-word mask.
   const uint32_t mask = index_to_mask(index % 16);
-  mmio_region_write32(gpio->params.base_addr, offset,
+  mmio_region_write32(gpio->base_addr, offset,
                       (mask << 16) | (val ? mask : 0u));
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_init(dif_gpio_params_t params, dif_gpio_t *gpio) {
+dif_result_t dif_gpio_init(mmio_region_t base_addr, dif_gpio_t *gpio) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
-  gpio->params = params;
+  gpio->base_addr = base_addr;
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_reset(const dif_gpio_t *gpio) {
+dif_result_t dif_gpio_reset(const dif_gpio_t *gpio) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   // We don't need to write to `GPIO_MASKED_OE_*` and `GPIO_MASKED_OUT_*`
   // since we directly reset `GPIO_DIRECT_OE` and `GPIO_DIRECT_OUT` below.
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_ENABLE_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr, GPIO_DIRECT_OE_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr, GPIO_DIRECT_OUT_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr,
-                      GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr,
-                      GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr,
-                      GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr,
-                      GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, 0);
-  mmio_region_write32(gpio->params.base_addr,
-                      GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_ENABLE_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_DIRECT_OE_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_DIRECT_OUT_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, 0);
+  mmio_region_write32(gpio->base_addr, GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, 0);
   // Also clear all pending interrupts
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_STATE_REG_OFFSET,
-                      0xFFFFFFFFu);
+  mmio_region_write32(gpio->base_addr, GPIO_INTR_STATE_REG_OFFSET, 0xFFFFFFFFu);
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_irq_is_pending(const dif_gpio_t *gpio,
-                                          dif_gpio_pin_t pin,
-                                          bool *is_pending) {
-  if (gpio == NULL || is_pending == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  *is_pending = mmio_region_get_bit32(gpio->params.base_addr,
-                                      GPIO_INTR_STATE_REG_OFFSET, pin);
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_is_pending_all(const dif_gpio_t *gpio,
-                                              dif_gpio_state_t *is_pending) {
-  if (gpio == NULL || is_pending == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  *is_pending =
-      mmio_region_read32(gpio->params.base_addr, GPIO_INTR_STATE_REG_OFFSET);
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_acknowledge(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin) {
+dif_result_t dif_gpio_irq_set_trigger(const dif_gpio_t *gpio,
+                                      dif_gpio_mask_t mask,
+                                      dif_gpio_irq_trigger_t trigger) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_STATE_REG_OFFSET,
-                      index_to_mask(pin));
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_get_enabled(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin,
-                                           dif_gpio_toggle_t *state) {
-  if (gpio == NULL || state == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  bool is_enabled = mmio_region_get_bit32(gpio->params.base_addr,
-                                          GPIO_INTR_ENABLE_REG_OFFSET, pin);
-  *state = is_enabled ? kDifGpioToggleEnabled : kDifGpioToggleDisabled;
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_set_enabled(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin,
-                                           dif_gpio_toggle_t state) {
-  if (gpio == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  switch (state) {
-    case kDifGpioToggleEnabled:
-      mmio_region_nonatomic_set_bit32(gpio->params.base_addr,
-                                      GPIO_INTR_ENABLE_REG_OFFSET, pin);
-      break;
-    case kDifGpioToggleDisabled:
-      mmio_region_nonatomic_clear_bit32(gpio->params.base_addr,
-                                        GPIO_INTR_ENABLE_REG_OFFSET, pin);
-      break;
-    default:
-      return kDifGpioBadArg;
-  }
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_set_enabled_masked(const dif_gpio_t *gpio,
-                                                  dif_gpio_mask_t mask,
-                                                  dif_gpio_toggle_t state) {
-  if (gpio == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  switch (state) {
-    case kDifGpioToggleEnabled:
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_ENABLE_REG_OFFSET, mask, 0);
-      break;
-    case kDifGpioToggleDisabled:
-      mmio_region_nonatomic_clear_mask32(gpio->params.base_addr,
-                                         GPIO_INTR_ENABLE_REG_OFFSET, mask, 0);
-      break;
-    default:
-      return kDifGpioBadArg;
-  }
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_force(const dif_gpio_t *gpio,
-                                     dif_gpio_pin_t pin) {
-  if (gpio == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_TEST_REG_OFFSET,
-                      index_to_mask(pin));
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_disable_all(const dif_gpio_t *gpio,
-                                           dif_gpio_state_t *snapshot) {
-  if (gpio == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  if (snapshot != NULL) {
-    *snapshot =
-        mmio_region_read32(gpio->params.base_addr, GPIO_INTR_ENABLE_REG_OFFSET);
-  }
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_ENABLE_REG_OFFSET, 0);
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_restore_all(const dif_gpio_t *gpio,
-                                           const dif_gpio_state_t *snapshot) {
-  if (gpio == NULL || snapshot == NULL) {
-    return kDifGpioBadArg;
-  }
-
-  mmio_region_write32(gpio->params.base_addr, GPIO_INTR_ENABLE_REG_OFFSET,
-                      *snapshot);
-
-  return kDifGpioOk;
-}
-
-dif_gpio_result_t dif_gpio_irq_set_trigger(const dif_gpio_t *gpio,
-                                           dif_gpio_mask_t mask,
-                                           dif_gpio_irq_trigger_t trigger) {
-  if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   // Disable all interrupt triggers for the given mask.
   mmio_region_nonatomic_clear_mask32(
-      gpio->params.base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
+      gpio->base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
   mmio_region_nonatomic_clear_mask32(
-      gpio->params.base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, mask, 0);
+      gpio->base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, mask, 0);
   mmio_region_nonatomic_clear_mask32(
-      gpio->params.base_addr, GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, mask, 0);
+      gpio->base_addr, GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, mask, 0);
   mmio_region_nonatomic_clear_mask32(
-      gpio->params.base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
+      gpio->base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
 
   switch (trigger) {
     case kDifGpioIrqTriggerEdgeRising:
       mmio_region_nonatomic_set_mask32(
-          gpio->params.base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
+          gpio->base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerEdgeFalling:
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET,
-                                       mask, 0);
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerLevelLow:
       mmio_region_nonatomic_set_mask32(
-          gpio->params.base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
+          gpio->base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerLevelHigh:
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET,
-                                       mask, 0);
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerEdgeRisingFalling:
       mmio_region_nonatomic_set_mask32(
-          gpio->params.base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET,
-                                       mask, 0);
+          gpio->base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerEdgeRisingLevelLow:
       mmio_region_nonatomic_set_mask32(
-          gpio->params.base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
+          gpio->base_addr, GPIO_INTR_CTRL_EN_RISING_REG_OFFSET, mask, 0);
       mmio_region_nonatomic_set_mask32(
-          gpio->params.base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
+          gpio->base_addr, GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, mask, 0);
       break;
     case kDifGpioIrqTriggerEdgeFallingLevelHigh:
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET,
-                                       mask, 0);
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET,
-                                       mask, 0);
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_INTR_CTRL_EN_FALLING_REG_OFFSET, mask, 0);
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, mask, 0);
       break;
     default:
-      return kDifGpioError;
+      return kDifError;
   }
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_read_all(const dif_gpio_t *gpio,
-                                    dif_gpio_state_t *state) {
+dif_result_t dif_gpio_read_all(const dif_gpio_t *gpio,
+                               dif_gpio_state_t *state) {
   if (gpio == NULL || state == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
-  *state = mmio_region_read32(gpio->params.base_addr, GPIO_DATA_IN_REG_OFFSET);
+  *state = mmio_region_read32(gpio->base_addr, GPIO_DATA_IN_REG_OFFSET);
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_read(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
-                                bool *state) {
+dif_result_t dif_gpio_read(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
+                           bool *state) {
   if (gpio == NULL || state == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
-  *state = mmio_region_get_bit32(gpio->params.base_addr,
-                                 GPIO_DATA_IN_REG_OFFSET, pin);
+  *state = mmio_region_get_bit32(gpio->base_addr, GPIO_DATA_IN_REG_OFFSET, pin);
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_write_all(const dif_gpio_t *gpio,
-                                     dif_gpio_state_t state) {
+dif_result_t dif_gpio_write_all(const dif_gpio_t *gpio,
+                                dif_gpio_state_t state) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
-  mmio_region_write32(gpio->params.base_addr, GPIO_DIRECT_OUT_REG_OFFSET,
-                      state);
+  mmio_region_write32(gpio->base_addr, GPIO_DIRECT_OUT_REG_OFFSET, state);
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_write(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
-                                 bool state) {
+dif_result_t dif_gpio_write(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
+                            bool state) {
   return gpio_masked_bit_write(gpio, GPIO_MASKED_OUT_LOWER_REG_OFFSET,
                                GPIO_MASKED_OUT_UPPER_REG_OFFSET, pin, state);
 }
 
-dif_gpio_result_t dif_gpio_write_masked(const dif_gpio_t *gpio,
-                                        dif_gpio_mask_t mask,
-                                        dif_gpio_state_t state) {
+dif_result_t dif_gpio_write_masked(const dif_gpio_t *gpio, dif_gpio_mask_t mask,
+                                   dif_gpio_state_t state) {
   return gpio_masked_write(gpio, GPIO_MASKED_OUT_LOWER_REG_OFFSET,
                            GPIO_MASKED_OUT_UPPER_REG_OFFSET, mask, state);
 }
 
-dif_gpio_result_t dif_gpio_output_set_enabled_all(const dif_gpio_t *gpio,
-                                                  dif_gpio_state_t state) {
+dif_result_t dif_gpio_output_set_enabled_all(const dif_gpio_t *gpio,
+                                             dif_gpio_state_t state) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
-  mmio_region_write32(gpio->params.base_addr, GPIO_DIRECT_OE_REG_OFFSET, state);
+  mmio_region_write32(gpio->base_addr, GPIO_DIRECT_OE_REG_OFFSET, state);
 
-  return kDifGpioOk;
+  return kDifOk;
 }
 
-dif_gpio_result_t dif_gpio_output_set_enabled(const dif_gpio_t *gpio,
-                                              dif_gpio_pin_t pin,
-                                              dif_gpio_toggle_t state) {
+dif_result_t dif_gpio_output_set_enabled(const dif_gpio_t *gpio,
+                                         dif_gpio_pin_t pin,
+                                         dif_toggle_t state) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   return gpio_masked_bit_write(gpio, GPIO_MASKED_OE_LOWER_REG_OFFSET,
                                GPIO_MASKED_OE_UPPER_REG_OFFSET, pin, state);
-
-  return kDifGpioOk;
 }
 
-dif_gpio_result_t dif_gpio_output_set_enabled_masked(const dif_gpio_t *gpio,
-                                                     dif_gpio_mask_t mask,
-                                                     dif_gpio_state_t state) {
+dif_result_t dif_gpio_output_set_enabled_masked(const dif_gpio_t *gpio,
+                                                dif_gpio_mask_t mask,
+                                                dif_gpio_state_t state) {
   return gpio_masked_write(gpio, GPIO_MASKED_OE_LOWER_REG_OFFSET,
                            GPIO_MASKED_OE_UPPER_REG_OFFSET, mask, state);
 }
 
-dif_gpio_result_t dif_gpio_input_noise_filter_set_enabled(
-    const dif_gpio_t *gpio, dif_gpio_mask_t mask, dif_gpio_toggle_t state) {
+dif_result_t dif_gpio_input_noise_filter_set_enabled(const dif_gpio_t *gpio,
+                                                     dif_gpio_mask_t mask,
+                                                     dif_toggle_t state) {
   if (gpio == NULL) {
-    return kDifGpioBadArg;
+    return kDifBadArg;
   }
 
   switch (state) {
-    case kDifGpioToggleEnabled:
-      mmio_region_nonatomic_set_mask32(gpio->params.base_addr,
-                                       GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET,
-                                       mask, 0);
+    case kDifToggleEnabled:
+      mmio_region_nonatomic_set_mask32(
+          gpio->base_addr, GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, mask, 0);
       break;
-    case kDifGpioToggleDisabled:
-      mmio_region_nonatomic_clear_mask32(gpio->params.base_addr,
-                                         GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET,
-                                         mask, 0);
+    case kDifToggleDisabled:
+      mmio_region_nonatomic_clear_mask32(
+          gpio->base_addr, GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, mask, 0);
       break;
     default:
-      return kDifGpioBadArg;
+      return kDifBadArg;
   }
 
-  return kDifGpioOk;
+  return kDifOk;
 }
diff --git a/sw/device/lib/dif/dif_gpio.h b/sw/device/lib/dif/dif_gpio.h
index f8a10d8..1a1c789 100644
--- a/sw/device/lib/dif/dif_gpio.h
+++ b/sw/device/lib/dif/dif_gpio.h
@@ -15,77 +15,15 @@
 
 #include "sw/device/lib/base/macros.h"
 #include "sw/device/lib/base/mmio.h"
+#include "sw/device/lib/dif/dif_base.h"
+
+#include "sw/device/lib/dif/autogen/dif_gpio_autogen.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif  // __cplusplus
 
 /**
- * A toggle state: enabled, or disabled.
- *
- * This enum may be used instead of a `bool` when describing an enabled/disabled
- * state.
- *
- * This enum may be used with `dif_gpio_toggle_vec_t` to set individual bits
- * within it; `dif_gpio_toggle_t`'s variants are guaranteed to be compatible
- * with `dif_gpio_toggle_vec_t`.
- */
-typedef enum dif_gpio_toggle {
-  /*
-   * The "enabled" state.
-   */
-  kDifGpioToggleEnabled = true,
-  /**
-   * The "disabled" state.
-   */
-  kDifGpioToggleDisabled = false,
-} dif_gpio_toggle_t;
-
-/**
- * Hardware instantiation parameters for GPIO.
- *
- * This struct describes information about the underlying hardware that is
- * not determined until the hardware design is used as part of a top-level
- * design.
- */
-typedef struct dif_gpio_params {
-  /**
-   * The base address for the GPIO hardware registers.
-   */
-  mmio_region_t base_addr;
-} dif_gpio_params_t;
-
-/**
- * A handle to GPIO.
- *
- * This type should be treated as opaque by users.
- */
-typedef struct dif_gpio {
-  dif_gpio_params_t params;
-} dif_gpio_t;
-
-/**
- * The result of a GPIO operation.
- */
-typedef enum dif_gpio_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifGpioOk = 0,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifGpioError = 1,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifGpioBadArg = 2,
-} dif_gpio_result_t;
-
-/**
  * A GPIO interrupt request trigger.
  *
  * Each GPIO pin has an associated interrupt that can be independently
@@ -137,12 +75,9 @@
  *
  * The Nth bit represents the state of the Nth pin.
  *
- * This type is also used as a vector of `dif_gpio_toggle_t`s, to indicate
+ * This type is also used as a vector of `dif_toggle_t`s, to indicate
  * toggle state across all 32 pins. A set bit corresponds to
  * `kDifGpioToggleEnabled`.
- *
- * It is also used with `dif_gpio_irq_disable_all()` and
- * `dif_gpio_irq_restore_all()`.
  */
 typedef uint32_t dif_gpio_state_t;
 
@@ -163,7 +98,7 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_init(dif_gpio_params_t params, dif_gpio_t *gpio);
+dif_result_t dif_gpio_init(mmio_region_t base_addr, dif_gpio_t *gpio);
 
 /**
  * Resets a GPIO device.
@@ -175,121 +110,7 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_reset(const dif_gpio_t *gpio);
-
-/**
- * Returns whether a particular pin's interrupt is currently pending.
- *
- * @param gpio A GPIO handle.
- * @param pin A GPIO pin.
- * @param[out] is_pending Out-param for whether the interrupt is pending.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_is_pending(const dif_gpio_t *gpio,
-                                          dif_gpio_pin_t pin, bool *is_pending);
-
-/**
- * Returns a GPIO state representing which pins have interrupts enabled.
- *
- * @param gpio A GPIO handle.
- * @param[out] is_pending Out-param for which interrupts are pending.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_is_pending_all(const dif_gpio_t *gpio,
-                                              dif_gpio_state_t *is_pending);
-
-/**
- * Acknowledges a particular pin's interrupt, indicating to the hardware that it
- * has
- * been successfully serviced.
- *
- * @param gpio A GPIO handle.
- * @param pin A GPIO pin.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_acknowledge(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin);
-
-/**
- * Checks whether a particular pin's interrupt is currently enabled or disabled.
- *
- * @param gpio A GPIO handle.
- * @param pin A GPIO pin.
- * @param[out] state Out-param toggle state of the interrupt.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_get_enabled(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin,
-                                           dif_gpio_toggle_t *state);
-
-/**
- * Sets whether a particular pin's interrupt is currently enabled or disabled.
- *
- * @param gpio A GPIO handle.
- * @param pin A GPIO pin.
- * @param state The new toggle state for the interrupt.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_set_enabled(const dif_gpio_t *gpio,
-                                           dif_gpio_pin_t pin,
-                                           dif_gpio_toggle_t state);
-
-/**
- * Sets whether a particular pin's interrupt is currently enabled or disabled.
- *
- * @param gpio A GPIO handle.
- * @param mask Mask that identifies the pins whose interrupt triggers will be
- * configured.
- * @param state The new toggle state for the interrupt.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_set_enabled_masked(const dif_gpio_t *gpio,
-                                                  dif_gpio_mask_t mask,
-                                                  dif_gpio_toggle_t state);
-
-/**
- * Forces a particular pin's interrupt, causing it to be serviced as if hardware
- * had asserted it.
- *
- * @param gpio A GPIO handle.
- * @param pin A GPIO pin.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_force(const dif_gpio_t *gpio,
-                                     dif_gpio_pin_t pin);
-
-/**
- * Disables all interrupts, optionally snapshotting all toggle state for later
- * restoration.
- *
- * @param gpio A GPIO handle.
- * @param[out] snapshot Out-param for the snapshot; may be `NULL`.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_disable_all(const dif_gpio_t *gpio,
-                                           dif_gpio_state_t *snapshot);
-
-/**
- * Restores interrupts from the given snapshot.
- *
- * This function can be used with `dif_gpio_irq_disable_all()` to temporary
- * interrupt save-and-restore.
- *
- * @param gpio A GPIO handle.
- * @param snapshot A snapshot to restore from.
- * @return The result of the operation.
- */
-OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_restore_all(const dif_gpio_t *gpio,
-                                           const dif_gpio_state_t *snapshot);
+dif_result_t dif_gpio_reset(const dif_gpio_t *gpio);
 
 /**
  * Configures interrupt triggers for a set of pins.
@@ -305,9 +126,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_irq_set_trigger(const dif_gpio_t *gpio,
-                                           dif_gpio_mask_t mask,
-                                           dif_gpio_irq_trigger_t trigger);
+dif_result_t dif_gpio_irq_set_trigger(const dif_gpio_t *gpio,
+                                      dif_gpio_mask_t mask,
+                                      dif_gpio_irq_trigger_t trigger);
 
 /**
  * Reads from a pin.
@@ -322,8 +143,8 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_read(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
-                                bool *state);
+dif_result_t dif_gpio_read(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
+                           bool *state);
 
 /**
  * Reads from all pins.
@@ -337,8 +158,7 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_read_all(const dif_gpio_t *gpio,
-                                    dif_gpio_state_t *state);
+dif_result_t dif_gpio_read_all(const dif_gpio_t *gpio, dif_gpio_state_t *state);
 
 /**
  * Writes to a pin.
@@ -351,8 +171,8 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_write(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
-                                 bool state);
+dif_result_t dif_gpio_write(const dif_gpio_t *gpio, dif_gpio_pin_t pin,
+                            bool state);
 
 /**
  * Writes to all pins.
@@ -364,8 +184,7 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_write_all(const dif_gpio_t *gpio,
-                                     dif_gpio_state_t state);
+dif_result_t dif_gpio_write_all(const dif_gpio_t *gpio, dif_gpio_state_t state);
 
 /**
  * Writes to the pins identified by a mask.
@@ -378,9 +197,8 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_write_masked(const dif_gpio_t *gpio,
-                                        dif_gpio_mask_t mask,
-                                        dif_gpio_state_t state);
+dif_result_t dif_gpio_write_masked(const dif_gpio_t *gpio, dif_gpio_mask_t mask,
+                                   dif_gpio_state_t state);
 
 /**
  * Sets output enable mode of a pin.
@@ -391,9 +209,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_output_set_enabled(const dif_gpio_t *gpio,
-                                              dif_gpio_pin_t pin,
-                                              dif_gpio_toggle_t state);
+dif_result_t dif_gpio_output_set_enabled(const dif_gpio_t *gpio,
+                                         dif_gpio_pin_t pin,
+                                         dif_toggle_t state);
 
 /**
  * Sets output modes of all pins.
@@ -403,8 +221,8 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_output_set_enabled_all(const dif_gpio_t *gpio,
-                                                  dif_gpio_state_t state);
+dif_result_t dif_gpio_output_set_enabled_all(const dif_gpio_t *gpio,
+                                             dif_gpio_state_t state);
 
 /**
  * Sets the output modes of the pins identified by a mask.
@@ -415,9 +233,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_output_set_enabled_masked(const dif_gpio_t *gpio,
-                                                     dif_gpio_mask_t mask,
-                                                     dif_gpio_state_t state);
+dif_result_t dif_gpio_output_set_enabled_masked(const dif_gpio_t *gpio,
+                                                dif_gpio_mask_t mask,
+                                                dif_gpio_state_t state);
 
 /**
  * Enable noise filter for GPIO inputs.
@@ -431,8 +249,9 @@
  * @return The result of the operation.
  */
 OT_WARN_UNUSED_RESULT
-dif_gpio_result_t dif_gpio_input_noise_filter_set_enabled(
-    const dif_gpio_t *gpio, dif_gpio_mask_t mask, dif_gpio_toggle_t state);
+dif_result_t dif_gpio_input_noise_filter_set_enabled(const dif_gpio_t *gpio,
+                                                     dif_gpio_mask_t mask,
+                                                     dif_toggle_t state);
 
 #ifdef __cplusplus
 }  // extern "C"
diff --git a/sw/device/lib/dif/dif_gpio_unittest.cc b/sw/device/lib/dif/dif_gpio_unittest.cc
index 8cc7dbf..61508f4 100644
--- a/sw/device/lib/dif/dif_gpio_unittest.cc
+++ b/sw/device/lib/dif/dif_gpio_unittest.cc
@@ -23,36 +23,31 @@
 uint32_t AllOnesExcept(uint32_t index) { return ~AllZerosExcept(index); }
 
 // Base class for the test fixtures in this file.
-class DifGpioTest : public testing::Test, public mock_mmio::MmioTest {};
+class GpioTest : public testing::Test, public mock_mmio::MmioTest {};
 
 // Init tests
-class InitTest : public DifGpioTest {};
+class InitTest : public GpioTest {};
 
 TEST_F(InitTest, NullArgs) {
-  dif_gpio_params_t params{.base_addr = dev().region()};
-
-  EXPECT_EQ(dif_gpio_init(params, nullptr), kDifGpioBadArg);
+  EXPECT_EQ(dif_gpio_init(dev().region(), nullptr), kDifBadArg);
 }
 
 TEST_F(InitTest, Init) {
-  dif_gpio_params_t params{.base_addr = dev().region()};
   dif_gpio_t gpio;
-  EXPECT_EQ(dif_gpio_init(params, &gpio), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_init(dev().region(), &gpio), kDifOk);
 }
 
 // Base class for the rest of the tests in this file, provides a
 // `dif_gpio_t` instance.
-class DifGpioTestInitialized : public DifGpioTest {
+class GpioTestInitialized : public GpioTest {
  protected:
-  const dif_gpio_t gpio_ = {.params = {.base_addr = dev().region()}};
+  const dif_gpio_t gpio_ = {.base_addr = dev().region()};
 };
 
 // Reset tests
-class ResetTest : public DifGpioTestInitialized {};
+class ResetTest : public GpioTestInitialized {};
 
-TEST_F(ResetTest, NullArgs) {
-  EXPECT_EQ(dif_gpio_reset(nullptr), kDifGpioBadArg);
-}
+TEST_F(ResetTest, NullArgs) { EXPECT_EQ(dif_gpio_reset(nullptr), kDifBadArg); }
 
 TEST_F(ResetTest, Reset) {
   EXPECT_WRITE32(GPIO_INTR_ENABLE_REG_OFFSET, 0);
@@ -65,23 +60,23 @@
   EXPECT_WRITE32(GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, 0);
   EXPECT_WRITE32(GPIO_INTR_STATE_REG_OFFSET, kAllOnes);
 
-  EXPECT_EQ(dif_gpio_reset(&gpio_), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_reset(&gpio_), kDifOk);
 }
 
 // Read tests
-class ReadTest : public DifGpioTestInitialized {};
+class ReadTest : public GpioTestInitialized {};
 
 TEST_F(ReadTest, NullArgs) {
   dif_gpio_state_t out_arg_uint32_t;
   bool out_arg_bool;
 
-  EXPECT_EQ(dif_gpio_read_all(nullptr, &out_arg_uint32_t), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_read_all(&gpio_, nullptr), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_read_all(nullptr, nullptr), kDifGpioBadArg);
+  EXPECT_EQ(dif_gpio_read_all(nullptr, &out_arg_uint32_t), kDifBadArg);
+  EXPECT_EQ(dif_gpio_read_all(&gpio_, nullptr), kDifBadArg);
+  EXPECT_EQ(dif_gpio_read_all(nullptr, nullptr), kDifBadArg);
 
-  EXPECT_EQ(dif_gpio_read(nullptr, 0, &out_arg_bool), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_read(&gpio_, 0, nullptr), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_read(nullptr, 0, nullptr), kDifGpioBadArg);
+  EXPECT_EQ(dif_gpio_read(nullptr, 0, &out_arg_bool), kDifBadArg);
+  EXPECT_EQ(dif_gpio_read(&gpio_, 0, nullptr), kDifBadArg);
+  EXPECT_EQ(dif_gpio_read(nullptr, 0, nullptr), kDifBadArg);
 }
 
 TEST_F(ReadTest, AllPins) {
@@ -89,7 +84,7 @@
   EXPECT_READ32(GPIO_DATA_IN_REG_OFFSET, kVal);
 
   dif_gpio_state_t pin_values = 0;
-  EXPECT_EQ(dif_gpio_read_all(&gpio_, &pin_values), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_read_all(&gpio_, &pin_values), kDifOk);
   EXPECT_EQ(pin_values, kVal);
 }
 
@@ -101,26 +96,26 @@
       EXPECT_READ32(GPIO_DATA_IN_REG_OFFSET, reg_val);
 
       bool pin_val = !exp_pin_val;
-      EXPECT_EQ(dif_gpio_read(&gpio_, pin, &pin_val), kDifGpioOk);
+      EXPECT_EQ(dif_gpio_read(&gpio_, pin, &pin_val), kDifOk);
       EXPECT_EQ(pin_val, exp_pin_val);
     }
   }
 }
 
 // Write tests
-class WriteTest : public DifGpioTestInitialized {};
+class WriteTest : public GpioTestInitialized {};
 
 TEST_F(WriteTest, NullArgs) {
-  EXPECT_EQ(dif_gpio_write_all(nullptr, kAllOnes), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_write(nullptr, 0, true), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_write_masked(nullptr, kAllOnes, kAllOnes), kDifGpioBadArg);
+  EXPECT_EQ(dif_gpio_write_all(nullptr, kAllOnes), kDifBadArg);
+  EXPECT_EQ(dif_gpio_write(nullptr, 0, true), kDifBadArg);
+  EXPECT_EQ(dif_gpio_write_masked(nullptr, kAllOnes, kAllOnes), kDifBadArg);
 }
 
 TEST_F(WriteTest, AllPins) {
   constexpr uint32_t kVal = 0xA5A5A5A5;
   EXPECT_WRITE32(GPIO_DIRECT_OUT_REG_OFFSET, kVal);
 
-  EXPECT_EQ(dif_gpio_write_all(&gpio_, kVal), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write_all(&gpio_, kVal), kDifOk);
 }
 
 // The GPIO device provides masked bit-level atomic writes to its DIRECT_OUT
@@ -145,91 +140,89 @@
 
 TEST_F(WriteTest, SinglePin) {
   EXPECT_WRITE32(GPIO_MASKED_OUT_LOWER_REG_OFFSET, {{16, 1}, {0, 1}});
-  EXPECT_EQ(dif_gpio_write(&gpio_, 0, true), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write(&gpio_, 0, true), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OUT_LOWER_REG_OFFSET, {{31, 1}, {15, 0}});
-  EXPECT_EQ(dif_gpio_write(&gpio_, 15, false), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write(&gpio_, 15, false), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OUT_UPPER_REG_OFFSET, {{16, 1}, {0, 1}});
-  EXPECT_EQ(dif_gpio_write(&gpio_, 16, true), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write(&gpio_, 16, true), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OUT_UPPER_REG_OFFSET, {{31, 1}, {15, 0}});
-  EXPECT_EQ(dif_gpio_write(&gpio_, 31, false), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write(&gpio_, 31, false), kDifOk);
 }
 
 TEST_F(WriteTest, Masked) {
   EXPECT_WRITE32(GPIO_MASKED_OUT_LOWER_REG_OFFSET, 0xCDCD3322);
   EXPECT_WRITE32(GPIO_MASKED_OUT_UPPER_REG_OFFSET, 0xABAB5544);
-  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0xABABCDCD, 0x55443322), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0xABABCDCD, 0x55443322), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OUT_UPPER_REG_OFFSET, 0xABAB5544);
-  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0xABAB0000, 0x55443322), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0xABAB0000, 0x55443322), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OUT_LOWER_REG_OFFSET, 0xCDCD3322);
-  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0x0000CDCD, 0x55443322), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_write_masked(&gpio_, 0x0000CDCD, 0x55443322), kDifOk);
 }
 
 // Output mode tests
-class OutputModeTest : public DifGpioTestInitialized {};
+class OutputModeTest : public GpioTestInitialized {};
 
 TEST_F(OutputModeTest, NullArgs) {
-  EXPECT_EQ(dif_gpio_output_set_enabled_all(nullptr, kAllOnes), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_output_set_enabled(nullptr, 0, kDifGpioToggleEnabled),
-            kDifGpioBadArg);
+  EXPECT_EQ(dif_gpio_output_set_enabled_all(nullptr, kAllOnes), kDifBadArg);
+  EXPECT_EQ(dif_gpio_output_set_enabled(nullptr, 0, kDifToggleEnabled),
+            kDifBadArg);
   EXPECT_EQ(dif_gpio_output_set_enabled_masked(nullptr, kAllOnes, kAllOnes),
-            kDifGpioBadArg);
+            kDifBadArg);
 }
 
 TEST_F(OutputModeTest, AllPins) {
   constexpr uint32_t kVal = 0xA5A5A5A5;
   EXPECT_WRITE32(GPIO_DIRECT_OE_REG_OFFSET, kVal);
 
-  EXPECT_EQ(dif_gpio_output_set_enabled_all(&gpio_, kVal), kDifGpioOk);
+  EXPECT_EQ(dif_gpio_output_set_enabled_all(&gpio_, kVal), kDifOk);
 }
 
 TEST_F(OutputModeTest, SinglePin) {
   EXPECT_WRITE32(GPIO_MASKED_OE_LOWER_REG_OFFSET, {{16, 1}, {0, 1}});
-  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 0, kDifGpioToggleEnabled),
-            kDifGpioOk);
+  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 0, kDifToggleEnabled), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OE_LOWER_REG_OFFSET, {{31, 1}, {15, 0}});
-  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 15, kDifGpioToggleDisabled),
-            kDifGpioOk);
+  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 15, kDifToggleDisabled),
+            kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OE_UPPER_REG_OFFSET, {{16, 1}, {0, 1}});
-  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 16, kDifGpioToggleEnabled),
-            kDifGpioOk);
+  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 16, kDifToggleEnabled), kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OE_UPPER_REG_OFFSET, {{31, 1}, {15, 0}});
-  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 31, kDifGpioToggleDisabled),
-            kDifGpioOk);
+  EXPECT_EQ(dif_gpio_output_set_enabled(&gpio_, 31, kDifToggleDisabled),
+            kDifOk);
 }
 
 TEST_F(OutputModeTest, Masked) {
   EXPECT_WRITE32(GPIO_MASKED_OE_LOWER_REG_OFFSET, 0xCDCD3322);
   EXPECT_WRITE32(GPIO_MASKED_OE_UPPER_REG_OFFSET, 0xABAB5544);
   EXPECT_EQ(dif_gpio_output_set_enabled_masked(&gpio_, 0xABABCDCD, 0x55443322),
-            kDifGpioOk);
+            kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OE_LOWER_REG_OFFSET, 0xCDCD3322);
   EXPECT_EQ(dif_gpio_output_set_enabled_masked(&gpio_, 0x0000CDCD, 0x55443322),
-            kDifGpioOk);
+            kDifOk);
 
   EXPECT_WRITE32(GPIO_MASKED_OE_UPPER_REG_OFFSET, 0xABAB5544);
   EXPECT_EQ(dif_gpio_output_set_enabled_masked(&gpio_, 0xABAB0000, 0x55443322),
-            kDifGpioOk);
+            kDifOk);
 }
 
 // Input noise filter tests
-class InputFilterTest : public DifGpioTestInitialized {};
+class InputFilterTest : public GpioTestInitialized {};
 
 TEST_F(InputFilterTest, NullArgs) {
   EXPECT_EQ(dif_gpio_input_noise_filter_set_enabled(nullptr, kAllOnes,
-                                                    kDifGpioToggleEnabled),
-            kDifGpioBadArg);
+                                                    kDifToggleEnabled),
+            kDifBadArg);
   EXPECT_EQ(dif_gpio_input_noise_filter_set_enabled(nullptr, kAllOnes,
-                                                    kDifGpioToggleDisabled),
-            kDifGpioBadArg);
+                                                    kDifToggleDisabled),
+            kDifBadArg);
 }
 
 TEST_F(InputFilterTest, MaskedEnable) {
@@ -237,9 +230,9 @@
   EXPECT_READ32(GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, 0x0);
   EXPECT_WRITE32(GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, kVal);
 
-  EXPECT_EQ(dif_gpio_input_noise_filter_set_enabled(&gpio_, kVal,
-                                                    kDifGpioToggleEnabled),
-            kDifGpioOk);
+  EXPECT_EQ(
+      dif_gpio_input_noise_filter_set_enabled(&gpio_, kVal, kDifToggleEnabled),
+      kDifOk);
 }
 
 TEST_F(InputFilterTest, MaskedDisable) {
@@ -247,12 +240,12 @@
   EXPECT_READ32(GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, kAllOnes);
   EXPECT_WRITE32(GPIO_CTRL_EN_INPUT_FILTER_REG_OFFSET, ~kVal);
 
-  EXPECT_EQ(dif_gpio_input_noise_filter_set_enabled(&gpio_, kVal,
-                                                    kDifGpioToggleDisabled),
-            kDifGpioOk);
+  EXPECT_EQ(
+      dif_gpio_input_noise_filter_set_enabled(&gpio_, kVal, kDifToggleDisabled),
+      kDifOk);
 }
 
-class IrqTest : public DifGpioTestInitialized {
+class IrqTest : public GpioTestInitialized {
  protected:
   // Expectations for disabling the interrupt triggers of the pins given by
   // `pins`.
@@ -268,86 +261,6 @@
   }
 };
 
-TEST_F(IrqTest, NullArgs) {
-  EXPECT_EQ(dif_gpio_irq_force(nullptr, 0), kDifGpioBadArg);
-
-  dif_gpio_state_t out_arg_uint32_t;
-  EXPECT_EQ(dif_gpio_irq_is_pending_all(nullptr, &out_arg_uint32_t),
-            kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_irq_is_pending_all(&gpio_, nullptr), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_irq_is_pending_all(nullptr, nullptr), kDifGpioBadArg);
-
-  bool out_arg_bool;
-  EXPECT_EQ(dif_gpio_irq_is_pending(nullptr, 0, &out_arg_bool), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_irq_is_pending(&gpio_, 0, nullptr), kDifGpioBadArg);
-  EXPECT_EQ(dif_gpio_irq_is_pending(nullptr, 0, nullptr), kDifGpioBadArg);
-
-  EXPECT_EQ(dif_gpio_irq_acknowledge(nullptr, 0), kDifGpioBadArg);
-
-  EXPECT_EQ(
-      dif_gpio_irq_set_enabled_masked(nullptr, kAllOnes, kDifGpioToggleEnabled),
-      kDifGpioBadArg);
-
-  EXPECT_EQ(
-      dif_gpio_irq_set_trigger(nullptr, kAllOnes, kDifGpioIrqTriggerEdgeRising),
-      kDifGpioBadArg);
-}
-
-TEST_F(IrqTest, ForceSinglePin) {
-  for (uint32_t pin = 0; pin < 32; ++pin) {
-    EXPECT_WRITE32(GPIO_INTR_TEST_REG_OFFSET, {{pin, 1}});
-    EXPECT_EQ(dif_gpio_irq_force(&gpio_, pin), kDifGpioOk);
-  }
-}
-
-TEST_F(IrqTest, ReadAllPins) {
-  constexpr uint32_t kVal = 0xABABABAB;
-  EXPECT_READ32(GPIO_INTR_STATE_REG_OFFSET, kVal);
-  dif_gpio_state_t irq_state = 0;
-  EXPECT_EQ(dif_gpio_irq_is_pending_all(&gpio_, &irq_state), kDifGpioOk);
-  EXPECT_EQ(irq_state, kVal);
-}
-
-TEST_F(IrqTest, ReadSinglePin) {
-  for (uint32_t pin = 0; pin < 32; ++pin) {
-    for (const bool exp_irq_state : {true, false}) {
-      const uint32_t reg_val =
-          exp_irq_state ? AllZerosExcept(pin) : AllOnesExcept(pin);
-      EXPECT_READ32(GPIO_INTR_STATE_REG_OFFSET, reg_val);
-      bool irq_state = !exp_irq_state;
-      EXPECT_EQ(dif_gpio_irq_is_pending(&gpio_, pin, &irq_state), kDifGpioOk);
-      EXPECT_EQ(irq_state, exp_irq_state);
-    }
-  }
-}
-
-TEST_F(IrqTest, ClearSinglePin) {
-  for (uint32_t pin = 0; pin < 32; ++pin) {
-    EXPECT_WRITE32(GPIO_INTR_STATE_REG_OFFSET, {{pin, 1}});
-    EXPECT_EQ(dif_gpio_irq_acknowledge(&gpio_, pin), kDifGpioOk);
-  }
-}
-
-TEST_F(IrqTest, MaskedEnable) {
-  constexpr uint32_t kVal = 0xABABABAB;
-  EXPECT_READ32(GPIO_INTR_ENABLE_REG_OFFSET, 0x0);
-  EXPECT_WRITE32(GPIO_INTR_ENABLE_REG_OFFSET, kVal);
-
-  EXPECT_EQ(
-      dif_gpio_irq_set_enabled_masked(&gpio_, kVal, kDifGpioToggleEnabled),
-      kDifGpioOk);
-}
-
-TEST_F(IrqTest, MaskedDisable) {
-  constexpr uint32_t kVal = 0xABABABAB;
-  EXPECT_READ32(GPIO_INTR_ENABLE_REG_OFFSET, kAllOnes);
-  EXPECT_WRITE32(GPIO_INTR_ENABLE_REG_OFFSET, ~kVal);
-
-  EXPECT_EQ(
-      dif_gpio_irq_set_enabled_masked(&gpio_, kVal, kDifGpioToggleDisabled),
-      kDifGpioOk);
-}
-
 TEST_F(IrqTest, MaskedConfigTriggerEdgeRising) {
   SCOPED_TRACE("IrqTest.MaskedConfigTriggerEdgeRising");
   constexpr uint32_t kVal = 0xABABABAB;
@@ -357,7 +270,7 @@
 
   EXPECT_EQ(
       dif_gpio_irq_set_trigger(&gpio_, kVal, kDifGpioIrqTriggerEdgeRising),
-      kDifGpioOk);
+      kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerEdgeFalling) {
@@ -369,7 +282,7 @@
 
   EXPECT_EQ(
       dif_gpio_irq_set_trigger(&gpio_, kVal, kDifGpioIrqTriggerEdgeFalling),
-      kDifGpioOk);
+      kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerLevelLow) {
@@ -380,7 +293,7 @@
   EXPECT_WRITE32(GPIO_INTR_CTRL_EN_LVLLOW_REG_OFFSET, kVal);
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(&gpio_, kVal, kDifGpioIrqTriggerLevelLow),
-            kDifGpioOk);
+            kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerLevelHigh) {
@@ -391,7 +304,7 @@
   EXPECT_WRITE32(GPIO_INTR_CTRL_EN_LVLHIGH_REG_OFFSET, kVal);
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(&gpio_, kVal, kDifGpioIrqTriggerLevelHigh),
-            kDifGpioOk);
+            kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerEdgeRisingFalling) {
@@ -405,7 +318,7 @@
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(&gpio_, kVal,
                                      kDifGpioIrqTriggerEdgeRisingFalling),
-            kDifGpioOk);
+            kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerEdgeRisingLevelLow) {
@@ -419,7 +332,7 @@
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(&gpio_, kVal,
                                      kDifGpioIrqTriggerEdgeRisingLevelLow),
-            kDifGpioOk);
+            kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerEdgeFallingLevelHigh) {
@@ -433,7 +346,7 @@
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(&gpio_, kVal,
                                      kDifGpioIrqTriggerEdgeFallingLevelHigh),
-            kDifGpioOk);
+            kDifOk);
 }
 
 TEST_F(IrqTest, MaskedConfigTriggerGeneralError) {
@@ -443,7 +356,7 @@
 
   EXPECT_EQ(dif_gpio_irq_set_trigger(
                 &gpio_, kVal, static_cast<dif_gpio_irq_trigger_t>(kAllOnes)),
-            kDifGpioError);
+            kDifError);
 }
 
 }  // namespace
diff --git a/sw/device/lib/dif/meson.build b/sw/device/lib/dif/meson.build
index e9b7e93..476b048 100644
--- a/sw/device/lib/dif/meson.build
+++ b/sw/device/lib/dif/meson.build
@@ -161,6 +161,7 @@
     ],
     dependencies: [
       sw_lib_mmio,
+      sw_lib_dif_autogen_gpio,
     ],
   )
 )
@@ -168,9 +169,11 @@
 test('dif_gpio_unittest', executable(
     'dif_gpio_unittest',
     sources: [
-      hw_ip_gpio_reg_h,
-      meson.source_root() / 'sw/device/lib/dif/dif_gpio.c',
       'dif_gpio_unittest.cc',
+      'autogen/dif_gpio_autogen_unittest.cc',
+      meson.source_root() / 'sw/device/lib/dif/dif_gpio.c',
+      meson.source_root() / 'sw/device/lib/dif/autogen/dif_gpio_autogen.c',
+      hw_ip_gpio_reg_h,
     ],
     dependencies: [
       sw_vendor_gtest,
diff --git a/sw/device/sca/lib/sca.c b/sw/device/sca/lib/sca.c
index 093d215..ef44435 100644
--- a/sw/device/sca/lib/sca.c
+++ b/sw/device/sca/lib/sca.c
@@ -90,9 +90,8 @@
  * @param trigger Trigger source.
  */
 static void sca_init_gpio(sca_trigger_source_t trigger) {
-  dif_gpio_params_t gpio_params = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR)};
-  IGNORE_RESULT(dif_gpio_init(gpio_params, &gpio));
+  IGNORE_RESULT(
+      dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR), &gpio));
 
   uint32_t select_mask =
       bitfield_field32_write(0, kTriggerSourceBitfield, UINT32_MAX);
diff --git a/sw/device/tests/gpio_smoketest.c b/sw/device/tests/gpio_smoketest.c
index 7c9e259..e520250 100644
--- a/sw/device/tests/gpio_smoketest.c
+++ b/sw/device/tests/gpio_smoketest.c
@@ -46,10 +46,10 @@
  * @param write_val Value to write.
  */
 static void test_gpio_write(uint32_t write_val) {
-  CHECK(dif_gpio_write_all(&gpio, write_val) == kDifGpioOk);
+  CHECK(dif_gpio_write_all(&gpio, write_val) == kDifOk);
 
   uint32_t read_val = 0;
-  CHECK(dif_gpio_read_all(&gpio, &read_val) == kDifGpioOk);
+  CHECK(dif_gpio_read_all(&gpio, &read_val) == kDifOk);
 
   uint32_t expected = write_val & kGpioMask;
   uint32_t actual = read_val & kGpioMask;
@@ -63,12 +63,9 @@
  * NOTE: This test can currently run only on FPGA and DV.
  */
 bool test_main(void) {
-  CHECK(dif_gpio_init(
-            (dif_gpio_params_t){
-                .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
-            },
-            &gpio) == kDifGpioOk);
-  CHECK(dif_gpio_output_set_enabled_all(&gpio, kGpioMask) == kDifGpioOk);
+  CHECK(dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
+                      &gpio) == kDifOk);
+  CHECK(dif_gpio_output_set_enabled_all(&gpio, kGpioMask) == kDifOk);
 
   for (uint8_t i = 0; i < ARRAYSIZE(kGpioVals); ++i) {
     test_gpio_write(kGpioVals[i]);
diff --git a/sw/device/tests/sim_dv/gpio_test.c b/sw/device/tests/sim_dv/gpio_test.c
index 89c13b1..0ee3687 100644
--- a/sw/device/tests/sim_dv/gpio_test.c
+++ b/sw/device/tests/sim_dv/gpio_test.c
@@ -102,18 +102,18 @@
   LOG_INFO("Starting GPIO output test");
 
   // Set the GPIOs to be in output mode.
-  CHECK(dif_gpio_output_set_enabled_all(gpio, kGpiosAllowedMask) == kDifGpioOk,
+  CHECK(dif_gpio_output_set_enabled_all(gpio, kGpiosAllowedMask) == kDifOk,
         "dif_gpio_output_set_enabled_all failed");
 
   // Walk 1s - 0001, 0010, 0100, 1000, etc.
   for (uint32_t i = 0; i < kNumGpios; ++i) {
     uint32_t gpio_val = 1 << i;
-    CHECK(dif_gpio_write_all(gpio, gpio_val) == kDifGpioOk,
+    CHECK(dif_gpio_write_all(gpio, gpio_val) == kDifOk,
           "dif_gpio_write_all failed");
 
     // Read GPIO_IN to confirm what we wrote.
     uint32_t read_val;
-    CHECK(dif_gpio_read_all(gpio, &read_val) == kDifGpioOk,
+    CHECK(dif_gpio_read_all(gpio, &read_val) == kDifOk,
           "dif_gpio_read_all failed");
 
     // Check written and read val for correctness.
@@ -127,22 +127,22 @@
   }
 
   // Write all 0s to the GPIOs.
-  CHECK(dif_gpio_write_all(gpio, ~kGpiosMask) == kDifGpioOk,
+  CHECK(dif_gpio_write_all(gpio, ~kGpiosMask) == kDifOk,
         "dif_gpio_write_all failed");
 
   // Write all 1s to the GPIOs.
-  CHECK(dif_gpio_write_all(gpio, kGpiosMask) == kDifGpioOk,
+  CHECK(dif_gpio_write_all(gpio, kGpiosMask) == kDifOk,
         "dif_gpio_write_all failed");
 
   // Now walk 0s - 1110, 1101, 1011, 0111, etc.
   for (uint32_t i = 0; i < kNumGpios; ++i) {
     uint32_t gpio_val = ~(1 << i);
-    CHECK(dif_gpio_write_all(gpio, gpio_val) == kDifGpioOk,
+    CHECK(dif_gpio_write_all(gpio, gpio_val) == kDifOk,
           "dif_gpio_write_all failed");
 
     // Read GPIO_IN to confirm what we wrote.
     uint32_t read_val;
-    CHECK(dif_gpio_read_all(gpio, &read_val) == kDifGpioOk,
+    CHECK(dif_gpio_read_all(gpio, &read_val) == kDifOk,
           "dif_gpio_read_all failed");
 
     // Check written and read val for correctness.
@@ -156,11 +156,11 @@
   }
 
   // Write all 1s to the GPIOs.
-  CHECK(dif_gpio_write_all(gpio, kGpiosMask) == kDifGpioOk,
+  CHECK(dif_gpio_write_all(gpio, kGpiosMask) == kDifOk,
         "dif_gpio_write_all failed");
 
   // Write all 0s to the GPIOs.
-  CHECK(dif_gpio_write_all(gpio, ~kGpiosMask) == kDifGpioOk,
+  CHECK(dif_gpio_write_all(gpio, ~kGpiosMask) == kDifOk,
         "dif_gpio_write_all failed");
 }
 
@@ -178,23 +178,21 @@
   LOG_INFO("Starting GPIO input test");
 
   // Enable the noise filter on all GPIOs.
-  CHECK(dif_gpio_input_noise_filter_set_enabled(
-            gpio, kGpiosAllowedMask, kDifGpioToggleEnabled) == kDifGpioOk,
+  CHECK(dif_gpio_input_noise_filter_set_enabled(gpio, kGpiosAllowedMask,
+                                                kDifToggleEnabled) == kDifOk,
         "dif_gpio_input_noise_filter_set_enabled failed");
 
   // Configure all GPIOs to be rising and falling edge interrupts.
   CHECK(dif_gpio_irq_set_trigger(gpio, kGpiosAllowedMask,
-                                 kDifGpioIrqTriggerEdgeRisingFalling) ==
-            kDifGpioOk,
+                                 kDifGpioIrqTriggerEdgeRisingFalling) == kDifOk,
         "dif_gpio_irq_set_trigger failed");
 
   // Enable interrupts on all GPIOs.
-  CHECK(dif_gpio_irq_set_enabled_masked(gpio, kGpiosAllowedMask,
-                                        kDifGpioToggleEnabled) == kDifGpioOk,
-        "dif_gpio_irq_set_enabled_masked failed");
+  CHECK(dif_gpio_irq_restore_all(gpio, &kGpiosAllowedMask) == kDifOk,
+        "dif_gpio_irq_restore_all failed");
 
   // Set the GPIOs to be in input mode.
-  CHECK(dif_gpio_output_set_enabled_all(gpio, 0u) == kDifGpioOk,
+  CHECK(dif_gpio_output_set_enabled_all(gpio, 0u) == kDifOk,
         "dif_gpio_output_set_enabled_all failed");
 
   // Wait for rising edge interrupt on each pin.
@@ -242,15 +240,15 @@
 
   // Check if the same interrupt fired at GPIO as well.
   uint32_t gpio_irqs_status;
-  CHECK(dif_gpio_irq_is_pending_all(&gpio, &gpio_irqs_status) == kDifGpioOk,
-        "dif_gpio_irq_is_pending_all failed");
+  CHECK(dif_gpio_irq_get_state(&gpio, &gpio_irqs_status) == kDifOk,
+        "dif_gpio_irq_get_state failed");
   CHECK(gpio_irqs_status == (1 << expected_gpio_pin_irq),
         "Incorrect GPIO irqs status {exp: %x, obs: %x}",
         (1 << expected_gpio_pin_irq), gpio_irqs_status);
 
   // Read the gpio pin value to ensure the right value is being reflected.
   bool pin_val;
-  CHECK(dif_gpio_read(&gpio, expected_gpio_pin_irq, &pin_val) == kDifGpioOk,
+  CHECK(dif_gpio_read(&gpio, expected_gpio_pin_irq, &pin_val) == kDifOk,
         "dif_gpio_read failed");
 
   // Check if the pin value is set correctly.
@@ -258,7 +256,7 @@
         expected_gpio_pin_irq, expected_irq_edge);
 
   // Clear the interrupt at GPIO.
-  CHECK(dif_gpio_irq_acknowledge(&gpio, gpio_pin_irq_fired) == kDifGpioOk,
+  CHECK(dif_gpio_irq_acknowledge(&gpio, gpio_pin_irq_fired) == kDifOk,
         "dif_gpio_irq_acknowledge failed");
 
   // Complete the IRQ at PLIC.
@@ -274,9 +272,8 @@
   pinmux_init();
 
   // Initialize the GPIO.
-  dif_gpio_params_t gpio_params = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR)};
-  CHECK(dif_gpio_init(gpio_params, &gpio) == kDifGpioOk,
+  CHECK(dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR),
+                      &gpio) == kDifOk,
         "dif_gpio_init failed");
 
   // Initialize the PLIC.