git: e1aa173f8120 - main - ufshci: consolidate the device query submit/poll pattern
Jaeyoon Choi <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.cvs.src,gmane.os.freebsd.current.scm |
|---|---|
| Message-ID | <[email protected]> |
The branch main has been updated by jaeyoon: URL: https://cgit.FreeBSD.org/src/commit/?id=e1aa173f812010675005e2917d7b2b44ee4a226e commit e1aa173f812010675005e2917d7b2b44ee4a226e Author: Jaeyoon Choi <[email protected]> AuthorDate: 2026-08-18 04:52:54 +0000 Commit: Jaeyoon Choi <[email protected]> CommitDate: 2026-08-18 04:52:54 +0000 ufshci: consolidate the device query submit/poll pattern The six query helpers duplicated the same submit, error check, poll, and status check sequence. Move it into ufshci_dev_send_query() so future changes to the query flow are made in one place. This also unifies the failure log message format. Reviewed by: imp (mentor) Sponsored by: Samsung Electronics Differential Revision: https://reviews.freebsd.org/D58818 --- sys/dev/ufshci/ufshci_dev.c | 98 +++++++++++++-------------------------------- 1 file changed, 28 insertions(+), 70 deletions(-) diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c index 18546d7120c0..063b65aaf579 100644 --- a/sys/dev/ufshci/ufshci_dev.c +++ b/sys/dev/ufshci/ufshci_dev.c @@ -12,6 +12,28 @@ #include "ufshci_private.h" #include "ufshci_reg.h" +static int +ufshci_dev_send_query(struct ufshci_controller *ctrlr, + struct ufshci_query_param param, + struct ufshci_completion_poll_status *status, const char *fail_msg) +{ + int error; + + status->done = 0; + error = ufshci_ctrlr_cmd_send_query_request(ctrlr, + ufshci_completion_poll_cb, status, param); + if (error) + return (error); + + ufshci_completion_poll(status); + if (status->error) { + ufshci_printf(ctrlr, "%s failed!\n", fail_msg); + return (ENXIO); + } + + return (0); +} + static int ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr, enum ufshci_descriptor_type desc_type, uint8_t index, uint8_t selector, @@ -29,19 +51,10 @@ ufshci_dev_read_descriptor(struct ufshci_controller *ctrlr, param.value = 0; param.desc_size = desc_size; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); + error = ufshci_dev_send_query(ctrlr, param, &status, __func__); if (error) return (error); - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, - "Failed to send Read Descriptor query request!\n"); - return (ENXIO); - } - memcpy(desc, status.cpl.response_upiu.query_response_upiu.command_data, desc_size); @@ -88,18 +101,10 @@ ufshci_dev_read_flag(struct ufshci_controller *ctrlr, param.value = 0; param.desc_size = 0; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); + error = ufshci_dev_send_query(ctrlr, param, &status, __func__); if (error) return (error); - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, "ufshci_dev_read_flag failed!\n"); - return (ENXIO); - } - *flag = status.cpl.response_upiu.query_response_upiu.flag_value; return (0); @@ -111,7 +116,6 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr, { struct ufshci_completion_poll_status status; struct ufshci_query_param param; - int error; param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST; param.opcode = UFSHCI_QUERY_OPCODE_SET_FLAG; @@ -121,19 +125,7 @@ ufshci_dev_set_flag(struct ufshci_controller *ctrlr, param.value = 0; param.desc_size = 0; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); - if (error) - return (error); - - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, "ufshci_dev_set_flag failed!\n"); - return (ENXIO); - } - - return (0); + return (ufshci_dev_send_query(ctrlr, param, &status, __func__)); } static int @@ -142,7 +134,6 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr, { struct ufshci_completion_poll_status status; struct ufshci_query_param param; - int error; param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST; param.opcode = UFSHCI_QUERY_OPCODE_CLEAR_FLAG; @@ -152,19 +143,7 @@ ufshci_dev_clear_flag(struct ufshci_controller *ctrlr, param.value = 0; param.desc_size = 0; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); - if (error) - return (error); - - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, "ufshci_dev_clear_flag failed!\n"); - return (ENXIO); - } - - return (0); + return (ufshci_dev_send_query(ctrlr, param, &status, __func__)); } static int @@ -184,18 +163,10 @@ ufshci_dev_read_attribute(struct ufshci_controller *ctrlr, param.value = 0; param.desc_size = 0; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); + error = ufshci_dev_send_query(ctrlr, param, &status, __func__); if (error) return (error); - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, "ufshci_dev_read_attribute failed!\n"); - return (ENXIO); - } - *value = be64toh(status.cpl.response_upiu.query_response_upiu.value_64); return (0); @@ -208,7 +179,6 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr, { struct ufshci_completion_poll_status status; struct ufshci_query_param param; - int error; param.function = UFSHCI_QUERY_FUNC_STANDARD_WRITE_REQUEST; param.opcode = UFSHCI_QUERY_OPCODE_WRITE_ATTRIBUTE; @@ -218,19 +188,7 @@ ufshci_dev_write_attribute(struct ufshci_controller *ctrlr, param.value = value; param.desc_size = 0; - status.done = 0; - error = ufshci_ctrlr_cmd_send_query_request(ctrlr, - ufshci_completion_poll_cb, &status, param); - if (error) - return (error); - - ufshci_completion_poll(&status); - if (status.error) { - ufshci_printf(ctrlr, "ufshci_dev_write_attribute failed!\n"); - return (ENXIO); - } - - return (0); + return (ufshci_dev_send_query(ctrlr, param, &status, __func__)); } int