uboot/include/env_flags.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * (C) Copyright 2012
   4 * Joe Hershberger, National Instruments, joe.hershberger@ni.com
   5 */
   6
   7#ifndef __ENV_FLAGS_H__
   8#define __ENV_FLAGS_H__
   9
  10enum env_flags_vartype {
  11        env_flags_vartype_string,
  12        env_flags_vartype_decimal,
  13        env_flags_vartype_hex,
  14        env_flags_vartype_bool,
  15#ifdef CONFIG_CMD_NET
  16        env_flags_vartype_ipaddr,
  17        env_flags_vartype_macaddr,
  18#endif
  19        env_flags_vartype_end
  20};
  21
  22enum env_flags_varaccess {
  23        env_flags_varaccess_any,
  24        env_flags_varaccess_readonly,
  25        env_flags_varaccess_writeonce,
  26        env_flags_varaccess_changedefault,
  27#ifdef CONFIG_ENV_WRITEABLE_LIST
  28        env_flags_varaccess_writeable,
  29#endif
  30        env_flags_varaccess_end
  31};
  32
  33#define ENV_FLAGS_VAR ".flags"
  34#define ENV_FLAGS_ATTR_MAX_LEN 2
  35#define ENV_FLAGS_VARTYPE_LOC 0
  36#define ENV_FLAGS_VARACCESS_LOC 1
  37
  38#ifndef CONFIG_ENV_FLAGS_LIST_STATIC
  39#define CONFIG_ENV_FLAGS_LIST_STATIC ""
  40#endif
  41
  42#ifdef CONFIG_NET
  43#ifdef CONFIG_REGEX
  44#define ETHADDR_WILDCARD "\\d*"
  45#else
  46#define ETHADDR_WILDCARD
  47#endif
  48#ifdef CONFIG_ENV_OVERWRITE
  49#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:ma,"
  50#else
  51#ifdef CONFIG_OVERWRITE_ETHADDR_ONCE
  52#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mc,"
  53#else
  54#define ETHADDR_FLAGS "eth" ETHADDR_WILDCARD "addr:mo,"
  55#endif
  56#endif
  57#define NET_FLAGS \
  58        "ipaddr:i," \
  59        "gatewayip:i," \
  60        "netmask:i," \
  61        "serverip:i," \
  62        "nvlan:d," \
  63        "vlan:d," \
  64        "dnsip:i,"
  65#else
  66#define ETHADDR_FLAGS
  67#define NET_FLAGS
  68#endif
  69
  70#ifndef CONFIG_ENV_OVERWRITE
  71#define SERIAL_FLAGS "serial#:so,"
  72#else
  73#define SERIAL_FLAGS ""
  74#endif
  75
  76#define ENV_FLAGS_LIST_STATIC \
  77        ETHADDR_FLAGS \
  78        NET_FLAGS \
  79        SERIAL_FLAGS \
  80        CONFIG_ENV_FLAGS_LIST_STATIC
  81
  82#ifdef CONFIG_CMD_ENV_FLAGS
  83/*
  84 * Print the whole list of available type flags.
  85 */
  86void env_flags_print_vartypes(void);
  87/*
  88 * Print the whole list of available access flags.
  89 */
  90void env_flags_print_varaccess(void);
  91/*
  92 * Return the name of the type.
  93 */
  94const char *env_flags_get_vartype_name(enum env_flags_vartype type);
  95/*
  96 * Return the name of the access.
  97 */
  98const char *env_flags_get_varaccess_name(enum env_flags_varaccess access);
  99#endif
 100
 101/*
 102 * Parse the flags string from a .flags attribute list into the vartype enum.
 103 */
 104enum env_flags_vartype env_flags_parse_vartype(const char *flags);
 105/*
 106 * Parse the flags string from a .flags attribute list into the varaccess enum.
 107 */
 108enum env_flags_varaccess env_flags_parse_varaccess(const char *flags);
 109/*
 110 * Parse the binary flags from a hash table entry into the varaccess enum.
 111 */
 112enum env_flags_varaccess env_flags_parse_varaccess_from_binflags(int binflags);
 113
 114#ifdef CONFIG_CMD_NET
 115/*
 116 * Check if a string has the format of an Ethernet MAC address
 117 */
 118int eth_validate_ethaddr_str(const char *addr);
 119#endif
 120
 121#ifdef USE_HOSTCC
 122/*
 123 * Look up the type of a variable directly from the .flags var.
 124 */
 125enum env_flags_vartype env_flags_get_type(const char *name);
 126/*
 127 * Look up the access of a variable directly from the .flags var.
 128 */
 129enum env_flags_varaccess env_flags_get_access(const char *name);
 130/*
 131 * Validate the newval for its type to conform with the requirements defined by
 132 * its flags (directly looked at the .flags var).
 133 */
 134int env_flags_validate_type(const char *name, const char *newval);
 135/*
 136 * Validate the newval for its access to conform with the requirements defined
 137 * by its flags (directly looked at the .flags var).
 138 */
 139int env_flags_validate_access(const char *name, int check_mask);
 140/*
 141 * Validate that the proposed access to variable "name" is valid according to
 142 * the defined flags for that variable, if any.
 143 */
 144int env_flags_validate_varaccess(const char *name, int check_mask);
 145/*
 146 * Validate the parameters passed to "env set" for type compliance
 147 */
 148int env_flags_validate_env_set_params(char *name, char *const val[], int count);
 149
 150#else /* !USE_HOSTCC */
 151
 152#include <env.h>
 153#include <search.h>
 154
 155/*
 156 * When adding a variable to the environment, initialize the flags for that
 157 * variable.
 158 */
 159void env_flags_init(struct env_entry *var_entry);
 160
 161/*
 162 * Validate the newval for to conform with the requirements defined by its flags
 163 */
 164int env_flags_validate(const struct env_entry *item, const char *newval,
 165                       enum env_op op, int flag);
 166
 167#endif /* USE_HOSTCC */
 168
 169/*
 170 * These are the binary flags used in the environment entry->flags variable to
 171 * decribe properties of veriables in the table
 172 */
 173#define ENV_FLAGS_VARTYPE_BIN_MASK                      0x00000007
 174/* The actual variable type values use the enum value (within the mask) */
 175#define ENV_FLAGS_VARACCESS_PREVENT_DELETE              0x00000008
 176#define ENV_FLAGS_VARACCESS_PREVENT_CREATE              0x00000010
 177#define ENV_FLAGS_VARACCESS_PREVENT_OVERWR              0x00000020
 178#define ENV_FLAGS_VARACCESS_PREVENT_NONDEF_OVERWR       0x00000040
 179#define ENV_FLAGS_VARACCESS_WRITEABLE                   0x00000080
 180#define ENV_FLAGS_VARACCESS_BIN_MASK                    0x000000f8
 181
 182#endif /* __ENV_FLAGS_H__ */
 183