104 lines
2.4 KiB
Forth
104 lines
2.4 KiB
Forth
|
\ *****************************************************************************
|
||
|
\ * Copyright (c) 2015-2020 IBM Corporation
|
||
|
\ * All rights reserved.
|
||
|
\ * This program and the accompanying materials
|
||
|
\ * are made available under the terms of the BSD License
|
||
|
\ * which accompanies this distribution, and is available at
|
||
|
\ * http://www.opensource.org/licenses/bsd-license.php
|
||
|
\ *
|
||
|
\ * Contributors:
|
||
|
\ * IBM Corporation - initial implementation
|
||
|
\ ****************************************************************************/
|
||
|
|
||
|
." Populating " pwd cr
|
||
|
|
||
|
false VALUE vtpm-debug?
|
||
|
0 VALUE vtpm-unit
|
||
|
|
||
|
0 VALUE log-base
|
||
|
40000 CONSTANT LOG-SIZE \ 256k per VTPM FW spec.
|
||
|
|
||
|
e CONSTANT VTPM_DRV_ERROR_SML_HANDED_OVER
|
||
|
|
||
|
LOG-SIZE BUFFER: log-base
|
||
|
|
||
|
\ firmware API call
|
||
|
: sml-get-allocated-size ( -- buffer-size)
|
||
|
LOG-SIZE
|
||
|
;
|
||
|
|
||
|
\ firmware API call
|
||
|
: sml-get-handover-size ( -- size)
|
||
|
tpm-get-logsize
|
||
|
;
|
||
|
|
||
|
\ firmware API call
|
||
|
: sml-handover ( dest size -- )
|
||
|
log-base ( dest size src )
|
||
|
-rot ( src dest size )
|
||
|
move
|
||
|
|
||
|
VTPM_DRV_ERROR_SML_HANDED_OVER tpm-driver-set-failure-reason
|
||
|
;
|
||
|
|
||
|
\ firmware API call
|
||
|
: get-failure-reason ( -- reason )
|
||
|
tpm-driver-get-failure-reason ( reason )
|
||
|
;
|
||
|
|
||
|
0 0 s" ibm,sml-efi-reformat-supported" property
|
||
|
|
||
|
\ firmware API call
|
||
|
: reformat-sml-to-efi-alignment ( -- success )
|
||
|
true
|
||
|
;
|
||
|
|
||
|
: open true ;
|
||
|
: close ;
|
||
|
|
||
|
: vtpm-cleanup ( -- )
|
||
|
vtpm-debug? IF ." VTPM: Disabling RTAS bypass" cr THEN
|
||
|
tpm-finalize
|
||
|
\ Disable TCE bypass
|
||
|
vtpm-unit 0 rtas-set-tce-bypass
|
||
|
;
|
||
|
|
||
|
: vtpm-init ( -- success )
|
||
|
0 0 get-node open-node ?dup 0= IF false EXIT THEN
|
||
|
my-self >r
|
||
|
dup to my-self
|
||
|
|
||
|
vtpm-debug? IF ." VTPM: Initializing for c-driver" cr THEN
|
||
|
|
||
|
my-unit to vtpm-unit
|
||
|
|
||
|
\ Enable TCE bypass special qemu feature
|
||
|
vtpm-unit 1 rtas-set-tce-bypass
|
||
|
|
||
|
\ Have TCE bypass cleaned up
|
||
|
['] vtpm-cleanup add-quiesce-xt
|
||
|
|
||
|
\ close temporary node
|
||
|
close-node
|
||
|
r> to my-self
|
||
|
|
||
|
tpm-start ?dup 0= IF
|
||
|
vtpm-debug? IF ." VTPM: Success from tpm-start" cr THEN
|
||
|
true
|
||
|
ELSE
|
||
|
." VTPM: Error code from tpm-start: " . cr
|
||
|
false
|
||
|
THEN
|
||
|
;
|
||
|
|
||
|
\ inititialize unit and set RTAS bypass
|
||
|
vtpm-init IF
|
||
|
\ pass logbase and size to the C driver; we may only do this after
|
||
|
\ init of the lower levels since this calls needs to know the PCR banks
|
||
|
\ when setting up the log
|
||
|
log-base LOG-SIZE tpm-set-log-parameters
|
||
|
s" vtpm-sml.fs" included
|
||
|
ELSE
|
||
|
." VTPM: vtpm-init failed" cr
|
||
|
THEN
|