Commit 2d9c2240 authored by Dave Jiang's avatar Dave Jiang Committed by Dan Williams

isci: Using Linux SSP frame header

Removing of struct sci_ssp_frame_header and migrate to struct ssp_frame_hdr.
Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 51a57cff
...@@ -133,45 +133,6 @@ enum sci_sas_frame_type { ...@@ -133,45 +133,6 @@ enum sci_sas_frame_type {
SCI_SAS_TASK_FRAME = 0x16 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_NOP 0x00
#define PHY_OPERATION_LINK_RESET 0x01 #define PHY_OPERATION_LINK_RESET 0x01
#define PHY_OPERATION_HARD_RESET 0x02 #define PHY_OPERATION_HARD_RESET 0x02
......
...@@ -1619,25 +1619,9 @@ struct scu_task_context *scic_sds_controller_get_task_context_buffer( ...@@ -1619,25 +1619,9 @@ struct scu_task_context *scic_sds_controller_get_task_context_buffer(
return NULL; return NULL;
} }
/** struct scic_sds_request *scic_request_by_tag(struct scic_sds_controller *scic,
* This method returnst the sequence value from the io tag value u16 io_tag)
* @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
) {
u16 task_index; u16 task_index;
u16 task_sequence; u16 task_sequence;
......
...@@ -556,10 +556,8 @@ union scu_remote_node_context *scic_sds_controller_get_remote_node_context_buffe ...@@ -556,10 +556,8 @@ union scu_remote_node_context *scic_sds_controller_get_remote_node_context_buffe
struct scic_sds_controller *this_controller, struct scic_sds_controller *this_controller,
u16 node_id); u16 node_id);
struct scic_sds_request *scic_sds_controller_get_io_request_from_tag( struct scic_sds_request *scic_request_by_tag(struct scic_sds_controller *scic,
struct scic_sds_controller *this_controller, u16 io_tag);
u16 io_tag);
struct scu_task_context *scic_sds_controller_get_task_context_buffer( struct scu_task_context *scic_sds_controller_get_task_context_buffer(
struct scic_sds_controller *this_controller, struct scic_sds_controller *this_controller,
......
...@@ -1265,14 +1265,19 @@ scic_sds_request_started_state_frame_handler(struct scic_sds_request *sci_req, ...@@ -1265,14 +1265,19 @@ scic_sds_request_started_state_frame_handler(struct scic_sds_request *sci_req,
u32 frame_index) u32 frame_index)
{ {
enum sci_status status; 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( status = scic_sds_unsolicited_frame_control_get_header(
&(scic_sds_request_get_controller(sci_req)->uf_control), &(scic_sds_request_get_controller(sci_req)->uf_control),
frame_index, frame_index,
(void **)&frame_header); (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; struct ssp_response_iu *resp_iu;
ssize_t word_cnt = SSP_RESP_IU_MAX_SIZE / sizeof(u32); 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, ...@@ -1303,7 +1308,7 @@ scic_sds_request_started_state_frame_handler(struct scic_sds_request *sci_req,
__func__, __func__,
sci_req, sci_req,
frame_index, frame_index,
frame_header->frame_type); ssp_hdr.frame_type);
} }
/* /*
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#include <scsi/sas.h>
#include "intel_sas.h" #include "intel_sas.h"
#include "sas.h" #include "sas.h"
#include "isci.h" #include "isci.h"
...@@ -305,15 +306,20 @@ enum sci_status scic_sds_remote_device_frame_handler(struct scic_sds_remote_devi ...@@ -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_FAILED:
case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: { case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: {
struct scic_sds_request *sci_req; 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, status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control,
frame_index, frame_index,
(void **)&hdr); &frame_header);
if (status != SCI_SUCCESS) if (status != SCI_SUCCESS)
return status; 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) { if (sci_req && sci_req->target_device == sci_dev) {
/* The IO request is now in charge of releasing the frame */ /* The IO request is now in charge of releasing the frame */
status = sci_req->state_handlers->frame_handler(sci_req, status = sci_req->state_handlers->frame_handler(sci_req,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment