147e946e7SWyllys Ingersoll /* 247e946e7SWyllys Ingersoll * CDDL HEADER START 347e946e7SWyllys Ingersoll * 447e946e7SWyllys Ingersoll * The contents of this file are subject to the terms of the 547e946e7SWyllys Ingersoll * Common Development and Distribution License (the "License"). 647e946e7SWyllys Ingersoll * You may not use this file except in compliance with the License. 747e946e7SWyllys Ingersoll * 847e946e7SWyllys Ingersoll * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 947e946e7SWyllys Ingersoll * or http://www.opensolaris.org/os/licensing. 1047e946e7SWyllys Ingersoll * See the License for the specific language governing permissions 1147e946e7SWyllys Ingersoll * and limitations under the License. 1247e946e7SWyllys Ingersoll * 1347e946e7SWyllys Ingersoll * When distributing Covered Code, include this CDDL HEADER in each 1447e946e7SWyllys Ingersoll * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1547e946e7SWyllys Ingersoll * If applicable, add the following below this CDDL HEADER, with the 1647e946e7SWyllys Ingersoll * fields enclosed by brackets "[]" replaced with your own identifying 1747e946e7SWyllys Ingersoll * information: Portions Copyright [yyyy] [name of copyright owner] 1847e946e7SWyllys Ingersoll * 1947e946e7SWyllys Ingersoll * CDDL HEADER END 2047e946e7SWyllys Ingersoll */ 2147e946e7SWyllys Ingersoll 2247e946e7SWyllys Ingersoll /* 2347e946e7SWyllys Ingersoll * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 2447e946e7SWyllys Ingersoll * Use is subject to license terms. 2547e946e7SWyllys Ingersoll */ 2647e946e7SWyllys Ingersoll #ifndef _TPM_TIS_H 2747e946e7SWyllys Ingersoll #define _TPM_TIS_H 2847e946e7SWyllys Ingersoll 2947e946e7SWyllys Ingersoll /* 3047e946e7SWyllys Ingersoll * TPM Interface Specification Defaults 3147e946e7SWyllys Ingersoll * ICH7 spec (pg 253) says this is the base 3247e946e7SWyllys Ingersoll * TPM on LPC: FED40000-FED40FFF But this is only locality 0 3347e946e7SWyllys Ingersoll * It has to include 4 localities so the real range is FED40000-FED44FFF 3447e946e7SWyllys Ingersoll * (TIS 1.2 pg 27) 3547e946e7SWyllys Ingersoll */ 3647e946e7SWyllys Ingersoll #define TIS_MEM_BASE 0xFED40000 3747e946e7SWyllys Ingersoll #define TIS_MEM_LEN 0x5000 3847e946e7SWyllys Ingersoll 39*8d26100cSWyllys Ingersoll #define TPM_LOCALITY_OFFSET(x) ((x) << 12) 40*8d26100cSWyllys Ingersoll 4147e946e7SWyllys Ingersoll /* Used to gain ownership */ 42*8d26100cSWyllys Ingersoll #define TPM_ACCESS 0x0000 4347e946e7SWyllys Ingersoll /* Enable Interrupts */ 44*8d26100cSWyllys Ingersoll #define TPM_INT_ENABLE 0x0008 4547e946e7SWyllys Ingersoll /* Interrupt vector (SIRQ values) */ 46*8d26100cSWyllys Ingersoll #define TPM_INT_VECTOR 0x000C 4747e946e7SWyllys Ingersoll /* What caused interrupt */ 48*8d26100cSWyllys Ingersoll #define TPM_INT_STATUS 0x0010 4947e946e7SWyllys Ingersoll /* Supported Interrupts */ 50*8d26100cSWyllys Ingersoll #define TPM_INTF_CAP 0x0014 5147e946e7SWyllys Ingersoll /* Status Register */ 52*8d26100cSWyllys Ingersoll #define TPM_STS 0x0018 5347e946e7SWyllys Ingersoll /* I/O FIFO */ 54*8d26100cSWyllys Ingersoll #define TPM_DATA_FIFO 0x0024 5547e946e7SWyllys Ingersoll /* Vendor and Device ID */ 56*8d26100cSWyllys Ingersoll #define TPM_DID_VID 0x0F00 5747e946e7SWyllys Ingersoll /* Revision ID */ 58*8d26100cSWyllys Ingersoll #define TPM_RID 0x0F04 5947e946e7SWyllys Ingersoll 6047e946e7SWyllys Ingersoll /* The number of all ordinals */ 6147e946e7SWyllys Ingersoll #define TSC_ORDINAL_MAX 12 6247e946e7SWyllys Ingersoll #define TPM_ORDINAL_MAX 243 6347e946e7SWyllys Ingersoll #define TSC_ORDINAL_MASK 0x40000000 6447e946e7SWyllys Ingersoll 6547e946e7SWyllys Ingersoll /* Timeouts (in milliseconds) (TIS v1.2 pg 43) */ 6647e946e7SWyllys Ingersoll #define TPM_REQUEST_TIMEOUT 9000000 /* 9 seconds...too long? */ 6747e946e7SWyllys Ingersoll #define TPM_POLLING_TIMEOUT 10000 /* 10 ms for polling */ 6847e946e7SWyllys Ingersoll 6947e946e7SWyllys Ingersoll enum tis_timeouts { 7047e946e7SWyllys Ingersoll TIS_TIMEOUT_A = 750000, 7147e946e7SWyllys Ingersoll TIS_TIMEOUT_B = 2000000, 7247e946e7SWyllys Ingersoll TIS_TIMEOUT_C = 750000, 7347e946e7SWyllys Ingersoll TIS_TIMEOUT_D = 750000 7447e946e7SWyllys Ingersoll }; 7547e946e7SWyllys Ingersoll 7647e946e7SWyllys Ingersoll #define TPM_DEFAULT_DURATION 750000 7747e946e7SWyllys Ingersoll 7847e946e7SWyllys Ingersoll /* Possible TPM_ACCESS register bit values (TIS 1.2 pg.47-49) */ 7947e946e7SWyllys Ingersoll enum tis_access { 8047e946e7SWyllys Ingersoll TPM_ACCESS_VALID = 0x80, 8147e946e7SWyllys Ingersoll TPM_ACCESS_ACTIVE_LOCALITY = 0x20, 8247e946e7SWyllys Ingersoll TPM_ACCESS_REQUEST_PENDING = 0x04, 8347e946e7SWyllys Ingersoll TPM_ACCESS_REQUEST_USE = 0x02 8447e946e7SWyllys Ingersoll }; 8547e946e7SWyllys Ingersoll 8647e946e7SWyllys Ingersoll /* Possible TPM_STS register values (TIS 1.2 pg.52-54) */ 8747e946e7SWyllys Ingersoll enum tis_status { 8847e946e7SWyllys Ingersoll /* bit 0 and bit 2 are reserved */ 8947e946e7SWyllys Ingersoll TPM_STS_RESPONSE_RETRY = 0x02, /* bit 1 */ 9047e946e7SWyllys Ingersoll TPM_STS_DATA_EXPECT = 0x08, /* bit 3 */ 9147e946e7SWyllys Ingersoll TPM_STS_DATA_AVAIL = 0x10, /* bit 4 */ 9247e946e7SWyllys Ingersoll TPM_STS_GO = 0x20, /* bit 5 */ 9347e946e7SWyllys Ingersoll TPM_STS_CMD_READY = 0x40, /* bit 6 */ 9447e946e7SWyllys Ingersoll TPM_STS_VALID = 0x80 /* bit 7 */ 9547e946e7SWyllys Ingersoll }; 9647e946e7SWyllys Ingersoll 9747e946e7SWyllys Ingersoll /* Possible TPM_INTF_CAPABILITY register values (TIS 1.2 pg.55) */ 9847e946e7SWyllys Ingersoll enum tis_intf_cap { 9947e946e7SWyllys Ingersoll TPM_INTF_BURST_COUNT_STATIC = 0x100, 10047e946e7SWyllys Ingersoll TPM_INTF_CMD_READY_INT = 0x080, 10147e946e7SWyllys Ingersoll TPM_INTF_INT_EDGE_FALLING = 0x040, 10247e946e7SWyllys Ingersoll TPM_INTF_INT_EDGE_RISING = 0x020, 10347e946e7SWyllys Ingersoll TPM_INTF_INT_LEVEL_LOW = 0x010, 10447e946e7SWyllys Ingersoll TPM_INTF_INT_LEVEL_HIGH = 0x008, 10547e946e7SWyllys Ingersoll TPM_INTF_INT_LOCALITY_CHANGE_INT = 0x004, 10647e946e7SWyllys Ingersoll TPM_INTF_INT_STS_VALID_INT = 0x002, 10747e946e7SWyllys Ingersoll TPM_INTF_INT_DATA_AVAIL_INT = 0x001 10847e946e7SWyllys Ingersoll }; 10947e946e7SWyllys Ingersoll 11047e946e7SWyllys Ingersoll /* Possible TPM_INT_ENABLE register values (TIS 1.2 pg.62-63) */ 11147e946e7SWyllys Ingersoll /* Interrupt enable bit for TPM_INT_ENABLE_x register */ 11247e946e7SWyllys Ingersoll /* Too big to fit in enum... */ 11347e946e7SWyllys Ingersoll #define TPM_INT_GLOBAL_EN 0x80000000 11447e946e7SWyllys Ingersoll enum tis_int_enable { 11547e946e7SWyllys Ingersoll TPM_INT_CMD_RDY_EN = 0x80, 11647e946e7SWyllys Ingersoll TPM_INT_LOCAL_CHANGE_INT_EN = 0x04, 11747e946e7SWyllys Ingersoll TPM_INT_STS_VALID_EN = 0x02, 11847e946e7SWyllys Ingersoll TPM_INT_STS_DATA_AVAIL_EN = 0x01 11947e946e7SWyllys Ingersoll }; 12047e946e7SWyllys Ingersoll 12147e946e7SWyllys Ingersoll #endif /* _TPM_TIS_H */ 122