blob: ef821cf27c0fd2b03013addb694410422335fa0f [file] [log] [blame]
Vadim Bendeburyb86371b2015-05-27 18:16:19 -07001/*
2 * Copyright 2015 The Chromium OS Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7#ifndef __TPM2_NV_FP_H
8#define __TPM2_NV_FP_H
9
Vadim Bendeburyc9e573a2018-12-11 15:19:59 -080010//
11// Structure used to communicate locations and sizes of reserved objects in
12// the NVMEM cache.
13//
14typedef struct {
15 UINT16 offset;
16 uint16_t size;
17} NV_RESERVED_ITEM;
18
19
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070020TPM_RC NvAddEvictObject(TPMI_DH_OBJECT evictHandle, // IN: new evict handle
21 OBJECT *object // IN: object to be added
Vadim Bendebury0d658a02015-05-29 22:55:38 -070022 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070023UINT32 NvCapGetCounterAvail(void);
24UINT32 NvCapGetCounterNumber(void);
25UINT32 NvCapGetIndexNumber(void);
26UINT32 NvCapGetPersistentAvail(void);
27UINT32 NvCapGetPersistentNumber(void);
Vadim Bendeburyda725062015-05-31 14:41:18 -070028void NvCheckState(void);
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070029BOOL NvCommit(void);
Vadim Bendebury76970b12015-05-31 18:40:37 -070030TPM_RC NvDefineIndex(
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070031 TPMS_NV_PUBLIC *publicArea, // IN: A template for an area to create.
32 TPM2B_AUTH *authValue // IN: The initial authorization value
33 );
34void NvDeleteEntity(TPM_HANDLE handle // IN: handle of entity to be deleted
Vadim Bendebury0d658a02015-05-29 22:55:38 -070035 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070036void NvEntityStartup(STARTUP_TYPE type // IN: start up type
37 );
Vadim Bendebury59727bd2015-05-28 14:58:08 -070038void NvFlushHierarchy(
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070039 TPMI_RH_HIERARCHY hierarchy // IN: hierarchy to be flushed.
40 );
41TPM_RC NvGetEvictObject(TPM_HANDLE handle, // IN: handle
42 OBJECT *object // OUT: object data
43 );
44void NvGetIndexData(TPMI_RH_NV_INDEX handle, // IN: handle
45 NV_INDEX *nvIndex, // IN: RAM image of index header
46 UINT32 offset, // IN: offset of NV data
47 UINT16 size, // IN: size of NV data
48 void *data // OUT: data buffer
Vadim Bendebury889ec832015-05-26 17:11:06 -070049 );
Namyoon Woo0be7f8d2020-02-04 16:43:47 -080050void NvReadIndexData(TPMI_RH_NV_INDEX handle, // IN: handle
51 NV_INDEX *nvIndex, // IN: RAM image of index header
52 UINT32 entityAddr, // IN: Address of NV data
53 UINT32 offset, // IN: offset of NV data
54 UINT16 size, // IN: size of NV data
55 void *data // OUT: data buffer
56 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070057void NvGetIndexInfo(TPMI_RH_NV_INDEX handle, // IN: handle
58 NV_INDEX *nvIndex // OUT: NV index structure
59 );
Namyoon Woo0be7f8d2020-02-04 16:43:47 -080060void NvReadIndexInfo(TPMI_RH_NV_INDEX handle, // IN: handle
61 UINT32 entityAddr, // IN: entity Address
62 NV_INDEX *nvIndex // OUT: NV index structure
63 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070064void NvGetIntIndexData(TPMI_RH_NV_INDEX handle, // IN: handle
65 NV_INDEX *nvIndex, // IN: RAM image of NV Index header
66 UINT64 *data // IN: UINT64 pointer for counter or bit
67 );
68UINT16 NvGetName(TPMI_RH_NV_INDEX handle, // IN: handle of the index
69 NAME *name // OUT: name of the index
Vadim Bendebury889ec832015-05-26 17:11:06 -070070 );
Vadim Bendeburybbd79002015-05-31 14:44:07 -070071TPMI_YES_NO NvCapGetIndex(
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070072 TPMI_DH_OBJECT handle, // IN: start handle
73 UINT32 count, // IN: maximum number of returned handle
74 TPML_HANDLE *handleList // OUT: list of handle
75 );
Vadim Bendeburybbd79002015-05-31 14:44:07 -070076TPMI_YES_NO NvCapGetPersistent(
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070077 TPMI_DH_OBJECT handle, // IN: start handle
78 UINT32 count, // IN: maximum number of returned handle
79 TPML_HANDLE *handleList // OUT: list of handle
80 );
81TPM_RC NvIndexIsAccessible(TPMI_RH_NV_INDEX handle, // IN: handle
82 TPM_CC commandCode // IN: the command
Vadim Bendebury889ec832015-05-26 17:11:06 -070083 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070084void NvInit(void);
85UINT64 NvInitialCounter(void);
86TPM_RC NvIsAvailable(void);
87BOOL NvIsOwnerPersistentHandle(TPM_HANDLE handle // IN: handle
Vadim Bendebury0d658a02015-05-29 22:55:38 -070088 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070089BOOL NvIsPlatformPersistentHandle(TPM_HANDLE handle // IN: handle
Vadim Bendebury0d658a02015-05-29 22:55:38 -070090 );
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -070091BOOL NvIsUndefinedIndex(TPMI_RH_NV_INDEX handle // IN: handle
92 );
93BOOL NvPowerOn(void);
94void NvReadPersistent(void);
95void NvReadReserved(NV_RESERVE type, // IN: type of reserved data
96 void *buffer // OUT: buffer receives the data.
97 );
98void NvSetGlobalLock(void);
99void NvStateSave(void);
100TPM_RC NvWriteIndexData(TPMI_RH_NV_INDEX handle, // IN: handle
101 NV_INDEX *nvIndex, // IN: RAM copy of NV Index
102 UINT32 offset, // IN: offset of NV data
103 UINT32 size, // IN: size of NV data
104 void *data // OUT: data buffer
105 );
106TPM_RC NvWriteIndexInfo(TPMI_RH_NV_INDEX handle, // IN: handle
107 NV_INDEX *nvIndex // IN: NV Index info to be written
108 );
109void NvWriteReserved(NV_RESERVE type, // IN: type of reserved data
110 void *buffer // IN: data buffer
Vadim Bendebury59727bd2015-05-28 14:58:08 -0700111 );
Namyoon Woo0be7f8d2020-02-04 16:43:47 -0800112UINT32 NvEarlyStageFindHandle(TPM_HANDLE handle);
Louis Collardec333822018-10-05 16:04:28 +0800113BOOL NvIsDefinedHiddenObject(TPMI_RH_NV_INDEX handle // IN: handle
114 );
115TPM_RC NvAddHiddenObject(TPM_HANDLE handle, // IN: new evict handle
116 UINT16 size,
117 void *object // IN: object to be added
118 );
119TPM_RC NvWriteHiddenObject(TPM_HANDLE handle, // IN: new evict handle
120 UINT16 size,
121 void *object // IN: object to be added
122 );
123TPM_RC NvGetHiddenObject(
124 TPM_HANDLE handle, // IN: handle
125 UINT16 size, // IN: size of NV data
126 void *data // OUT: data buffer
127 );
Vadim Sukhomlinov6ab308b2020-07-02 18:14:15 -0700128TPM_RC NvGetHiddenObjectSize(TPM_HANDLE handle, // IN: handle
129 UINT16 *size // OUT: size of NV data
130 );
131
Vadim Bendebury15260c82018-12-04 12:08:59 -0800132void NvSelectivelyInvalidateCache(
133 const UINT16 *keep_range // A two element array, the inclusive range of
134 // NV indices to preserve.
135 );
Vadim Bendeburyc9e573a2018-12-11 15:19:59 -0800136void NvGetReserved(UINT32 index, NV_RESERVED_ITEM *ri);
Vadim Bendeburyda725062015-05-31 14:41:18 -0700137
Vadim Bendeburyf788ffb2015-06-05 12:57:27 -0700138#endif // __TPM2_NV_FP_H