1 /*- 2 * Copyright (c) 2015-2016 Landon Fuller <landon@landonf.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer, 10 * without modification. 11 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12 * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13 * redistribution must be conditioned upon including a substantially 14 * similar Disclaimer requirement for further binary redistribution. 15 * 16 * NO WARRANTY 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 20 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 22 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27 * THE POSSIBILITY OF SUCH DAMAGES. 28 * 29 * $FreeBSD$ 30 */ 31 32 #ifndef _BHND_NVRAM_BHND_NVRAM_H_ 33 #define _BHND_NVRAM_BHND_NVRAM_H_ 34 35 /** 36 * NVRAM data sources supported by bhnd(4) devices. 37 */ 38 typedef enum { 39 40 BHND_NVRAM_SRC_OTP, /**< On-chip one-time-programmable 41 * memory. */ 42 43 BHND_NVRAM_SRC_FLASH, /**< External flash */ 44 BHND_NVRAM_SRC_SPROM, /**< External serial EEPROM. */ 45 46 BHND_NVRAM_SRC_UNKNOWN /**< No NVRAM source is directly 47 * attached. 48 * 49 * This will be returned by ChipCommon 50 * revisions (rev <= 31) used in early 51 * chipsets that vend SPROM/OTP via the 52 * native host bridge interface. 53 * 54 * For example, PCMCIA cards may vend 55 * Broadcom NVRAM data via their standard CIS 56 * table, and earlier PCI(e) devices map 57 * SPROM statically into PCI BARs, and the 58 * control registers into PCI config space. 59 60 * This will also be returned on later 61 * devices that are attached via PCI(e) to 62 * BHND SoCs, but do not include an attached 63 * SPROM, or programmed OTP. On such SoCs, 64 * NVRAM configuration for individual devices 65 * is provided by a common platform NVRAM 66 * device. 67 */ 68 } bhnd_nvram_src; 69 70 /** Supported NVRAM formats. */ 71 typedef enum { 72 BHND_NVRAM_FMT_BCM = 0, /**< Broadcom NUL-delimited key=value pairs */ 73 BHND_NVRAM_FMT_TLV = 1, /**< CFE TLV encoding, as used on WGT634U */ 74 BHND_NVRAM_FMT_BTXT = 2, /**< Broadcom board text file. This is used 75 to provide external NVRAM data for some 76 fullmac WiFi devices. */ 77 BHND_NVRAM_FMT_SPROM = 3, /**< SPROM/OTP-specific encoding used by 78 Broadcom network adapters */ 79 BHND_NVRAM_FMT_CIS = 4, /**< A mostly CIS-compatible encoding used 80 on some Broadcom network adapters */ 81 BHND_NVRAM_FMT_UNKNOWN = 5 /**< Unknown or unrecognized format */ 82 } bhnd_nvram_format; 83 84 85 /** bhnd_nvram_type bit flags */ 86 enum { 87 BHND_NVRAM_TF_SIGNED = (1<<7), 88 }; 89 90 #define BHND_NVRAM_TYPE_ID_MASK 0xF 91 #define BHND_NVRAM_TYPE_FLAGS_MASK 0x70 92 93 #define BHND_NVRAM_TYPE_ID(_id, _flags) \ 94 (((_id) & BHND_NVRAM_TYPE_ID_MASK) | \ 95 ((_flags) & BHND_NVRAM_TYPE_FLAGS_MASK)) 96 97 /** Supported NVRAM data types */ 98 typedef enum { 99 BHND_NVRAM_TYPE_UINT8 = BHND_NVRAM_TYPE_ID(0, 0), /**< unsigned 8-bit integer */ 100 BHND_NVRAM_TYPE_UINT16 = BHND_NVRAM_TYPE_ID(1, 0), /**< unsigned 16-bit integer */ 101 BHND_NVRAM_TYPE_UINT32 = BHND_NVRAM_TYPE_ID(2, 0), /**< unsigned 32-bit integer */ 102 BHND_NVRAM_TYPE_INT8 = BHND_NVRAM_TYPE_ID(4, BHND_NVRAM_TF_SIGNED), /**< signed 8-bit integer */ 103 BHND_NVRAM_TYPE_INT16 = BHND_NVRAM_TYPE_ID(5, BHND_NVRAM_TF_SIGNED), /**< signed 16-bit integer */ 104 BHND_NVRAM_TYPE_INT32 = BHND_NVRAM_TYPE_ID(6, BHND_NVRAM_TF_SIGNED), /**< signed 32-bit integer */ 105 BHND_NVRAM_TYPE_CHAR = BHND_NVRAM_TYPE_ID(7, BHND_NVRAM_TF_SIGNED), /**< ASCII character */ 106 BHND_NVRAM_TYPE_CSTR = BHND_NVRAM_TYPE_ID(8, 0), /**< NUL-terminated C string */ 107 } bhnd_nvram_type; 108 109 #undef BHND_NVRAM_TYPE_ID_MASK 110 #undef BHND_NVRAM_TYPE_FLAGS_MASK 111 #undef BHND_NVRAM_TYPE_ID 112 113 #define BHND_NVRAM_SIGNED_TYPE(_type) \ 114 (((_type) & BHND_NVRAM_TF_SIGNED) == BHND_NVRAM_TF_SIGNED) 115 116 #endif /* _BHND_NVRAM_BHND_NVRAM_H_ */ 117