isci: unify constants

cross driver constants are spread out over multiple header files, consolidate
them into isci.h, and push some includes out to the source files that need
them.

TODO: remove SCI_MODE_SIZE infrastructure.
TODO: task.h is full of inlines that are too large

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
diff --git a/drivers/scsi/isci/core/sci_controller.h b/drivers/scsi/isci/core/sci_controller.h
deleted file mode 100644
index 01316b1..0000000
--- a/drivers/scsi/isci/core/sci_controller.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * BSD LICENSE
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *   * Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in
- *     the documentation and/or other materials provided with the
- *     distribution.
- *   * Neither the name of Intel Corporation nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SCI_CONTROLLER_H_
-#define _SCI_CONTROLLER_H_
-
-/**
- * This file contains all of the interface methods that can be called by an SCI
- *    user on all SCI controller objects.
- *
- *
- */
-
-#define SCI_CONTROLLER_INVALID_IO_TAG 0xFFFF
-
-#endif  /* _SCI_CONTROLLER_H_ */
-
diff --git a/drivers/scsi/isci/core/sci_controller_constants.h b/drivers/scsi/isci/core/sci_controller_constants.h
deleted file mode 100644
index 2525c26..0000000
--- a/drivers/scsi/isci/core/sci_controller_constants.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * BSD LICENSE
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *   * Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in
- *     the documentation and/or other materials provided with the
- *     distribution.
- *   * Neither the name of Intel Corporation nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SCI_CONTROLLER_CONSTANTS_H_
-#define _SCI_CONTROLLER_CONSTANTS_H_
-
-/**
- * This file contains constant values that change based on the type of core or
- *    framework being managed.  These constants are exported in order to
- *    provide the user with information as to the bounds (i.e. how many) of
- *    specific objects.
- *
- *
- */
-
-#ifndef SCI_MAX_PHYS
-/**
- *
- *
- * This constant defines the maximum number of phy objects that can be
- * supported for the SCU Driver Standard (SDS) library.  This is tied directly
- * to silicon capabilities.
- */
-#define SCI_MAX_PHYS  (4)
-#endif
-
-#ifndef SCI_MAX_PORTS
-/**
- *
- *
- * This constant defines the maximum number of port objects that can be
- * supported for the SCU Driver Standard (SDS) library.  This is tied directly
- * to silicon capabilities.
- */
-#define SCI_MAX_PORTS SCI_MAX_PHYS
-#endif
-
-#ifndef SCI_MIN_SMP_PHYS
-/**
- *
- *
- * This constant defines the minimum number of SMP phy objects that can be
- * supported for a single expander level. This was determined by using 36
- * physical phys and room for 2 virtual phys.
- */
-#define SCI_MIN_SMP_PHYS  (38)
-#endif
-
-#ifndef SCI_MAX_SMP_PHYS
-/**
- *
- *
- * This constant defines the maximum number of SMP phy objects that can be
- * supported for the SCU Driver Standard (SDS) library. This number can be
- * increased if required.
- */
-#define SCI_MAX_SMP_PHYS  (384)
-#endif
-
-#ifndef SCI_MAX_REMOTE_DEVICES
-/**
- *
- *
- * This constant defines the maximum number of remote device objects that can
- * be supported for the SCU Driver Standard (SDS) library.  This is tied
- * directly to silicon capabilities.
- */
-#define SCI_MAX_REMOTE_DEVICES (256)
-#endif
-
-#ifndef SCI_MIN_REMOTE_DEVICES
-/**
- *
- *
- * This constant defines the minimum number of remote device objects that can
- * be supported for the SCU Driver Standard (SDS) library.  This # can be
- * configured for minimum memory environments to any value less than
- * SCI_MAX_REMOTE_DEVICES
- */
-#define SCI_MIN_REMOTE_DEVICES (16)
-#endif
-
-#ifndef SCI_MAX_IO_REQUESTS
-/**
- *
- *
- * This constant defines the maximum number of IO request objects that can be
- * supported for the SCU Driver Standard (SDS) library.  This is tied directly
- * to silicon capabilities.
- */
-#define SCI_MAX_IO_REQUESTS (256)
-#endif
-
-#ifndef SCI_MIN_IO_REQUESTS
-/**
- *
- *
- * This constant defines the minimum number of IO request objects that can be
- * supported for the SCU Driver Standard (SDS) library.  This # can be
- * configured for minimum memory environments to any value less than
- * SCI_MAX_IO_REQUESTS.
- */
-#define SCI_MIN_IO_REQUESTS (1)
-#endif
-
-#ifndef SCI_MAX_MSIX_MESSAGES
-/**
- *
- *
- * This constant defines the maximum number of MSI-X interrupt vectors/messages
- * supported for an SCU hardware controller instance.
- */
-#define SCI_MAX_MSIX_MESSAGES  (2)
-#endif
-
-#ifndef SCI_MAX_SCATTER_GATHER_ELEMENTS
-/**
- *
- *
- * This constant defines the maximum number of Scatter-Gather Elements to be
- * used by any SCI component.
- */
-#define SCI_MAX_SCATTER_GATHER_ELEMENTS 130
-#endif
-
-#ifndef SCI_MIN_SCATTER_GATHER_ELEMENTS
-/**
- *
- *
- * This constant defines the minimum number of Scatter-Gather Elements to be
- * used by any SCI component.
- */
-#define SCI_MIN_SCATTER_GATHER_ELEMENTS 1
-#endif
-
-/**
- *
- *
- * This constant defines the maximum number of controllers that can occur in a
- * single silicon package.
- */
-#define SCI_MAX_CONTROLLERS 2
-
-/**
- *
- *
- * The maximum number of supported domain objects is currently tied to the
- * maximum number of support port objects.
- */
-#define SCI_MAX_DOMAINS  SCI_MAX_PORTS
-
-
-#endif  /* _SCI_CONTROLLER_CONSTANTS_H_ */
-
diff --git a/drivers/scsi/isci/core/sci_status.h b/drivers/scsi/isci/core/sci_status.h
deleted file mode 100644
index 8b66619..0000000
--- a/drivers/scsi/isci/core/sci_status.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * BSD LICENSE
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *   * Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in
- *     the documentation and/or other materials provided with the
- *     distribution.
- *   * Neither the name of Intel Corporation nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SCI_STATUS_H_
-#define _SCI_STATUS_H_
-
-/**
- * This file contains all of the return status codes utilized across the
- *    various sub-components in SCI.
- *
- *
- */
-
-
-/**
- * enum sci_status - This is the general return status enumeration for non-IO,
- *    non-task management related SCI interface methods.
- *
- *
- */
-enum sci_status {
-	/**
-	 * This member indicates successful completion.
-	 */
-	SCI_SUCCESS = 0,
-
-	/**
-	 * This value indicates that the calling method completed successfully,
-	 * but that the IO may have completed before having it's start method
-	 * invoked.  This occurs during SAT translation for requests that do
-	 * not require an IO to the target or for any other requests that may
-	 * be completed without having to submit IO.
-	 */
-	SCI_SUCCESS_IO_COMPLETE_BEFORE_START,
-
-	/**
-	 *  This Value indicates that the SCU hardware returned an early response
-	 *  because the io request specified more data than is returned by the
-	 *  target device (mode pages, inquiry data, etc.). The completion routine
-	 *  will handle this case to get the actual number of bytes transferred.
-	 */
-	SCI_SUCCESS_IO_DONE_EARLY,
-
-	/**
-	 * This member indicates that the object for which a state change is
-	 * being requested is already in said state.
-	 */
-	SCI_WARNING_ALREADY_IN_STATE,
-
-	/**
-	 * This member indicates interrupt coalescence timer may cause SAS
-	 * specification compliance issues (i.e. SMP target mode response
-	 * frames must be returned within 1.9 milliseconds).
-	 */
-	SCI_WARNING_TIMER_CONFLICT,
-
-	/**
-	 * This field indicates a sequence of action is not completed yet. Mostly,
-	 * this status is used when multiple ATA commands are needed in a SATI translation.
-	 */
-	SCI_WARNING_SEQUENCE_INCOMPLETE,
-
-	/**
-	 * This member indicates that there was a general failure.
-	 */
-	SCI_FAILURE,
-
-	/**
-	 * This member indicates that the SCI implementation is unable to complete
-	 * an operation due to a critical flaw the prevents any further operation
-	 * (i.e. an invalid pointer).
-	 */
-	SCI_FATAL_ERROR,
-
-	/**
-	 * This member indicates the calling function failed, because the state
-	 * of the controller is in a state that prevents successful completion.
-	 */
-	SCI_FAILURE_INVALID_STATE,
-
-	/**
-	 * This member indicates the calling function failed, because there is
-	 * insufficient resources/memory to complete the request.
-	 */
-	SCI_FAILURE_INSUFFICIENT_RESOURCES,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * controller object required for the operation can't be located.
-	 */
-	SCI_FAILURE_CONTROLLER_NOT_FOUND,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * discovered controller type is not supported by the library.
-	 */
-	SCI_FAILURE_UNSUPPORTED_CONTROLLER_TYPE,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * requested initialization data version isn't supported.
-	 */
-	SCI_FAILURE_UNSUPPORTED_INIT_DATA_VERSION,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * requested configuration of SAS Phys into SAS Ports is not supported.
-	 */
-	SCI_FAILURE_UNSUPPORTED_PORT_CONFIGURATION,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * requested protocol is not supported by the remote device, port,
-	 * or controller.
-	 */
-	SCI_FAILURE_UNSUPPORTED_PROTOCOL,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * requested information type is not supported by the SCI implementation.
-	 */
-	SCI_FAILURE_UNSUPPORTED_INFORMATION_TYPE,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * device already exists.
-	 */
-	SCI_FAILURE_DEVICE_EXISTS,
-
-	/**
-	 * This member indicates the calling function failed, because adding
-	 * a phy to the object is not possible.
-	 */
-	SCI_FAILURE_ADDING_PHY_UNSUPPORTED,
-
-	/**
-	 * This member indicates the calling function failed, because the
-	 * requested information type is not supported by the SCI implementation.
-	 */
-	SCI_FAILURE_UNSUPPORTED_INFORMATION_FIELD,
-
-	/**
-	 * This member indicates the calling function failed, because the SCI
-	 * implementation does not support the supplied time limit.
-	 */
-	SCI_FAILURE_UNSUPPORTED_TIME_LIMIT,
-
-	/**
-	 * This member indicates the calling method failed, because the SCI
-	 * implementation does not contain the specified Phy.
-	 */
-	SCI_FAILURE_INVALID_PHY,
-
-	/**
-	 * This member indicates the calling method failed, because the SCI
-	 * implementation does not contain the specified Port.
-	 */
-	SCI_FAILURE_INVALID_PORT,
-
-	/**
-	 * This member indicates the calling method was partly successful
-	 * The port was reset but not all phys in port are operational
-	 */
-	SCI_FAILURE_RESET_PORT_PARTIAL_SUCCESS,
-
-	/**
-	 * This member indicates that calling method failed
-	 * The port reset did not complete because none of the phys are operational
-	 */
-	SCI_FAILURE_RESET_PORT_FAILURE,
-
-	/**
-	 * This member indicates the calling method failed, because the SCI
-	 * implementation does not contain the specified remote device.
-	 */
-	SCI_FAILURE_INVALID_REMOTE_DEVICE,
-
-	/**
-	 * This member indicates the calling method failed, because the remote
-	 * device is in a bad state and requires a reset.
-	 */
-	SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
-
-	/**
-	 * This member indicates the calling method failed, because the SCI
-	 * implementation does not contain or support the specified IO tag.
-	 */
-	SCI_FAILURE_INVALID_IO_TAG,
-
-	/**
-	 * This member indicates that the operation failed and the user should
-	 * check the response data associated with the IO.
-	 */
-	SCI_FAILURE_IO_RESPONSE_VALID,
-
-	/**
-	 * This member indicates that the operation failed, the failure is
-	 * controller implementation specific, and the response data associated
-	 * with the request is not valid.  You can query for the controller
-	 * specific error information via scic_controller_get_request_status()
-	 */
-	SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
-
-	/**
-	 * This member indicated that the operation failed because the
-	 * user requested this IO to be terminated.
-	 */
-	SCI_FAILURE_IO_TERMINATED,
-
-	/**
-	 * This member indicates that the operation failed and the associated
-	 * request requires a SCSI abort task to be sent to the target.
-	 */
-	SCI_FAILURE_IO_REQUIRES_SCSI_ABORT,
-
-	/**
-	 * This member indicates that the operation failed because the supplied
-	 * device could not be located.
-	 */
-	SCI_FAILURE_DEVICE_NOT_FOUND,
-
-	/**
-	 * This member indicates that the operation failed because the
-	 * objects association is required and is not correctly set.
-	 */
-	SCI_FAILURE_INVALID_ASSOCIATION,
-
-	/**
-	 * This member indicates that the operation failed, because a timeout
-	 * occurred.
-	 */
-	SCI_FAILURE_TIMEOUT,
-
-	/**
-	 * This member indicates that the operation failed, because the user
-	 * specified a value that is either invalid or not supported.
-	 */
-	SCI_FAILURE_INVALID_PARAMETER_VALUE,
-
-	/**
-	 * This value indicates that the operation failed, because the number
-	 * of messages (MSI-X) is not supported.
-	 */
-	SCI_FAILURE_UNSUPPORTED_MESSAGE_COUNT,
-
-	/**
-	 * This value indicates that the method failed due to a lack of
-	 * available NCQ tags.
-	 */
-	SCI_FAILURE_NO_NCQ_TAG_AVAILABLE,
-
-	/**
-	 * This value indicates that a protocol violation has occurred on the
-	 * link.
-	 */
-	SCI_FAILURE_PROTOCOL_VIOLATION,
-
-	/**
-	 * This value indicates a failure condition that retry may help to clear.
-	 */
-	SCI_FAILURE_RETRY_REQUIRED,
-
-	/**
-	 * This field indicates the retry limit was reached when a retry is attempted
-	 */
-	SCI_FAILURE_RETRY_LIMIT_REACHED,
-
-	/**
-	 * This member indicates the calling method was partly successful.
-	 * Mostly, this status is used when a LUN_RESET issued to an expander attached
-	 * STP device in READY NCQ substate needs to have RNC suspended/resumed
-	 * before posting TC.
-	 */
-	SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS,
-
-	/**
-	 * This field indicates an illegal phy connection based on the routing attribute
-	 * of both expander phy attached to each other.
-	 */
-	SCI_FAILURE_ILLEGAL_ROUTING_ATTRIBUTE_CONFIGURATION,
-
-	/**
-	 * This field indicates a CONFIG ROUTE INFO command has a response with function result
-	 * INDEX DOES NOT EXIST, usually means exceeding max route index.
-	 */
-	SCI_FAILURE_EXCEED_MAX_ROUTE_INDEX,
-
-	/**
-	 * This value indicates that an unsupported PCI device ID has been
-	 * specified.  This indicates that attempts to invoke
-	 * scic_library_allocate_controller() will fail.
-	 */
-	SCI_FAILURE_UNSUPPORTED_PCI_DEVICE_ID
-
-};
-
-/**
- * enum sci_io_status - This enumeration depicts all of the possible IO
- *    completion status values.  Each value in this enumeration maps directly
- *    to a value in the enum sci_status enumeration.  Please refer to that
- *    enumeration for detailed comments concerning what the status represents.
- *
- * Add the API to retrieve the SCU status from the core. Check to see that the
- * following status are properly handled: - SCI_IO_FAILURE_UNSUPPORTED_PROTOCOL
- * - SCI_IO_FAILURE_INVALID_IO_TAG
- */
-enum sci_io_status {
-	SCI_IO_SUCCESS                         = SCI_SUCCESS,
-	SCI_IO_FAILURE                         = SCI_FAILURE,
-	SCI_IO_SUCCESS_COMPLETE_BEFORE_START   = SCI_SUCCESS_IO_COMPLETE_BEFORE_START,
-	SCI_IO_SUCCESS_IO_DONE_EARLY           = SCI_SUCCESS_IO_DONE_EARLY,
-	SCI_IO_FAILURE_INVALID_STATE           = SCI_FAILURE_INVALID_STATE,
-	SCI_IO_FAILURE_INSUFFICIENT_RESOURCES  = SCI_FAILURE_INSUFFICIENT_RESOURCES,
-	SCI_IO_FAILURE_UNSUPPORTED_PROTOCOL    = SCI_FAILURE_UNSUPPORTED_PROTOCOL,
-	SCI_IO_FAILURE_RESPONSE_VALID          = SCI_FAILURE_IO_RESPONSE_VALID,
-	SCI_IO_FAILURE_CONTROLLER_SPECIFIC_ERR = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
-	SCI_IO_FAILURE_TERMINATED              = SCI_FAILURE_IO_TERMINATED,
-	SCI_IO_FAILURE_REQUIRES_SCSI_ABORT     = SCI_FAILURE_IO_REQUIRES_SCSI_ABORT,
-	SCI_IO_FAILURE_INVALID_PARAMETER_VALUE = SCI_FAILURE_INVALID_PARAMETER_VALUE,
-	SCI_IO_FAILURE_NO_NCQ_TAG_AVAILABLE    = SCI_FAILURE_NO_NCQ_TAG_AVAILABLE,
-	SCI_IO_FAILURE_PROTOCOL_VIOLATION      = SCI_FAILURE_PROTOCOL_VIOLATION,
-
-	SCI_IO_FAILURE_REMOTE_DEVICE_RESET_REQUIRED = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
-
-	SCI_IO_FAILURE_RETRY_REQUIRED      = SCI_FAILURE_RETRY_REQUIRED,
-	SCI_IO_FAILURE_RETRY_LIMIT_REACHED = SCI_FAILURE_RETRY_LIMIT_REACHED,
-	SCI_IO_FAILURE_INVALID_REMOTE_DEVICE = SCI_FAILURE_INVALID_REMOTE_DEVICE
-};
-
-/**
- * enum sci_task_status - This enumeration depicts all of the possible task
- *    completion status values.  Each value in this enumeration maps directly
- *    to a value in the enum sci_status enumeration.  Please refer to that
- *    enumeration for detailed comments concerning what the status represents.
- *
- * Check to see that the following status are properly handled:
- */
-enum sci_task_status {
-	SCI_TASK_SUCCESS                         = SCI_SUCCESS,
-	SCI_TASK_FAILURE                         = SCI_FAILURE,
-	SCI_TASK_FAILURE_INVALID_STATE           = SCI_FAILURE_INVALID_STATE,
-	SCI_TASK_FAILURE_INSUFFICIENT_RESOURCES  = SCI_FAILURE_INSUFFICIENT_RESOURCES,
-	SCI_TASK_FAILURE_UNSUPPORTED_PROTOCOL    = SCI_FAILURE_UNSUPPORTED_PROTOCOL,
-	SCI_TASK_FAILURE_INVALID_TAG             = SCI_FAILURE_INVALID_IO_TAG,
-	SCI_TASK_FAILURE_RESPONSE_VALID          = SCI_FAILURE_IO_RESPONSE_VALID,
-	SCI_TASK_FAILURE_CONTROLLER_SPECIFIC_ERR = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
-	SCI_TASK_FAILURE_TERMINATED              = SCI_FAILURE_IO_TERMINATED,
-	SCI_TASK_FAILURE_INVALID_PARAMETER_VALUE = SCI_FAILURE_INVALID_PARAMETER_VALUE,
-
-	SCI_TASK_FAILURE_REMOTE_DEVICE_RESET_REQUIRED = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
-	SCI_TASK_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS = SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS
-
-};
-
-
-#endif  /* _SCI_STATUS_H_ */
-
diff --git a/drivers/scsi/isci/core/sci_util.c b/drivers/scsi/isci/core/sci_util.c
index 4e60d55..0101fec 100644
--- a/drivers/scsi/isci/core/sci_util.c
+++ b/drivers/scsi/isci/core/sci_util.c
@@ -56,6 +56,7 @@
 #include <linux/kernel.h>
 #include "sci_util.h"
 #include "sci_environment.h"
