Page MenuHomeFreeBSD

D58818.diff
No OneTemporary

D58818.diff

diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c
--- 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 @@
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 @@
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 @@
{
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 @@
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 @@
{
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 @@
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 @@
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 @@
{
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 @@
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

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 14, 10:22 AM (3 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36714135
Default Alt Text
D58818.diff (4 KB)

Event Timeline