summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-05-08 15:49:15 -0700
committerDan Williams <dan.j.williams@intel.com>2011-07-03 04:04:47 -0700
commitce2b3261b6765c3b80fda95426c73e8d3bb1b035 (patch)
tree98d2007abbe37e70ec29e01cd4752fc04442085f /drivers
parent67ea838d17acdad3331aeae848683c768df96aaa (diff)
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/scsi/isci/core/sci_controller.h69
-rw-r--r--drivers/scsi/isci/core/sci_controller_constants.h206
-rw-r--r--drivers/scsi/isci/core/sci_status.h409
-rw-r--r--drivers/scsi/isci/core/sci_util.c1
-rw-r--r--drivers/scsi/isci/core/scic_config_parameters.h11
-rw-r--r--drivers/scsi/isci/core/scic_controller.h8
-rw-r--r--drivers/scsi/isci/core/scic_io_request.h8
-rw-r--r--drivers/scsi/isci/core/scic_phy.h1
-rw-r--r--drivers/scsi/isci/core/scic_port.h2
-rw-r--r--drivers/scsi/isci/core/scic_sds_controller.c2
-rw-r--r--drivers/scsi/isci/core/scic_sds_controller.h2
-rw-r--r--drivers/scsi/isci/core/scic_sds_phy.c1
-rw-r--r--drivers/scsi/isci/core/scic_sds_port.c1
-rw-r--r--drivers/scsi/isci/core/scic_sds_port.h10
-rw-r--r--drivers/scsi/isci/core/scic_sds_port_configuration_agent.c8
-rw-r--r--drivers/scsi/isci/core/scic_sds_request.c3
-rw-r--r--drivers/scsi/isci/core/scic_sds_request.h2
-rw-r--r--drivers/scsi/isci/core/scic_sds_stp_request.c1
-rw-r--r--drivers/scsi/isci/core/scic_sds_unsolicited_frame_control.h19
-rw-r--r--drivers/scsi/isci/core/scic_task_request.h11
-rw-r--r--drivers/scsi/isci/core/scu_constants.h151
-rw-r--r--drivers/scsi/isci/host.c2
-rw-r--r--drivers/scsi/isci/host.h18
-rw-r--r--drivers/scsi/isci/init.c2
-rw-r--r--drivers/scsi/isci/isci.h480
-rw-r--r--drivers/scsi/isci/phy.c2
-rw-r--r--drivers/scsi/isci/phy.h5
-rw-r--r--drivers/scsi/isci/port.h3
-rw-r--r--drivers/scsi/isci/probe_roms.c1
-rw-r--r--drivers/scsi/isci/probe_roms.h1
-rw-r--r--drivers/scsi/isci/remote_device.h1
-rw-r--r--drivers/scsi/isci/remote_node_table.h9
-rw-r--r--drivers/scsi/isci/request.c1
-rw-r--r--drivers/scsi/isci/request.h1
-rw-r--r--drivers/scsi/isci/sci_environment.h3
-rw-r--r--drivers/scsi/isci/task.c2
-rw-r--r--drivers/scsi/isci/task.h1
-rw-r--r--drivers/scsi/isci/timers.c1
38 files changed, 497 insertions, 962 deletions
diff --git a/drivers/scsi/isci/core/sci_controller.h b/drivers/scsi/isci/core/sci_controller.h
deleted file mode 100644
index 01316b1a8f27..000000000000
--- 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 2525c26d7c08..000000000000
--- 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 8b66619022cf..000000000000
--- 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 4e60d55836e9..0101fec23865 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 ea09d0bd2d1b..8b8c9259f52f 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 50ba155a6c7c..bd08f306ed67 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_phy;
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 f7c6d426f8c0..a4664cc3c576 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 1fb49f02162b..f046b4af4b8d 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 44a8ea887151..51e7eede5c88 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 852b7d52f84f..e77265b9b9ec 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 0d5047319cbf..5c00f9688c18 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 f0f4c74e4619..c6df0e2c842e 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 01288dd44fb6..9302e397e4ca 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 3633561b686a..3696debcce12 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 2d3d067396d3..3fad8c1db6c9 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 50dd19bba3db..de35885eb1f9 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 1dd98aabe32d..5ce7ff2aed9a 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 2677393db6f4..c1c316cad522 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 4eb244c06cfc..0d8ca8c4770f 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 @@ struct scic_sds_uf_header_array {
};
-/*
- * 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 98cfaa9e6d38..790cee9b4af6 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 a99d1103ad3b..000000000000
--- 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 271a7e171e7d..5847149857a9 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 afa41e83eaa7..13c1c99ef294 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 522d39f9e132..df132c07badf 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 60c84627c13e..800f2332ecd0 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_msix_isr(int vec, void *data);
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 328004918329..1134395c970e 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 93ec2d4a9c30..3a95adbb508c 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 @@ static inline struct isci_phy *sci_phy_to_iphy(struct scic_sds_phy *sci_phy)
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 355034542e4c..59505cbf2bb3 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 933d81109ea4..705517440441 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 55983363764b..f4ef19ac281c 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 2e433b7f16b3..a118f5873f64 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 9c02a6ccb2fe..5737d9a30cca 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 4961ee347091..a58072807a37 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 89d8b0a27dfe..06786ece9bb2 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 1806969fc435..30addba4d43a 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 7adaf71c19d1..597c49020ac8 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 ecc5f1395063..c59dc9620cf9 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 f33eff00dc01..007700e3eb6a 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