+#include "request.h"
 
 void *scic_request_get_virt_addr(struct scic_sds_request *sci_req, dma_addr_t phys_addr)
 {
diff --git a/drivers/scsi/isci/core/scic_config_parameters.h b/drivers/scsi/isci/core/scic_config_parameters.h
index ea09d0b..8b8c925 100644
--- a/drivers/scsi/isci/core/scic_config_parameters.h
+++ b/drivers/scsi/isci/core/scic_config_parameters.h
@@ -56,17 +56,6 @@
 #ifndef _SCIC_SDS_USER_PARAMETERS_H_
 #define _SCIC_SDS_USER_PARAMETERS_H_
 
-/**
- * This file contains all of the structure definitions and interface methods
- *    that can be called by a SCIC user on the SCU Driver Standard
- *    (struct scic_sds_user_parameters) user parameter block.
- *
- *
- */
-
-
-#include "sci_status.h"
-#include "sci_controller_constants.h"
 #include "probe_roms.h"
 
 struct scic_sds_controller;
diff --git a/drivers/scsi/isci/core/scic_controller.h b/drivers/scsi/isci/core/scic_controller.h
index 50ba155..bd08f30 100644
--- a/drivers/scsi/isci/core/scic_controller.h
+++ b/drivers/scsi/isci/core/scic_controller.h
@@ -56,8 +56,6 @@
 #ifndef _SCIC_CONTROLLER_H_
 #define _SCIC_CONTROLLER_H_
 
-#include "sci_status.h"
-#include "sci_controller.h"
 #include "scic_config_parameters.h"
 
 struct scic_sds_request;
@@ -65,12 +63,6 @@
 struct scic_sds_port;
 struct scic_sds_remote_device;
 
-
-enum sci_controller_mode {
-	SCI_MODE_SPEED,		/* Optimized for performance */
-	SCI_MODE_SIZE		/* Optimized for memory use */
-};
-
 enum sci_status scic_controller_construct(struct scic_sds_controller *c,
 					  void __iomem *scu_base,
 					  void __iomem *smu_base);
diff --git a/drivers/scsi/isci/core/scic_io_request.h b/drivers/scsi/isci/core/scic_io_request.h
index f7c6d42..a4664cc3 100644
--- a/drivers/scsi/isci/core/scic_io_request.h
+++ b/drivers/scsi/isci/core/scic_io_request.h
@@ -56,15 +56,7 @@
 #ifndef _SCIC_IO_REQUEST_H_
 #define _SCIC_IO_REQUEST_H_
 
-/**
- * This file contains the structures and interface methods that can be
- *    referenced and used by the SCI user for the SCI IO request object.
- *
- * Determine the failure situations and return values.
- */
-
 #include <linux/kernel.h>
-#include "sci_status.h"
 
 struct scic_sds_request;
 struct scic_sds_remote_device;
diff --git a/drivers/scsi/isci/core/scic_phy.h b/drivers/scsi/isci/core/scic_phy.h
index 1fb49f0..f046b4a 100644
--- a/drivers/scsi/isci/core/scic_phy.h
+++ b/drivers/scsi/isci/core/scic_phy.h
@@ -66,7 +66,6 @@
 
 #include <scsi/sas.h>
 #include <scsi/libsas.h>
-#include "sci_status.h"
 
 struct scic_sds_phy;
 struct scic_sds_port;
diff --git a/drivers/scsi/isci/core/scic_port.h b/drivers/scsi/isci/core/scic_port.h
index 44a8ea8..51e7eede 100644
--- a/drivers/scsi/isci/core/scic_port.h
+++ b/drivers/scsi/isci/core/scic_port.h
@@ -56,8 +56,8 @@
 #ifndef _SCIC_PORT_H_
 #define _SCIC_PORT_H_
 
+#include "isci.h"
 #include "sas.h"
-#include "sci_status.h"
 #include "scic_phy.h"
 
 struct scic_sds_port;
diff --git a/drivers/scsi/isci/core/scic_sds_controller.c b/drivers/scsi/isci/core/scic_sds_controller.c
index 852b7d5..e77265b 100644
--- a/drivers/scsi/isci/core/scic_sds_controller.c
+++ b/drivers/scsi/isci/core/scic_sds_controller.c
@@ -68,11 +68,11 @@
 #include "sci_environment.h"
 #include "sci_util.h"
 #include "scu_completion_codes.h"
-#include "scu_constants.h"
 #include "scu_event_codes.h"
 #include "scu_remote_node_context.h"
 #include "scu_task_context.h"
 #include "scu_unsolicited_frame.h"
+#include "timers.h"
 
 #define SCU_CONTEXT_RAM_INIT_STALL_TIME      200
 
diff --git a/drivers/scsi/isci/core/scic_sds_controller.h b/drivers/scsi/isci/core/scic_sds_controller.h
index 0d50473..5c00f96 100644
--- a/drivers/scsi/isci/core/scic_sds_controller.h
+++ b/drivers/scsi/isci/core/scic_sds_controller.h
@@ -67,7 +67,6 @@
  */
 
 #include "sci_pool.h"
-#include "sci_controller_constants.h"
 #include "sci_base_state.h"
 #include "sci_base_state_machine.h"
 #include "scic_config_parameters.h"
@@ -76,7 +75,6 @@
 #include "remote_node_table.h"
 #include "remote_device.h"
 #include "scu_registers.h"
-#include "scu_constants.h"
 #include "scu_task_context.h"
 #include "scu_unsolicited_frame.h"
 #include "scic_sds_unsolicited_frame_control.h"
diff --git a/drivers/scsi/isci/core/scic_sds_phy.c b/drivers/scsi/isci/core/scic_sds_phy.c
index f0f4c74..c6df0e2 100644
--- a/drivers/scsi/isci/core/scic_sds_phy.c
+++ b/drivers/scsi/isci/core/scic_sds_phy.c
@@ -65,6 +65,7 @@
 #include "sci_environment.h"
 #include "sci_util.h"
 #include "scu_event_codes.h"
+#include "timers.h"
 
 #define SCIC_SDS_PHY_MIN_TIMER_COUNT  (SCI_MAX_PHYS)
 #define SCIC_SDS_PHY_MAX_TIMER_COUNT  (SCI_MAX_PHYS)
diff --git a/drivers/scsi/isci/core/scic_sds_port.c b/drivers/scsi/isci/core/scic_sds_port.c
index 01288dd..9302e39 100644
--- a/drivers/scsi/isci/core/scic_sds_port.c
+++ b/drivers/scsi/isci/core/scic_sds_port.c
@@ -64,6 +64,7 @@
 #include "scic_sds_request.h"
 #include "sci_environment.h"
 #include "scu_registers.h"
+#include "timers.h"
 
 #define SCIC_SDS_PORT_MIN_TIMER_COUNT  (SCI_MAX_PORTS)
 #define SCIC_SDS_PORT_MAX_TIMER_COUNT  (SCI_MAX_PORTS)
diff --git a/drivers/scsi/isci/core/scic_sds_port.h b/drivers/scsi/isci/core/scic_sds_port.h
index 3633561..3696deb 100644
--- a/drivers/scsi/isci/core/scic_sds_port.h
+++ b/drivers/scsi/isci/core/scic_sds_port.h
@@ -58,21 +58,15 @@
 
 #include <linux/kernel.h>
 #include "sas.h"
-#include "sci_controller_constants.h"
 #include "scu_registers.h"
-
-#define SCIC_SDS_DUMMY_PORT   0xFF
+#include "sci_base_state_machine.h"
 
 struct scic_sds_controller;
 struct scic_sds_phy;
 struct scic_sds_remote_device;
 struct scic_sds_request;
 
-/**
- * This constant defines the value utilized by SCI Components to indicate
- * an invalid handle.
- */
-#define SCI_INVALID_HANDLE 0x0
+#define SCIC_SDS_DUMMY_PORT   0xFF
 
 /**
  * enum SCIC_SDS_PORT_READY_SUBSTATES -
diff --git a/drivers/scsi/isci/core/scic_sds_port_configuration_agent.c b/drivers/scsi/isci/core/scic_sds_port_configuration_agent.c
index 2d3d067..3fad8c1 100644
--- a/drivers/scsi/isci/core/scic_sds_port_configuration_agent.c
+++ b/drivers/scsi/isci/core/scic_sds_port_configuration_agent.c
@@ -53,17 +53,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/**
- * This file contains the implementation for the public and protected methods
- *    for the port configuration agent.
- *
- *
- */
-
 #include "sci_environment.h"
 #include "scic_controller.h"
 #include "scic_sds_controller.h"
 #include "scic_sds_port_configuration_agent.h"
+#include "timers.h"
 
 #define SCIC_SDS_MPC_RECONFIGURATION_TIMEOUT    (10)
 #define SCIC_SDS_APC_RECONFIGURATION_TIMEOUT    (10)
diff --git a/drivers/scsi/isci/core/scic_sds_request.c b/drivers/scsi/isci/core/scic_sds_request.c
index 50dd19b..de35885 100644
--- a/drivers/scsi/isci/core/scic_sds_request.c
+++ b/drivers/scsi/isci/core/scic_sds_request.c
@@ -67,8 +67,9 @@
 #include "sci_environment.h"
 #include "sci_util.h"
 #include "scu_completion_codes.h"
-#include "scu_constants.h"
 #include "scu_task_context.h"
+#include "request.h"
+#include "task.h"
 
 /*
  * ****************************************************************************
diff --git a/drivers/scsi/isci/core/scic_sds_request.h b/drivers/scsi/isci/core/scic_sds_request.h
index 1dd98aa..5ce7ff2 100644
--- a/drivers/scsi/isci/core/scic_sds_request.h
+++ b/drivers/scsi/isci/core/scic_sds_request.h
@@ -56,11 +56,11 @@
 #ifndef _SCIC_SDS_IO_REQUEST_H_
 #define _SCIC_SDS_IO_REQUEST_H_
 
+#include "isci.h"
 #include "scic_io_request.h"
 #include "sci_base_state_machine.h"
 #include "scu_task_context.h"
 #include "scic_sds_stp_request.h"
-#include "scu_constants.h"
 #include "sas.h"
 
 struct scic_sds_controller;
diff --git a/drivers/scsi/isci/core/scic_sds_stp_request.c b/drivers/scsi/isci/core/scic_sds_stp_request.c
index 2677393..c1c316c 100644
--- a/drivers/scsi/isci/core/scic_sds_stp_request.c
+++ b/drivers/scsi/isci/core/scic_sds_stp_request.c
@@ -69,6 +69,7 @@
 #include "scu_completion_codes.h"
 #include "scu_event_codes.h"
 #include "scu_task_context.h"
+#include "request.h"
 
 void scic_sds_stp_request_assign_buffers(struct scic_sds_request *sci_req)
 {
diff --git a/drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h b/drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h
index 4eb244c..0d8ca8c 100644
--- a/drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h
+++ b/drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h
@@ -53,19 +53,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/**
- * This file contains all of the unsolicited frame related management for the
- *    address table, the headers, and actual payload buffers.
- *
- *
- */
-
 #ifndef _SCIC_SDS_UNSOLICITED_FRAME_CONTROL_H_
 #define _SCIC_SDS_UNSOLICITED_FRAME_CONTROL_H_
 
+#include "isci.h"
 #include "scu_unsolicited_frame.h"
-#include "scu_constants.h"
-#include "sci_status.h"
 
 /**
  * enum unsolicited_frame_state -
@@ -144,15 +136,6 @@
 
 };
 
-/*
- * Determine the size of the unsolicited frame array including
- * unused buffers. */
-#if SCU_UNSOLICITED_FRAME_COUNT <= SCU_MIN_UF_TABLE_ENTRIES
-#define SCU_UNSOLICITED_FRAME_CONTROL_ARRAY_SIZE SCU_MIN_UF_TABLE_ENTRIES
-#else
-#define SCU_UNSOLICITED_FRAME_CONTROL_ARRAY_SIZE SCU_MAX_UNSOLICITED_FRAMES
-#endif /* SCU_UNSOLICITED_FRAME_COUNT <= SCU_MIN_UF_TABLE_ENTRIES */
-
 /**
  * struct scic_sds_uf_buffer_array -
  *
diff --git a/drivers/scsi/isci/core/scic_task_request.h b/drivers/scsi/isci/core/scic_task_request.h
index 98cfaa9..790cee9 100644
--- a/drivers/scsi/isci/core/scic_task_request.h
+++ b/drivers/scsi/isci/core/scic_task_request.h
@@ -56,16 +56,7 @@
 #ifndef _SCIC_TASK_REQUEST_H_
 #define _SCIC_TASK_REQUEST_H_
 
-/**
- * This file contains the structures and interface methods that can be
- *    referenced and used by the SCI user for to utilize task management
- *    requests.
- *
- *
- */
-
-
-#include "sci_status.h"
+#include "isci.h"
 
 struct scic_sds_request;
 struct scic_sds_remote_device;
diff --git a/drivers/scsi/isci/core/scu_constants.h b/drivers/scsi/isci/core/scu_constants.h
deleted file mode 100644
index a99d110..0000000
--- a/drivers/scsi/isci/core/scu_constants.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * This file is provided under a dual BSD/GPLv2 license.  When using or
- * redistributing this file, you may do so under either license.
- *
- * GPL LICENSE SUMMARY
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
- * The full GNU General Public License is included in this distribution
- * in the file called LICENSE.GPL.
- *
- * BSD LICENSE
- *
- * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- *   * Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *   * Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in
- *     the documentation and/or other materials provided with the
- *     distribution.
- *   * Neither the name of Intel Corporation nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SCU_CONSTANTS_H_
-#define _SCU_CONSTANTS_H_
-
-/**
- * This file contains the SCU hardware constants.
- *
- *
- */
-
-#include "sci_controller_constants.h"
-
-/**
- *
- *
- * 2 indicates the maximum number of UFs that can occur for a given IO request.
- *  The hardware handles reception of additional unsolicited frames while all
- * UFs are in use, by holding off the transmitting device.  This number could
- * be theoretically reduced to 1, but 2 provides for more reliable operation.
- * During SATA PIO operation, it is possible under some conditions for there to
- * be 3 separate FISes received, back to back to back (PIO Setup, Data, D2H
- * Register). It is unlikely to have all 3 pending all at once without some of
- * them already being processed.
- */
-#define SCU_MIN_UNSOLICITED_FRAMES        (1)
-#define SCU_MIN_CRITICAL_NOTIFICATIONS    (24)
-#define SCU_MIN_EVENTS                    (4)
-#define SCU_MIN_COMPLETION_QUEUE_SCRATCH  (2)
-#define SCU_MIN_COMPLETION_QUEUE_ENTRIES  (SCU_MIN_CRITICAL_NOTIFICATIONS \
-					   + SCU_MIN_EVENTS \
-					   + SCU_MIN_UNSOLICITED_FRAMES	\
-					   + SCI_MIN_IO_REQUESTS \
-					   + SCU_MIN_COMPLETION_QUEUE_SCRATCH)
-
-#define SCU_MAX_CRITICAL_NOTIFICATIONS    (384)
-#define SCU_MAX_EVENTS                    (128)
-#define SCU_MAX_UNSOLICITED_FRAMES        (128)
-#define SCU_MAX_COMPLETION_QUEUE_SCRATCH  (128)
-#define SCU_MAX_COMPLETION_QUEUE_ENTRIES  (SCU_MAX_CRITICAL_NOTIFICATIONS \
-					   + SCU_MAX_EVENTS \
-					   + SCU_MAX_UNSOLICITED_FRAMES	\
-					   + SCI_MAX_IO_REQUESTS \
-					   + SCU_MAX_COMPLETION_QUEUE_SCRATCH)
-
-#if !defined(ENABLE_MINIMUM_MEMORY_MODE)
-#define SCU_UNSOLICITED_FRAME_COUNT      SCU_MAX_UNSOLICITED_FRAMES
-#define SCU_CRITICAL_NOTIFICATION_COUNT  SCU_MAX_CRITICAL_NOTIFICATIONS
-#define SCU_EVENT_COUNT                  SCU_MAX_EVENTS
-#define SCU_COMPLETION_QUEUE_SCRATCH     SCU_MAX_COMPLETION_QUEUE_SCRATCH
-#define SCU_IO_REQUEST_COUNT             SCI_MAX_IO_REQUESTS
-#define SCU_IO_REQUEST_SGE_COUNT         SCI_MAX_SCATTER_GATHER_ELEMENTS
-#define SCU_COMPLETION_QUEUE_COUNT       SCU_MAX_COMPLETION_QUEUE_ENTRIES
-#else
-#define SCU_UNSOLICITED_FRAME_COUNT      SCU_MIN_UNSOLICITED_FRAMES
-#define SCU_CRITICAL_NOTIFICATION_COUNT  SCU_MIN_CRITICAL_NOTIFICATIONS
-#define SCU_EVENT_COUNT                  SCU_MIN_EVENTS
-#define SCU_COMPLETION_QUEUE_SCRATCH     SCU_MIN_COMPLETION_QUEUE_SCRATCH
-#define SCU_IO_REQUEST_COUNT             SCI_MIN_IO_REQUESTS
-#define SCU_IO_REQUEST_SGE_COUNT         SCI_MIN_SCATTER_GATHER_ELEMENTS
-#define SCU_COMPLETION_QUEUE_COUNT       SCU_MIN_COMPLETION_QUEUE_ENTRIES
-#endif /* !defined(ENABLE_MINIMUM_MEMORY_OPERATION) */
-
-/**
- *
- *
- * The SCU_COMPLETION_QUEUE_COUNT constant indicates the size of the completion
- * queue into which the hardware DMAs 32-bit quantas (completion entries).
- */
-
-/**
- *
- *
- * This queue must be programmed to a power of 2 size (e.g. 32, 64, 1024, etc.).
- */
-#if (SCU_COMPLETION_QUEUE_COUNT != 16)  && \
-	(SCU_COMPLETION_QUEUE_COUNT != 32)  && \
-	(SCU_COMPLETION_QUEUE_COUNT != 64)  && \
-	(SCU_COMPLETION_QUEUE_COUNT != 128) && \
-	(SCU_COMPLETION_QUEUE_COUNT != 256) && \
-	(SCU_COMPLETION_QUEUE_COUNT != 512) && \
-	(SCU_COMPLETION_QUEUE_COUNT != 1024)
-#error "SCU_COMPLETION_QUEUE_COUNT must be set to a power of 2."
-#endif
-
-#if SCU_MIN_UNSOLICITED_FRAMES > SCU_MAX_UNSOLICITED_FRAMES
-#error "Invalid configuration of unsolicited frame constants"
-#endif /* SCU_MIN_UNSOLICITED_FRAMES > SCU_MAX_UNSOLICITED_FRAMES */
-
-#define SCU_MIN_UF_TABLE_ENTRIES            (8)
-#define SCU_ABSOLUTE_MAX_UNSOLICITED_FRAMES (4096)
-#define SCU_UNSOLICITED_FRAME_BUFFER_SIZE   (1024)
-#define SCU_INVALID_FRAME_INDEX             (0xFFFF)
-
-#define SCU_IO_REQUEST_MAX_SGE_SIZE         (0x00FFFFFF)
-#define SCU_IO_REQUEST_MAX_TRANSFER_LENGTH  (0x00FFFFFF)
-
-#endif /* _SCU_CONSTANTS_H_ */
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c
index 271a7e1..5847149 100644
--- a/drivers/scsi/isci/host.c
+++ b/drivers/scsi/isci/host.c
@@ -60,7 +60,9 @@
 #include "request.h"
 #include "host.h"
 #include "probe_roms.h"
