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