xref: /freebsd/sys/dev/bhnd/nvram/bhnd_nvram.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
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