/* * 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 __ISCI_H__ #define __ISCI_H__ #include <linux/interrupt.h> #include <linux/types.h> #define DRV_NAME … #define SCI_PCI_BAR_COUNT … #define SCI_NUM_MSI_X_INT … #define SCI_SMU_BAR … #define SCI_SMU_BAR_SIZE … #define SCI_SCU_BAR … #define SCI_SCU_BAR_SIZE … #define SCI_IO_SPACE_BAR0 … #define SCI_IO_SPACE_BAR1 … #define ISCI_CAN_QUEUE_VAL … #define SCIC_CONTROLLER_STOP_TIMEOUT … #define SCI_CONTROLLER_INVALID_IO_TAG … #define SCI_MAX_PHYS … #define SCI_MAX_PORTS … #define SCI_MAX_SMP_PHYS … #define SCI_MAX_REMOTE_DEVICES … #define SCI_MAX_IO_REQUESTS … #define SCI_MAX_SEQ … #define SCI_MAX_MSIX_MESSAGES … #define SCI_MAX_SCATTER_GATHER_ELEMENTS … #define SCI_MAX_CONTROLLERS … #define SCI_MAX_DOMAINS … #define SCU_MAX_CRITICAL_NOTIFICATIONS … #define SCU_MAX_EVENTS_SHIFT … #define SCU_MAX_EVENTS … #define SCU_MAX_UNSOLICITED_FRAMES … #define SCU_MAX_COMPLETION_QUEUE_SCRATCH … #define SCU_MAX_COMPLETION_QUEUE_ENTRIES … #define SCU_MAX_COMPLETION_QUEUE_SHIFT … #define SCU_ABSOLUTE_MAX_UNSOLICITED_FRAMES … #define SCU_UNSOLICITED_FRAME_BUFFER_SIZE … #define SCU_INVALID_FRAME_INDEX … #define SCU_IO_REQUEST_MAX_SGE_SIZE … #define SCU_IO_REQUEST_MAX_TRANSFER_LENGTH … static inline void check_sizes(void) { … } /** * enum sci_status - This is the general return status enumeration for non-IO, * non-task management related SCI interface methods. * * */ enum sci_status { … }; /** * 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 { … }; /** * 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_swab32_cpy - convert between scsi and scu-hardware byte format * @dest: receive the 4-byte endian swapped version of src * @src: word aligned source buffer * * scu hardware handles SSP/SMP control, response, and unidentified * frames in "big endian dword" order. Regardless of host endian this * is always a swab32()-per-dword conversion of the standard definition, * i.e. single byte fields swapped and multi-byte fields in little- * endian */ static inline void sci_swab32_cpy(void *_dest, void *_src, ssize_t word_cnt) { … } extern unsigned char no_outbound_task_to; extern u16 ssp_max_occ_to; extern u16 stp_max_occ_to; extern u16 ssp_inactive_to; extern u16 stp_inactive_to; extern unsigned char phy_gen; extern unsigned char max_concurr_spinup; extern uint cable_selection_override; 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); /* * Each timer is associated with a cancellation flag that is set when * del_timer() is called and checked in the timer callback function. This * is needed since del_timer_sync() cannot be called with sci_lock held. * For deinit however, del_timer_sync() is used without holding the lock. */ struct sci_timer { … }; static inline void sci_init_timer(struct sci_timer *tmr, void (*fn)(struct timer_list *t)) { … } static inline void sci_mod_timer(struct sci_timer *tmr, unsigned long msec) { … } static inline void sci_del_timer(struct sci_timer *tmr) { … } struct sci_base_state_machine { … }; sci_state_transition_t; struct sci_base_state { … }; extern void sci_init_sm(struct sci_base_state_machine *sm, const struct sci_base_state *state_table, u32 initial_state); extern void sci_change_state(struct sci_base_state_machine *sm, u32 next_state); #endif /* __ISCI_H__ */