1 /* 2 * This file is provided under a dual BSD/GPLv2 license. When using or 3 * redistributing this file, you may do so under either license. 4 * 5 * GPL LICENSE SUMMARY 6 * 7 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of version 2 of the GNU General Public License as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21 * The full GNU General Public License is included in this distribution 22 * in the file called LICENSE.GPL. 23 * 24 * BSD LICENSE 25 * 26 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27 * All rights reserved. 28 * 29 * Redistribution and use in source and binary forms, with or without 30 * modification, are permitted provided that the following conditions 31 * are met: 32 * 33 * * Redistributions of source code must retain the above copyright 34 * notice, this list of conditions and the following disclaimer. 35 * * Redistributions in binary form must reproduce the above copyright 36 * notice, this list of conditions and the following disclaimer in 37 * the documentation and/or other materials provided with the 38 * distribution. 39 * * Neither the name of Intel Corporation nor the names of its 40 * contributors may be used to endorse or promote products derived 41 * from this software without specific prior written permission. 42 * 43 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 44 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 45 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 46 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 47 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 48 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 49 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 50 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 51 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 52 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 */ 55 56 /** 57 * This file contains the isci_module object definition. 58 * 59 * isci.h 60 */ 61 62 #if !defined(_SCI_MODULE_H_) 63 #define _SCI_MODULE_H_ 64 65 /** 66 * This file contains the SCI low level driver interface to the SCI and Libsas 67 * Libraries. 68 * 69 * isci.h 70 */ 71 72 #include <linux/kernel.h> 73 #include <linux/list.h> 74 #include <linux/types.h> 75 #include <linux/spinlock.h> 76 #include <linux/interrupt.h> 77 #include <linux/firmware.h> 78 #include <linux/bug.h> 79 #include <scsi/libsas.h> 80 #include <scsi/scsi.h> 81 82 #include "sci_base_controller.h" 83 #include "scic_controller.h" 84 #include "host.h" 85 #include "timers.h" 86 #include "sci_status.h" 87 #include "request.h" 88 #include "events.h" 89 #include "task.h" 90 #include "sata.h" 91 92 extern struct kmem_cache *isci_kmem_cache; 93 extern struct isci_firmware *isci_firmware; 94 95 #define ISCI_FW_NAME "isci/isci_firmware.bin" 96 97 #define ISCI_FIRMWARE_MIN_SIZE 149 98 99 #define ISCI_FW_IDSIZE 12 100 #define ISCI_FW_VER_OFS ISCI_FW_IDSIZE 101 #define ISCI_FW_SUBVER_OFS ISCI_FW_VER_OFS + 1 102 #define ISCI_FW_DATA_OFS ISCI_FW_SUBVER_OFS + 1 103 104 #define ISCI_FW_HDR_PHYMASK 0x1 105 #define ISCI_FW_HDR_PHYGEN 0x2 106 #define ISCI_FW_HDR_SASADDR 0x3 107 #define ISCI_FW_HDR_EOF 0xff 108 109 struct isci_firmware { 110 const u8 *id; 111 u8 version; 112 u8 subversion; 113 const u32 *phy_masks; 114 u8 phy_masks_size; 115 const u32 *phy_gens; 116 u8 phy_gens_size; 117 const u64 *sas_addrs; 118 u8 sas_addrs_size; 119 }; 120 121 irqreturn_t isci_msix_isr(int vec, void *data); 122 irqreturn_t isci_intx_isr(int vec, void *data); 123 irqreturn_t isci_error_isr(int vec, void *data); 124 125 bool scic_sds_controller_isr(struct scic_sds_controller *scic); 126 void scic_sds_controller_completion_handler(struct scic_sds_controller *scic); 127 bool scic_sds_controller_error_isr(struct scic_sds_controller *scic); 128 void scic_sds_controller_error_handler(struct scic_sds_controller *scic); 129 130 enum sci_status isci_parse_oem_parameters( 131 union scic_oem_parameters *oem_params, 132 int scu_index, 133 struct isci_firmware *fw); 134 135 enum sci_status isci_parse_user_parameters( 136 union scic_user_parameters *user_params, 137 int scu_index, 138 struct isci_firmware *fw); 139 140 #ifdef ISCI_SLAVE_ALLOC 141 extern int ISCI_SLAVE_ALLOC(struct scsi_device *scsi_dev); 142 #endif /* ISCI_SLAVE_ALLOC */ 143 144 #ifdef ISCI_SLAVE_DESTROY 145 extern void ISCI_SLAVE_DESTROY(struct scsi_device *scsi_dev); 146 #endif /* ISCI_SLAVE_DESTROY */ 147 #endif /* !defined(_SCI_MODULE_H_) */ 148