+#include "scic_controller.h"
 #include "scic_sds_controller.h"
+#include "timers.h"
 
 irqreturn_t isci_msix_isr(int vec, void *data)
 {
diff --git a/drivers/scsi/isci/host.h b/drivers/scsi/isci/host.h
index afa41e8..13c1c99 100644
--- a/drivers/scsi/isci/host.h
+++ b/drivers/scsi/isci/host.h
@@ -53,26 +53,12 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
-#if !defined(_SCI_HOST_H_)
+#ifndef _SCI_HOST_H_
 #define _SCI_HOST_H_
 
-#include "phy.h"
 #include "scic_sds_controller.h"
-#include "timers.h"
 #include "remote_device.h"
-
-#define DRV_NAME "isci"
-#define SCI_PCI_BAR_COUNT 2
-#define SCI_NUM_MSI_X_INT 2
-#define SCI_SMU_BAR       0
-#define SCI_SMU_BAR_SIZE  (16*1024)
-#define SCI_SCU_BAR       1
-#define SCI_SCU_BAR_SIZE  (4*1024*1024)
-#define SCI_IO_SPACE_BAR0 2
-#define SCI_IO_SPACE_BAR1 3
-#define ISCI_CAN_QUEUE_VAL 250 /* < SCI_MAX_IO_REQUESTS ? */
-#define SCIC_CONTROLLER_STOP_TIMEOUT 5000
+#include "phy.h"
 
 struct isci_host {
 	struct scic_sds_controller sci;
diff --git a/drivers/scsi/isci/init.c b/drivers/scsi/isci/init.c
index 522d39f..df132c0 100644
--- a/drivers/scsi/isci/init.c
+++ b/drivers/scsi/isci/init.c
@@ -61,9 +61,9 @@
 #include <asm/string.h>
 #include "isci.h"
 #include "task.h"
-#include "sci_controller_constants.h"
 #include "sci_environment.h"
 #include "probe_roms.h"
+#include "scic_controller.h"
 
 static struct scsi_transport_template *isci_transport_template;
 
diff --git a/drivers/scsi/isci/isci.h b/drivers/scsi/isci/isci.h
index 60c8462..800f233 100644
--- a/drivers/scsi/isci/isci.h
+++ b/drivers/scsi/isci/isci.h
@@ -56,22 +56,470 @@
 #ifndef __ISCI_H__
 #define __ISCI_H__
 
-#include <linux/kernel.h>
-#include <linux/list.h>
-#include <linux/types.h>
-#include <linux/spinlock.h>
 #include <linux/interrupt.h>
-#include <linux/bug.h>
-#include <scsi/libsas.h>
-#include <scsi/scsi.h>
 
-#include "scic_controller.h"
-#include "host.h"
-#include "timers.h"
-#include "sci_status.h"
-#include "request.h"
-#include "task.h"
-#include "sata.h"
+#define DRV_NAME "isci"
+#define SCI_PCI_BAR_COUNT 2
+#define SCI_NUM_MSI_X_INT 2
+#define SCI_SMU_BAR       0
+#define SCI_SMU_BAR_SIZE  (16*1024)
+#define SCI_SCU_BAR       1
+#define SCI_SCU_BAR_SIZE  (4*1024*1024)
+#define SCI_IO_SPACE_BAR0 2
+#define SCI_IO_SPACE_BAR1 3
+#define ISCI_CAN_QUEUE_VAL 250 /* < SCI_MAX_IO_REQUESTS ? */
+#define SCIC_CONTROLLER_STOP_TIMEOUT 5000
+
+#define SCI_CONTROLLER_INVALID_IO_TAG 0xFFFF
+
+enum sci_controller_mode {
+	SCI_MODE_SPEED,
+	SCI_MODE_SIZE /* deprecated */
+};
+
+#define SCI_MAX_PHYS  (4)
+#define SCI_MAX_PORTS SCI_MAX_PHYS
+#define SCI_MIN_SMP_PHYS  (38)
+#define SCI_MAX_SMP_PHYS  (384) /* not silicon constrained */
+#define SCI_MAX_REMOTE_DEVICES (256)
+#define SCI_MIN_REMOTE_DEVICES (16)
+#define SCI_MAX_IO_REQUESTS (256)
+#define SCI_MIN_IO_REQUESTS (1)
+#define SCI_MAX_MSIX_MESSAGES  (2)
+#define SCI_MAX_SCATTER_GATHER_ELEMENTS 130 /* not silicon constrained */
+#define SCI_MIN_SCATTER_GATHER_ELEMENTS 1
+#define SCI_MAX_CONTROLLERS 2
+#define SCI_MAX_DOMAINS  SCI_MAX_PORTS
+
+/* 2 indicates the maximum number of UFs that can occur for a given IO request.
+ * The hardware handles reception of additional unsolicited frames while all
+ * UFs are in use, by holding off the transmitting device.  This number could
+ * be theoretically reduced to 1, but 2 provides for more reliable operation.
+ * During SATA PIO operation, it is possible under some conditions for there to
+ * be 3 separate FISes received, back to back to back (PIO Setup, Data, D2H
+ * Register). It is unlikely to have all 3 pending all at once without some of
+ * them already being processed.
+ */
+#define SCU_MIN_UNSOLICITED_FRAMES        (1)
+#define SCU_MIN_CRITICAL_NOTIFICATIONS    (24)
+#define SCU_MIN_EVENTS                    (4)
+#define SCU_MIN_COMPLETION_QUEUE_SCRATCH  (2)
+#define SCU_MIN_COMPLETION_QUEUE_ENTRIES  (SCU_MIN_CRITICAL_NOTIFICATIONS \
+					   + SCU_MIN_EVENTS \
+					   + SCU_MIN_UNSOLICITED_FRAMES	\
+					   + SCI_MIN_IO_REQUESTS \
+					   + SCU_MIN_COMPLETION_QUEUE_SCRATCH)
+
+#define SCU_MAX_CRITICAL_NOTIFICATIONS    (384)
+#define SCU_MAX_EVENTS                    (128)
+#define SCU_MAX_UNSOLICITED_FRAMES        (128)
+#define SCU_MAX_COMPLETION_QUEUE_SCRATCH  (128)
+#define SCU_MAX_COMPLETION_QUEUE_ENTRIES  (SCU_MAX_CRITICAL_NOTIFICATIONS \
+					   + SCU_MAX_EVENTS \
+					   + SCU_MAX_UNSOLICITED_FRAMES	\
+					   + SCI_MAX_IO_REQUESTS \
+					   + SCU_MAX_COMPLETION_QUEUE_SCRATCH)
+
+#if !defined(ENABLE_MINIMUM_MEMORY_MODE)
+#define SCU_UNSOLICITED_FRAME_COUNT      SCU_MAX_UNSOLICITED_FRAMES
+#define SCU_CRITICAL_NOTIFICATION_COUNT  SCU_MAX_CRITICAL_NOTIFICATIONS
+#define SCU_EVENT_COUNT                  SCU_MAX_EVENTS
+#define SCU_COMPLETION_QUEUE_SCRATCH     SCU_MAX_COMPLETION_QUEUE_SCRATCH
+#define SCU_IO_REQUEST_COUNT             SCI_MAX_IO_REQUESTS
+#define SCU_IO_REQUEST_SGE_COUNT         SCI_MAX_SCATTER_GATHER_ELEMENTS
+#define SCU_COMPLETION_QUEUE_COUNT       SCU_MAX_COMPLETION_QUEUE_ENTRIES
+#else
+#define SCU_UNSOLICITED_FRAME_COUNT      SCU_MIN_UNSOLICITED_FRAMES
+#define SCU_CRITICAL_NOTIFICATION_COUNT  SCU_MIN_CRITICAL_NOTIFICATIONS
+#define SCU_EVENT_COUNT                  SCU_MIN_EVENTS
+#define SCU_COMPLETION_QUEUE_SCRATCH     SCU_MIN_COMPLETION_QUEUE_SCRATCH
+#define SCU_IO_REQUEST_COUNT             SCI_MIN_IO_REQUESTS
+#define SCU_IO_REQUEST_SGE_COUNT         SCI_MIN_SCATTER_GATHER_ELEMENTS
+#define SCU_COMPLETION_QUEUE_COUNT       SCU_MIN_COMPLETION_QUEUE_ENTRIES
+#endif /* !defined(ENABLE_MINIMUM_MEMORY_OPERATION) */
+
+/**
+ *
+ *
+ * The SCU_COMPLETION_QUEUE_COUNT constant indicates the size of the completion
+ * queue into which the hardware DMAs 32-bit quantas (completion entries).
+ */
+
+/**
+ *
+ *
+ * This queue must be programmed to a power of 2 size (e.g. 32, 64, 1024, etc.).
+ */
+#if (SCU_COMPLETION_QUEUE_COUNT != 16)  && \
+	(SCU_COMPLETION_QUEUE_COUNT != 32)  && \
+	(SCU_COMPLETION_QUEUE_COUNT != 64)  && \
+	(SCU_COMPLETION_QUEUE_COUNT != 128) && \
+	(SCU_COMPLETION_QUEUE_COUNT != 256) && \
+	(SCU_COMPLETION_QUEUE_COUNT != 512) && \
+	(SCU_COMPLETION_QUEUE_COUNT != 1024)
+#error "SCU_COMPLETION_QUEUE_COUNT must be set to a power of 2."
+#endif
+
+#if SCU_MIN_UNSOLICITED_FRAMES > SCU_MAX_UNSOLICITED_FRAMES
+#error "Invalid configuration of unsolicited frame constants"
+#endif /* SCU_MIN_UNSOLICITED_FRAMES > SCU_MAX_UNSOLICITED_FRAMES */
+
+#define SCU_MIN_UF_TABLE_ENTRIES            (8)
+#define SCU_ABSOLUTE_MAX_UNSOLICITED_FRAMES (4096)
+#define SCU_UNSOLICITED_FRAME_BUFFER_SIZE   (1024)
+#define SCU_INVALID_FRAME_INDEX             (0xFFFF)
+
+#define SCU_IO_REQUEST_MAX_SGE_SIZE         (0x00FFFFFF)
+#define SCU_IO_REQUEST_MAX_TRANSFER_LENGTH  (0x00FFFFFF)
+
+/*
+ * Determine the size of the unsolicited frame array including
+ * unused buffers. */
+#if SCU_UNSOLICITED_FRAME_COUNT <= SCU_MIN_UF_TABLE_ENTRIES
+#define SCU_UNSOLICITED_FRAME_CONTROL_ARRAY_SIZE SCU_MIN_UF_TABLE_ENTRIES
+#else
+#define SCU_UNSOLICITED_FRAME_CONTROL_ARRAY_SIZE SCU_MAX_UNSOLICITED_FRAMES
+#endif /* SCU_UNSOLICITED_FRAME_COUNT <= SCU_MIN_UF_TABLE_ENTRIES */
+
+/**
+ * enum sci_status - This is the general return status enumeration for non-IO,
+ *    non-task management related SCI interface methods.
+ *
+ *
+ */
+enum sci_status {
+	/**
+	 * This member indicates successful completion.
+	 */
+	SCI_SUCCESS = 0,
+
+	/**
+	 * This value indicates that the calling method completed successfully,
+	 * but that the IO may have completed before having it's start method
+	 * invoked.  This occurs during SAT translation for requests that do
+	 * not require an IO to the target or for any other requests that may
+	 * be completed without having to submit IO.
+	 */
+	SCI_SUCCESS_IO_COMPLETE_BEFORE_START,
+
+	/**
+	 *  This Value indicates that the SCU hardware returned an early response
+	 *  because the io request specified more data than is returned by the
+	 *  target device (mode pages, inquiry data, etc.). The completion routine
+	 *  will handle this case to get the actual number of bytes transferred.
+	 */
+	SCI_SUCCESS_IO_DONE_EARLY,
+
+	/**
+	 * This member indicates that the object for which a state change is
+	 * being requested is already in said state.
+	 */
+	SCI_WARNING_ALREADY_IN_STATE,
+
+	/**
+	 * This member indicates interrupt coalescence timer may cause SAS
+	 * specification compliance issues (i.e. SMP target mode response
+	 * frames must be returned within 1.9 milliseconds).
+	 */
+	SCI_WARNING_TIMER_CONFLICT,
+
+	/**
+	 * This field indicates a sequence of action is not completed yet. Mostly,
+	 * this status is used when multiple ATA commands are needed in a SATI translation.
+	 */
+	SCI_WARNING_SEQUENCE_INCOMPLETE,
+
+	/**
+	 * This member indicates that there was a general failure.
+	 */
+	SCI_FAILURE,
+
+	/**
+	 * This member indicates that the SCI implementation is unable to complete
+	 * an operation due to a critical flaw the prevents any further operation
+	 * (i.e. an invalid pointer).
+	 */
+	SCI_FATAL_ERROR,
+
+	/**
+	 * This member indicates the calling function failed, because the state
+	 * of the controller is in a state that prevents successful completion.
+	 */
+	SCI_FAILURE_INVALID_STATE,
+
+	/**
+	 * This member indicates the calling function failed, because there is
+	 * insufficient resources/memory to complete the request.
+	 */
+	SCI_FAILURE_INSUFFICIENT_RESOURCES,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * controller object required for the operation can't be located.
+	 */
+	SCI_FAILURE_CONTROLLER_NOT_FOUND,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * discovered controller type is not supported by the library.
+	 */
+	SCI_FAILURE_UNSUPPORTED_CONTROLLER_TYPE,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * requested initialization data version isn't supported.
+	 */
+	SCI_FAILURE_UNSUPPORTED_INIT_DATA_VERSION,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * requested configuration of SAS Phys into SAS Ports is not supported.
+	 */
+	SCI_FAILURE_UNSUPPORTED_PORT_CONFIGURATION,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * requested protocol is not supported by the remote device, port,
+	 * or controller.
+	 */
+	SCI_FAILURE_UNSUPPORTED_PROTOCOL,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * requested information type is not supported by the SCI implementation.
+	 */
+	SCI_FAILURE_UNSUPPORTED_INFORMATION_TYPE,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * device already exists.
+	 */
+	SCI_FAILURE_DEVICE_EXISTS,
+
+	/**
+	 * This member indicates the calling function failed, because adding
+	 * a phy to the object is not possible.
+	 */
+	SCI_FAILURE_ADDING_PHY_UNSUPPORTED,
+
+	/**
+	 * This member indicates the calling function failed, because the
+	 * requested information type is not supported by the SCI implementation.
+	 */
+	SCI_FAILURE_UNSUPPORTED_INFORMATION_FIELD,
+
+	/**
+	 * This member indicates the calling function failed, because the SCI
+	 * implementation does not support the supplied time limit.
+	 */
+	SCI_FAILURE_UNSUPPORTED_TIME_LIMIT,
+
+	/**
+	 * This member indicates the calling method failed, because the SCI
+	 * implementation does not contain the specified Phy.
+	 */
+	SCI_FAILURE_INVALID_PHY,
+
+	/**
+	 * This member indicates the calling method failed, because the SCI
+	 * implementation does not contain the specified Port.
+	 */
+	SCI_FAILURE_INVALID_PORT,
+
+	/**
+	 * This member indicates the calling method was partly successful
+	 * The port was reset but not all phys in port are operational
+	 */
+	SCI_FAILURE_RESET_PORT_PARTIAL_SUCCESS,
+
+	/**
+	 * This member indicates that calling method failed
+	 * The port reset did not complete because none of the phys are operational
+	 */
+	SCI_FAILURE_RESET_PORT_FAILURE,
+
+	/**
+	 * This member indicates the calling method failed, because the SCI
+	 * implementation does not contain the specified remote device.
+	 */
+	SCI_FAILURE_INVALID_REMOTE_DEVICE,
+
+	/**
+	 * This member indicates the calling method failed, because the remote
+	 * device is in a bad state and requires a reset.
+	 */
+	SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
+
+	/**
+	 * This member indicates the calling method failed, because the SCI
+	 * implementation does not contain or support the specified IO tag.
+	 */
+	SCI_FAILURE_INVALID_IO_TAG,
+
+	/**
+	 * This member indicates that the operation failed and the user should
+	 * check the response data associated with the IO.
+	 */
+	SCI_FAILURE_IO_RESPONSE_VALID,
+
+	/**
+	 * This member indicates that the operation failed, the failure is
+	 * controller implementation specific, and the response data associated
+	 * with the request is not valid.  You can query for the controller
+	 * specific error information via scic_controller_get_request_status()
+	 */
+	SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
+
+	/**
+	 * This member indicated that the operation failed because the
+	 * user requested this IO to be terminated.
+	 */
+	SCI_FAILURE_IO_TERMINATED,
+
+	/**
+	 * This member indicates that the operation failed and the associated
+	 * request requires a SCSI abort task to be sent to the target.
+	 */
+	SCI_FAILURE_IO_REQUIRES_SCSI_ABORT,
+
+	/**
+	 * This member indicates that the operation failed because the supplied
+	 * device could not be located.
+	 */
+	SCI_FAILURE_DEVICE_NOT_FOUND,
+
+	/**
+	 * This member indicates that the operation failed because the
+	 * objects association is required and is not correctly set.
+	 */
+	SCI_FAILURE_INVALID_ASSOCIATION,
+
+	/**
+	 * This member indicates that the operation failed, because a timeout
+	 * occurred.
+	 */
+	SCI_FAILURE_TIMEOUT,
+
+	/**
+	 * This member indicates that the operation failed, because the user
+	 * specified a value that is either invalid or not supported.
+	 */
+	SCI_FAILURE_INVALID_PARAMETER_VALUE,
+
+	/**
+	 * This value indicates that the operation failed, because the number
+	 * of messages (MSI-X) is not supported.
+	 */
+	SCI_FAILURE_UNSUPPORTED_MESSAGE_COUNT,
+
+	/**
+	 * This value indicates that the method failed due to a lack of
+	 * available NCQ tags.
+	 */
+	SCI_FAILURE_NO_NCQ_TAG_AVAILABLE,
+
+	/**
+	 * This value indicates that a protocol violation has occurred on the
+	 * link.
+	 */
+	SCI_FAILURE_PROTOCOL_VIOLATION,
+
+	/**
+	 * This value indicates a failure condition that retry may help to clear.
+	 */
+	SCI_FAILURE_RETRY_REQUIRED,
+
+	/**
+	 * This field indicates the retry limit was reached when a retry is attempted
+	 */
+	SCI_FAILURE_RETRY_LIMIT_REACHED,
+
+	/**
+	 * This member indicates the calling method was partly successful.
+	 * Mostly, this status is used when a LUN_RESET issued to an expander attached
+	 * STP device in READY NCQ substate needs to have RNC suspended/resumed
+	 * before posting TC.
+	 */
+	SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS,
+
+	/**
+	 * This field indicates an illegal phy connection based on the routing attribute
+	 * of both expander phy attached to each other.
+	 */
+	SCI_FAILURE_ILLEGAL_ROUTING_ATTRIBUTE_CONFIGURATION,
+
+	/**
+	 * This field indicates a CONFIG ROUTE INFO command has a response with function result
+	 * INDEX DOES NOT EXIST, usually means exceeding max route index.
+	 */
+	SCI_FAILURE_EXCEED_MAX_ROUTE_INDEX,
+
+	/**
+	 * This value indicates that an unsupported PCI device ID has been
+	 * specified.  This indicates that attempts to invoke
+	 * scic_library_allocate_controller() will fail.
+	 */
+	SCI_FAILURE_UNSUPPORTED_PCI_DEVICE_ID
+
+};
+
+/**
+ * enum sci_io_status - This enumeration depicts all of the possible IO
+ *    completion status values.  Each value in this enumeration maps directly
+ *    to a value in the enum sci_status enumeration.  Please refer to that
+ *    enumeration for detailed comments concerning what the status represents.
+ *
+ * Add the API to retrieve the SCU status from the core. Check to see that the
+ * following status are properly handled: - SCI_IO_FAILURE_UNSUPPORTED_PROTOCOL
+ * - SCI_IO_FAILURE_INVALID_IO_TAG
+ */
+enum sci_io_status {
+	SCI_IO_SUCCESS                         = SCI_SUCCESS,
+	SCI_IO_FAILURE                         = SCI_FAILURE,
+	SCI_IO_SUCCESS_COMPLETE_BEFORE_START   = SCI_SUCCESS_IO_COMPLETE_BEFORE_START,
+	SCI_IO_SUCCESS_IO_DONE_EARLY           = SCI_SUCCESS_IO_DONE_EARLY,
+	SCI_IO_FAILURE_INVALID_STATE           = SCI_FAILURE_INVALID_STATE,
+	SCI_IO_FAILURE_INSUFFICIENT_RESOURCES  = SCI_FAILURE_INSUFFICIENT_RESOURCES,
+	SCI_IO_FAILURE_UNSUPPORTED_PROTOCOL    = SCI_FAILURE_UNSUPPORTED_PROTOCOL,
+	SCI_IO_FAILURE_RESPONSE_VALID          = SCI_FAILURE_IO_RESPONSE_VALID,
+	SCI_IO_FAILURE_CONTROLLER_SPECIFIC_ERR = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
+	SCI_IO_FAILURE_TERMINATED              = SCI_FAILURE_IO_TERMINATED,
+	SCI_IO_FAILURE_REQUIRES_SCSI_ABORT     = SCI_FAILURE_IO_REQUIRES_SCSI_ABORT,
+	SCI_IO_FAILURE_INVALID_PARAMETER_VALUE = SCI_FAILURE_INVALID_PARAMETER_VALUE,
+	SCI_IO_FAILURE_NO_NCQ_TAG_AVAILABLE    = SCI_FAILURE_NO_NCQ_TAG_AVAILABLE,
+	SCI_IO_FAILURE_PROTOCOL_VIOLATION      = SCI_FAILURE_PROTOCOL_VIOLATION,
+
+	SCI_IO_FAILURE_REMOTE_DEVICE_RESET_REQUIRED = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
+
+	SCI_IO_FAILURE_RETRY_REQUIRED      = SCI_FAILURE_RETRY_REQUIRED,
+	SCI_IO_FAILURE_RETRY_LIMIT_REACHED = SCI_FAILURE_RETRY_LIMIT_REACHED,
+	SCI_IO_FAILURE_INVALID_REMOTE_DEVICE = SCI_FAILURE_INVALID_REMOTE_DEVICE
+};
+
+/**
+ * enum sci_task_status - This enumeration depicts all of the possible task
+ *    completion status values.  Each value in this enumeration maps directly
+ *    to a value in the enum sci_status enumeration.  Please refer to that
+ *    enumeration for detailed comments concerning what the status represents.
+ *
+ * Check to see that the following status are properly handled:
+ */
+enum sci_task_status {
+	SCI_TASK_SUCCESS                         = SCI_SUCCESS,
+	SCI_TASK_FAILURE                         = SCI_FAILURE,
+	SCI_TASK_FAILURE_INVALID_STATE           = SCI_FAILURE_INVALID_STATE,
+	SCI_TASK_FAILURE_INSUFFICIENT_RESOURCES  = SCI_FAILURE_INSUFFICIENT_RESOURCES,
+	SCI_TASK_FAILURE_UNSUPPORTED_PROTOCOL    = SCI_FAILURE_UNSUPPORTED_PROTOCOL,
+	SCI_TASK_FAILURE_INVALID_TAG             = SCI_FAILURE_INVALID_IO_TAG,
+	SCI_TASK_FAILURE_RESPONSE_VALID          = SCI_FAILURE_IO_RESPONSE_VALID,
+	SCI_TASK_FAILURE_CONTROLLER_SPECIFIC_ERR = SCI_FAILURE_CONTROLLER_SPECIFIC_IO_ERR,
+	SCI_TASK_FAILURE_TERMINATED              = SCI_FAILURE_IO_TERMINATED,
+	SCI_TASK_FAILURE_INVALID_PARAMETER_VALUE = SCI_FAILURE_INVALID_PARAMETER_VALUE,
+
+	SCI_TASK_FAILURE_REMOTE_DEVICE_RESET_REQUIRED = SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED,
+	SCI_TASK_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS = SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS
+
+};
 
 extern unsigned char no_outbound_task_to;
 extern u16 ssp_max_occ_to;
