Lines Matching refs:crb

182 	struct tpm_crb *const crb = arg;  in tpm_crb_thread()  local
184 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
190 if (crb->closing) in tpm_crb_thread()
193 pthread_cond_wait(&crb->cond, &crb->mutex); in tpm_crb_thread()
195 if (crb->closing) in tpm_crb_thread()
198 const uint64_t cmd_addr = CRB_CMD_ADDR_READ(crb->regs); in tpm_crb_thread()
199 const uint64_t rsp_addr = CRB_RSP_ADDR_READ(crb->regs); in tpm_crb_thread()
200 const uint32_t cmd_size = CRB_CMD_SIZE_READ(crb->regs); in tpm_crb_thread()
201 const uint32_t rsp_size = CRB_RSP_SIZE_READ(crb->regs); in tpm_crb_thread()
218 memcpy(cmd, crb->regs.data_buffer, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
225 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
240 crb->emul->execute_cmd(crb->emul_sc, &cmd[cmd_off], cmd_size, in tpm_crb_thread()
243 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
244 memset(crb->regs.data_buffer, 0, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
245 memcpy(&crb->regs.data_buffer[rsp_off], &rsp[rsp_off], rsp_size); in tpm_crb_thread()
247 crb->regs.ctrl_start.start = false; in tpm_crb_thread()
249 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
269 struct tpm_crb *crb; in tpm_crb_mem_handler() local
280 crb = arg1; in tpm_crb_mem_handler()
288 ptr = (uint8_t *)&crb->regs + off; in tpm_crb_mem_handler()
306 crb->regs.loc_sts.granted = false; in tpm_crb_mem_handler()
307 crb->regs.loc_state.loc_assigned = false; in tpm_crb_mem_handler()
309 crb->regs.loc_sts.granted = true; in tpm_crb_mem_handler()
310 crb->regs.loc_state.loc_assigned = true; in tpm_crb_mem_handler()
325 crb->regs.ctrl_sts.tpm_idle = false; in tpm_crb_mem_handler()
327 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_mem_handler()
348 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
351 if (!start.start || crb->regs.ctrl_start.start) { in tpm_crb_mem_handler()
352 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
356 crb->regs.ctrl_start.start = true; in tpm_crb_mem_handler()
358 pthread_cond_signal(&crb->cond); in tpm_crb_mem_handler()
359 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
378 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
380 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
425 struct tpm_crb *crb = NULL; in tpm_crb_init() local
431 crb = calloc(1, sizeof(struct tpm_crb)); in tpm_crb_init()
432 if (crb == NULL) { in tpm_crb_init()
438 memset(crb, 0, sizeof(*crb)); in tpm_crb_init()
440 crb->emul = emul; in tpm_crb_init()
441 crb->emul_sc = emul_sc; in tpm_crb_init()
443 crb->regs.loc_state.tpm_req_valid_sts = true; in tpm_crb_init()
444 crb->regs.loc_state.tpm_established = true; in tpm_crb_init()
446 crb->regs.intf_id.interface_type = TPM_INTF_TYPE_CRB; in tpm_crb_init()
447 crb->regs.intf_id.interface_version = TPM_INTF_VERSION_CRB; in tpm_crb_init()
448 crb->regs.intf_id.cap_locality = false; in tpm_crb_init()
449 crb->regs.intf_id.cap_crb_idle_bypass = false; in tpm_crb_init()
450 crb->regs.intf_id.cap_data_xfer_size_support = in tpm_crb_init()
452 crb->regs.intf_id.cap_fifo = false; in tpm_crb_init()
453 crb->regs.intf_id.cap_crb = true; in tpm_crb_init()
454 crb->regs.intf_id.interface_selector = TPM_INTF_SELECTOR_CRB; in tpm_crb_init()
455 crb->regs.intf_id.intf_sel_lock = false; in tpm_crb_init()
456 crb->regs.intf_id.rid = 0; in tpm_crb_init()
457 crb->regs.intf_id.vid = 0x1014; /* IBM */ in tpm_crb_init()
458 crb->regs.intf_id.did = 0x1014; /* IBM */ in tpm_crb_init()
460 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_init()
462 CRB_CMD_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
463 CRB_CMD_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
464 CRB_RSP_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
465 CRB_RSP_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
468 TPM_CRB_LOG_AREA_MINIMUM_SIZE, crb->tpm_log_area); in tpm_crb_init()
481 error = tpm_crb_modify_mmio_registration(true, crb); in tpm_crb_init()
487 error = pthread_mutex_init(&crb->mutex, NULL); in tpm_crb_init()
493 error = pthread_cond_init(&crb->cond, NULL); in tpm_crb_init()
499 error = pthread_create(&crb->thread, NULL, tpm_crb_thread, crb); in tpm_crb_init()
505 pthread_set_name_np(crb->thread, "tpm_intf_crb"); in tpm_crb_init()
507 *sc = crb; in tpm_crb_init()
512 free(crb); in tpm_crb_init()
520 struct tpm_crb *crb; in tpm_crb_deinit() local
527 crb = sc; in tpm_crb_deinit()
529 crb->closing = true; in tpm_crb_deinit()
530 pthread_cond_signal(&crb->cond); in tpm_crb_deinit()
531 pthread_join(crb->thread, NULL); in tpm_crb_deinit()
533 pthread_cond_destroy(&crb->cond); in tpm_crb_deinit()
534 pthread_mutex_destroy(&crb->mutex); in tpm_crb_deinit()
539 free(crb); in tpm_crb_deinit()