Lines Matching refs:crb
195 struct tpm_crb *const crb = arg; in tpm_crb_thread() local
197 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
203 if (crb->closing) in tpm_crb_thread()
206 pthread_cond_wait(&crb->cond, &crb->mutex); in tpm_crb_thread()
208 if (crb->closing) in tpm_crb_thread()
211 const uint64_t cmd_addr = CRB_CMD_ADDR_READ(crb->regs); in tpm_crb_thread()
212 const uint64_t rsp_addr = CRB_RSP_ADDR_READ(crb->regs); in tpm_crb_thread()
213 const uint32_t cmd_size = CRB_CMD_SIZE_READ(crb->regs); in tpm_crb_thread()
214 const uint32_t rsp_size = CRB_RSP_SIZE_READ(crb->regs); in tpm_crb_thread()
251 memcpy(cmd, crb->regs.data_buffer, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
269 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
284 (void) crb->emul->execute_cmd(crb->emul_sc, req, in tpm_crb_thread()
287 pthread_mutex_lock(&crb->mutex); in tpm_crb_thread()
288 memset(crb->regs.data_buffer, 0, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_thread()
289 memcpy(&crb->regs.data_buffer[rsp_off], &rsp[rsp_off], rsp_size); in tpm_crb_thread()
291 crb->regs.ctrl_start.start = false; in tpm_crb_thread()
293 pthread_mutex_unlock(&crb->mutex); in tpm_crb_thread()
313 struct tpm_crb *crb; in tpm_crb_mem_handler() local
324 crb = arg1; in tpm_crb_mem_handler()
332 ptr = (uint8_t *)&crb->regs + off; in tpm_crb_mem_handler()
350 crb->regs.loc_sts.granted = false; in tpm_crb_mem_handler()
351 crb->regs.loc_state.loc_assigned = false; in tpm_crb_mem_handler()
353 crb->regs.loc_sts.granted = true; in tpm_crb_mem_handler()
354 crb->regs.loc_state.loc_assigned = true; in tpm_crb_mem_handler()
369 crb->regs.ctrl_sts.tpm_idle = false; in tpm_crb_mem_handler()
371 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_mem_handler()
396 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
399 if (!start.start || crb->regs.ctrl_start.start) { in tpm_crb_mem_handler()
400 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
404 crb->regs.ctrl_start.start = true; in tpm_crb_mem_handler()
406 pthread_cond_signal(&crb->cond); in tpm_crb_mem_handler()
407 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
426 pthread_mutex_lock(&crb->mutex); in tpm_crb_mem_handler()
428 pthread_mutex_unlock(&crb->mutex); in tpm_crb_mem_handler()
473 struct tpm_crb *crb = NULL; in tpm_crb_init() local
479 crb = calloc(1, sizeof(struct tpm_crb)); in tpm_crb_init()
480 if (crb == NULL) { in tpm_crb_init()
486 memset(crb, 0, sizeof(*crb)); in tpm_crb_init()
488 crb->emul = emul; in tpm_crb_init()
489 crb->emul_sc = emul_sc; in tpm_crb_init()
491 crb->regs.loc_state.tpm_req_valid_sts = true; in tpm_crb_init()
492 crb->regs.loc_state.tpm_established = true; in tpm_crb_init()
494 crb->regs.intf_id.interface_type = TPM_INTF_TYPE_CRB; in tpm_crb_init()
495 crb->regs.intf_id.interface_version = TPM_INTF_VERSION_CRB; in tpm_crb_init()
496 crb->regs.intf_id.cap_locality = false; in tpm_crb_init()
497 crb->regs.intf_id.cap_crb_idle_bypass = false; in tpm_crb_init()
498 crb->regs.intf_id.cap_data_xfer_size_support = in tpm_crb_init()
500 crb->regs.intf_id.cap_fifo = false; in tpm_crb_init()
501 crb->regs.intf_id.cap_crb = true; in tpm_crb_init()
502 crb->regs.intf_id.interface_selector = TPM_INTF_SELECTOR_CRB; in tpm_crb_init()
503 crb->regs.intf_id.intf_sel_lock = false; in tpm_crb_init()
504 crb->regs.intf_id.rid = 0; in tpm_crb_init()
505 crb->regs.intf_id.vid = 0x1014; /* IBM */ in tpm_crb_init()
506 crb->regs.intf_id.did = 0x1014; /* IBM */ in tpm_crb_init()
508 crb->regs.ctrl_sts.tpm_idle = true; in tpm_crb_init()
510 CRB_CMD_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
511 CRB_CMD_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
512 CRB_RSP_SIZE_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_SIZE); in tpm_crb_init()
513 CRB_RSP_ADDR_WRITE(crb->regs, TPM_CRB_DATA_BUFFER_ADDRESS); in tpm_crb_init()
516 TPM_CRB_LOG_AREA_MINIMUM_SIZE, crb->tpm_log_area); in tpm_crb_init()
529 error = tpm_crb_modify_mmio_registration(true, crb); in tpm_crb_init()
535 error = pthread_mutex_init(&crb->mutex, NULL); in tpm_crb_init()
541 error = pthread_cond_init(&crb->cond, NULL); in tpm_crb_init()
547 error = pthread_create(&crb->thread, NULL, tpm_crb_thread, crb); in tpm_crb_init()
553 pthread_set_name_np(crb->thread, "tpm_intf_crb"); in tpm_crb_init()
555 *sc = crb; in tpm_crb_init()
560 free(crb); in tpm_crb_init()
568 struct tpm_crb *crb; in tpm_crb_deinit() local
575 crb = sc; in tpm_crb_deinit()
577 crb->closing = true; in tpm_crb_deinit()
578 pthread_cond_signal(&crb->cond); in tpm_crb_deinit()
579 pthread_join(crb->thread, NULL); in tpm_crb_deinit()
581 pthread_cond_destroy(&crb->cond); in tpm_crb_deinit()
582 pthread_mutex_destroy(&crb->mutex); in tpm_crb_deinit()
587 free(crb); in tpm_crb_deinit()