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 90 extern struct kmem_cache *isci_kmem_cache; 91 extern struct isci_firmware *isci_firmware; 92 93 #define ISCI_FW_NAME "isci/isci_firmware.bin" 94 95 #define ISCI_FIRMWARE_MIN_SIZE 149 96 97 #define ISCI_FW_IDSIZE 12 98 #define ISCI_FW_VER_OFS ISCI_FW_IDSIZE 99 #define ISCI_FW_SUBVER_OFS ISCI_FW_VER_OFS + 1 100 #define ISCI_FW_DATA_OFS ISCI_FW_SUBVER_OFS + 1 101 102 #define ISCI_FW_HDR_PHYMASK 0x1 103 #define ISCI_FW_HDR_PHYGEN 0x2 104 #define ISCI_FW_HDR_SASADDR 0x3 105 #define ISCI_FW_HDR_EOF 0xff 106 107 struct isci_firmware { 108 const u8 *id; 109 u8 version; 110 u8 subversion; 111 const u32 *phy_masks; 112 u8 phy_masks_size; 113 const u32 *phy_gens; 114 u8 phy_gens_size; 115 const u64 *sas_addrs; 116 u8 sas_addrs_size; 117 }; 118 119 irqreturn_t isci_msix_isr(int vec, void *data); 120 irqreturn_t isci_intx_isr(int vec, void *data); 121 irqreturn_t isci_error_isr(int vec, void *data); 122 123 bool scic_sds_controller_isr(struct scic_sds_controller *scic); 124 void scic_sds_controller_completion_handler(struct scic_sds_controller *scic); 125 bool scic_sds_controller_error_isr(struct scic_sds_controller *scic); 126 void scic_sds_controller_error_handler(struct scic_sds_controller *scic); 127 128 enum sci_status isci_parse_oem_parameters( 129 union scic_oem_parameters *oem_params, 130 int scu_index, 131 struct isci_firmware *fw); 132 133 enum sci_status isci_parse_user_parameters( 134 union scic_user_parameters *user_params, 135 int scu_index, 136 struct isci_firmware *fw); 137 138 #ifdef ISCI_SLAVE_ALLOC 139 extern int ISCI_SLAVE_ALLOC(struct scsi_device *scsi_dev); 140 #endif /* ISCI_SLAVE_ALLOC */ 141 142 #ifdef ISCI_SLAVE_DESTROY 143 extern void ISCI_SLAVE_DESTROY(struct scsi_device *scsi_dev); 144 #endif /* ISCI_SLAVE_DESTROY */ 145 #endif /* !defined(_SCI_MODULE_H_) */ 146