@@ -85,9 +533,9 @@
 irqreturn_t isci_intx_isr(int vec, void *data);
 irqreturn_t isci_error_isr(int vec, void *data);
 
+struct scic_sds_controller;
 bool scic_sds_controller_isr(struct scic_sds_controller *scic);
 void scic_sds_controller_completion_handler(struct scic_sds_controller *scic);
 bool scic_sds_controller_error_isr(struct scic_sds_controller *scic);
 void scic_sds_controller_error_handler(struct scic_sds_controller *scic);
-
 #endif  /* __ISCI_H__ */
diff --git a/drivers/scsi/isci/phy.c b/drivers/scsi/isci/phy.c
index 3280049..1134395 100644
--- a/drivers/scsi/isci/phy.c
+++ b/drivers/scsi/isci/phy.c
@@ -54,10 +54,10 @@
  */
 
 #include "isci.h"
+#include "host.h"
 #include "phy.h"
 #include "scic_port.h"
 #include "scic_config_parameters.h"
-#include "core/scic_sds_phy.h"
 
 struct scic_sds_phy;
 extern enum sci_status scic_sds_phy_start(struct scic_sds_phy *sci_phy);
diff --git a/drivers/scsi/isci/phy.h b/drivers/scsi/isci/phy.h
index 93ec2d4..3a95adb 100644
--- a/drivers/scsi/isci/phy.h
+++ b/drivers/scsi/isci/phy.h
@@ -52,16 +52,12 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
-
 #ifndef _ISCI_PHY_H_
 #define _ISCI_PHY_H_
 
 #include <scsi/sas.h>
 #include <scsi/libsas.h>
 #include "scic_sds_phy.h"
