| Index: drivers/tpm/slb9635_i2c/tddl.c
|
| diff --git a/drivers/tpm/slb9635_i2c/tddl.c b/drivers/tpm/slb9635_i2c/tddl.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a678a25bca6cb7a8b2ccc28fbd3da91c2ccdad46
|
| --- /dev/null
|
| +++ b/drivers/tpm/slb9635_i2c/tddl.c
|
| @@ -0,0 +1,86 @@
|
| +/*******************************************************************************
|
| + **
|
| + ** FILENAME: $Id: i2c_tddl.c 59 2010-10-20 10:04:48Z hkr $
|
| + ** COPYRIGHT: Infineon Technologies
|
| + ** DESCRIPTION: Infineon_TPM-I2C - TDD supporting FW 2010.
|
| + ** CREATION DATE: 2010/11/10
|
| + ** LAST CHANGE: $Date: 2010-10-20 12:04:48 +0200 (Wed, 20 Oct 2010) $
|
| + ** $Author$
|
| + ** VERSION: $Revision: 59 $
|
| + **
|
| + ******************************************************************************/
|
| +#include <exports.h>
|
| +
|
| +#include "tddl.h"
|
| +#include "compatibility.h"
|
| +#include "tpm.h"
|
| +
|
| +/* buffer supporting tpm_transmit */
|
| +#define TDDL_BUFSIZE 4096
|
| +uint8_t tmpbuf[TDDL_BUFSIZE];
|
| +
|
| +/* Open connection to TPM */
|
| +TDDL_RESULT TDDL_Open(void)
|
| +{
|
| + dbg_printf("INFO: initialising I2C bus TDDL\n");
|
| + if (tpm_open() < 0)
|
| + return TDDL_E_FAIL;
|
| + else
|
| + return TDDL_SUCCESS;
|
| +}
|
| +
|
| +/* Disconnect from the TPM */
|
| +TDDL_RESULT TDDL_Close(void)
|
| +{
|
| + tpm_close();
|
| + return TDDL_SUCCESS;
|
| +}
|
| +
|
| +/* Send the TPM Application Protocol Data Unit (APDU) to the TPM and
|
| + * return the response APDU */
|
| +TDDL_RESULT TDDL_TransmitData(uint8_t *pbTransmitBuf, uint32_t dwTransmitBufLen,
|
| + uint8_t *pbReceiveBuf, uint32_t *pdwReceiveBufLen)
|
| +{
|
| + int len;
|
| + uint32_t i;
|
| + TDDL_RESULT rc = TDDL_E_FAIL;
|
| +
|
| + dbg_printf("--> xTDDL_TransmitData()\n");
|
| +
|
| + dbg_printf("pbTransmitBuf = ");
|
| + for (i = 0; i < dwTransmitBufLen; i++)
|
| + dbg_printf("%02x ", pbTransmitBuf[i]);
|
| + dbg_printf("\n");
|
| +
|
| + /* copy buffer to make sure transmit data may be overwritten */
|
| + memcpy(tmpbuf, pbTransmitBuf, dwTransmitBufLen);
|
| +
|
| + /* do transmission */
|
| + len = tpm_transmit(tmpbuf, TDDL_BUFSIZE);
|
| +
|
| + if (len >= 10) {
|
| + memcpy(pbReceiveBuf, tmpbuf, len);
|
| + dbg_printf("INFO: copied %d bytes into pbReceiveBuf\n", len);
|
| + rc = switch_endian32(&tmpbuf[TPM_RSP_RC_BYTE]);
|
| + *pdwReceiveBufLen = len;
|
| + } else {
|
| + dbg_printf("ERROR: tpm_transmit() returned %d\n", len);
|
| + *pdwReceiveBufLen = 0;
|
| + }
|
| +
|
| + dbg_printf("pbReceiveBuf = ");
|
| + for (i = 0; i < (*pdwReceiveBufLen); i++)
|
| + dbg_printf("%02x ", pbReceiveBuf[i]);
|
| + dbg_printf("\n");
|
| +
|
| + dbg_printf("<-- xTDDL_TransmitData()\n");
|
| +
|
| + return rc;
|
| +}
|
| +
|
| +/* Return the requested capability of the TPM or the driver */
|
| +TDDL_RESULT TDDL_GetCapability(uint32_t dwCapArea, uint32_t dwSubCap,
|
| + uint8_t *pbReceiveBuf, uint32_t *pdwReceiveBufLen)
|
| +{
|
| + return TDDL_E_FAIL;
|
| +}
|
|
|