1 /*- 2 * Copyright (c) 2025, Samsung Electronics Co., Ltd. 3 * Written by Jaeyoon Choi 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8 #include "ufshci_private.h" 9 10 void 11 ufshci_ctrlr_cmd_send_nop(struct ufshci_controller *ctrlr, ufshci_cb_fn_t cb_fn, 12 void *cb_arg) 13 { 14 struct ufshci_request *req; 15 struct ufshci_nop_out_upiu *upiu; 16 17 req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg); 18 19 req->request_size = sizeof(struct ufshci_nop_out_upiu); 20 req->response_size = sizeof(struct ufshci_nop_in_upiu); 21 22 upiu = (struct ufshci_nop_out_upiu *)&req->request_upiu; 23 memset(upiu, 0, req->request_size); 24 upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT; 25 26 ufshci_ctrlr_submit_admin_request(ctrlr, req); 27 } 28 29 void 30 ufshci_ctrlr_cmd_send_query_request(struct ufshci_controller *ctrlr, 31 ufshci_cb_fn_t cb_fn, void *cb_arg, struct ufshci_query_param param) 32 { 33 struct ufshci_request *req; 34 struct ufshci_query_request_upiu *upiu; 35 36 req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg); 37 38 req->request_size = sizeof(struct ufshci_query_request_upiu); 39 req->response_size = sizeof(struct ufshci_query_response_upiu); 40 41 upiu = (struct ufshci_query_request_upiu *)&req->request_upiu; 42 memset(upiu, 0, req->request_size); 43 upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_QUERY_REQUEST; 44 upiu->header.ext_iid_or_function = param.function; 45 upiu->opcode = param.opcode; 46 upiu->idn = param.type; 47 upiu->index = param.index; 48 upiu->selector = param.selector; 49 upiu->value_64 = param.value; 50 upiu->length = param.desc_size; 51 52 ufshci_ctrlr_submit_admin_request(ctrlr, req); 53 } 54