-#include "port.h"
-#include "host.h"
 
 struct isci_phy {
 	struct scic_sds_phy sci;
@@ -89,6 +85,7 @@
 	return iphy;
 }
 
+struct isci_host;
 void isci_phy_init(struct isci_phy *iphy, struct isci_host *ihost, int index);
 int isci_phy_control(struct asd_sas_phy *phy, enum phy_func func, void *buf);
 
diff --git a/drivers/scsi/isci/port.h b/drivers/scsi/isci/port.h
index 3550345..59505cb 100644
--- a/drivers/scsi/isci/port.h
+++ b/drivers/scsi/isci/port.h
@@ -55,6 +55,9 @@
 
 #ifndef _ISCI_PORT_H_
 #define _ISCI_PORT_H_
+
+#include <scsi/libsas.h>
+#include "isci.h"
 #include "scic_sds_port.h"
 
 struct isci_phy;
diff --git a/drivers/scsi/isci/probe_roms.c b/drivers/scsi/isci/probe_roms.c
index 933d811..7055174 100644
--- a/drivers/scsi/isci/probe_roms.c
+++ b/drivers/scsi/isci/probe_roms.c
@@ -32,7 +32,6 @@
 
 #include "isci.h"
 #include "task.h"
-#include "sci_controller_constants.h"
 #include "sci_environment.h"
 #include "probe_roms.h"
 
