1f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* 2f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * Marvell UMI head file 3f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * 4f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * Copyright 2011 Marvell. <jyli@marvell.com> 5f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * 6f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * This file is licensed under GPLv2. 7f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * 8f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * This program is free software; you can redistribute it and/or 9f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * modify it under the terms of the GNU General Public License as 10f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * published by the Free Software Foundation; version 2 of the 11f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * License. 12f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * 13f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * This program is distributed in the hope that it will be useful, 14f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * but WITHOUT ANY WARRANTY; without even the implied warranty of 15f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * General Public License for more details. 17f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * 18f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * You should have received a copy of the GNU General Public License 19f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * along with this program; if not, write to the Free Software 20f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 21f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * USA 22f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 23f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 24f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#ifndef MVUMI_H 25f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_H 26f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 27f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MAX_BASE_ADDRESS 6 28f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 29f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_MAJOR 1 30f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_MINOR 1 31f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_OEM 0 32f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_BUILD 1500 33f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 34f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MV_DRIVER_NAME "mvumi" 35f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define PCI_VENDOR_ID_MARVELL_2 0x1b4b 36f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define PCI_DEVICE_ID_MARVELL_MV9143 0x9143 37f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 38f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_INTERNAL_CMD_WAIT_TIME 45 39f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 40f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define IS_DMA64 (sizeof(dma_addr_t) == 8) 41f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 42f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum mvumi_qc_result { 43f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li MV_QUEUE_COMMAND_RESULT_SENT = 0, 44f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li MV_QUEUE_COMMAND_RESULT_NO_RESOURCE, 45f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 46f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 47f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum { 48f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /*******************************************/ 49f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 50f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* ARM Mbus Registers Map */ 51f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 52f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /*******************************************/ 53f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_MAIN_INT_CAUSE_REG = 0x20200, 54f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_MAIN_IRQ_MASK_REG = 0x20204, 55f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_MAIN_FIQ_MASK_REG = 0x20208, 56f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ENPOINTA_MASK_REG = 0x2020C, 57f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ENPOINTB_MASK_REG = 0x20210, 58f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 59f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMAERR = 1 << 6, 60f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMAIN = 1 << 7, 61f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMAOUT = 1 << 8, 62f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMBERR = 1 << 9, 63f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMBIN = 1 << 10, 64f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMBOUT = 1 << 11, 65f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 66f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMAINT = (INT_MAP_COMAOUT | INT_MAP_COMAERR), 67f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_COMBINT = (INT_MAP_COMBOUT | INT_MAP_COMBIN | INT_MAP_COMBERR), 68f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 69f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_DL_PCIEA2CPU = 1 << 0, 70f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_DL_CPU2PCIEA = 1 << 1, 71f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 72f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /***************************************/ 73f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 74f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* ARM Doorbell Registers Map */ 75f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 76f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /***************************************/ 77f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_PCIEA_TO_ARM_DRBL_REG = 0x20400, 78f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_PCIEA_TO_ARM_MASK_REG = 0x20404, 79f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ARM_TO_PCIEA_DRBL_REG = 0x20408, 80f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ARM_TO_PCIEA_MASK_REG = 0x2040C, 81f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 82f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_HANDSHAKE = 1 << 0, 83f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_SOFT_RESET = 1 << 1, 84f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_BUS_CHANGE = 1 << 2, 85f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_EVENT_NOTIFY = 1 << 3, 86f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_MU_RESET = 1 << 4, 87f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li DRBL_HANDSHAKE_ISR = DRBL_HANDSHAKE, 88f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 89f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_PCIEA_TO_ARM_MSG0 = 0x20430, 90f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_PCIEA_TO_ARM_MSG1 = 0x20434, 91f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ARM_TO_PCIEA_MSG0 = 0x20438, 92f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CPU_ARM_TO_PCIEA_MSG1 = 0x2043C, 93f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 94f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /*******************************************/ 95f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 96f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* ARM Communication List Registers Map */ 97f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 98f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /*******************************************/ 99f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_LIST_BASEL = 0x500, 100f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_LIST_BASEH = 0x504, 101f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_AVAL_COUNT_BASEL = 0x508, 102f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_AVAL_COUNT_BASEH = 0x50C, 103f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_DESTI_LIST_BASEL = 0x510, 104f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_DESTI_LIST_BASEH = 0x514, 105f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_WRITE_POINTER = 0x518, 106f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_INB_READ_POINTER = 0x51C, 107f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 108f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_LIST_BASEL = 0x530, 109f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_LIST_BASEH = 0x534, 110f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_SOURCE_LIST_BASEL = 0x538, 111f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_SOURCE_LIST_BASEH = 0x53C, 112f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_COPY_POINTER = 0x544, 113f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_OUTB_READ_POINTER = 0x548, 114f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 115f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_ISR_CAUSE = 0x560, 116f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLA_ISR_MASK = 0x564, 117f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 118f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li INT_MAP_MU = (INT_MAP_DL_CPU2PCIEA | INT_MAP_COMAINT), 119f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 120f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CL_POINTER_TOGGLE = 1 << 12, 121f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 122f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLIC_IN_IRQ = 1 << 0, 123f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLIC_OUT_IRQ = 1 << 1, 124f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLIC_IN_ERR_IRQ = 1 << 8, 125f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CLIC_OUT_ERR_IRQ = 1 << 12, 126f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 127f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CL_SLOT_NUM_MASK = 0xFFF, 128f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 129f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* 130f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * Command flag is the flag for the CDB command itself 131f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 132f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* 1-non data; 0-data command */ 133f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CMD_FLAG_NON_DATA = 1 << 0, 134f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CMD_FLAG_DMA = 1 << 1, 135f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CMD_FLAG_PIO = 1 << 2, 136f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* 1-host read data */ 137f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CMD_FLAG_DATA_IN = 1 << 3, 138f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* 1-host write data */ 139f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CMD_FLAG_DATA_OUT = 1 << 4, 140f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 141f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li SCSI_CMD_MARVELL_SPECIFIC = 0xE1, 142f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li CDB_CORE_SHUTDOWN = 0xB, 143f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 144f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 145f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define APICDB0_EVENT 0xF4 146f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define APICDB1_EVENT_GETEVENT 0 147f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MAX_EVENTS_RETURNED 6 148f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 149f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_driver_event { 150f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 time_stamp; 151f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 sequence_no; 152f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 event_id; 153f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 severity; 154f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 param_count; 155f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 device_id; 156f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 params[4]; 157f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 sense_data_length; 158f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 Reserved1; 159f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 sense_data[30]; 160f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 161f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 162f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_event_req { 163f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char count; 164f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char reserved[3]; 165f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_driver_event events[MAX_EVENTS_RETURNED]; 166f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 167f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 168f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_events_wq { 169f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct work_struct work_q; 170f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_hba *mhba; 171f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int event; 172f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *param; 173f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 174f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 175f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_MAX_SG_ENTRY 32 176f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define SGD_EOT (1L << 27) 177f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 178f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_sgl { 179f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 baseaddr_l; 180f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 baseaddr_h; 181f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 flags; 182f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 size; 183f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 184f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 185f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_res { 186f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head entry; 187f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t bus_addr; 188f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *virt_addr; 189f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int size; 190f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short type; /* enum Resource_Type */ 191f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 192f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 193f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* Resource type */ 194f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum resource_type { 195f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li RESOURCE_CACHED_MEMORY = 0, 196f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li RESOURCE_UNCACHED_MEMORY 197f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 198f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 199f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_sense_data { 200f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 error_eode:7; 201f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 valid:1; 202f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 segment_number; 203f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 sense_key:4; 204f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 reserved:1; 205f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 incorrect_length:1; 206f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 end_of_media:1; 207f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 file_mark:1; 208f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 information[4]; 209f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 additional_sense_length; 210f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 command_specific_information[4]; 211f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 additional_sense_code; 212f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 additional_sense_code_qualifier; 213f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 field_replaceable_unit_code; 214f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 sense_key_specific[3]; 215f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 216f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 217f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* Request initiator must set the status to REQ_STATUS_PENDING. */ 218f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define REQ_STATUS_PENDING 0x80 219f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 220f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_cmd { 221f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head queue_pointer; 222f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_msg_frame *frame; 223f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct scsi_cmnd *scmd; 224f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li atomic_t sync_cmd; 225f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *data_buf; 226f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short request_id; 227f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char cmd_status; 228f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 229f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 230f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* 231f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the function type of the in bound frame 232f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 233f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_FUN_SCSI_CMD 0x1 234f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 235f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_msg_frame { 236f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 device_id; 237f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 tag; 238f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cmd_flag; 239f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 req_function; 240f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cdb_length; 241f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 sg_counts; 242f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 data_transfer_length; 243f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 request_id; 244f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 reserved1; 245f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cdb[MAX_COMMAND_SIZE]; 246f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 payload[1]; 247f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 248f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 249f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* 250f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the respond flag for data_payload of the out bound frame 251f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 252f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_RSP_FLAG_NODATA 0x0 253f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_RSP_FLAG_SENSEDATA 0x1 254f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 255f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_rsp_frame { 256f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 device_id; 257f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 tag; 258f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 req_status; 259f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 rsp_flag; /* Indicates the type of Data_Payload.*/ 260f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 request_id; 261f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 payload[1]; 262f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 263f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 264f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_ob_data { 265f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head list; 266f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char data[0]; 267f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 268f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 269f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct version_info { 270f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ver_major; 271f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ver_minor; 272f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ver_oem; 273f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ver_build; 274f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 275f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 276f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_MAX_DELAY 30 277f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_BUSY (1U << 0) 278f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_ATTACH (1U << 1) 279f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_ALLOC (1U << 2) 280f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 281f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* 282f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * State is the state of the MU 283f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 284f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_IDLE 0 285f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_STARTING 1 286f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_HANDSHAKING 2 287f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_STARTED 3 288f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_ABORT 4 289f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 290f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_SIGNATURE 0x5A5A5A5AL 291f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_READYSTATE 0x55AA5AA5L 292f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_DONESTATE 0x55AAA55AL 293f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 294f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* HandShake Status definition */ 295f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_OK 1 296f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_ERR 2 297f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_INVALID 3 298f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 299f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* HandShake State/Cmd definition */ 300f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_START 1 301f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_RESET 2 302f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_PAGE_ADDR 3 303f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_QUERY_PAGE 4 304f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_SEND_PAGE 5 305f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_END 6 306f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_ABORT 7 307f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_VERIFY_SIZE 128 308f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 309f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_GET_STATE(a) (a & 0xFFFF) 310f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_GET_STATUS(a) ((a & 0xFFFF0000) >> 16) 311f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_SET_STATE(a, b) (a |= (b & 0xFFFF)) 312f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_SET_STATUS(a, b) (a |= ((b & 0xFFFF) << 16)) 313f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 314f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* handshake frame */ 315f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_frame { 316f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 size; 317f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* host information */ 318f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 host_type; 319f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 reserved_1[1]; 320f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct version_info host_ver; /* bios or driver version */ 321f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 322f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* controller information */ 323f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 system_io_bus; 324f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 slot_number; 325f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 intr_level; 326f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 intr_vector; 327f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 328f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* communication list configuration */ 329f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ib_baseaddr_l; 330f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ib_baseaddr_h; 331f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ob_baseaddr_l; 332f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ob_baseaddr_h; 333f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 334f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ib_entry_size; 335f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ob_entry_size; 336f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ob_depth; 337f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ib_depth; 338f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 339f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li /* system time */ 340f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u64 seconds_since1970; 341f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 342f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 343f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_header { 344f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 page_code; 345f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 checksum; 346f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 frame_length; 347f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 frame_content[1]; 348f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 349f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 350f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* 351f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the page code type of the handshake header 352f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */ 353f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_FIRM_CAP 0x1 354f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_HOST_INFO 0x2 355f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_FIRM_CTL 0x3 356f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_CL_INFO 0x4 357f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_TOTAL 0x5 358f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 359f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HSP_SIZE(i) sizeof(struct mvumi_hs_page##i) 360f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 361f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HSP_MAX_SIZE ({ \ 362f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li int size, m1, m2; \ 363f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li m1 = max(HSP_SIZE(1), HSP_SIZE(3)); \ 364f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li m2 = max(HSP_SIZE(2), HSP_SIZE(4)); \ 365f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li size = max(m1, m2); \ 366f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li size; \ 367f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}) 368f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 369f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for Firmware capability */ 370f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page1 { 371f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 pagecode; 372f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 checksum; 373f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 frame_length; 374f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 375f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 number_of_ports; 376f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 max_devices_support; 377f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 max_io_support; 378f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 umi_ver; 379f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 max_transfer_size; 380f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct version_info fw_ver; 381f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cl_in_max_entry_size; 382f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cl_out_max_entry_size; 383f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 cl_inout_list_depth; 384f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 total_pages; 385f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 capability; 386f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 reserved1; 387f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 388f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 389f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for Host information */ 390f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page2 { 391f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 pagecode; 392f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 checksum; 393f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 frame_length; 394f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 395f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 host_type; 396f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 reserved[3]; 397f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct version_info host_ver; 398f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 system_io_bus; 399f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 slot_number; 400f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 intr_level; 401f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 intr_vector; 402f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u64 seconds_since1970; 403f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 404f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 405f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for firmware control */ 406f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page3 { 407f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 pagecode; 408f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 checksum; 409f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 frame_length; 410f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 control; 411f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 reserved[2]; 412f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 host_bufferaddr_l; 413f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 host_bufferaddr_h; 414f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 host_eventaddr_l; 415f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 host_eventaddr_h; 416f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 417f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 418f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page4 { 419f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 pagecode; 420f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 checksum; 421f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u16 frame_length; 422f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ib_baseaddr_l; 423f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ib_baseaddr_h; 424f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ob_baseaddr_l; 425f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u32 ob_baseaddr_h; 426f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ib_entry_size; 427f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ob_entry_size; 428f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ob_depth; 429f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li u8 ib_depth; 430f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 431f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 432f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_tag { 433f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short *stack; 434f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short top; 435f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short size; 436f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 437f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 438f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hba { 439f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *base_addr[MAX_BASE_ADDRESS]; 440f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *mmio; 441f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head cmd_pool; 442f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct Scsi_Host *shost; 443f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li wait_queue_head_t int_cmd_wait_q; 444f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct pci_dev *pdev; 445f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int unique_id; 446f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li atomic_t fw_outstanding; 447f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_instance_template *instancet; 448f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 449f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *ib_list; 450f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t ib_list_phys; 451f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 452f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *ob_list; 453f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t ob_list_phys; 454f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 455f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *ib_shadow; 456f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t ib_shadow_phys; 457f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 458f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *ob_shadow; 459f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t ob_shadow_phys; 460f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 461f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void *handshake_page; 462f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li dma_addr_t handshake_page_phys; 463f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 464f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int global_isr; 465f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int isr_status; 466f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 467f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short max_sge; 468f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short max_target_id; 469f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char *target_map; 470f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int max_io; 471f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int list_num_io; 472f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ib_max_size; 473f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ob_max_size; 474f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ib_max_size_setting; 475f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ob_max_size_setting; 476f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int max_transfer_size; 477f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char hba_total_pages; 478f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char fw_flag; 479f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned char request_id_enabled; 480f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short hba_capability; 481f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned short io_seq; 482f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 483f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ib_cur_slot; 484f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int ob_cur_slot; 485f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int fw_state; 486f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 487f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head ob_data_list; 488f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head free_ob_list; 489f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head res_list; 490f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct list_head waiting_req_list; 491f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 492f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_tag tag_pool; 493f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li struct mvumi_cmd **tag_cmd; 494f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 495f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 496f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_instance_template { 497f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void (*fire_cmd)(struct mvumi_hba *, struct mvumi_cmd *); 498f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void (*enable_intr)(void *) ; 499f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li void (*disable_intr)(void *); 500f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li int (*clear_intr)(void *); 501f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li unsigned int (*read_fw_status_reg)(void *); 502f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li}; 503f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li 504f0c568a478f03536602b1730b9473ee86d61d836Jianyun Liextern struct timezone sys_tz; 505f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#endif 506