14ad7e9b0SAdrian Chadd /*- 24ad7e9b0SAdrian Chadd * Copyright (c) 2015-2016 Landon Fuller <landon@landonf.org> 34ad7e9b0SAdrian Chadd * All rights reserved. 44ad7e9b0SAdrian Chadd * 54ad7e9b0SAdrian Chadd * Redistribution and use in source and binary forms, with or without 64ad7e9b0SAdrian Chadd * modification, are permitted provided that the following conditions 74ad7e9b0SAdrian Chadd * are met: 84ad7e9b0SAdrian Chadd * 1. Redistributions of source code must retain the above copyright 94ad7e9b0SAdrian Chadd * notice, this list of conditions and the following disclaimer, 104ad7e9b0SAdrian Chadd * without modification. 114ad7e9b0SAdrian Chadd * 2. Redistributions in binary form must reproduce at minimum a disclaimer 124ad7e9b0SAdrian Chadd * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 134ad7e9b0SAdrian Chadd * redistribution must be conditioned upon including a substantially 144ad7e9b0SAdrian Chadd * similar Disclaimer requirement for further binary redistribution. 154ad7e9b0SAdrian Chadd * 164ad7e9b0SAdrian Chadd * NO WARRANTY 174ad7e9b0SAdrian Chadd * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 184ad7e9b0SAdrian Chadd * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 194ad7e9b0SAdrian Chadd * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 204ad7e9b0SAdrian Chadd * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 214ad7e9b0SAdrian Chadd * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 224ad7e9b0SAdrian Chadd * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 234ad7e9b0SAdrian Chadd * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 244ad7e9b0SAdrian Chadd * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 254ad7e9b0SAdrian Chadd * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 264ad7e9b0SAdrian Chadd * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 274ad7e9b0SAdrian Chadd * THE POSSIBILITY OF SUCH DAMAGES. 284ad7e9b0SAdrian Chadd * 294ad7e9b0SAdrian Chadd */ 304ad7e9b0SAdrian Chadd 314ad7e9b0SAdrian Chadd #ifndef _BHND_NVRAM_BHND_NVRAM_H_ 324ad7e9b0SAdrian Chadd #define _BHND_NVRAM_BHND_NVRAM_H_ 334ad7e9b0SAdrian Chadd 3477cb4d3eSLandon J. Fuller #ifdef _KERNEL 3577cb4d3eSLandon J. Fuller #include <sys/types.h> 3677cb4d3eSLandon J. Fuller #else /* !_KERNEL */ 3777cb4d3eSLandon J. Fuller #include <stdbool.h> 3877cb4d3eSLandon J. Fuller #include <stdint.h> 3977cb4d3eSLandon J. Fuller #endif /* _KERNEL */ 4077cb4d3eSLandon J. Fuller 414ad7e9b0SAdrian Chadd /** 42*6cffadf0SLandon J. Fuller * BHND NVRAM boolean type; guaranteed to be exactly 8-bits, representing 43*6cffadf0SLandon J. Fuller * true as integer constant 1, and false as integer constant 0. 44*6cffadf0SLandon J. Fuller * 45*6cffadf0SLandon J. Fuller * Compatible with stdbool constants (true, false). 46*6cffadf0SLandon J. Fuller */ 47*6cffadf0SLandon J. Fuller typedef uint8_t bhnd_nvram_bool_t; 48*6cffadf0SLandon J. Fuller 49*6cffadf0SLandon J. Fuller /** 504ad7e9b0SAdrian Chadd * NVRAM data sources supported by bhnd(4) devices. 514ad7e9b0SAdrian Chadd */ 524ad7e9b0SAdrian Chadd typedef enum { 534ad7e9b0SAdrian Chadd BHND_NVRAM_SRC_OTP, /**< On-chip one-time-programmable 544ad7e9b0SAdrian Chadd * memory. */ 554ad7e9b0SAdrian Chadd 56f4a3eb02SAdrian Chadd BHND_NVRAM_SRC_FLASH, /**< External flash */ 574ad7e9b0SAdrian Chadd BHND_NVRAM_SRC_SPROM, /**< External serial EEPROM. */ 584ad7e9b0SAdrian Chadd 59e83ce340SAdrian Chadd BHND_NVRAM_SRC_UNKNOWN /**< No NVRAM source is directly 60e83ce340SAdrian Chadd * attached. 61e83ce340SAdrian Chadd * 62e83ce340SAdrian Chadd * This will be returned by ChipCommon 63e83ce340SAdrian Chadd * revisions (rev <= 31) used in early 64e83ce340SAdrian Chadd * chipsets that vend SPROM/OTP via the 65e83ce340SAdrian Chadd * native host bridge interface. 66e83ce340SAdrian Chadd * 67e83ce340SAdrian Chadd * For example, PCMCIA cards may vend 68e83ce340SAdrian Chadd * Broadcom NVRAM data via their standard CIS 69e83ce340SAdrian Chadd * table, and earlier PCI(e) devices map 70e83ce340SAdrian Chadd * SPROM statically into PCI BARs, and the 71e83ce340SAdrian Chadd * control registers into PCI config space. 72e83ce340SAdrian Chadd 73e83ce340SAdrian Chadd * This will also be returned on later 74e83ce340SAdrian Chadd * devices that are attached via PCI(e) to 75e83ce340SAdrian Chadd * BHND SoCs, but do not include an attached 76e83ce340SAdrian Chadd * SPROM, or programmed OTP. On such SoCs, 77e83ce340SAdrian Chadd * NVRAM configuration for individual devices 78e83ce340SAdrian Chadd * is provided by a common platform NVRAM 79e83ce340SAdrian Chadd * device. 804ad7e9b0SAdrian Chadd */ 8156a4cdd1SLandon J. Fuller } bhnd_nvram_src; 824ad7e9b0SAdrian Chadd 8377cb4d3eSLandon J. Fuller /** 8477cb4d3eSLandon J. Fuller * NVRAM data types. 8577cb4d3eSLandon J. Fuller * 8677cb4d3eSLandon J. Fuller * @internal 8777cb4d3eSLandon J. Fuller * 8877cb4d3eSLandon J. Fuller * All primitive (non-array) constants should be representable as a 4-bit 8977cb4d3eSLandon J. Fuller * integer (e.g. 0-15) to support SPROM_OPCODE_TYPE_IMM encoding as used by 9077cb4d3eSLandon J. Fuller * nvram_map_gen.awk. 9177cb4d3eSLandon J. Fuller */ 921728aef2SLandon J. Fuller typedef enum { 9377cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT8 = 0, /**< unsigned 8-bit integer */ 9477cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT16 = 1, /**< unsigned 16-bit integer */ 9577cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT32 = 2, /**< unsigned 32-bit integer */ 9677cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT64 = 3, /**< signed 64-bit integer */ 9777cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT8 = 4, /**< signed 8-bit integer */ 9877cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT16 = 5, /**< signed 16-bit integer */ 9977cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT32 = 6, /**< signed 32-bit integer */ 10077cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT64 = 7, /**< signed 64-bit integer */ 10177cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_CHAR = 8, /**< ASCII/UTF-8 character */ 10277cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_STRING = 9, /**< ASCII/UTF-8 NUL-terminated 10377cb4d3eSLandon J. Fuller string */ 104*6cffadf0SLandon J. Fuller BHND_NVRAM_TYPE_BOOL = 10, /**< uint8 boolean value. see 105*6cffadf0SLandon J. Fuller bhnd_nvram_bool_t. */ 106*6cffadf0SLandon J. Fuller BHND_NVRAM_TYPE_NULL = 11, /**< NULL (empty) value */ 107*6cffadf0SLandon J. Fuller BHND_NVRAM_TYPE_DATA = 12, /**< opaque octet string */ 1081728aef2SLandon J. Fuller 10977cb4d3eSLandon J. Fuller /* 10-15 reserved for primitive (non-array) types */ 1101728aef2SLandon J. Fuller 11177cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT8_ARRAY = 16, /**< array of uint8 integers */ 11277cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT16_ARRAY = 17, /**< array of uint16 integers */ 11377cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT32_ARRAY = 18, /**< array of uint32 integers */ 11477cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_UINT64_ARRAY = 19, /**< array of uint64 integers */ 11577cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT8_ARRAY = 20, /**< array of int8 integers */ 11677cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT16_ARRAY = 21, /**< array of int16 integers */ 11777cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT32_ARRAY = 22, /**< array of int32 integers */ 11877cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_INT64_ARRAY = 23, /**< array of int64 integers */ 11977cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_CHAR_ARRAY = 24, /**< array of ASCII/UTF-8 12077cb4d3eSLandon J. Fuller characters */ 12177cb4d3eSLandon J. Fuller BHND_NVRAM_TYPE_STRING_ARRAY = 25, /**< array of ASCII/UTF-8 12277cb4d3eSLandon J. Fuller NUL-terminated strings */ 123*6cffadf0SLandon J. Fuller BHND_NVRAM_TYPE_BOOL_ARRAY = 26, /**< array of uint8 boolean 124*6cffadf0SLandon J. Fuller values */ 1251728aef2SLandon J. Fuller } bhnd_nvram_type; 126*6cffadf0SLandon J. Fuller 12777cb4d3eSLandon J. Fuller bool bhnd_nvram_is_signed_type(bhnd_nvram_type type); 12877cb4d3eSLandon J. Fuller bool bhnd_nvram_is_unsigned_type(bhnd_nvram_type type); 12977cb4d3eSLandon J. Fuller bool bhnd_nvram_is_int_type(bhnd_nvram_type type); 13077cb4d3eSLandon J. Fuller bool bhnd_nvram_is_array_type(bhnd_nvram_type type); 13177cb4d3eSLandon J. Fuller bhnd_nvram_type bhnd_nvram_base_type(bhnd_nvram_type type); 132*6cffadf0SLandon J. Fuller bhnd_nvram_type bhnd_nvram_raw_type(bhnd_nvram_type type); 13377cb4d3eSLandon J. Fuller const char *bhnd_nvram_type_name(bhnd_nvram_type type); 1349be0790dSLandon J. Fuller size_t bhnd_nvram_type_width(bhnd_nvram_type type); 1359be0790dSLandon J. Fuller size_t bhnd_nvram_type_host_align(bhnd_nvram_type type); 1369be0790dSLandon J. Fuller 1379be0790dSLandon J. Fuller const char *bhnd_nvram_string_array_next(const char *inp, size_t ilen, 1389be0790dSLandon J. Fuller const char *prev, size_t *olen); 1391728aef2SLandon J. Fuller 1404ad7e9b0SAdrian Chadd #endif /* _BHND_NVRAM_BHND_NVRAM_H_ */ 141