| \ ***************************************************************************** |
| \ * 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 |