diff --git a/drivers/scsi/isci/probe_roms.h b/drivers/scsi/isci/probe_roms.h
index 5598336..f4ef19a 100644
--- a/drivers/scsi/isci/probe_roms.h
+++ b/drivers/scsi/isci/probe_roms.h
@@ -58,6 +58,7 @@
 #ifdef __KERNEL__
 #include <linux/firmware.h>
 #include <linux/pci.h>
+#include "isci.h"
 
 struct isci_orom *isci_request_oprom(struct pci_dev *pdev);
 
diff --git a/drivers/scsi/isci/remote_device.h b/drivers/scsi/isci/remote_device.h
index 2e433b7..a118f58 100644
--- a/drivers/scsi/isci/remote_device.h
+++ b/drivers/scsi/isci/remote_device.h
@@ -56,7 +56,6 @@
 #ifndef _ISCI_REMOTE_DEVICE_H_
 #define _ISCI_REMOTE_DEVICE_H_
 #include <scsi/libsas.h>
-#include "sci_status.h"
 #include "scu_remote_node_context.h"
 #include "remote_node_context.h"
 #include "port.h"
diff --git a/drivers/scsi/isci/remote_node_table.h b/drivers/scsi/isci/remote_node_table.h
index 9c02a6c..5737d9a 100644
--- a/drivers/scsi/isci/remote_node_table.h
+++ b/drivers/scsi/isci/remote_node_table.h
@@ -56,14 +56,7 @@
 #ifndef _SCIC_SDS_REMOTE_NODE_TABLE_H_
 #define _SCIC_SDS_REMOTE_NODE_TABLE_H_
 
