47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/*
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * CDDL HEADER START
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll *
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * The contents of this file are subject to the terms of the
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * Common Development and Distribution License (the "License").
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * You may not use this file except in compliance with the License.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll *
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * or http://www.opensolaris.org/os/licensing.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * See the License for the specific language governing permissions
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * and limitations under the License.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll *
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * When distributing Covered Code, include this CDDL HEADER in each
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * If applicable, add the following below this CDDL HEADER, with the
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * fields enclosed by brackets "[]" replaced with your own identifying
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * information: Portions Copyright [yyyy] [name of copyright owner]
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll *
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * CDDL HEADER END
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/*
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * Use is subject to license terms.
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#ifndef _TPM_TIS_H
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define _TPM_TIS_H
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/*
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * TPM Interface Specification Defaults
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * ICH7 spec (pg 253) says this is the base
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * TPM on LPC: FED40000-FED40FFF But this is only locality 0
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * It has to include 4 localities so the real range is FED40000-FED44FFF
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll * (TIS 1.2 pg 27)
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TIS_MEM_BASE 0xFED40000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TIS_MEM_LEN 0x5000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_LOCALITY_OFFSET(x) ((x) << 12)
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Used to gain ownership */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_ACCESS 0x0000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Enable Interrupts */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_INT_ENABLE 0x0008
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Interrupt vector (SIRQ values) */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_INT_VECTOR 0x000C
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* What caused interrupt */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_INT_STATUS 0x0010
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Supported Interrupts */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_INTF_CAP 0x0014
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Status Register */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_STS 0x0018
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* I/O FIFO */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_DATA_FIFO 0x0024
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Vendor and Device ID */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_DID_VID 0x0F00
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Revision ID */
8d26100c1d185652ac4e12e1b6c2337446ad0746Wyllys Ingersoll#define TPM_RID 0x0F04
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* The number of all ordinals */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TSC_ORDINAL_MAX 12
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TPM_ORDINAL_MAX 243
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TSC_ORDINAL_MASK 0x40000000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Timeouts (in milliseconds) (TIS v1.2 pg 43) */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TPM_REQUEST_TIMEOUT 9000000 /* 9 seconds...too long? */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TPM_POLLING_TIMEOUT 10000 /* 10 ms for polling */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersollenum tis_timeouts {
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TIS_TIMEOUT_A = 750000,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TIS_TIMEOUT_B = 2000000,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TIS_TIMEOUT_C = 750000,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TIS_TIMEOUT_D = 750000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll};
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TPM_DEFAULT_DURATION 750000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Possible TPM_ACCESS register bit values (TIS 1.2 pg.47-49) */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersollenum tis_access {
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_ACCESS_VALID = 0x80,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_ACCESS_ACTIVE_LOCALITY = 0x20,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_ACCESS_REQUEST_PENDING = 0x04,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_ACCESS_REQUEST_USE = 0x02
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll};
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Possible TPM_STS register values (TIS 1.2 pg.52-54) */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersollenum tis_status {
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll /* bit 0 and bit 2 are reserved */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_RESPONSE_RETRY = 0x02, /* bit 1 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_DATA_EXPECT = 0x08, /* bit 3 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_DATA_AVAIL = 0x10, /* bit 4 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_GO = 0x20, /* bit 5 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_CMD_READY = 0x40, /* bit 6 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_STS_VALID = 0x80 /* bit 7 */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll};
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Possible TPM_INTF_CAPABILITY register values (TIS 1.2 pg.55) */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersollenum tis_intf_cap {
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_BURST_COUNT_STATIC = 0x100,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_CMD_READY_INT = 0x080,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_EDGE_FALLING = 0x040,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_EDGE_RISING = 0x020,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_LEVEL_LOW = 0x010,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_LEVEL_HIGH = 0x008,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_LOCALITY_CHANGE_INT = 0x004,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_STS_VALID_INT = 0x002,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INTF_INT_DATA_AVAIL_INT = 0x001
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll};
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Possible TPM_INT_ENABLE register values (TIS 1.2 pg.62-63) */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Interrupt enable bit for TPM_INT_ENABLE_x register */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll/* Too big to fit in enum... */
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#define TPM_INT_GLOBAL_EN 0x80000000
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersollenum tis_int_enable {
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INT_CMD_RDY_EN = 0x80,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INT_LOCAL_CHANGE_INT_EN = 0x04,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INT_STS_VALID_EN = 0x02,
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll TPM_INT_STS_DATA_AVAIL_EN = 0x01
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll};
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll
47e946e784719ae402ace34695f67b0e6e76ae5cWyllys Ingersoll#endif /* _TPM_TIS_H */