isci: Using Linux SSP frame header
authorDave Jiang <dave.jiang@intel.com>
Thu, 5 May 2011 01:45:05 +0000 (18:45 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 3 Jul 2011 11:04:46 +0000 (04:04 -0700)
Removing of struct sci_ssp_frame_header and migrate to struct ssp_frame_hdr.

Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/scsi/isci/core/intel_sas.h
drivers/scsi/isci/core/scic_sds_controller.c
drivers/scsi/isci/core/scic_sds_controller.h
drivers/scsi/isci/core/scic_sds_request.c
drivers/scsi/isci/remote_device.c

index f2d5ca1..156694f 100644 (file)
@@ -133,45 +133,6 @@ enum sci_sas_frame_type {
        SCI_SAS_TASK_FRAME = 0x16
 };
 
-/**
- * struct sci_ssp_frame_header - This structure depicts the contents of an SSP
- *    frame header.  For specific information on the individual fields please
- *    reference the SAS specification transport layer SSP frame format.
- *
- *
- */
-struct sci_ssp_frame_header {
-       /* Word 0 */
-       u32 hashed_destination_address:24;
-       u32 frame_type:8;
-
-       /* Word 1 */
-       u32 hashed_source_address:24;
-       u32 reserved1_0:8;
-
-       /* Word 2 */
-       u32 reserved2_2:6;
-       u32 fill_bytes:2;
-       u32 reserved2_1:3;
-       u32 tlr_control:2;
-       u32 retry_data_frames:1;
-       u32 retransmit:1;
-       u32 changing_data_pointer:1;
-       u32 reserved2_0:16;
-
-       /* Word 3 */
-       u32 uiResv4;
-
-       /* Word 4 */
-       u16 target_port_transfer_tag;
-       u16 tag;
-
-       /* Word 5 */
-       u32 data_offset;
-
-};
-
-
 #define PHY_OPERATION_NOP               0x00
 #define PHY_OPERATION_LINK_RESET        0x01
 #define PHY_OPERATION_HARD_RESET        0x02
index 0b76fc7..3fe73cb 100644 (file)
@@ -1619,25 +1619,9 @@ struct scu_task_context *scic_sds_controller_get_task_context_buffer(
        return NULL;
 }
 
-/**
- * This method returnst the sequence value from the io tag value
- * @scic:
- * @io_tag:
- *
- * u16
- */
-
-/**
- * This method returns the IO request associated with the tag value
- * @scic:
- * @io_tag:
- *
- * SCIC_SDS_IO_REQUEST_T* NULL if there is no valid IO request at the tag value
- */
-struct scic_sds_request *scic_sds_controller_get_io_request_from_tag(
-       struct scic_sds_controller *scic,
-       u16 io_tag
-       ) {
+struct scic_sds_request *scic_request_by_tag(struct scic_sds_controller *scic,
+                                            u16 io_tag)
+{
        u16 task_index;
        u16 task_sequence;
 
index 8e3240d..08aee06 100644 (file)
@@ -556,10 +556,8 @@ union scu_remote_node_context *scic_sds_controller_get_remote_node_context_buffe
        struct scic_sds_controller *this_controller,
        u16 node_id);
 
-struct scic_sds_request *scic_sds_controller_get_io_request_from_tag(
-       struct scic_sds_controller *this_controller,
-       u16 io_tag);
-
+struct scic_sds_request *scic_request_by_tag(struct scic_sds_controller *scic,
+                                            u16 io_tag);
 
 struct scu_task_context *scic_sds_controller_get_task_context_buffer(
        struct scic_sds_controller *this_controller,
index e9c69d4..f34ca3d 100644 (file)
@@ -1265,14 +1265,19 @@ scic_sds_request_started_state_frame_handler(struct scic_sds_request *sci_req,
                                             u32 frame_index)
 {
        enum sci_status status;
-       struct sci_ssp_frame_header *frame_header;
+       u32 *frame_header;
+       struct ssp_frame_hdr ssp_hdr;
+       ssize_t word_cnt;
 
        status = scic_sds_unsolicited_frame_control_get_header(
                &(scic_sds_request_get_controller(sci_req)->uf_control),
                frame_index,
                (void **)&frame_header);
 
-       if (frame_header->frame_type == SCI_SAS_RESPONSE_FRAME) {
+       word_cnt = sizeof(struct ssp_frame_hdr) / sizeof(u32);
+       sci_swab32_cpy(&ssp_hdr, frame_header, word_cnt);
+
+       if (ssp_hdr.frame_type == SSP_RESPONSE) {
                struct ssp_response_iu *resp_iu;
                ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32);
 
@@ -1303,7 +1308,7 @@ scic_sds_request_started_state_frame_handler(struct scic_sds_request *sci_req,
                        __func__,
                        sci_req,
                        frame_index,
-                       frame_header->frame_type);
+                       ssp_hdr.frame_type);
        }
 
        /*
index e766b27..89cdd0a 100644 (file)
@@ -52,6 +52,7 @@
  * (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 <scsi/sas.h>
 #include "intel_sas.h"
 #include "sas.h"
 #include "isci.h"
@@ -305,15 +306,20 @@ enum sci_status scic_sds_remote_device_frame_handler(struct scic_sds_remote_devi
        case SCI_BASE_REMOTE_DEVICE_STATE_FAILED:
        case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: {
                struct scic_sds_request *sci_req;
-               struct sci_ssp_frame_header *hdr;
+               struct ssp_frame_hdr hdr;
+               void *frame_header;
+               ssize_t word_cnt;
 
                status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control,
                                                                       frame_index,
-                                                                      (void **)&hdr);
+                                                                      &frame_header);
                if (status != SCI_SUCCESS)
                        return status;
 
-               sci_req = scic_sds_controller_get_io_request_from_tag(scic, hdr->tag);
+               word_cnt = sizeof(hdr) / sizeof(u32);
+               sci_swab32_cpy(&hdr, frame_header, word_cnt);
+
+               sci_req = scic_request_by_tag(scic, be16_to_cpu(hdr.tag));
                if (sci_req && sci_req->target_device == sci_dev) {
                        /* The IO request is now in charge of releasing the frame */
                        status = sci_req->state_handlers->frame_handler(sci_req,