1 #ifndef _IPXE_NVO_H 2 #define _IPXE_NVO_H 3 4 /** @file 5 * 6 * Non-volatile stored options 7 * 8 */ 9 10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); 11 12 #include <stdint.h> 13 #include <ipxe/dhcpopts.h> 14 #include <ipxe/settings.h> 15 16 struct nvs_device; 17 struct refcnt; 18 19 /** 20 * A block of non-volatile stored options 21 */ 22 struct nvo_block { 23 /** Settings block */ 24 struct settings settings; 25 /** Underlying non-volatile storage device */ 26 struct nvs_device *nvs; 27 /** Address within NVS device */ 28 unsigned int address; 29 /** Length of options data */ 30 size_t len; 31 /** Option-containing data */ 32 void *data; 33 /** 34 * Resize non-volatile stored option block 35 * 36 * @v nvo Non-volatile options block 37 * @v len New size 38 * @ret rc Return status code 39 */ 40 int ( * resize ) ( struct nvo_block *nvo, size_t len ); 41 /** DHCP options block */ 42 struct dhcp_options dhcpopts; 43 }; 44 45 /** Name of non-volatile options settings block */ 46 #define NVO_SETTINGS_NAME "nvo" 47 48 extern int nvo_applies ( struct settings *settings, 49 const struct setting *setting ); 50 extern void nvo_init ( struct nvo_block *nvo, struct nvs_device *nvs, 51 size_t address, size_t len, 52 int ( * resize ) ( struct nvo_block *nvo, size_t len ), 53 struct refcnt *refcnt ); 54 extern int register_nvo ( struct nvo_block *nvo, struct settings *parent ); 55 extern void unregister_nvo ( struct nvo_block *nvo ); 56 57 #endif /* _IPXE_NVO_H */ 58