blob: f65d7654ae009a25892b0872f746c89d57fa5747 [file] [log] [blame]
// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef NVRAM_H_
#define NVRAM_H_
#include <stdint.h>
#include <cstring>
#include <vector>
namespace tpmd {
class Nvram {
public:
typedef std::vector<uint8_t> Bytes;
enum {
// If this flag is supplied to Allocate(), this region will be locked once
// written.
NVRAM_LOCKONCE = 0x00000001,
};
// Drops this reference to the backing Nvram slot. Note that this does _not_
// deallocate the underlying Nvram slot, but it _does_ destroy this object's
// reference to it. If you need to deallocate the slot, use Free() below.
virtual ~Nvram() { }
// Allocates a new Nvram slot and makes this object a reference to it. Returns
// true for success.
virtual bool Allocate(uint32_t slot, size_t len, uint32_t flags) = 0;
// Frees the underlying Nvram slot. Does not delete this object, but destroys
// the reference to the slot. Returns true for success, in which case the
// reference is destroyed; returns false for failure, in which case the
// reference is intact.
virtual bool Free(uint32_t slot) = 0;
// Writes the supplied bytes to this Nvram slot. The length of |bytes| must be
// the same as the size of this Nvram slot. Returns true for success.
virtual bool Write(uint32_t slot, const Bytes& bytes) = 0;
// Reads the contents of this Nvram slot. Returns true for success, in which
// case |bytes| is modified; returns false for failure, in which case |bytes|
// is untouched.
virtual bool Read(uint32_t slot, Bytes* bytes) = 0;
// Returns whether this region has ever been written.
virtual bool is_defined(uint32_t slot) = 0;
// Returns whether this region is locked, preventing writing.
virtual bool is_locked(uint32_t slot) = 0;
// Returns the size of this region, in bytes.
virtual size_t size(uint32_t slot) = 0;
// Returns how many slots are available.
virtual size_t num_slots() = 0;
};
} // namespace tpmd
#endif /* !NVRAM_H_ */