aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci
diff options
context:
space:
mode:
authorDave Jiang <dave.jiang@intel.com>2011-05-04 18:02:02 -0400
committerDan Williams <dan.j.williams@intel.com>2011-07-03 07:04:45 -0400
commitf2f300806fe186a6c45020a444667755edcce672 (patch)
tree7241834565196b31e92f074f3e2924cbfad0722d /drivers/scsi/isci
parentc6d42257899505ea1982eba4c5e8bc7981e63e07 (diff)
isci: Convert SATA fis data structures to Linux native
Converting of sata_fis_reg_d2h to dev_to_host_fis Converting of sata_fis_reg_h2d to host_to_dev_fis Signed-off-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci')
-rw-r--r--drivers/scsi/isci/core/intel_sata.h56
-rw-r--r--drivers/scsi/isci/core/scic_phy.h6
-rw-r--r--drivers/scsi/isci/core/scic_sds_controller.c15
-rw-r--r--drivers/scsi/isci/core/scic_sds_phy.c9
-rw-r--r--drivers/scsi/isci/core/scic_sds_phy.h2
-rw-r--r--drivers/scsi/isci/core/scic_sds_request.c4
-rw-r--r--drivers/scsi/isci/core/scic_sds_stp_request.c17
-rw-r--r--drivers/scsi/isci/core/scic_sds_stp_request.h2
-rw-r--r--drivers/scsi/isci/phy.h5
-rw-r--r--drivers/scsi/isci/port.c7
-rw-r--r--drivers/scsi/isci/sata.c8
-rw-r--r--drivers/scsi/isci/task.c6
12 files changed, 35 insertions, 102 deletions
diff --git a/drivers/scsi/isci/core/intel_sata.h b/drivers/scsi/isci/core/intel_sata.h
index 47390d54064..977354d7b84 100644
--- a/drivers/scsi/isci/core/intel_sata.h
+++ b/drivers/scsi/isci/core/intel_sata.h
@@ -101,62 +101,6 @@ struct sata_fis_header {
101 u32 error:8; 101 u32 error:8;
102}; 102};
103 103
104
105/**
106 * struct sata_fis_reg_h2d - This is the definition for a SATA Host to Device
107 * Register FIS.
108 *
109 *
110 */
111struct sata_fis_reg_h2d {
112 u32 fis_type:8; /* word 0 */
113 u32 pm_port:4;
114 u32 reserved0:3;
115 u32 command_flag:1;
116 u32 command:8;
117 u32 features:8;
118 u32 lba_low:8; /* word 1 */
119 u32 lba_mid:8;
120 u32 lba_high:8;
121 u32 device:8;
122 u32 lba_low_exp:8; /* word 2 */
123 u32 lba_mid_exp:8;
124 u32 lba_high_exp:8;
125 u32 features_exp:8;
126 u32 sector_count:8; /* word 3 */
127 u32 sector_count_exp:8;
128 u32 reserved1:8;
129 u32 control:8;
130 u32 reserved2; /* word 4 */
131};
132
133/**
134 * struct sata_fis_reg_d2h - SATA Device To Host FIS
135 *
136 *
137 */
138struct sata_fis_reg_d2h {
139 u32 fis_type:8; /* word 0 */
140 u32 pm_port:4;
141 u32 reserved0:2;
142 u32 irq:1;
143 u32 reserved1:1;
144 u32 status:8;
145 u32 error:8;
146 u8 lba_low; /* word 1 */
147 u8 lba_mid;
148 u8 lba_high;
149 u8 device;
150 u8 lba_low_exp; /* word 2 */
151 u8 lba_mid_exp;
152 u8 lba_high_exp;
153 u8 reserved;
154 u8 sector_count; /* word 3 */
155 u8 sector_count_exp;
156 u16 reserved2;
157 u32 reserved3;
158};
159
160/** 104/**
161 * 105 *
162 * 106 *
diff --git a/drivers/scsi/isci/core/scic_phy.h b/drivers/scsi/isci/core/scic_phy.h
index 784c5b5c105..6fe39ccedf0 100644
--- a/drivers/scsi/isci/core/scic_phy.h
+++ b/drivers/scsi/isci/core/scic_phy.h
@@ -64,11 +64,11 @@
64 */ 64 */
65 65
66 66
67#include <scsi/sas.h>
68#include <scsi/libsas.h>
67#include "sci_status.h" 69#include "sci_status.h"
68
69#include "intel_sata.h" 70#include "intel_sata.h"
70#include "intel_sas.h" 71#include "intel_sas.h"
71#include <scsi/libsas.h>
72 72
73struct scic_sds_phy; 73struct scic_sds_phy;
74struct scic_sds_port; 74struct scic_sds_port;
@@ -141,7 +141,7 @@ struct scic_sata_phy_properties {
141 * This field delineates the signature FIS received from the 141 * This field delineates the signature FIS received from the
142 * attached target. 142 * attached target.
143 */ 143 */
144 struct sata_fis_reg_d2h signature_fis; 144 struct dev_to_host_fis signature_fis;
145 145
146 /** 146 /**
147 * This field specifies to the user if a port selector is connected 147 * This field specifies to the user if a port selector is connected
diff --git a/drivers/scsi/isci/core/scic_sds_controller.c b/drivers/scsi/isci/core/scic_sds_controller.c
index d7c37dc64ac..0b76fc75996 100644
--- a/drivers/scsi/isci/core/scic_sds_controller.c
+++ b/drivers/scsi/isci/core/scic_sds_controller.c
@@ -54,6 +54,7 @@
54 */ 54 */
55 55
56#include <linux/device.h> 56#include <linux/device.h>
57#include <scsi/sas.h>
57#include "scic_controller.h" 58#include "scic_controller.h"
58#include "scic_phy.h" 59#include "scic_phy.h"
59#include "scic_port.h" 60#include "scic_port.h"
@@ -1754,17 +1755,11 @@ void scic_sds_controller_copy_sata_response(
1754 void *frame_header, 1755 void *frame_header,
1755 void *frame_buffer) 1756 void *frame_buffer)
1756{ 1757{
1757 memcpy( 1758 memcpy(response_buffer, frame_header, sizeof(u32));
1758 response_buffer,
1759 frame_header,
1760 sizeof(u32)
1761 );
1762 1759
1763 memcpy( 1760 memcpy(response_buffer + sizeof(u32),
1764 (char *)((char *)response_buffer + sizeof(u32)), 1761 frame_buffer,
1765 frame_buffer, 1762 sizeof(struct dev_to_host_fis) - sizeof(u32));
1766 sizeof(struct sata_fis_reg_d2h) - sizeof(u32)
1767 );
1768} 1763}
1769 1764
1770/** 1765/**
diff --git a/drivers/scsi/isci/core/scic_sds_phy.c b/drivers/scsi/isci/core/scic_sds_phy.c
index c935c048247..1b35b1ac1f8 100644
--- a/drivers/scsi/isci/core/scic_sds_phy.c
+++ b/drivers/scsi/isci/core/scic_sds_phy.c
@@ -53,6 +53,7 @@
53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54 */ 54 */
55 55
56#include <scsi/sas.h>
56#include "intel_ata.h" 57#include "intel_ata.h"
57#include "intel_sata.h" 58#include "intel_sata.h"
58#include "sci_base_state.h" 59#include "sci_base_state.h"
@@ -620,11 +621,9 @@ enum sci_status scic_sata_phy_get_properties(
620 struct scic_sata_phy_properties *properties) 621 struct scic_sata_phy_properties *properties)
621{ 622{
622 if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) { 623 if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) {
623 memcpy( 624 memcpy(&properties->signature_fis,
624 &properties->signature_fis, 625 &sci_phy->phy_type.sata.signature_fis_buffer,
625 &sci_phy->phy_type.sata.signature_fis_buffer, 626 sizeof(struct dev_to_host_fis));
626 sizeof(struct sata_fis_reg_d2h)
627 );
628 627
629 /* / @todo add support for port selectors. */ 628 /* / @todo add support for port selectors. */
630 properties->is_port_selector_present = false; 629 properties->is_port_selector_present = false;
diff --git a/drivers/scsi/isci/core/scic_sds_phy.h b/drivers/scsi/isci/core/scic_sds_phy.h
index fca95c1c027..c9fa2071f9b 100644
--- a/drivers/scsi/isci/core/scic_sds_phy.h
+++ b/drivers/scsi/isci/core/scic_sds_phy.h
@@ -280,7 +280,7 @@ struct scic_sds_phy {
280 } sas; 280 } sas;
281 281
282 struct { 282 struct {
283 struct sata_fis_reg_d2h signature_fis_buffer; 283 struct dev_to_host_fis signature_fis_buffer;
284 284
285 } sata; 285 } sata;
286 286
diff --git a/drivers/scsi/isci/core/scic_sds_request.c b/drivers/scsi/isci/core/scic_sds_request.c
index ffc16072d1d..13067659a8c 100644
--- a/drivers/scsi/isci/core/scic_sds_request.c
+++ b/drivers/scsi/isci/core/scic_sds_request.c
@@ -53,7 +53,7 @@
53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54 */ 54 */
55 55
56 56#include <scsi/sas.h>
57#include "intel_sas.h" 57#include "intel_sas.h"
58#include "intel_sata.h" 58#include "intel_sata.h"
59#include "intel_sat.h" 59#include "intel_sat.h"
@@ -1742,7 +1742,7 @@ enum sci_status scic_io_request_construct(struct scic_sds_controller *scic,
1742 scic_sds_ssp_io_request_assign_buffers(sci_req); 1742 scic_sds_ssp_io_request_assign_buffers(sci_req);
1743 } else if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) { 1743 } else if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_STP)) {
1744 scic_sds_stp_request_assign_buffers(sci_req); 1744 scic_sds_stp_request_assign_buffers(sci_req);
1745 memset(sci_req->command_buffer, 0, sizeof(struct sata_fis_reg_h2d)); 1745 memset(sci_req->command_buffer, 0, sizeof(struct host_to_dev_fis));
1746 } else if (dev_is_expander(dev)) { 1746 } else if (dev_is_expander(dev)) {
1747 scic_sds_smp_request_assign_buffers(sci_req); 1747 scic_sds_smp_request_assign_buffers(sci_req);
1748 memset(sci_req->command_buffer, 0, sizeof(struct smp_request)); 1748 memset(sci_req->command_buffer, 0, sizeof(struct smp_request));
diff --git a/drivers/scsi/isci/core/scic_sds_stp_request.c b/drivers/scsi/isci/core/scic_sds_stp_request.c
index 8c980235ea4..1cd111c42ed 100644
--- a/drivers/scsi/isci/core/scic_sds_stp_request.c
+++ b/drivers/scsi/isci/core/scic_sds_stp_request.c
@@ -79,7 +79,7 @@
79 * request memory 79 * request memory
80 */ 80 */
81#define scic_sds_stp_request_get_h2d_reg_buffer(memory) \ 81#define scic_sds_stp_request_get_h2d_reg_buffer(memory) \
82 ((struct sata_fis_reg_h2d *)(\ 82 ((struct host_to_dev_fis *)(\
83 ((char *)(memory)) + sizeof(struct scic_sds_stp_request) \ 83 ((char *)(memory)) + sizeof(struct scic_sds_stp_request) \
84 )) 84 ))
85 85
@@ -90,9 +90,9 @@
90 * request memory 90 * request memory
91 */ 91 */
92#define scic_sds_stp_request_get_response_buffer(memory) \ 92#define scic_sds_stp_request_get_response_buffer(memory) \
93 ((struct sata_fis_reg_d2h *)(\ 93 ((struct dev_to_host_fis *)(\
94 ((char *)(scic_sds_stp_request_get_h2d_reg_buffer(memory))) \ 94 ((char *)(scic_sds_stp_request_get_h2d_reg_buffer(memory))) \
95 + sizeof(struct sata_fis_reg_h2d) \ 95 + sizeof(struct host_to_dev_fis) \
96 )) 96 ))
97 97
98/** 98/**
@@ -127,8 +127,8 @@
127u32 scic_sds_stp_request_get_object_size(void) 127u32 scic_sds_stp_request_get_object_size(void)
128{ 128{
129 return sizeof(struct scic_sds_stp_request) 129 return sizeof(struct scic_sds_stp_request)
130 + sizeof(struct sata_fis_reg_h2d) 130 + sizeof(struct host_to_dev_fis)
131 + sizeof(struct sata_fis_reg_d2h) 131 + sizeof(struct dev_to_host_fis)
132 + sizeof(struct scu_task_context) 132 + sizeof(struct scu_task_context)
133 + SMP_CACHE_BYTES 133 + SMP_CACHE_BYTES
134 + sizeof(struct scu_sgl_element_pair) * SCU_MAX_SGL_ELEMENT_PAIRS; 134 + sizeof(struct scu_sgl_element_pair) * SCU_MAX_SGL_ELEMENT_PAIRS;
@@ -205,7 +205,7 @@ static void scu_sata_reqeust_construct_task_context(
205 task_context->task_phase = 0x01; 205 task_context->task_phase = 0x01;
206 206
207 task_context->ssp_command_iu_length = 207 task_context->ssp_command_iu_length =
208 (sizeof(struct sata_fis_reg_h2d) - sizeof(u32)) / sizeof(u32); 208 (sizeof(struct host_to_dev_fis) - sizeof(u32)) / sizeof(u32);
209 209
210 /* Set the first word of the H2D REG FIS */ 210 /* Set the first word of the H2D REG FIS */
211 task_context->type.words[0] = *(u32 *)sds_request->command_buffer; 211 task_context->type.words[0] = *(u32 *)sds_request->command_buffer;
@@ -354,7 +354,8 @@ static void scu_stp_raw_request_construct_task_context(
354 task_context->priority = SCU_TASK_PRIORITY_NORMAL; 354 task_context->priority = SCU_TASK_PRIORITY_NORMAL;
355 task_context->task_type = SCU_TASK_TYPE_SATA_RAW_FRAME; 355 task_context->task_type = SCU_TASK_TYPE_SATA_RAW_FRAME;
356 task_context->type.stp.fis_type = SATA_FIS_TYPE_REGH2D; 356 task_context->type.stp.fis_type = SATA_FIS_TYPE_REGH2D;
357 task_context->transfer_length_bytes = sizeof(struct sata_fis_reg_h2d) - sizeof(u32); 357 task_context->transfer_length_bytes =
358 sizeof(struct host_to_dev_fis) - sizeof(u32);
358} 359}
359 360
360void scic_stp_io_request_set_ncq_tag( 361void scic_stp_io_request_set_ncq_tag(
@@ -1749,7 +1750,7 @@ static void scic_sds_stp_request_started_soft_reset_await_h2d_diagnostic_complet
1749{ 1750{
1750 struct scic_sds_request *sci_req = object; 1751 struct scic_sds_request *sci_req = object;
1751 struct scu_task_context *task_context; 1752 struct scu_task_context *task_context;
1752 struct sata_fis_reg_h2d *h2d_fis; 1753 struct host_to_dev_fis *h2d_fis;
1753 enum sci_status status; 1754 enum sci_status status;
1754 1755
1755 /* Clear the SRST bit */ 1756 /* Clear the SRST bit */
diff --git a/drivers/scsi/isci/core/scic_sds_stp_request.h b/drivers/scsi/isci/core/scic_sds_stp_request.h
index 6724c1d759d..807bc4eeb82 100644
--- a/drivers/scsi/isci/core/scic_sds_stp_request.h
+++ b/drivers/scsi/isci/core/scic_sds_stp_request.h
@@ -69,7 +69,7 @@
69struct scic_sds_stp_request { 69struct scic_sds_stp_request {
70 struct scic_sds_request parent; 70 struct scic_sds_request parent;
71 71
72 struct sata_fis_reg_d2h d2h_reg_fis; 72 struct dev_to_host_fis d2h_reg_fis;
73 73
74 union { 74 union {
75 u32 ncq; 75 u32 ncq;
diff --git a/drivers/scsi/isci/phy.h b/drivers/scsi/isci/phy.h
index 44b727f1c45..3fe1a8a1316 100644
--- a/drivers/scsi/isci/phy.h
+++ b/drivers/scsi/isci/phy.h
@@ -59,6 +59,7 @@
59 59
60#include "port.h" 60#include "port.h"
61#include "host.h" 61#include "host.h"
62#include <scsi/sas.h>
62#include <scsi/libsas.h> 63#include <scsi/libsas.h>
63 64
64 65
@@ -79,10 +80,8 @@ struct isci_phy {
79 u8 sas_addr[SAS_ADDR_SIZE]; 80 u8 sas_addr[SAS_ADDR_SIZE];
80 81
81 union { 82 union {
82
83 u8 aif[sizeof(struct sci_sas_identify_address_frame)]; 83 u8 aif[sizeof(struct sci_sas_identify_address_frame)];
84 u8 fis[sizeof(struct sata_fis_reg_d2h)]; 84 struct dev_to_host_fis fis;
85
86 } frame_rcvd; 85 } frame_rcvd;
87}; 86};
88 87
diff --git a/drivers/scsi/isci/port.c b/drivers/scsi/isci/port.c
index 30d6ad895cc..5b38f2f963e 100644
--- a/drivers/scsi/isci/port.c
+++ b/drivers/scsi/isci/port.c
@@ -205,11 +205,8 @@ void isci_port_link_up(
205 */ 205 */
206 BUG_ON(call_status != SCI_SUCCESS); 206 BUG_ON(call_status != SCI_SUCCESS);
207 207
208 memcpy(isci_phy->frame_rcvd.fis, 208 isci_phy->frame_rcvd.fis = sata_phy_properties.signature_fis;
209 &sata_phy_properties.signature_fis, 209 isci_phy->sas_phy.frame_rcvd_size = sizeof(struct dev_to_host_fis);
210 sizeof(struct sata_fis_reg_d2h));
211
212 isci_phy->sas_phy.frame_rcvd_size = sizeof(struct sata_fis_reg_d2h);
213 210
214 /* 211 /*
215 * For direct-attached SATA devices, the SCI core will 212 * For direct-attached SATA devices, the SCI core will
diff --git a/drivers/scsi/isci/sata.c b/drivers/scsi/isci/sata.c
index 53ce0c281be..08374505832 100644
--- a/drivers/scsi/isci/sata.c
+++ b/drivers/scsi/isci/sata.c
@@ -53,6 +53,7 @@
53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
54 */ 54 */
55 55
56#include <scsi/sas.h>
56#include "isci.h" 57#include "isci.h"
57#include "remote_device.h" 58#include "remote_device.h"
58#include "scic_io_request.h" 59#include "scic_io_request.h"
@@ -142,11 +143,10 @@ void isci_sata_set_ncq_tag(
142 * 143 *
143 * none. 144 * none.
144 */ 145 */
145void isci_request_process_stp_response( 146void isci_request_process_stp_response(struct sas_task *task,
146 struct sas_task *task, 147 void *response_buffer)
147 void *response_buffer)
148{ 148{
149 struct sata_fis_reg_d2h *d2h_reg_fis = (struct sata_fis_reg_d2h *)response_buffer; 149 struct dev_to_host_fis *d2h_reg_fis = response_buffer;
150 struct task_status_struct *ts = &task->task_status; 150 struct task_status_struct *ts = &task->task_status;
151 struct ata_task_resp *resp = (void *)&ts->buf[0]; 151 struct ata_task_resp *resp = (void *)&ts->buf[0];
152 152
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c
index 95f38672321..f9a1c41a5ce 100644
--- a/drivers/scsi/isci/task.c
+++ b/drivers/scsi/isci/task.c
@@ -1452,10 +1452,8 @@ void isci_task_request_complete(
1452 1452
1453 memcpy(&tmf->resp.d2h_fis, 1453 memcpy(&tmf->resp.d2h_fis,
1454 scic_stp_io_request_get_d2h_reg_address( 1454 scic_stp_io_request_get_d2h_reg_address(
1455 request->sci_request_handle 1455 request->sci_request_handle),
1456 ), 1456 sizeof(struct dev_to_host_fis));
1457 sizeof(struct sata_fis_reg_d2h)
1458 );
1459 } 1457 }
1460 1458
1461 /* Manage the timer if it is still running. */ 1459 /* Manage the timer if it is still running. */