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()
219 static inline void tpm_tis_i2c_tpm_send(TPMStateI2C *i2cst) in tpm_tis_i2c_tpm_send() argument
225 if ((i2cst->operation == OP_SEND) && (i2cst->offset > 1)) { in tpm_tis_i2c_tpm_send()
227 switch (i2cst->data[0]) { in tpm_tis_i2c_tpm_send()
233 i2cst->csum_enable = i2cst->data[1] & TPM_DATA_CSUM_ENABLED; in tpm_tis_i2c_tpm_send()
243 if (TPM_TIS_I2C_IS_VALID_LOCTY(i2cst->data[1])) { in tpm_tis_i2c_tpm_send()
244 i2cst->loc_sel = i2cst->data[1]; in tpm_tis_i2c_tpm_send()
251 data = i2cst->data[1]; in tpm_tis_i2c_tpm_send()
252 data |= i2cst->data[2] << 8; in tpm_tis_i2c_tpm_send()
253 data |= i2cst->data[3] << 16; in tpm_tis_i2c_tpm_send()
254 data |= i2cst->data[4] << 24; in tpm_tis_i2c_tpm_send()
257 switch (i2cst->data[0]) { in tpm_tis_i2c_tpm_send()
269 offset = i2cst->data[0] - TPM_I2C_REG_STS; in tpm_tis_i2c_tpm_send()
277 tpm_tis_write_data(&i2cst->state, i2cst->tis_addr + offset, data, in tpm_tis_i2c_tpm_send()
282 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_tpm_send()
291 TPMStateI2C *i2cst = TPM_TIS_I2C(ti); in tpm_tis_i2c_request_completed() local
292 TPMState *s = &i2cst->state; in tpm_tis_i2c_request_completed()
300 TPMStateI2C *i2cst = TPM_TIS_I2C(ti); in tpm_tis_i2c_get_tpm_version() local
301 TPMState *s = &i2cst->state; in tpm_tis_i2c_get_tpm_version()
308 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_event() local
317 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_event()
321 if (i2cst->operation == OP_SEND) { in tpm_tis_i2c_event()
322 tpm_tis_i2c_tpm_send(i2cst); in tpm_tis_i2c_event()
324 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_event()
343 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_recv() local
344 TPMState *s = &i2cst->state; in tpm_tis_i2c_recv()
345 uint16_t i2c_reg = i2cst->data[0]; in tpm_tis_i2c_recv()
348 if (i2cst->operation == OP_RECV) { in tpm_tis_i2c_recv()
351 if (i2cst->data[0] == TPM_I2C_REG_DATA_FIFO) { in tpm_tis_i2c_recv()
352 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 1); in tpm_tis_i2c_recv()
354 } else if (i2cst->offset < sizeof(i2cst->data)) { in tpm_tis_i2c_recv()
355 ret = i2cst->data[i2cst->offset++]; in tpm_tis_i2c_recv()
358 } else if ((i2cst->operation == OP_SEND) && (i2cst->offset < 2)) { in tpm_tis_i2c_recv()
361 i2cst->operation = OP_RECV; in tpm_tis_i2c_recv()
366 tpm_tis_i2c_set_data(i2cst, i2cst->loc_sel); in tpm_tis_i2c_recv()
370 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 1); in tpm_tis_i2c_recv()
371 tpm_tis_i2c_set_data(i2cst, (data_read & 0xff)); in tpm_tis_i2c_recv()
374 tpm_tis_i2c_set_data(i2cst, i2cst->csum_enable); in tpm_tis_i2c_recv()
381 tpm_tis_i2c_set_data(i2cst, TPM_I2C_INT_ENABLE_MASK); in tpm_tis_i2c_recv()
391 tpm_tis_i2c_set_data(i2cst, data_read); in tpm_tis_i2c_recv()
394 data_read = tpm_tis_read_data(s, i2cst->tis_addr, 4); in tpm_tis_i2c_recv()
399 data_read = tpm_tis_i2c_interface_capability(i2cst, in tpm_tis_i2c_recv()
422 tpm_tis_i2c_set_data(i2cst, data_read); in tpm_tis_i2c_recv()
427 i2cst->offset = 1; /* keep the register value intact for debug */ in tpm_tis_i2c_recv()
428 ret = i2cst->data[i2cst->offset++]; in tpm_tis_i2c_recv()
430 i2cst->operation = OP_RECV; in tpm_tis_i2c_recv()
444 TPMStateI2C *i2cst = TPM_TIS_I2C(i2c); in tpm_tis_i2c_send() local
447 if (i2cst->offset == 0) { in tpm_tis_i2c_send()
449 tpm_tis_i2c_to_tis_reg(i2cst, data); in tpm_tis_i2c_send()
450 if (i2cst->tis_addr == 0xffffffff) { in tpm_tis_i2c_send()
454 trace_tpm_tis_i2c_send_reg(i2cst->reg_name, data); in tpm_tis_i2c_send()
466 if (i2cst->offset < sizeof(i2cst->data)) { in tpm_tis_i2c_send()
467 i2cst->operation = OP_SEND; in tpm_tis_i2c_send()
476 if ((i2cst->offset == 0) || in tpm_tis_i2c_send()
477 (i2cst->data[0] != TPM_I2C_REG_DATA_FIFO)) { in tpm_tis_i2c_send()
478 i2cst->data[i2cst->offset++] = data; in tpm_tis_i2c_send()
484 tpm_tis_write_data(&i2cst->state, i2cst->tis_addr, data, 1); in tpm_tis_i2c_send()
501 TPMStateI2C *i2cst = TPM_TIS_I2C(dev); in tpm_tis_i2c_realizefn() local
502 TPMState *s = &i2cst->state; in tpm_tis_i2c_realizefn()
523 TPMStateI2C *i2cst = TPM_TIS_I2C(dev); in tpm_tis_i2c_reset() local
524 TPMState *s = &i2cst->state; in tpm_tis_i2c_reset()
526 tpm_tis_i2c_clear_data(i2cst); in tpm_tis_i2c_reset()
528 i2cst->csum_enable = 0; in tpm_tis_i2c_reset()
529 i2cst->loc_sel = 0x00; in tpm_tis_i2c_reset()