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# $FreeBSD$ 26 27#include <sys/types.h> 28#include <sys/bus.h> 29 30#include <dev/bhnd/bhnd.h> 31 32INTERFACE bhnd_nvram; 33 34# 35# bhnd(4) NVRAM device interface. 36# 37# Provides a shared interface to HND NVRAM, OTP, and SPROM devices that provide 38# access to a common set of hardware/device configuration variables. 39# 40 41/** 42 * Read an NVRAM variable. 43 * 44 * @param dev The NVRAM device. 45 * @param name The NVRAM variable name. 46 * @param[out] buf On success, the requested value will be written 47 * to this buffer. This argment may be NULL if 48 * the value is not desired. 49 * @param[in,out] len The maximum capacity of @p buf. On success, 50 * will be set to the actual size of the requested 51 * value. 52 * @param type The data type to be written to @p buf. 53 * 54 * @retval 0 success 55 * @retval ENOENT The requested variable was not found. 56 * @retval ENOMEM If @p buf is non-NULL and a buffer of @p len is too 57 * small to hold the requested value. 58 * @retval ENODEV If no supported NVRAM hardware is accessible via this 59 * device. 60 * @retval EOPNOTSUPP If any coercion to @p type is unsupported. 61 * @retval EFTYPE If the @p name's data type cannot be coerced to @p type. 62 * @retval ERANGE If value coercion would overflow @p type. 63 * @retval non-zero If reading @p name otherwise fails, a regular unix 64 * error code will be returned. 65 */ 66METHOD int getvar { 67 device_t dev; 68 const char *name; 69 void *buf; 70 size_t *len; 71 bhnd_nvram_type type; 72}; 73 74/** 75 * Set an NVRAM variable's value. 76 * 77 * No changes will be written to non-volatile storage until explicitly 78 * committed. 79 * 80 * @param dev The NVRAM device. 81 * @param name The NVRAM variable name. 82 * @param value The new value. 83 * @param len The size of @p value. 84 * @param type The data type of @p value. 85 * 86 * @retval 0 success 87 * @retval ENOENT The specified variable name is not recognized. 88 * @retval ENODEV If no supported NVRAM hardware is accessible via this 89 * device. 90 * @retval EOPNOTSUPP If any coercion to @p type is unsupported. 91 * @retval EFTYPE If the @p name's data type cannot be coerced to @p type. 92 * @retval ERANGE If value coercion from @p type would overflow. 93 * @retval non-zero If reading @p name otherwise fails, a regular unix 94 * error code will be returned. 95 */ 96METHOD int setvar { 97 device_t dev; 98 const char *name; 99 const void *value; 100 size_t len; 101 bhnd_nvram_type type; 102}; 103