1#- 2# Copyright (c) 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# 2. Redistributions in binary form must reproduce the above copyright 11# notice, this list of conditions and the following disclaimer in the 12# documentation and/or other materials provided with the distribution. 13# 14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17# IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 18# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 23# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24# 25 26#include <sys/types.h> 27#include <sys/bus.h> 28 29#include <dev/bhnd/bhnd.h> 30 31INTERFACE bhnd_nvram; 32 33# 34# bhnd(4) NVRAM device interface. 35# 36# Provides a shared interface to HND NVRAM, OTP, and SPROM devices that provide 37# access to a common set of hardware/device configuration variables. 38# 39 40/** 41 * Read an NVRAM variable. 42 * 43 * @param dev The NVRAM device. 44 * @param name The NVRAM variable name. 45 * @param[out] buf On success, the requested value will be written 46 * to this buffer. This argment may be NULL if 47 * the value is not desired. 48 * @param[in,out] len The maximum capacity of @p buf. On success, 49 * will be set to the actual size of the requested 50 * value. 51 * @param type The data type to be written to @p buf. 52 * 53 * @retval 0 success 54 * @retval ENOENT The requested variable was not found. 55 * @retval ENOMEM If @p buf is non-NULL and a buffer of @p len is too 56 * small to hold the requested value. 57 * @retval ENODEV If no supported NVRAM hardware is accessible via this 58 * device. 59 * @retval EOPNOTSUPP If any coercion to @p type is unsupported. 60 * @retval EFTYPE If the @p name's data type cannot be coerced to @p type. 61 * @retval ERANGE If value coercion would overflow @p type. 62 * @retval non-zero If reading @p name otherwise fails, a regular unix 63 * error code will be returned. 64 */ 65METHOD int getvar { 66 device_t dev; 67 const char *name; 68 void *buf; 69 size_t *len; 70 bhnd_nvram_type type; 71}; 72 73/** 74 * Set an NVRAM variable's value. 75 * 76 * No changes will be written to non-volatile storage until explicitly 77 * committed. 78 * 79 * @param dev The NVRAM device. 80 * @param name The NVRAM variable name. 81 * @param value The new value. 82 * @param len The size of @p value. 83 * @param type The data type of @p value. 84 * 85 * @retval 0 success 86 * @retval ENOENT The specified variable name is not recognized. 87 * @retval ENODEV If no supported NVRAM hardware is accessible via this 88 * device. 89 * @retval EOPNOTSUPP If any coercion to @p type is unsupported. 90 * @retval EFTYPE If the @p name's data type cannot be coerced to @p type. 91 * @retval ERANGE If value coercion from @p type would overflow. 92 * @retval non-zero If reading @p name otherwise fails, a regular unix 93 * error code will be returned. 94 */ 95METHOD int setvar { 96 device_t dev; 97 const char *name; 98 const void *value; 99 size_t len; 100 bhnd_nvram_type type; 101}; 102