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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.