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 * 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 non-zero If reading @p name otherwise fails, a regular unix 60 * error code will be returned. 61 */ 62METHOD int getvar { 63 device_t dev; 64 const char *name; 65 void *buf; 66 size_t *len; 67}; 68 69/** 70 * Set an NVRAM variable's local value. 71 * 72 * No changes should be written to non-volatile storage. 73 * 74 * @param dev The NVRAM device. 75 * @param name The NVRAM variable name. 76 * @param buf The new value. 77 * @param len The size of @p buf. 78 * 79 * @retval 0 success 80 * @retval ENOENT The specified variable name is not recognized. 81 * @retval EINVAL If @p len does not match the expected variable size. 82 * @retval ENODEV If no supported NVRAM hardware is accessible via this 83 * device. 84 * @retval non-zero If reading @p name otherwise fails, a regular unix 85 * error code will be returned. 86 */ 87METHOD int setvar { 88 device_t dev; 89 const char *name; 90 const void *buf; 91 size_t len; 92}; 93