isci: remove rnc->device back pointer
authorDan Williams <dan.j.williams@intel.com>
Wed, 20 Apr 2011 01:35:58 +0000 (18:35 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 3 Jul 2011 11:00:37 +0000 (04:00 -0700)
Now that they are one in the same object remove the back pointer reference
in favor of container_of.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/scsi/isci/core/scic_sds_remote_device.c
drivers/scsi/isci/core/scic_sds_remote_device.h
drivers/scsi/isci/core/scic_sds_remote_node_context.c
drivers/scsi/isci/core/scic_sds_remote_node_context.h

index 04295274b71ae98f579e057db98d0681414f27ab..22788bfcf9c35b75d110b08fd1dd17b5585592d7 100644 (file)
@@ -1672,11 +1672,8 @@ void scic_remote_device_construct(struct scic_sds_port *sci_port,
                &sci_dev->state_machine
                );
 
-       scic_sds_remote_node_context_construct(
-               sci_dev,
-               &sci_dev->rnc,
-               SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX
-               );
+       scic_sds_remote_node_context_construct(&sci_dev->rnc,
+                                              SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX);
 
        sci_object_set_association(&sci_dev->rnc, sci_dev);
 }
index 7f43f3003e817f321316628d4b3bfa6129442d74..bff44b8b83ab2c095b8b4d41d04d1972944426dd 100644 (file)
@@ -339,6 +339,15 @@ struct scic_sds_remote_device {
        const struct scic_sds_remote_device_state_handler *state_handlers;
 };
 
+static inline struct scic_sds_remote_device *rnc_to_dev(struct scic_sds_remote_node_context *rnc)
+{
+       struct scic_sds_remote_device *sci_dev;
+
+       sci_dev = container_of(rnc, typeof(*sci_dev), rnc);
+
+       return sci_dev;
+}
+
 typedef enum sci_status (*scic_sds_remote_device_request_handler_t)(
        struct scic_sds_remote_device *device,
        struct scic_sds_request *request);
