Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/ufshci/ufshci_ctrlr_cmd.c
- This file was added.
| /*- | |||||
| * SPDX-License-Identifier: BSD-2-Clause | |||||
| * | |||||
| * Copyright (c) 2025, Samsung Electronics Co., Ltd. | |||||
| * All rights reserved. | |||||
| * | |||||
| * Redistribution and use in source and binary forms, with or without | |||||
| * modification, are permitted provided that the following conditions | |||||
| * are met: | |||||
| * 1. Redistributions of source code must retain the above copyright | |||||
| * notice, this list of conditions and the following disclaimer. | |||||
| * 2. Redistributions in binary form must reproduce the above copyright | |||||
| * notice, this list of conditions and the following disclaimer in the | |||||
| * documentation and/or other materials provided with the distribution. | |||||
| * | |||||
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | |||||
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |||||
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |||||
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | |||||
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |||||
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |||||
| * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |||||
| * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |||||
| * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |||||
| * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
| * SUCH DAMAGE. | |||||
| */ | |||||
| #include <sys/cdefs.h> | |||||
| #include "ufshci_private.h" | |||||
| void | |||||
| ufshci_ctrl_cmd_send_nop(struct ufshci_controller *ctrlr, ufshci_cb_fn_t cb_fn, | |||||
| void *cb_arg) | |||||
| { | |||||
| struct ufshci_request *req; | |||||
| struct ufshci_nop_out_upiu *upiu; | |||||
| req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg); | |||||
| req->request_size = sizeof(struct ufshci_nop_out_upiu); | |||||
| req->response_size = sizeof(struct ufshci_nop_in_upiu); | |||||
| upiu = (struct ufshci_nop_out_upiu *)&req->request_upiu; | |||||
| memset(upiu, 0, req->request_size); | |||||
| upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_NOP_OUT; | |||||
| ufshci_ctrl_submit_admin_request(ctrlr, req); | |||||
| } | |||||
| void | |||||
| ufshci_ctrl_cmd_send_query_request(struct ufshci_controller *ctrlr, | |||||
| ufshci_cb_fn_t cb_fn, void *cb_arg, struct ufshci_query_param param) | |||||
| { | |||||
| struct ufshci_request *req; | |||||
| struct ufshci_query_request_upiu *upiu; | |||||
| req = ufshci_allocate_request_vaddr(NULL, 0, M_WAITOK, cb_fn, cb_arg); | |||||
| req->request_size = sizeof(struct ufshci_query_request_upiu); | |||||
| req->response_size = sizeof(struct ufshci_query_response_upiu); | |||||
| upiu = (struct ufshci_query_request_upiu *)&req->request_upiu; | |||||
| memset(upiu, 0, req->request_size); | |||||
| upiu->header.trans_type = UFSHCI_UPIU_TRANSACTION_CODE_QUERY_REQUEST; | |||||
| upiu->header.ext_iid_or_function = param.function; | |||||
| upiu->opcode = param.opcode; | |||||
| upiu->idn = param.type; | |||||
| upiu->index = param.index; | |||||
| upiu->selector = param.selector; | |||||
| upiu->value_64 = param.value; | |||||
| upiu->length = param.desc_size; | |||||
| ufshci_ctrl_submit_admin_request(ctrlr, req); | |||||
| } | |||||