1*77cb4d3eSLandon J. Fuller /*- 2*77cb4d3eSLandon J. Fuller * Copyright (c) 2016 Landon Fuller <landonf@FreeBSD.org> 3*77cb4d3eSLandon J. Fuller * All rights reserved. 4*77cb4d3eSLandon J. Fuller * 5*77cb4d3eSLandon J. Fuller * Redistribution and use in source and binary forms, with or without 6*77cb4d3eSLandon J. Fuller * modification, are permitted provided that the following conditions 7*77cb4d3eSLandon J. Fuller * are met: 8*77cb4d3eSLandon J. Fuller * 1. Redistributions of source code must retain the above copyright 9*77cb4d3eSLandon J. Fuller * notice, this list of conditions and the following disclaimer, 10*77cb4d3eSLandon J. Fuller * without modification. 11*77cb4d3eSLandon J. Fuller * 2. Redistributions in binary form must reproduce at minimum a disclaimer 12*77cb4d3eSLandon J. Fuller * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any 13*77cb4d3eSLandon J. Fuller * redistribution must be conditioned upon including a substantially 14*77cb4d3eSLandon J. Fuller * similar Disclaimer requirement for further binary redistribution. 15*77cb4d3eSLandon J. Fuller * 16*77cb4d3eSLandon J. Fuller * NO WARRANTY 17*77cb4d3eSLandon J. Fuller * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*77cb4d3eSLandon J. Fuller * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*77cb4d3eSLandon J. Fuller * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY 20*77cb4d3eSLandon J. Fuller * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 21*77cb4d3eSLandon J. Fuller * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, 22*77cb4d3eSLandon J. Fuller * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23*77cb4d3eSLandon J. Fuller * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*77cb4d3eSLandon J. Fuller * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*77cb4d3eSLandon J. Fuller * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26*77cb4d3eSLandon J. Fuller * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 27*77cb4d3eSLandon J. Fuller * THE POSSIBILITY OF SUCH DAMAGES. 28*77cb4d3eSLandon J. Fuller * 29*77cb4d3eSLandon J. Fuller */ 30*77cb4d3eSLandon J. Fuller 31*77cb4d3eSLandon J. Fuller #ifndef _BHND_NVRAM_BHND_NVRAM_IOVAR_H_ 32*77cb4d3eSLandon J. Fuller #define _BHND_NVRAM_BHND_NVRAM_IOVAR_H_ 33*77cb4d3eSLandon J. Fuller 34*77cb4d3eSLandon J. Fuller #include <sys/param.h> 35*77cb4d3eSLandon J. Fuller 36*77cb4d3eSLandon J. Fuller #include "bhnd_nvram_io.h" 37*77cb4d3eSLandon J. Fuller 38*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_read() */ 39*77cb4d3eSLandon J. Fuller typedef int (bhnd_nvram_iop_read)(struct bhnd_nvram_io *io, size_t offset, 40*77cb4d3eSLandon J. Fuller void *buffer, size_t nbytes); 41*77cb4d3eSLandon J. Fuller 42*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_read_ptr() */ 43*77cb4d3eSLandon J. Fuller typedef int (bhnd_nvram_iop_read_ptr)(struct bhnd_nvram_io *io, size_t offset, 44*77cb4d3eSLandon J. Fuller const void **ptr, size_t nbytes, size_t *navail); 45*77cb4d3eSLandon J. Fuller 46*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_write() */ 47*77cb4d3eSLandon J. Fuller typedef int (bhnd_nvram_iop_write)(struct bhnd_nvram_io *io, size_t offset, 48*77cb4d3eSLandon J. Fuller void *buffer, size_t nbytes); 49*77cb4d3eSLandon J. Fuller 50*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_write_ptr() */ 51*77cb4d3eSLandon J. Fuller typedef int (bhnd_nvram_iop_write_ptr)(struct bhnd_nvram_io *io, size_t offset, 52*77cb4d3eSLandon J. Fuller void **ptr, size_t nbytes, size_t *navail); 53*77cb4d3eSLandon J. Fuller 54*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_getsize() */ 55*77cb4d3eSLandon J. Fuller typedef size_t (bhnd_nvram_iop_getsize)(struct bhnd_nvram_io *io); 56*77cb4d3eSLandon J. Fuller 57*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_setsize() */ 58*77cb4d3eSLandon J. Fuller typedef int (bhnd_nvram_iop_setsize)(struct bhnd_nvram_io *io, size_t size); 59*77cb4d3eSLandon J. Fuller 60*77cb4d3eSLandon J. Fuller /** @see bhnd_nvram_io_free() */ 61*77cb4d3eSLandon J. Fuller typedef void (bhnd_nvram_iop_free)(struct bhnd_nvram_io *io); 62*77cb4d3eSLandon J. Fuller 63*77cb4d3eSLandon J. Fuller /** 64*77cb4d3eSLandon J. Fuller * NVRAM abstract I/O operations. 65*77cb4d3eSLandon J. Fuller */ 66*77cb4d3eSLandon J. Fuller struct bhnd_nvram_iops { 67*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_read *read; /**< read() implementation */ 68*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_read_ptr *read_ptr; /**< read_ptr() implementation */ 69*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_getsize *getsize; /**< getsize() implementation */ 70*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_setsize *setsize; /**< setsize() implementation */ 71*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_write *write; /**< write() implementation */ 72*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_write_ptr *write_ptr; /**< write_ptr() implementation */ 73*77cb4d3eSLandon J. Fuller bhnd_nvram_iop_free *free; /**< free() implementation */ 74*77cb4d3eSLandon J. Fuller }; 75*77cb4d3eSLandon J. Fuller 76*77cb4d3eSLandon J. Fuller /** 77*77cb4d3eSLandon J. Fuller * NVRAM abstract I/O context. 78*77cb4d3eSLandon J. Fuller */ 79*77cb4d3eSLandon J. Fuller struct bhnd_nvram_io { 80*77cb4d3eSLandon J. Fuller const struct bhnd_nvram_iops *iops; 81*77cb4d3eSLandon J. Fuller }; 82*77cb4d3eSLandon J. Fuller 83*77cb4d3eSLandon J. Fuller /** 84*77cb4d3eSLandon J. Fuller * Declare a bhnd_nvram_iops class with name @p _n. 85*77cb4d3eSLandon J. Fuller */ 86*77cb4d3eSLandon J. Fuller #define BHND_NVRAM_IOPS_DEFN(_n) \ 87*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_read bhnd_nvram_ ## _n ## _read; \ 88*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_read_ptr bhnd_nvram_ ## _n ## _read_ptr; \ 89*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_write bhnd_nvram_ ## _n ## _write; \ 90*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_write_ptr bhnd_nvram_ ## _n ## _write_ptr;\ 91*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_getsize bhnd_nvram_ ## _n ## _getsize; \ 92*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_setsize bhnd_nvram_ ## _n ## _setsize; \ 93*77cb4d3eSLandon J. Fuller static bhnd_nvram_iop_free bhnd_nvram_ ## _n ## _free; \ 94*77cb4d3eSLandon J. Fuller \ 95*77cb4d3eSLandon J. Fuller static struct bhnd_nvram_iops bhnd_nvram_ ## _n ## _ops = { \ 96*77cb4d3eSLandon J. Fuller .read = bhnd_nvram_ ## _n ## _read, \ 97*77cb4d3eSLandon J. Fuller .read_ptr = bhnd_nvram_ ## _n ## _read_ptr, \ 98*77cb4d3eSLandon J. Fuller .write = bhnd_nvram_ ## _n ## _write, \ 99*77cb4d3eSLandon J. Fuller .write_ptr = bhnd_nvram_ ## _n ## _write_ptr, \ 100*77cb4d3eSLandon J. Fuller .getsize = bhnd_nvram_ ## _n ## _getsize, \ 101*77cb4d3eSLandon J. Fuller .setsize = bhnd_nvram_ ## _n ## _setsize, \ 102*77cb4d3eSLandon J. Fuller .free = bhnd_nvram_ ## _n ## _free \ 103*77cb4d3eSLandon J. Fuller }; 104*77cb4d3eSLandon J. Fuller 105*77cb4d3eSLandon J. Fuller #endif /* _BHND_NVRAM_BHND_NVRAM_IOVAR_H_ */ 106