/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _TPM_DDI_H #define _TPM_DDI_H /* Duration index is SHORT, MEDIUM, LONG, UNDEFINED */ #define TPM_DURATION_MAX_IDX 3 /* * IO buffer size: this seems sufficient, but feel free to modify * This should be at minimum 765 */ #define TPM_IO_BUF_SIZE 4096 #define TPM_IO_TIMEOUT 10000000 /* * Flags to keep track of for the allocated resources * so we know what to deallocate later on */ enum tpm_ddi_resources_flags { TPM_OPENED = 0x001, TPM_DIDMINOR = 0x002, TPM_DIDREGSMAP = 0x004, TPM_DIDINTMUTEX = 0x008, TPM_DIDINTCV = 0x010, TPM_DID_IO_ALLOC = 0x100, TPM_DID_IO_MUTEX = 0x200, TPM_DID_IO_CV = 0x400, TPM_DID_MUTEX = 0x800, TPM_DID_SOFT_STATE = 0x1000, #ifdef sun4v TPM_HSVC_REGISTERED = 0x2000 #endif }; typedef struct tpm_state tpm_state_t; /* TPM specific data structure */ struct tpm_state { /* TPM specific */ TPM_CAP_VERSION_INFO vers_info; /* OS specific */ int instance; dev_info_t *dip; ddi_acc_handle_t handle; kmutex_t dev_lock; uint8_t dev_held; /* * For read/write */ uint8_t *iobuf; size_t bufsize; uint8_t iobuf_inuse; kmutex_t iobuf_lock; kcondvar_t iobuf_cv; /* * For supporting the interrupt */ uint8_t intr_enabled; ddi_intr_handle_t *h_array; uint_t intr_pri; unsigned int state; uint8_t *addr; /* where TPM is mapped to */ char locality; /* keep track of the locality */ uint32_t flags; /* flags to keep track of what is allocated */ clock_t duration[4]; /* short,medium,long,undefined */ clock_t timeout_a; clock_t timeout_b; clock_t timeout_c; clock_t timeout_d; clock_t timeout_poll; ddi_device_acc_attr_t accattr; /* For power management. */ kmutex_t pm_mutex; kcondvar_t suspend_cv; uint32_t suspended; #ifdef KCF_TPM_RNG_PROVIDER /* For RNG */ crypto_kcf_provider_handle_t n_prov; #endif }; #endif /* _TPM_DDI_H */