| // Copyright 2021 The Fuchsia Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 | library fuchsia.hardware.nvram; | 
 |  | 
 | using zx; | 
 |  | 
 | /// Maximum amount of data that can be transferred in a single transaction. | 
 | const NVRAM_MAX uint32 = 256; | 
 |  | 
 | /// A device that contains some small amount of non-volatile storage. | 
 | closed protocol Device { | 
 |     /// Get the size of the NVRAM NVRAM. | 
 |     strict GetSize() -> (struct { | 
 |         size uint32; | 
 |     }); | 
 |  | 
 |     /// Read |size| bytes of data starting at |offset|. | 
 |     /// Returns ZX_ERR_OUT_OF_RANGE if the data extends past the end of the | 
 |     /// nvram. | 
 |     strict Read(struct { | 
 |         offset uint32; | 
 |         size uint32; | 
 |     }) -> (struct { | 
 |         data vector<uint8>:NVRAM_MAX; | 
 |     }) error zx.Status; | 
 |  | 
 |     /// Write |data| starting at |offset|. | 
 |     /// Returns ZX_ERR_OUT_OF_RANGE if the data extends past the end of the | 
 |     /// nvram. | 
 |     strict Write(struct { | 
 |         offset uint32; | 
 |         data vector<uint8>:NVRAM_MAX; | 
 |     }) -> () error zx.Status; | 
 | }; |