Lines Matching refs:utrd
385 static void get_utrd(utp_utrd_t *utrd) in get_utrd() argument
391 assert(utrd != NULL); in get_utrd()
396 memset((void *)utrd, 0, sizeof(utp_utrd_t)); in get_utrd()
401 utrd->header = base; in get_utrd()
402 utrd->task_tag = 1; /* We always use the first slot */ in get_utrd()
404 utrd->upiu = ALIGN_CDB(utrd->header + sizeof(utrd_header_t)); in get_utrd()
405 utrd->resp_upiu = ALIGN_8(utrd->upiu + sizeof(cmd_upiu_t)); in get_utrd()
406 utrd->size_upiu = utrd->resp_upiu - utrd->upiu; in get_utrd()
407 utrd->size_resp_upiu = ALIGN_8(sizeof(resp_upiu_t)); in get_utrd()
408 utrd->prdt = utrd->resp_upiu + utrd->size_resp_upiu; in get_utrd()
410 hd = (utrd_header_t *)utrd->header; in get_utrd()
411 hd->ucdba = utrd->upiu & UINT32_MAX; in get_utrd()
412 hd->ucdbau = (utrd->upiu >> 32) & UINT32_MAX; in get_utrd()
414 hd->rul = utrd->size_resp_upiu >> 2; in get_utrd()
415 hd->ruo = utrd->size_upiu >> 2; in get_utrd()
422 static int ufs_prepare_cmd(utp_utrd_t *utrd, uint8_t op, uint8_t lun, in ufs_prepare_cmd() argument
433 hd = (utrd_header_t *)utrd->header; in ufs_prepare_cmd()
434 upiu = (cmd_upiu_t *)utrd->upiu; in ufs_prepare_cmd()
441 upiu->task_tag = utrd->task_tag; in ufs_prepare_cmd()
491 utrd->prdt_length = 0; in ufs_prepare_cmd()
495 prdt = (prdt_t *)utrd->prdt; in ufs_prepare_cmd()
515 utrd->prdt_length++; in ufs_prepare_cmd()
517 hd->prdtl = utrd->prdt_length; in ufs_prepare_cmd()
518 hd->prdto = (utrd->size_upiu + utrd->size_resp_upiu) >> 2; in ufs_prepare_cmd()
521 prdt_end = utrd->prdt + utrd->prdt_length * sizeof(prdt_t); in ufs_prepare_cmd()
522 flush_dcache_range(utrd->header, prdt_end - utrd->header); in ufs_prepare_cmd()
526 static int ufs_prepare_query(utp_utrd_t *utrd, uint8_t op, uint8_t idn, in ufs_prepare_query() argument
534 hd = (utrd_header_t *)utrd->header; in ufs_prepare_query()
535 query_upiu = (query_upiu_t *)utrd->upiu; in ufs_prepare_query()
542 query_upiu->task_tag = utrd->task_tag; in ufs_prepare_query()
556 memcpy((void *)(utrd->upiu + sizeof(query_upiu_t)), in ufs_prepare_query()
575 flush_dcache_range((uintptr_t)utrd->header, UFS_DESC_SIZE); in ufs_prepare_query()
579 static void ufs_prepare_nop_out(utp_utrd_t *utrd) in ufs_prepare_nop_out() argument
584 hd = (utrd_header_t *)utrd->header; in ufs_prepare_nop_out()
585 nop_out = (nop_out_upiu_t *)utrd->upiu; in ufs_prepare_nop_out()
592 nop_out->task_tag = utrd->task_tag; in ufs_prepare_nop_out()
593 flush_dcache_range((uintptr_t)utrd->header, UFS_DESC_SIZE); in ufs_prepare_nop_out()
615 static int ufs_check_resp(utp_utrd_t *utrd, int trans_type, unsigned int timeout_ms) in ufs_check_resp() argument
623 hd = (utrd_header_t *)utrd->header; in ufs_check_resp()
624 resp = (resp_upiu_t *)utrd->resp_upiu; in ufs_check_resp()
631 slot = utrd->task_tag - 1; in ufs_check_resp()
658 static void ufs_send_cmd(utp_utrd_t *utrd, uint8_t cmd_op, uint8_t lun, int lba, uintptr_t buf, in ufs_send_cmd() argument
664 get_utrd(utrd); in ufs_send_cmd()
665 result = ufs_prepare_cmd(utrd, cmd_op, lun, lba, buf, length); in ufs_send_cmd()
667 ufs_send_request(utrd->task_tag); in ufs_send_cmd()
668 result = ufs_check_resp(utrd, RESPONSE_UPIU, CMD_TIMEOUT_MS); in ufs_send_cmd()
678 static void dump_upiu(utp_utrd_t *utrd) in dump_upiu() argument
683 hd = (utrd_header_t *)utrd->header; in dump_upiu()
685 (unsigned int)(uintptr_t)utrd, hd->ruo, hd->rul, hd->ocs, in dump_upiu()
689 (uintptr_t)utrd->header + i, in dump_upiu()
690 *(unsigned int *)((uintptr_t)utrd->header + i)); in dump_upiu()
695 utrd->upiu + i, in dump_upiu()
696 *(unsigned int *)(utrd->upiu + i)); in dump_upiu()
700 utrd->resp_upiu + i, in dump_upiu()
701 *(unsigned int *)(utrd->resp_upiu + i)); in dump_upiu()
705 utrd->prdt + i, in dump_upiu()
706 *(unsigned int *)(utrd->prdt + i)); in dump_upiu()
713 utp_utrd_t utrd; in ufs_verify_init() local
716 get_utrd(&utrd); in ufs_verify_init()
717 ufs_prepare_nop_out(&utrd); in ufs_verify_init()
718 ufs_send_request(utrd.task_tag); in ufs_verify_init()
719 result = ufs_check_resp(&utrd, NOP_IN_UPIU, NOP_OUT_TIMEOUT_MS); in ufs_verify_init()
726 utp_utrd_t utrd; in ufs_verify_ready() local
727 ufs_send_cmd(&utrd, CDBCMD_TEST_UNIT_READY, 0, 0, 0, 0); in ufs_verify_ready()
733 utp_utrd_t utrd; in ufs_query() local
749 get_utrd(&utrd); in ufs_query()
750 ufs_prepare_query(&utrd, op, idn, index, sel, buf, size); in ufs_query()
751 ufs_send_request(utrd.task_tag); in ufs_query()
752 result = ufs_check_resp(&utrd, QUERY_RESPONSE_UPIU, QUERY_REQ_TIMEOUT_MS); in ufs_query()
754 resp = (query_resp_upiu_t *)utrd.resp_upiu; in ufs_query()
756 dump_upiu(&utrd); in ufs_query()
766 (void *)(utrd.resp_upiu + sizeof(query_resp_upiu_t)), in ufs_query()
825 utp_utrd_t utrd; in ufs_read_capacity() local
842 ufs_send_cmd(&utrd, CDBCMD_READ_CAPACITY_10, lun, 0, in ufs_read_capacity()
845 dump_upiu(&utrd); in ufs_read_capacity()
847 resp = (resp_upiu_t *)utrd.resp_upiu; in ufs_read_capacity()
870 utp_utrd_t utrd; in ufs_read_blocks() local
877 ufs_send_cmd(&utrd, CDBCMD_READ_10, lun, lba, buf, size); in ufs_read_blocks()
879 dump_upiu(&utrd); in ufs_read_blocks()
886 resp = (resp_upiu_t *)utrd.resp_upiu; in ufs_read_blocks()
892 utp_utrd_t utrd; in ufs_write_blocks() local
899 ufs_send_cmd(&utrd, CDBCMD_WRITE_10, lun, lba, buf, size); in ufs_write_blocks()
901 dump_upiu(&utrd); in ufs_write_blocks()
903 resp = (resp_upiu_t *)utrd.resp_upiu; in ufs_write_blocks()