Lines Matching refs:i2cst
62 static inline void tpm_tis_i2c_to_tis_reg(TPMStateI2C *i2cst, uint8_t i2c_reg);
97 TPMStateI2C *i2cst = opaque; in tpm_tis_i2c_pre_save() local
99 return tpm_tis_pre_save(&i2cst->state); in tpm_tis_i2c_pre_save()
104 TPMStateI2C *i2cst = opaque; in tpm_tis_i2c_post_load() local
106 if (i2cst->offset >= 1) { in tpm_tis_i2c_post_load()
107 tpm_tis_i2c_to_tis_reg(i2cst, i2cst->data[0]); in tpm_tis_i2c_post_load()
143 static void tpm_tis_i2c_set_data(TPMStateI2C *i2cst, uint32_t data) in tpm_tis_i2c_set_data() argument
145 i2cst->data[1] = data; in tpm_tis_i2c_set_data()
146 i2cst->data[2] = data >> 8; in tpm_tis_i2c_set_data()
147 i2cst->data[3] = data >> 16; in tpm_tis_i2c_set_data()
148 i2cst->data[4] = data >> 24; in tpm_tis_i2c_set_data()
155 static uint32_t tpm_tis_i2c_interface_capability(TPMStateI2C *i2cst, in tpm_tis_i2c_interface_capability() argument
179 static inline void tpm_tis_i2c_to_tis_reg(TPMStateI2C *i2cst, uint8_t i2c_reg) in tpm_tis_i2c_to_tis_reg() argument
184 i2cst->tis_addr = 0xffffffff; in tpm_tis_i2c_to_tis_reg()
194 i2cst->reg_name = reg_map->reg_name; in tpm_tis_i2c_to_tis_reg()
195 i2cst->tis_addr = reg_map->tis_reg; in tpm_tis_i2c_to_tis_reg()
198 assert(TPM_TIS_I2C_IS_VALID_LOCTY(i2cst->loc_sel)); in tpm_tis_i2c_to_tis_reg()
199 i2cst->tis_addr += (i2cst->loc_sel << TPM_TIS_LOCALITY_SHIFT); in tpm_tis_i2c_to_tis_reg()
206 static inline void tpm_tis_i2c_clear_data(TPMStateI2C *i2cst) in tpm_tis_i2c_clear_data() argument
209 i2cst->operation = 0; in tpm_tis_i2c_clear_data()
210 i2cst->offset = 0; in tpm_tis_i2c_clear_data()
211 i2cst->tis_addr = 0xffffffff; in tpm_tis_i2c_clear_data()
212 i2cst->reg_name = NULL; in tpm_tis_i2c_clear_data()
213 memset(i2cst->data, 0, sizeof(i2cst->data)); in tpm_tis_i2c_clear_data()
217 static inline void tpm_tis_i2c_tpm_send(TPMStateI2C *i2cst) in tpm_tis_i2c_tpm_send() argument
223 if ((i2cst->operation == OP_SEND) && (i2cst->offset > 1)) { in tpm_tis_i2c_tpm_send()
225 switch (i2cst->data[0]) { in tpm_tis_i2c_tpm_send()
231 i2cst->csum_enable = i2cst->data[1] & TPM_DATA_CSUM_ENABLED; in tpm_tis_i2c_tpm_send()
241 if (TPM_TIS_I2C_IS_VALID_LOCTY(i2cst->data[1])) { in tpm_tis_i2c_tpm_send()
242 i2cst->loc_sel = i2cst->data[1]; in tpm_tis_i2c_tpm_send()
249 data = i2cst->data[1]; in tpm_tis_i2c_tpm_send()
250 data |= i2cst->data[2] << 8; in tpm_tis_i2c_tpm_send()
251 data |= i2cst->data[3] << 16; in tpm_tis_i2c_tpm_send()
252 data |= i2cst->data[4] << 24; in tpm_tis_i2c_tpm_send()
255 switch (i2cst->data[0]) { in tpm_tis_i2c_tpm_send()
267 offset = i2cst->data[0] - TPM_I2C_REG_STS; in tpm_tis_i2c_tpm_send()
275 tpm_tis_write_data(&i2cst->state, i2cst->tis_addr + offset, data, in tpm_tis_i2c_tpm_send()
280 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_tpm_send()
287 TPMStateI2C *i2cst = TPM_TIS_I2C(ti); in tpm_tis_i2c_request_completed() local
288 TPMState *s = &i2cst->state; in tpm_tis_i2c_request_completed()
296 TPMStateI2C *i2cst = TPM_TIS_I2C(ti); in tpm_tis_i2c_get_tpm_version() local
297 TPMState *s = &i2cst->state; in tpm_tis_i2c_get_tpm_version()
304 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_event() local
313 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_event()
317 if (i2cst->operation == OP_SEND) { in tpm_tis_i2c_event()
318 tpm_tis_i2c_tpm_send(i2cst); in tpm_tis_i2c_event()
320 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_event()
339 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_recv() local
340 TPMState *s = &i2cst->state; in tpm_tis_i2c_recv()
341 uint16_t i2c_reg = i2cst->data[0]; in tpm_tis_i2c_recv()
344 if (i2cst->operation == OP_RECV) { in tpm_tis_i2c_recv()
347 if (i2cst->data[0] == TPM_I2C_REG_DATA_FIFO) { in tpm_tis_i2c_recv()
348 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 1); in tpm_tis_i2c_recv()
350 } else if (i2cst->offset < sizeof(i2cst->data)) { in tpm_tis_i2c_recv()
351 ret = i2cst->data[i2cst->offset++]; in tpm_tis_i2c_recv()
354 } else if ((i2cst->operation == OP_SEND) && (i2cst->offset < 2)) { in tpm_tis_i2c_recv()
357 i2cst->operation = OP_RECV; in tpm_tis_i2c_recv()
362 tpm_tis_i2c_set_data(i2cst, i2cst->loc_sel); in tpm_tis_i2c_recv()
366 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 1); in tpm_tis_i2c_recv()
367 tpm_tis_i2c_set_data(i2cst, (data_read & 0xff)); in tpm_tis_i2c_recv()
370 tpm_tis_i2c_set_data(i2cst, i2cst->csum_enable); in tpm_tis_i2c_recv()
377 tpm_tis_i2c_set_data(i2cst, TPM_I2C_INT_ENABLE_MASK); in tpm_tis_i2c_recv()
387 tpm_tis_i2c_set_data(i2cst, data_read); in tpm_tis_i2c_recv()
390 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 4); in tpm_tis_i2c_recv()
395 data_read = tpm_tis_i2c_interface_capability(i2cst, in tpm_tis_i2c_recv()
418 tpm_tis_i2c_set_data(i2cst, data_read); in tpm_tis_i2c_recv()
423 i2cst->offset = 1; /* keep the register value intact for debug */ in tpm_tis_i2c_recv()
424 ret = i2cst->data[i2cst->offset++]; in tpm_tis_i2c_recv()
426 i2cst->operation = OP_RECV; in tpm_tis_i2c_recv()
440 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_send() local
443 if (i2cst->offset == 0) { in tpm_tis_i2c_send()
445 tpm_tis_i2c_to_tis_reg(i2cst, data); in tpm_tis_i2c_send()
446 if (i2cst->tis_addr == 0xffffffff) { in tpm_tis_i2c_send()
450 trace_tpm_tis_i2c_send_reg(i2cst->reg_name, data); in tpm_tis_i2c_send()
462 if (i2cst->offset < sizeof(i2cst->data)) { in tpm_tis_i2c_send()
463 i2cst->operation = OP_SEND; in tpm_tis_i2c_send()
472 if ((i2cst->offset == 0) || in tpm_tis_i2c_send()
473 (i2cst->data[0] != TPM_I2C_REG_DATA_FIFO)) { in tpm_tis_i2c_send()
474 i2cst->data[i2cst->offset++] = data; in tpm_tis_i2c_send()
480 tpm_tis_write_data(&i2cst->state, i2cst->tis_addr, data, 1); in tpm_tis_i2c_send()
496 TPMStateI2C *i2cst = TPM_TIS_I2C(dev); in tpm_tis_i2c_realizefn() local
497 TPMState *s = &i2cst->state; in tpm_tis_i2c_realizefn()
518 TPMStateI2C *i2cst = TPM_TIS_I2C(dev); in tpm_tis_i2c_reset() local
519 TPMState *s = &i2cst->state; in tpm_tis_i2c_reset()
521 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_reset()
523 i2cst->csum_enable = 0; in tpm_tis_i2c_reset()
524 i2cst->loc_sel = 0x00; in tpm_tis_i2c_reset()