Lines Matching refs:crb

192 	struct tpm_crb *const crb = arg;  in tpm_crb_thread()  local
194 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
200 if (crb->closing) in tpm_crb_thread()
203 pthread_cond_wait(&crb->cond, &crb->mutex); in tpm_crb_thread()
205 if (crb->closing) in tpm_crb_thread()
208 const uint64_t cmd_addr = CRB_CMD_ADDR_READ(crb->regs); in tpm_crb_thread()
209 const uint64_t rsp_addr = CRB_RSP_ADDR_READ(crb->regs); in tpm_crb_thread()
210 const uint32_t cmd_size = CRB_CMD_SIZE_READ(crb->regs); in tpm_crb_thread()
211 const uint32_t rsp_size = CRB_RSP_SIZE_READ(crb->regs); in tpm_crb_thread()
248 memcpy(cmd, crb->regs.data_buffer, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
266 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
281 (void) crb->emul->execute_cmd(crb->emul_sc, req, in tpm_crb_thread()
284 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
285 memset(crb->regs.data_buffer, 0, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
286 memcpy(&crb->regs.data_buffer[rsp_off], &rsp[rsp_off], rsp_size); in tpm_crb_thread()
288 crb->regs.ctrl_start.start = false; in tpm_crb_thread()
290 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
310 struct tpm_crb *crb; in tpm_crb_mem_handler() local
321 crb = arg1; in tpm_crb_mem_handler()
329 ptr = (uint8_t *)&crb->regs + off; in tpm_crb_mem_handler()
347 crb->regs.loc_sts.granted = false; in tpm_crb_mem_handler()
348 crb->regs.loc_state.loc_assigned = false; in tpm_crb_mem_handler()
350 crb->regs.loc_sts.granted = true; in tpm_crb_mem_handler()
351 crb->regs.loc_state.loc_assigned = true; in tpm_crb_mem_handler()
366 crb->regs.ctrl_sts.tpm_idle = false; in tpm_crb_mem_handler()
368 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_mem_handler()
393 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
396 if (!start.start || crb->regs.ctrl_start.start) { in tpm_crb_mem_handler()
397 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
401 crb->regs.ctrl_start.start = true; in tpm_crb_mem_handler()
403 pthread_cond_signal(&crb->cond); in tpm_crb_mem_handler()
404 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
423 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
425 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
470 struct tpm_crb *crb = NULL; in tpm_crb_init() local
476 crb = calloc(1, sizeof(struct tpm_crb)); in tpm_crb_init()
477 if (crb == NULL) { in tpm_crb_init()
483 memset(crb, 0, sizeof(*crb)); in tpm_crb_init()
485 crb->emul = emul; in tpm_crb_init()
486 crb->emul_sc = emul_sc; in tpm_crb_init()
488 crb->regs.loc_state.tpm_req_valid_sts = true; in tpm_crb_init()
489 crb->regs.loc_state.tpm_established = true; in tpm_crb_init()
491 crb->regs.intf_id.interface_type = TPM_INTF_TYPE_CRB; in tpm_crb_init()
492 crb->regs.intf_id.interface_version = TPM_INTF_VERSION_CRB; in tpm_crb_init()
493 crb->regs.intf_id.cap_locality = false; in tpm_crb_init()
494 crb->regs.intf_id.cap_crb_idle_bypass = false; in tpm_crb_init()
495 crb->regs.intf_id.cap_data_xfer_size_support = in tpm_crb_init()
497 crb->regs.intf_id.cap_fifo = false; in tpm_crb_init()
498 crb->regs.intf_id.cap_crb = true; in tpm_crb_init()
499 crb->regs.intf_id.interface_selector = TPM_INTF_SELECTOR_CRB; in tpm_crb_init()
500 crb->regs.intf_id.intf_sel_lock = false; in tpm_crb_init()
501 crb->regs.intf_id.rid = 0; in tpm_crb_init()
502 crb->regs.intf_id.vid = 0x1014; /* IBM */ in tpm_crb_init()
503 crb->regs.intf_id.did = 0x1014; /* IBM */ in tpm_crb_init()
505 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_init()
507 CRB_CMD_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
508 CRB_CMD_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
509 CRB_RSP_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
510 CRB_RSP_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
513 TPM_CRB_LOG_AREA_MINIMUM_SIZE, crb->tpm_log_area); in tpm_crb_init()
526 error = tpm_crb_modify_mmio_registration(true, crb); in tpm_crb_init()
532 error = pthread_mutex_init(&crb->mutex, NULL); in tpm_crb_init()
538 error = pthread_cond_init(&crb->cond, NULL); in tpm_crb_init()
544 error = pthread_create(&crb->thread, NULL, tpm_crb_thread, crb); in tpm_crb_init()
550 pthread_set_name_np(crb->thread, "tpm_intf_crb"); in tpm_crb_init()
552 *sc = crb; in tpm_crb_init()
557 free(crb); in tpm_crb_init()
565 struct tpm_crb *crb; in tpm_crb_deinit() local
572 crb = sc; in tpm_crb_deinit()
574 crb->closing = true; in tpm_crb_deinit()
575 pthread_cond_signal(&crb->cond); in tpm_crb_deinit()
576 pthread_join(crb->thread, NULL); in tpm_crb_deinit()
578 pthread_cond_destroy(&crb->cond); in tpm_crb_deinit()
579 pthread_mutex_destroy(&crb->mutex); in tpm_crb_deinit()
584 free(crb); in tpm_crb_deinit()