// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#ifndef OPENTITAN_SW_DEVICE_LIB_BASE_MULTIBITS_H_
#define OPENTITAN_SW_DEVICE_LIB_BASE_MULTIBITS_H_

/**
 * Multi-bit boolean values
 *
 * Certain configuration fields in the design are multi-bits.
 * This gives the configuration fields redundancy and ensures
 * it is difficult to fault the values to a "good" state.
 */
typedef enum multi_bit_bool {
<%
from mubi import prim_mubi
%>\

% for n in range(1, n_max_nibbles + 1):
  <%
     nbits = n * 4
  %>\
  /**
   * ${nbits}-bits boolean values
   */
  kMultiBitBool${nbits}True = 0x${prim_mubi.mubi_value_as_hexstr(True, nbits)},
  kMultiBitBool${nbits}False = 0x${prim_mubi.mubi_value_as_hexstr(False, nbits)},

% endfor
} multi_bit_bool_t;

#endif  // OPENTITAN_SW_DEVICE_LIB_BASE_MULTIBITS_H_