index e329296fa386502a38f358fd9019af482ee1f261..e1d58f8854f77cd24f1e3f06f4224e1b42bb0ad1 100644 (file)
@@ -108,27 +108,24 @@ static void scic_sds_remote_node_context_construct_buffer(
        struct scic_sds_remote_node_context *sci_rnc)
 {
        union scu_remote_node_context *rnc;
+       struct scic_sds_remote_device *sci_dev = rnc_to_dev(sci_rnc);
        struct scic_sds_controller *scic;
 
-       scic = scic_sds_remote_device_get_controller(sci_rnc->device);
+       scic = scic_sds_remote_device_get_controller(sci_dev);
 
        rnc = scic_sds_controller_get_remote_node_context_buffer(
                scic, sci_rnc->remote_node_index);
 
-       memset(
-               rnc,
-               0x00,
-               sizeof(union scu_remote_node_context)
-               * scic_sds_remote_device_node_count(sci_rnc->device)
-               );
+       memset(rnc, 0, sizeof(union scu_remote_node_context)
+               * scic_sds_remote_device_node_count(sci_dev));
 
        rnc->ssp.remote_node_index = sci_rnc->remote_node_index;
-       rnc->ssp.remote_node_port_width = sci_rnc->device->device_port_width;
+       rnc->ssp.remote_node_port_width = sci_dev->device_port_width;
        rnc->ssp.logical_port_index =
-               scic_sds_remote_device_get_port_index(sci_rnc->device);
+               scic_sds_remote_device_get_port_index(sci_dev);
 
-       rnc->ssp.remote_sas_address_hi = SCIC_SWAP_DWORD(sci_rnc->device->device_address.high);
-       rnc->ssp.remote_sas_address_lo = SCIC_SWAP_DWORD(sci_rnc->device->device_address.low);
+       rnc->ssp.remote_sas_address_hi = SCIC_SWAP_DWORD(sci_dev->device_address.high);
+       rnc->ssp.remote_sas_address_lo = SCIC_SWAP_DWORD(sci_dev->device_address.low);
 
        rnc->ssp.nexus_loss_timer_enable = true;
        rnc->ssp.check_bit               = false;
@@ -140,8 +137,8 @@ static void scic_sds_remote_node_context_construct_buffer(
 
 
        if (
-               sci_rnc->device->target_protocols.u.bits.attached_sata_device
-               || sci_rnc->device->target_protocols.u.bits.attached_stp_target
+               sci_dev->target_protocols.u.bits.attached_sata_device
+               || sci_dev->target_protocols.u.bits.attached_stp_target
                ) {
                rnc->ssp.connection_occupancy_timeout =
                        scic->user_parameters.sds1.stp_max_occupancy_timeout;
@@ -157,7 +154,7 @@ static void scic_sds_remote_node_context_construct_buffer(
        rnc->ssp.initial_arbitration_wait_time = 0;
 
        /* Open Address Frame Parameters */
-       rnc->ssp.oaf_connection_rate = sci_rnc->device->connection_rate;
+       rnc->ssp.oaf_connection_rate = sci_dev->connection_rate;
        rnc->ssp.oaf_features = 0;
        rnc->ssp.oaf_source_zone_group = 0;
        rnc->ssp.oaf_more_compatibility_features = 0;
@@ -234,7 +231,7 @@ static enum sci_status scic_sds_remote_node_context_default_destruct_handler(
        scics_sds_remote_node_context_callback callback,
        void *callback_parameter)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to stop while "
                 "in unexpected state %d\n",
                 __func__,
@@ -253,7 +250,7 @@ static enum sci_status scic_sds_remote_node_context_default_suspend_handler(
        scics_sds_remote_node_context_callback callback,
        void *callback_parameter)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to suspend "
                 "while in wrong state %d\n",
                 __func__,
@@ -268,7 +265,7 @@ static enum sci_status scic_sds_remote_node_context_default_resume_handler(
        scics_sds_remote_node_context_callback callback,
        void *callback_parameter)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to resume "
                 "while in wrong state %d\n",
                 __func__,
@@ -282,7 +279,7 @@ static enum sci_status scic_sds_remote_node_context_default_start_io_handler(
        struct scic_sds_remote_node_context *sci_rnc,
        struct scic_sds_request *sci_req)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to start io "
                 "0x%p while in wrong state %d\n",
                 __func__,
@@ -297,7 +294,7 @@ static enum sci_status scic_sds_remote_node_context_default_start_task_handler(
        struct scic_sds_remote_node_context *sci_rnc,
        struct scic_sds_request *sci_req)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to start "
                 "task 0x%p while in wrong state %d\n",
                 __func__,
@@ -312,7 +309,7 @@ static enum sci_status scic_sds_remote_node_context_default_event_handler(
        struct scic_sds_remote_node_context *sci_rnc,
        u32 event_code)
 {
-       dev_warn(scirdev_to_dev(sci_rnc->device),
+       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                 "%s: SCIC Remote Node Context 0x%p requested to process "
                 "event 0x%x while in wrong state %d\n",
                 __func__,
@@ -412,7 +409,7 @@ static enum sci_status scic_sds_remote_node_context_posting_state_event_handler(
 
        default:
                status = SCI_FAILURE;
-               dev_warn(scirdev_to_dev(sci_rnc->device),
+               dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                         "%s: SCIC Remote Node Context 0x%p requested to "
                         "process unexpected event 0x%x while in posting "
                         "state\n",
@@ -466,7 +463,7 @@ static enum sci_status scic_sds_remote_node_context_invalidating_state_event_han
                        /*
                         * We really dont care if the hardware is going to suspend
                         * the device since it's being invalidated anyway */
-                       dev_dbg(scirdev_to_dev(sci_rnc->device),
+                       dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                                "%s: SCIC Remote Node Context 0x%p was "
                                "suspeneded by hardware while being "
                                "invalidated.\n",
@@ -476,7 +473,7 @@ static enum sci_status scic_sds_remote_node_context_invalidating_state_event_han
                        break;
 
                default:
-                       dev_warn(scirdev_to_dev(sci_rnc->device),
+                       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                                 "%s: SCIC Remote Node Context 0x%p "
                                 "requested to process event 0x%x while "
                                 "in state %d.\n",
@@ -516,7 +513,7 @@ static enum sci_status scic_sds_remote_node_context_resuming_state_event_handler
                        /*
                         * We really dont care if the hardware is going to suspend
                         * the device since it's being resumed anyway */
-                       dev_dbg(scirdev_to_dev(sci_rnc->device),
+                       dev_dbg(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                                "%s: SCIC Remote Node Context 0x%p was "
                                "suspeneded by hardware while being resumed.\n",
                                __func__,
@@ -525,7 +522,7 @@ static enum sci_status scic_sds_remote_node_context_resuming_state_event_handler
                        break;
 
                default:
-                       dev_warn(scirdev_to_dev(sci_rnc->device),
+                       dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                                 "%s: SCIC Remote Node Context 0x%p requested "
                                 "to process event 0x%x while in state %d.\n",
                                 __func__,
@@ -563,10 +560,8 @@ static enum sci_status scic_sds_remote_node_context_ready_state_suspend_handler(
        sci_rnc->suspension_code = suspend_type;
 
        if (suspend_type == SCI_SOFTWARE_SUSPENSION) {
-               scic_sds_remote_device_post_request(
-                       sci_rnc->device,
-                       SCU_CONTEXT_COMMAND_POST_RNC_SUSPEND_TX
-                       );
+               scic_sds_remote_device_post_request(rnc_to_dev(sci_rnc),
+                                                   SCU_CONTEXT_COMMAND_POST_RNC_SUSPEND_TX);
        }
 
        sci_base_state_machine_change_state(
@@ -622,7 +617,7 @@ static enum sci_status scic_sds_remote_node_context_ready_state_event_handler(
                break;
 
        default:
-               dev_warn(scirdev_to_dev(sci_rnc->device),
+               dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                        "%s: SCIC Remote Node Context 0x%p requested to "
                        "process event 0x%x while in state %d.\n",
                        __func__,
@@ -654,7 +649,7 @@ static enum sci_status scic_sds_remote_node_context_tx_suspended_state_resume_ha
 
        /* TODO: consider adding a resume action of NONE, INVALIDATE, WRITE_TLCR */
 
-       scic_remote_device_get_protocols(sci_rnc->device, &protocols);
+       scic_remote_device_get_protocols(rnc_to_dev(sci_rnc), &protocols);
 
        if (
                (protocols.u.bits.attached_ssp_target == 1)
@@ -667,7 +662,7 @@ static enum sci_status scic_sds_remote_node_context_tx_suspended_state_resume_ha
 
                status = SCI_SUCCESS;
        } else if (protocols.u.bits.attached_stp_target == 1) {
-               if (sci_rnc->device->is_direct_attached) {
+               if (rnc_to_dev(sci_rnc)->is_direct_attached) {
                        /* @todo Fix this since I am being silly in writing to the STPTLDARNI register. */
                        sci_base_state_machine_change_state(
                                &sci_rnc->state_machine,
@@ -792,7 +787,7 @@ static enum sci_status scic_sds_remote_node_context_await_suspension_state_event
                break;
 
        default:
-               dev_warn(scirdev_to_dev(sci_rnc->device),
+               dev_warn(scirdev_to_dev(rnc_to_dev(sci_rnc)),
                         "%s: SCIC Remote Node Context 0x%p requested to "
                         "process event 0x%x while in state %d.\n",
                         __func__,
@@ -937,34 +932,26 @@ static void scic_sds_remote_node_context_continue_state_transitions(
 static void scic_sds_remote_node_context_validate_context_buffer(
        struct scic_sds_remote_node_context *sci_rnc)
 {
+       struct scic_sds_remote_device *sci_dev = rnc_to_dev(sci_rnc);
        union scu_remote_node_context *rnc_buffer;
 
        rnc_buffer = scic_sds_controller_get_remote_node_context_buffer(
-               scic_sds_remote_device_get_controller(sci_rnc->device),
+               scic_sds_remote_device_get_controller(sci_dev),
                sci_rnc->remote_node_index
                );
 
        rnc_buffer->ssp.is_valid = true;
 
-       if (
-               !sci_rnc->device->is_direct_attached
-               && sci_rnc->device->target_protocols.u.bits.attached_stp_target
-               ) {
-               scic_sds_remote_device_post_request(
-                       sci_rnc->device,
-                       SCU_CONTEXT_COMMAND_POST_RNC_96
-                       );
+       if (!sci_dev->is_direct_attached &&
+           sci_dev->target_protocols.u.bits.attached_stp_target) {
+               scic_sds_remote_device_post_request(sci_dev,
+                                                   SCU_CONTEXT_COMMAND_POST_RNC_96);
        } else {
-               scic_sds_remote_device_post_request(
-                       sci_rnc->device,
-                       SCU_CONTEXT_COMMAND_POST_RNC_32
-                       );
+               scic_sds_remote_device_post_request(sci_dev, SCU_CONTEXT_COMMAND_POST_RNC_32);
 
-               if (sci_rnc->device->is_direct_attached) {
-                       scic_sds_port_setup_transports(
-                               sci_rnc->device->owning_port,
-                               sci_rnc->remote_node_index
-                               );
+               if (sci_dev->is_direct_attached) {
+                       scic_sds_port_setup_transports(sci_dev->owning_port,
+                                                      sci_rnc->remote_node_index);
                }
        }
 }
@@ -981,16 +968,13 @@ static void scic_sds_remote_node_context_invalidate_context_buffer(
        union scu_remote_node_context *rnc_buffer;
 
        rnc_buffer = scic_sds_controller_get_remote_node_context_buffer(
-               scic_sds_remote_device_get_controller(sci_rnc->device),
-               sci_rnc->remote_node_index
-               );
+               scic_sds_remote_device_get_controller(rnc_to_dev(sci_rnc)),
+               sci_rnc->remote_node_index);
 
        rnc_buffer->ssp.is_valid = false;
 
-       scic_sds_remote_device_post_request(
-               sci_rnc->device,
-               SCU_CONTEXT_COMMAND_POST_RNC_INVALIDATE
-               );
+       scic_sds_remote_device_post_request(rnc_to_dev(sci_rnc),
+                                           SCU_CONTEXT_COMMAND_POST_RNC_INVALIDATE);
 }
 
 /*
@@ -1081,8 +1065,10 @@ static void scic_sds_remote_node_context_resuming_state_enter(
 {
        struct scic_sds_remote_node_context *rnc;
        struct smp_discover_response_protocols protocols;
+       struct scic_sds_remote_device *sci_dev;
 
        rnc = (struct scic_sds_remote_node_context *)object;
+       sci_dev = rnc_to_dev(rnc);
 
        SET_STATE_HANDLER(
                rnc,
@@ -1096,18 +1082,15 @@ static void scic_sds_remote_node_context_resuming_state_enter(
         * resume because of a target reset we also need to update
         * the STPTLDARNI register with the RNi of the device
         */
-       scic_remote_device_get_protocols(rnc->device, &protocols);
+       scic_remote_device_get_protocols(sci_dev, &protocols);
 
-       if ((protocols.u.bits.attached_stp_target == 1) &&
-           (rnc->device->is_direct_attached)) {
-               scic_sds_port_setup_transports(
-                       rnc->device->owning_port, rnc->remote_node_index);
+       if (protocols.u.bits.attached_stp_target == 1 &&
+           sci_dev->is_direct_attached) {
+               scic_sds_port_setup_transports(sci_dev->owning_port,
+                                              rnc->remote_node_index);
        }
 
-       scic_sds_remote_device_post_request(
-               rnc->device,
-               SCU_CONTEXT_COMMAND_POST_RNC_RESUME
-               );
+       scic_sds_remote_device_post_request(sci_dev, SCU_CONTEXT_COMMAND_POST_RNC_RESUME);
 }
 
 /**
@@ -1225,15 +1208,12 @@ static const struct sci_base_state scic_sds_remote_node_context_state_table[] =
        },
 };
 
-void scic_sds_remote_node_context_construct(
-       struct scic_sds_remote_device *device,
-       struct scic_sds_remote_node_context *rnc,
-       u16 remote_node_index)
+void scic_sds_remote_node_context_construct(struct scic_sds_remote_node_context *rnc,
+                                           u16 remote_node_index)
 {
        memset(rnc, 0, sizeof(struct scic_sds_remote_node_context));
 
        rnc->remote_node_index = remote_node_index;
-       rnc->device            = device;
        rnc->destination_state = SCIC_SDS_REMOTE_NODE_DESTINATION_STATE_UNSPECIFIED;
 
        sci_base_state_machine_construct(
index a103f155bcc4a4e89a4b232385d845d753eccabe..b3f2546090ddf5152e3223a9f7f7643f89a9d1d0 100644 (file)
@@ -231,15 +231,6 @@ struct scic_sds_remote_node_context {
         */
        struct sci_base_object parent;
 
-       /**
-        * This pointer simply points to the remote device object containing
-        * this RNC.
-        *
-        * @todo Consider making the device pointer the associated object of the
-        *       the parent object.
-        */
-       struct scic_sds_remote_device *device;
-
        /**
         * This field indicates the remote node index (RNI) associated with
         * this RNC.
@@ -279,10 +270,8 @@ struct scic_sds_remote_node_context {
        struct scic_sds_remote_node_context_handlers *state_handlers;
 };
 
-void scic_sds_remote_node_context_construct(
-       struct scic_sds_remote_device *device,
-       struct scic_sds_remote_node_context *rnc,
-       u16 remote_node_index);
+void scic_sds_remote_node_context_construct(struct scic_sds_remote_node_context *rnc,
+                                           u16 remote_node_index);
 
 
 bool scic_sds_remote_node_context_is_ready(