-/**
- * This file contains the structures, constants and prototypes used for the
- *    remote node table.
- *
- *
- */
-
-#include "sci_controller_constants.h"
+#include "isci.h"
 
 /**
  *
diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c
index 4961ee3..a580728 100644
--- a/drivers/scsi/isci/request.c
+++ b/drivers/scsi/isci/request.c
@@ -62,6 +62,7 @@
 #include "sata.h"
 #include "scu_completion_codes.h"
 #include "scic_sds_request.h"
+#include "scic_controller.h"
 #include "sas.h"
 
 static enum sci_status isci_request_ssp_request_construct(
diff --git a/drivers/scsi/isci/request.h b/drivers/scsi/isci/request.h
index 89d8b0a..06786ec 100644
--- a/drivers/scsi/isci/request.h
+++ b/drivers/scsi/isci/request.h
@@ -57,6 +57,7 @@
 #define _ISCI_REQUEST_H_
 
 #include "isci.h"
+#include "host.h"
 #include "scic_sds_request.h"
 
 /**
diff --git a/drivers/scsi/isci/sci_environment.h b/drivers/scsi/isci/sci_environment.h
index 1806969..30addba 100644
--- a/drivers/scsi/isci/sci_environment.h
+++ b/drivers/scsi/isci/sci_environment.h
@@ -56,8 +56,7 @@
 #ifndef _SCI_ENVIRONMENT_H_
 #define _SCI_ENVIRONMENT_H_
 
-#include "isci.h"
-#include "core/scic_sds_controller.h"
+#include "host.h"
 
 
 static inline struct device *scic_to_dev(struct scic_sds_controller *scic)
diff --git a/drivers/scsi/isci/task.c b/drivers/scsi/isci/task.c
index 7adaf71..597c490 100644
--- a/drivers/scsi/isci/task.c
+++ b/drivers/scsi/isci/task.c
@@ -65,6 +65,8 @@
 #include "sata.h"
 #include "task.h"
 #include "scic_sds_request.h"
+#include "scic_controller.h"
+#include "timers.h"
 
 /**
 * isci_task_refuse() - complete the request to the upper layer driver in
diff --git a/drivers/scsi/isci/task.h b/drivers/scsi/isci/task.h
index ecc5f13..c59dc96 100644
--- a/drivers/scsi/isci/task.h
+++ b/drivers/scsi/isci/task.h
@@ -56,6 +56,7 @@
 #define _ISCI_TASK_H_
 
 #include <scsi/sas_ata.h>
+#include "host.h"
 
 struct isci_request;
 
diff --git a/drivers/scsi/isci/timers.c b/drivers/scsi/isci/timers.c
index f33eff0..007700e 100644
--- a/drivers/scsi/isci/timers.c
+++ b/drivers/scsi/isci/timers.c
@@ -55,6 +55,7 @@
 
 #include "isci.h"
 #include "timers.h"
+#include "host.h"
 
 /**
  * isci_timer_list_construct() - This method contrucst the SCI Timer List