15b504601Sjiang wu - Sun Microsystems - Beijing China /* 25b504601Sjiang wu - Sun Microsystems - Beijing China * CDDL HEADER START 35b504601Sjiang wu - Sun Microsystems - Beijing China * 45b504601Sjiang wu - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the 55b504601Sjiang wu - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License"). 65b504601Sjiang wu - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License. 75b504601Sjiang wu - Sun Microsystems - Beijing China * 85b504601Sjiang wu - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95b504601Sjiang wu - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing. 105b504601Sjiang wu - Sun Microsystems - Beijing China * See the License for the specific language governing permissions 115b504601Sjiang wu - Sun Microsystems - Beijing China * and limitations under the License. 125b504601Sjiang wu - Sun Microsystems - Beijing China * 135b504601Sjiang wu - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each 145b504601Sjiang wu - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155b504601Sjiang wu - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the 165b504601Sjiang wu - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying 175b504601Sjiang wu - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner] 185b504601Sjiang wu - Sun Microsystems - Beijing China * 195b504601Sjiang wu - Sun Microsystems - Beijing China * CDDL HEADER END 205b504601Sjiang wu - Sun Microsystems - Beijing China */ 215b504601Sjiang wu - Sun Microsystems - Beijing China 225b504601Sjiang wu - Sun Microsystems - Beijing China /* 235b504601Sjiang wu - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 245b504601Sjiang wu - Sun Microsystems - Beijing China * Use is subject to license terms. 255b504601Sjiang wu - Sun Microsystems - Beijing China */ 265b504601Sjiang wu - Sun Microsystems - Beijing China 275b504601Sjiang wu - Sun Microsystems - Beijing China /* 285b504601Sjiang wu - Sun Microsystems - Beijing China * Copyright (c) 2000 to 2009, LSI Corporation. 295b504601Sjiang wu - Sun Microsystems - Beijing China * All rights reserved. 305b504601Sjiang wu - Sun Microsystems - Beijing China * 315b504601Sjiang wu - Sun Microsystems - Beijing China * Redistribution and use in source and binary forms of all code within 325b504601Sjiang wu - Sun Microsystems - Beijing China * this file that is exclusively owned by LSI, with or without 335b504601Sjiang wu - Sun Microsystems - Beijing China * modification, is permitted provided that, in addition to the CDDL 1.0 345b504601Sjiang wu - Sun Microsystems - Beijing China * License requirements, the following conditions are met: 355b504601Sjiang wu - Sun Microsystems - Beijing China * 365b504601Sjiang wu - Sun Microsystems - Beijing China * Neither the name of the author nor the names of its contributors may be 375b504601Sjiang wu - Sun Microsystems - Beijing China * used to endorse or promote products derived from this software without 385b504601Sjiang wu - Sun Microsystems - Beijing China * specific prior written permission. 395b504601Sjiang wu - Sun Microsystems - Beijing China * 405b504601Sjiang wu - Sun Microsystems - Beijing China * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 415b504601Sjiang wu - Sun Microsystems - Beijing China * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 425b504601Sjiang wu - Sun Microsystems - Beijing China * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 435b504601Sjiang wu - Sun Microsystems - Beijing China * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 445b504601Sjiang wu - Sun Microsystems - Beijing China * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 455b504601Sjiang wu - Sun Microsystems - Beijing China * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 465b504601Sjiang wu - Sun Microsystems - Beijing China * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 475b504601Sjiang wu - Sun Microsystems - Beijing China * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 485b504601Sjiang wu - Sun Microsystems - Beijing China * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 495b504601Sjiang wu - Sun Microsystems - Beijing China * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 505b504601Sjiang wu - Sun Microsystems - Beijing China * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 515b504601Sjiang wu - Sun Microsystems - Beijing China * DAMAGE. 525b504601Sjiang wu - Sun Microsystems - Beijing China */ 535b504601Sjiang wu - Sun Microsystems - Beijing China 545b504601Sjiang wu - Sun Microsystems - Beijing China #ifndef _SYS_SCSI_ADAPTERS_MPTVAR_H 555b504601Sjiang wu - Sun Microsystems - Beijing China #define _SYS_SCSI_ADAPTERS_MPTVAR_H 565b504601Sjiang wu - Sun Microsystems - Beijing China 575b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/byteorder.h> 585b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/isa_defs.h> 595b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/sunmdi.h> 605b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/mdi_impldefs.h> 615b504601Sjiang wu - Sun Microsystems - Beijing China #include <sys/scsi/adapters/mpt_sas/mptsas_ioctl.h> 625b504601Sjiang wu - Sun Microsystems - Beijing China 635b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef __cplusplus 645b504601Sjiang wu - Sun Microsystems - Beijing China extern "C" { 655b504601Sjiang wu - Sun Microsystems - Beijing China #endif 665b504601Sjiang wu - Sun Microsystems - Beijing China 675b504601Sjiang wu - Sun Microsystems - Beijing China /* 685b504601Sjiang wu - Sun Microsystems - Beijing China * Compile options 695b504601Sjiang wu - Sun Microsystems - Beijing China */ 705b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef DEBUG 715b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DEBUG /* turn on debugging code */ 725b504601Sjiang wu - Sun Microsystems - Beijing China #endif /* DEBUG */ 735b504601Sjiang wu - Sun Microsystems - Beijing China 745b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_INITIAL_SOFT_SPACE 4 755b504601Sjiang wu - Sun Microsystems - Beijing China 765b504601Sjiang wu - Sun Microsystems - Beijing China #define MAX_MPI_PORTS 16 775b504601Sjiang wu - Sun Microsystems - Beijing China 785b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_PHYS 8 795b504601Sjiang wu - Sun Microsystems - Beijing China 805b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_INVALID_DEVHDL 0xffff 815b504601Sjiang wu - Sun Microsystems - Beijing China 825b504601Sjiang wu - Sun Microsystems - Beijing China /* 835b504601Sjiang wu - Sun Microsystems - Beijing China * MPT HW defines 845b504601Sjiang wu - Sun Microsystems - Beijing China */ 855b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_DISKS_IN_CONFIG 14 865b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_DISKS_IN_VOL 10 875b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_HOTSPARES 2 885b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_RAIDVOLS 2 895b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_RAIDCONFIGS 5 905b504601Sjiang wu - Sun Microsystems - Beijing China 915b504601Sjiang wu - Sun Microsystems - Beijing China /* 925b504601Sjiang wu - Sun Microsystems - Beijing China * 64-bit SAS WWN is displayed as 16 characters as HEX characters, 935b504601Sjiang wu - Sun Microsystems - Beijing China * plus one means the end of the string '\0'. 945b504601Sjiang wu - Sun Microsystems - Beijing China */ 955b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_WWN_STRLEN 16 + 1 965b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_GUID_LEN 64 975b504601Sjiang wu - Sun Microsystems - Beijing China 985b504601Sjiang wu - Sun Microsystems - Beijing China /* 995b504601Sjiang wu - Sun Microsystems - Beijing China * DMA routine flags 1005b504601Sjiang wu - Sun Microsystems - Beijing China */ 1015b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DMA_HANDLE_ALLOCD 0x2 1025b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DMA_MEMORY_ALLOCD 0x4 1035b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DMA_HANDLE_BOUND 0x8 1045b504601Sjiang wu - Sun Microsystems - Beijing China 1055b504601Sjiang wu - Sun Microsystems - Beijing China /* 1065b504601Sjiang wu - Sun Microsystems - Beijing China * If the HBA supports DMA or bus-mastering, you may have your own 1075b504601Sjiang wu - Sun Microsystems - Beijing China * scatter-gather list for physically non-contiguous memory in one 1085b504601Sjiang wu - Sun Microsystems - Beijing China * I/O operation; if so, there's probably a size for that list. 1095b504601Sjiang wu - Sun Microsystems - Beijing China * It must be placed in the ddi_dma_lim_t structure, so that the system 1105b504601Sjiang wu - Sun Microsystems - Beijing China * DMA-support routines can use it to break up the I/O request, so we 1115b504601Sjiang wu - Sun Microsystems - Beijing China * define it here. 1125b504601Sjiang wu - Sun Microsystems - Beijing China */ 1135b504601Sjiang wu - Sun Microsystems - Beijing China #if defined(__sparc) 1145b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_DMA_SEGS 1 1155b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_CMD_SEGS 1 1165b504601Sjiang wu - Sun Microsystems - Beijing China #else 1175b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_DMA_SEGS 256 1185b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_CMD_SEGS 257 1195b504601Sjiang wu - Sun Microsystems - Beijing China #endif 1205b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_FRAME_SGES(mpt) \ 1215b504601Sjiang wu - Sun Microsystems - Beijing China (((mpt->m_req_frame_size - (sizeof (MPI2_SCSI_IO_REQUEST))) / 8) + 1) 1225b504601Sjiang wu - Sun Microsystems - Beijing China 1235b504601Sjiang wu - Sun Microsystems - Beijing China /* 1245b504601Sjiang wu - Sun Microsystems - Beijing China * Caculating how many 64-bit DMA simple elements can be stored in the first 1255b504601Sjiang wu - Sun Microsystems - Beijing China * frame. Note that msg_scsi_io_request contains 2 double-words (8 bytes) for 1265b504601Sjiang wu - Sun Microsystems - Beijing China * element storage. And 64-bit dma element is 3 double-words (12 bytes) in 1275b504601Sjiang wu - Sun Microsystems - Beijing China * size. 1285b504601Sjiang wu - Sun Microsystems - Beijing China */ 1295b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_MAX_FRAME_SGES64(mpt) \ 1305b504601Sjiang wu - Sun Microsystems - Beijing China ((mpt->m_req_frame_size - \ 1315b504601Sjiang wu - Sun Microsystems - Beijing China (sizeof (MPI2_SCSI_IO_REQUEST)) + sizeof (MPI2_SGE_IO_UNION)) / 12) 1325b504601Sjiang wu - Sun Microsystems - Beijing China 1335b504601Sjiang wu - Sun Microsystems - Beijing China /* 1345b504601Sjiang wu - Sun Microsystems - Beijing China * Scatter-gather list structure defined by HBA hardware 1355b504601Sjiang wu - Sun Microsystems - Beijing China */ 1365b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct NcrTableIndirect { /* Table Indirect entries */ 1375b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t count; /* 24 bit count */ 1385b504601Sjiang wu - Sun Microsystems - Beijing China union { 1395b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t address32; /* 32 bit address */ 1405b504601Sjiang wu - Sun Microsystems - Beijing China struct { 1415b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t Low; 1425b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t High; 1435b504601Sjiang wu - Sun Microsystems - Beijing China } address64; /* 64 bit address */ 1445b504601Sjiang wu - Sun Microsystems - Beijing China } addr; 1455b504601Sjiang wu - Sun Microsystems - Beijing China } mptti_t; 1465b504601Sjiang wu - Sun Microsystems - Beijing China 1475b504601Sjiang wu - Sun Microsystems - Beijing China /* 1485b504601Sjiang wu - Sun Microsystems - Beijing China * preferred pkt_private length in 64-bit quantities 1495b504601Sjiang wu - Sun Microsystems - Beijing China */ 1505b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef _LP64 1515b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT_PRIV_SIZE 2 1525b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT_PRIV_LEN 16 /* in bytes */ 1535b504601Sjiang wu - Sun Microsystems - Beijing China #else /* _ILP32 */ 1545b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT_PRIV_SIZE 1 1555b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT_PRIV_LEN 8 /* in bytes */ 1565b504601Sjiang wu - Sun Microsystems - Beijing China #endif 1575b504601Sjiang wu - Sun Microsystems - Beijing China 1585b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT2CMD(pkt) ((struct mptsas_cmd *)((pkt)->pkt_ha_private)) 1595b504601Sjiang wu - Sun Microsystems - Beijing China #define CMD2PKT(cmdp) ((struct scsi_pkt *)((cmdp)->cmd_pkt)) 1605b504601Sjiang wu - Sun Microsystems - Beijing China #define EXTCMDS_STATUS_SIZE (sizeof (struct scsi_arq_status)) 1615b504601Sjiang wu - Sun Microsystems - Beijing China 1625b504601Sjiang wu - Sun Microsystems - Beijing China /* 1635b504601Sjiang wu - Sun Microsystems - Beijing China * get offset of item in structure 1645b504601Sjiang wu - Sun Microsystems - Beijing China */ 1655b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_ITEM_OFF(type, member) ((size_t)(&((type *)0)->member)) 1665b504601Sjiang wu - Sun Microsystems - Beijing China 1675b504601Sjiang wu - Sun Microsystems - Beijing China /* 1685b504601Sjiang wu - Sun Microsystems - Beijing China * WWID provided by LSI firmware is generated by firmware but the WWID is not 1695b504601Sjiang wu - Sun Microsystems - Beijing China * IEEE NAA standard format, OBP has no chance to distinguish format of unit 1705b504601Sjiang wu - Sun Microsystems - Beijing China * address. According LSI's confirmation, the top nibble of RAID WWID is 1715b504601Sjiang wu - Sun Microsystems - Beijing China * meanless, so the consensus between Solaris and OBP is to replace top nibble 1725b504601Sjiang wu - Sun Microsystems - Beijing China * of WWID provided by LSI to "3" always to hint OBP that this is a RAID WWID 1735b504601Sjiang wu - Sun Microsystems - Beijing China * format unit address. 1745b504601Sjiang wu - Sun Microsystems - Beijing China */ 1755b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_RAID_WWID(wwid) \ 1765b504601Sjiang wu - Sun Microsystems - Beijing China ((wwid & 0x0FFFFFFFFFFFFFFF) | 0x3000000000000000) 1775b504601Sjiang wu - Sun Microsystems - Beijing China 1785b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_target { 1795b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_sas_wwn; /* hash key1 */ 1805b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_phymask; /* hash key2 */ 1815b504601Sjiang wu - Sun Microsystems - Beijing China /* 1825b504601Sjiang wu - Sun Microsystems - Beijing China * m_dr_flag is a flag for DR, make sure the member 1835b504601Sjiang wu - Sun Microsystems - Beijing China * take the place of dr_flag of mptsas_hash_data. 1845b504601Sjiang wu - Sun Microsystems - Beijing China */ 1855b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_dr_flag; /* dr_flag */ 1865b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_devhdl; 1875b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_deviceinfo; 1885b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_phynum; 1895b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_dups; 1905b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_timeout; 1915b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_timebase; 1925b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_t_throttle; 1935b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_t_ncmds; 1945b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_reset_delay; 1955b504601Sjiang wu - Sun Microsystems - Beijing China int32_t m_t_nwait; 1965b504601Sjiang wu - Sun Microsystems - Beijing China 1975b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_qfull_retry_interval; 1985b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_qfull_retries; 1995b504601Sjiang wu - Sun Microsystems - Beijing China 2005b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_target_t; 2015b504601Sjiang wu - Sun Microsystems - Beijing China 2025b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_smp { 2035b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_sasaddr; /* hash key1 */ 2045b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_phymask; /* hash key2 */ 2055b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t reserved1; 2065b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_devhdl; 2075b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_deviceinfo; 2085b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_smp_t; 2095b504601Sjiang wu - Sun Microsystems - Beijing China 2105b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_hash_data { 2115b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t key1; 2125b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t key2; 2135b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t dr_flag; 2145b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t devhdl; 2155b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t device_info; 2165b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_hash_data_t; 2175b504601Sjiang wu - Sun Microsystems - Beijing China 2185b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_cache_frames { 2195b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_dma_hdl; 2205b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_acc_hdl; 2215b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_frames_addr; 2225b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_phys_addr; 2235b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_cache_frames_t; 2245b504601Sjiang wu - Sun Microsystems - Beijing China 2255b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_cmd { 2265b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_flags; /* flags from scsi_init_pkt */ 2275b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t cmd_dmahandle; /* dma handle */ 2285b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_cookie_t cmd_cookie; 2295b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_cookiec; 2305b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_winindex; 2315b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_nwin; 2325b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_cur_cookie; 2335b504601Sjiang wu - Sun Microsystems - Beijing China off_t cmd_dma_offset; 2345b504601Sjiang wu - Sun Microsystems - Beijing China size_t cmd_dma_len; 2355b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t cmd_totaldmacount; 2365b504601Sjiang wu - Sun Microsystems - Beijing China 2375b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t cmd_arqhandle; /* dma arq handle */ 2385b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_cookie_t cmd_arqcookie; 2395b504601Sjiang wu - Sun Microsystems - Beijing China struct buf *cmd_arq_buf; 2405b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t cmd_ext_arqhandle; /* dma extern arq handle */ 2415b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_cookie_t cmd_ext_arqcookie; 2425b504601Sjiang wu - Sun Microsystems - Beijing China struct buf *cmd_ext_arq_buf; 2435b504601Sjiang wu - Sun Microsystems - Beijing China 2445b504601Sjiang wu - Sun Microsystems - Beijing China int cmd_pkt_flags; 2455b504601Sjiang wu - Sun Microsystems - Beijing China 2465b504601Sjiang wu - Sun Microsystems - Beijing China /* timer for command in active slot */ 2475b504601Sjiang wu - Sun Microsystems - Beijing China int cmd_active_timeout; 2485b504601Sjiang wu - Sun Microsystems - Beijing China 2495b504601Sjiang wu - Sun Microsystems - Beijing China struct scsi_pkt *cmd_pkt; 2505b504601Sjiang wu - Sun Microsystems - Beijing China struct scsi_arq_status cmd_scb; 2515b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_cdblen; /* length of cdb */ 2525b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_rqslen; /* len of requested rqsense */ 2535b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_privlen; 2545b504601Sjiang wu - Sun Microsystems - Beijing China uint_t cmd_scblen; 2555b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t cmd_dmacount; 2565b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t cmd_dma_addr; 2575b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_age; 2585b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t cmd_qfull_retries; 2595b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_queued; /* true if queued */ 2605b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_cmd *cmd_linkp; 2615b504601Sjiang wu - Sun Microsystems - Beijing China mptti_t *cmd_sg; /* Scatter/Gather structure */ 2625b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t cmd_cdb[SCSI_CDB_SIZE]; 2635b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t cmd_pkt_private[PKT_PRIV_LEN]; 2645b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t cmd_slot; 2655b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t ioc_cmd_slot; 2665b504601Sjiang wu - Sun Microsystems - Beijing China 2675b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cache_frames_t *cmd_extra_frames; 2685b504601Sjiang wu - Sun Microsystems - Beijing China 2695b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t cmd_rfm; 2705b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_target_t *cmd_tgt_addr; 2715b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_cmd_t; 2725b504601Sjiang wu - Sun Microsystems - Beijing China 2735b504601Sjiang wu - Sun Microsystems - Beijing China /* 2745b504601Sjiang wu - Sun Microsystems - Beijing China * These are the defined cmd_flags for this structure. 2755b504601Sjiang wu - Sun Microsystems - Beijing China */ 2765b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CMDDISC 0x000001 /* cmd currently disconnected */ 2775b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_WATCH 0x000002 /* watchdog time for this command */ 2785b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_FINISHED 0x000004 /* command completed */ 2795b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CHKSEG 0x000008 /* check cmd_data within seg */ 2805b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_COMPLETED 0x000010 /* completion routine called */ 2815b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_PREPARED 0x000020 /* pkt has been init'ed */ 2825b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_IN_TRANSPORT 0x000040 /* in use by host adapter driver */ 2835b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_RESTORE_PTRS 0x000080 /* implicit restore ptr on reconnect */ 2845b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_ARQ_IN_PROGRESS 0x000100 /* auto request sense in progress */ 2855b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_TRANFLAG 0x0001ff /* covers transport part of flags */ 2865b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_TM_CMD 0x000200 /* cmd is a task management command */ 2875b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CMDARQ 0x000400 /* cmd is a 'rqsense' command */ 2885b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_DMAVALID 0x000800 /* dma mapping valid */ 2895b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_DMASEND 0x001000 /* data is going 'out' */ 2905b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CMDIOPB 0x002000 /* this is an 'iopb' packet */ 2915b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CDBEXTERN 0x004000 /* cdb kmem_alloc'd */ 2925b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_SCBEXTERN 0x008000 /* scb kmem_alloc'd */ 2935b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_FREE 0x010000 /* packet is on free list */ 2945b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_PRIVEXTERN 0x020000 /* target private kmem_alloc'd */ 2955b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_DMA_PARTIAL 0x040000 /* partial xfer OK */ 2965b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_QFULL_STATUS 0x080000 /* pkt got qfull status */ 2975b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_TIMEOUT 0x100000 /* passthru/config command timeout */ 2985b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_PMM_RECEIVED 0x200000 /* use cmd_pmm* for saving pointers */ 2995b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_RETRY 0x400000 /* cmd has been retried */ 3005b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CMDIOC 0x800000 /* cmd is just for for ioc, no io */ 3015b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_EXTARQBUFVALID 0x1000000 /* extern arq buf handle is valid */ 3025b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_PASSTHRU 0x2000000 /* cmd is a passthrough command */ 3035b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_XARQ 0x4000000 /* cmd requests for extra sense */ 3045b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CMDACK 0x8000000 /* cmd for event ack */ 3055b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_TXQ 0x10000000 /* cmd queued in the tx_waitq */ 3065b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_FW_CMD 0x20000000 /* cmd is a fw up/down command */ 3075b504601Sjiang wu - Sun Microsystems - Beijing China #define CFLAG_CONFIG 0x40000000 /* cmd is for config header/page */ 308*76a4caf6SAda #define CFLAG_FW_DIAG 0x80000000 /* cmd is for FW diag buffers */ 3095b504601Sjiang wu - Sun Microsystems - Beijing China 3105b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_SIZE 8 3115b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_MASK 0xC0 3125b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_PERIPHERAL 0x00 3135b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_FLAT_SPACE 0x40 3145b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT 0x80 3155b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_EXTENDED_UNIT 0xC0 3165b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_2B 0x00 3175b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_4B 0x01 3185b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_6B 0x10 3195b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_8B 0x20 3205b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SCSI_REPORTLUNS_ADDRESS_LOGICAL_UNIT_SIZE 0x30 3215b504601Sjiang wu - Sun Microsystems - Beijing China 3225b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_HASH_ARRAY_SIZE 16 3235b504601Sjiang wu - Sun Microsystems - Beijing China /* 3245b504601Sjiang wu - Sun Microsystems - Beijing China * hash table definition 3255b504601Sjiang wu - Sun Microsystems - Beijing China */ 3265b504601Sjiang wu - Sun Microsystems - Beijing China 3275b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_HASH_FIRST 0xffff 3285b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_HASH_NEXT 0x0000 3295b504601Sjiang wu - Sun Microsystems - Beijing China 330*76a4caf6SAda typedef struct mptsas_dma_alloc_state 331*76a4caf6SAda { 332*76a4caf6SAda ddi_dma_handle_t handle; 333*76a4caf6SAda caddr_t memp; 334*76a4caf6SAda size_t size; 335*76a4caf6SAda ddi_acc_handle_t accessp; 336*76a4caf6SAda ddi_dma_cookie_t cookie; 337*76a4caf6SAda } mptsas_dma_alloc_state_t; 338*76a4caf6SAda 3395b504601Sjiang wu - Sun Microsystems - Beijing China /* 3405b504601Sjiang wu - Sun Microsystems - Beijing China * passthrough request structure 3415b504601Sjiang wu - Sun Microsystems - Beijing China */ 3425b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_pt_request { 3435b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t *request; 3445b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t request_size; 3455b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t data_size; 3465b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t dataout_size; 3475b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t direction; 3485b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_cookie_t data_cookie; 3495b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_cookie_t dataout_cookie; 3505b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_pt_request_t; 3515b504601Sjiang wu - Sun Microsystems - Beijing China 3525b504601Sjiang wu - Sun Microsystems - Beijing China /* 3535b504601Sjiang wu - Sun Microsystems - Beijing China * config page request structure 3545b504601Sjiang wu - Sun Microsystems - Beijing China */ 3555b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_config_request { 3565b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t page_address; 3575b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t action; 3585b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t page_type; 3595b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t page_number; 3605b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t page_length; 3615b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t page_version; 3625b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t ext_page_type; 3635b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t ext_page_length; 3645b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_config_request_t; 3655b504601Sjiang wu - Sun Microsystems - Beijing China 366*76a4caf6SAda typedef struct mptsas_fw_diagnostic_buffer { 367*76a4caf6SAda mptsas_dma_alloc_state_t buffer_data; 368*76a4caf6SAda uint8_t extended_type; 369*76a4caf6SAda uint8_t buffer_type; 370*76a4caf6SAda uint8_t force_release; 371*76a4caf6SAda uint32_t product_specific[23]; 372*76a4caf6SAda uint8_t immediate; 373*76a4caf6SAda uint8_t enabled; 374*76a4caf6SAda uint8_t valid_data; 375*76a4caf6SAda uint8_t owned_by_firmware; 376*76a4caf6SAda uint32_t unique_id; 377*76a4caf6SAda } mptsas_fw_diagnostic_buffer_t; 378*76a4caf6SAda 379*76a4caf6SAda /* 380*76a4caf6SAda * FW diag request structure 381*76a4caf6SAda */ 382*76a4caf6SAda typedef struct mptsas_diag_request { 383*76a4caf6SAda mptsas_fw_diagnostic_buffer_t *pBuffer; 384*76a4caf6SAda uint8_t function; 385*76a4caf6SAda } mptsas_diag_request_t; 386*76a4caf6SAda 3875b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_hash_node { 3885b504601Sjiang wu - Sun Microsystems - Beijing China void *data; 3895b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_hash_node *next; 3905b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_hash_node_t; 3915b504601Sjiang wu - Sun Microsystems - Beijing China 3925b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_hash_table { 3935b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_hash_node *head[MPTSAS_HASH_ARRAY_SIZE]; 3945b504601Sjiang wu - Sun Microsystems - Beijing China /* 3955b504601Sjiang wu - Sun Microsystems - Beijing China * last position in traverse 3965b504601Sjiang wu - Sun Microsystems - Beijing China */ 3975b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_hash_node *cur; 3985b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t line; 3995b504601Sjiang wu - Sun Microsystems - Beijing China 4005b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_hash_table_t; 4015b504601Sjiang wu - Sun Microsystems - Beijing China 4025b504601Sjiang wu - Sun Microsystems - Beijing China /* 4035b504601Sjiang wu - Sun Microsystems - Beijing China * RAID volume information 4045b504601Sjiang wu - Sun Microsystems - Beijing China */ 4055b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_raidvol { 4065b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t m_israid; 4075b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_raidhandle; 4085b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_raidwwid; 4095b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_state; 4105b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_statusflags; 4115b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_settings; 4125b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_devhdl[MPTSAS_MAX_DISKS_IN_VOL]; 4135b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_disknum[MPTSAS_MAX_DISKS_IN_VOL]; 4145b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t m_diskstatus[MPTSAS_MAX_DISKS_IN_VOL]; 4155b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_raidsize; 4165b504601Sjiang wu - Sun Microsystems - Beijing China int m_raidlevel; 4175b504601Sjiang wu - Sun Microsystems - Beijing China int m_ndisks; 4185b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_target_t *m_raidtgt; 4195b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_raidvol_t; 4205b504601Sjiang wu - Sun Microsystems - Beijing China 4215b504601Sjiang wu - Sun Microsystems - Beijing China /* 4225b504601Sjiang wu - Sun Microsystems - Beijing China * RAID configurations 4235b504601Sjiang wu - Sun Microsystems - Beijing China */ 4245b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_raidconfig { 4255b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_raidvol_t m_raidvol[MPTSAS_MAX_RAIDVOLS]; 4265b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_physdisk_devhdl[ 4275b504601Sjiang wu - Sun Microsystems - Beijing China MPTSAS_MAX_DISKS_IN_CONFIG]; 4285b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_native; 4295b504601Sjiang wu - Sun Microsystems - Beijing China } m_raidconfig_t; 4305b504601Sjiang wu - Sun Microsystems - Beijing China 4315b504601Sjiang wu - Sun Microsystems - Beijing China /* 4325b504601Sjiang wu - Sun Microsystems - Beijing China * Structure to hold active outstanding cmds. Also, keep 4335b504601Sjiang wu - Sun Microsystems - Beijing China * timeout on a per target basis. 4345b504601Sjiang wu - Sun Microsystems - Beijing China */ 4355b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_slots { 4365b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_hash_table_t m_tgttbl; 4375b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_hash_table_t m_smptbl; 4385b504601Sjiang wu - Sun Microsystems - Beijing China m_raidconfig_t m_raidconfig[MPTSAS_MAX_RAIDCONFIGS]; 4395b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_num_raid_configs; 4405b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_tags; 4415b504601Sjiang wu - Sun Microsystems - Beijing China size_t m_size; 4425b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_n_slots; 4435b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t *m_slot[1]; 4445b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_slots_t; 4455b504601Sjiang wu - Sun Microsystems - Beijing China 4465b504601Sjiang wu - Sun Microsystems - Beijing China /* 4475b504601Sjiang wu - Sun Microsystems - Beijing China * Structure to hold command and packets for event ack 4485b504601Sjiang wu - Sun Microsystems - Beijing China * and task management commands. 4495b504601Sjiang wu - Sun Microsystems - Beijing China */ 4505b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct m_event_struct { 4515b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_cmd m_event_cmd; 4525b504601Sjiang wu - Sun Microsystems - Beijing China struct m_event_struct *m_event_linkp; 4535b504601Sjiang wu - Sun Microsystems - Beijing China /* 4545b504601Sjiang wu - Sun Microsystems - Beijing China * event member record the failure event and eventcntx 4555b504601Sjiang wu - Sun Microsystems - Beijing China * event member would be used in send ack pending process 4565b504601Sjiang wu - Sun Microsystems - Beijing China */ 4575b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_event; 4585b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_eventcntx; 4595b504601Sjiang wu - Sun Microsystems - Beijing China uint_t in_use; 4605b504601Sjiang wu - Sun Microsystems - Beijing China struct scsi_pkt m_event_pkt; /* must be last */ 4615b504601Sjiang wu - Sun Microsystems - Beijing China /* ... scsi_pkt_size() */ 4625b504601Sjiang wu - Sun Microsystems - Beijing China } m_event_struct_t; 4635b504601Sjiang wu - Sun Microsystems - Beijing China #define M_EVENT_STRUCT_SIZE (sizeof (m_event_struct_t) - \ 4645b504601Sjiang wu - Sun Microsystems - Beijing China sizeof (struct scsi_pkt) + scsi_pkt_size()) 4655b504601Sjiang wu - Sun Microsystems - Beijing China 4665b504601Sjiang wu - Sun Microsystems - Beijing China #define MAX_IOC_COMMANDS 8 4675b504601Sjiang wu - Sun Microsystems - Beijing China 4685b504601Sjiang wu - Sun Microsystems - Beijing China /* 4695b504601Sjiang wu - Sun Microsystems - Beijing China * A pool of MAX_IOC_COMMANDS is maintained for event ack commands. 4705b504601Sjiang wu - Sun Microsystems - Beijing China * A new event ack command requests mptsas_cmd and scsi_pkt structures 4715b504601Sjiang wu - Sun Microsystems - Beijing China * from this pool, and returns it back when done. 4725b504601Sjiang wu - Sun Microsystems - Beijing China */ 4735b504601Sjiang wu - Sun Microsystems - Beijing China 4745b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct m_replyh_arg { 4755b504601Sjiang wu - Sun Microsystems - Beijing China void *mpt; 4765b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t rfm; 4775b504601Sjiang wu - Sun Microsystems - Beijing China } m_replyh_arg_t; 4785b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(m_replyh_arg_t::mpt)) 4795b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(m_replyh_arg_t::rfm)) 4805b504601Sjiang wu - Sun Microsystems - Beijing China 4815b504601Sjiang wu - Sun Microsystems - Beijing China /* 4825b504601Sjiang wu - Sun Microsystems - Beijing China * Flags for DR handler topology change 4835b504601Sjiang wu - Sun Microsystems - Beijing China */ 4845b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_DIRECT_ATTACHED_DEVICE 0x0 4855b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_EXPANDER_ASSOCIATED 0x1 4865b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_LUN_ASSOCIATED 0x2 4875b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_RAID_ASSOCIATED 0x4 4885b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_RAID_PHYSDRV_ASSOCIATED 0x8 4895b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_EXPANDER_ATTACHED_DEVICE 0x10 4905b504601Sjiang wu - Sun Microsystems - Beijing China 4915b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_topo_change_list { 4925b504601Sjiang wu - Sun Microsystems - Beijing China void *mpt; 4935b504601Sjiang wu - Sun Microsystems - Beijing China uint_t event; 4945b504601Sjiang wu - Sun Microsystems - Beijing China union { 4955b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t physport; 4965b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t phymask; 4975b504601Sjiang wu - Sun Microsystems - Beijing China } un; 4985b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t devhdl; 4995b504601Sjiang wu - Sun Microsystems - Beijing China void *object; 5005b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t flags; 5015b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_topo_change_list *next; 5025b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_topo_change_list_t; 5035b504601Sjiang wu - Sun Microsystems - Beijing China 5045b504601Sjiang wu - Sun Microsystems - Beijing China 5055b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::mpt)) 5065b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::event)) 5075b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::physport)) 5085b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::devhdl)) 5095b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::object)) 5105b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas_topo_change_list_t::flags)) 5115b504601Sjiang wu - Sun Microsystems - Beijing China 5125b504601Sjiang wu - Sun Microsystems - Beijing China /* 5135b504601Sjiang wu - Sun Microsystems - Beijing China * Status types when calling mptsas_get_target_device_info 5145b504601Sjiang wu - Sun Microsystems - Beijing China */ 5155b504601Sjiang wu - Sun Microsystems - Beijing China #define DEV_INFO_SUCCESS 0x0 5165b504601Sjiang wu - Sun Microsystems - Beijing China #define DEV_INFO_FAIL_PAGE0 0x1 5175b504601Sjiang wu - Sun Microsystems - Beijing China #define DEV_INFO_WRONG_DEVICE_TYPE 0x2 5185b504601Sjiang wu - Sun Microsystems - Beijing China #define DEV_INFO_PHYS_DISK 0x3 5195b504601Sjiang wu - Sun Microsystems - Beijing China #define DEV_INFO_FAIL_ALLOC 0x4 5205b504601Sjiang wu - Sun Microsystems - Beijing China 5215b504601Sjiang wu - Sun Microsystems - Beijing China /* 5225b504601Sjiang wu - Sun Microsystems - Beijing China * mpt hotplug event defines 5235b504601Sjiang wu - Sun Microsystems - Beijing China */ 5245b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_EVENT_RECONFIG_TARGET 0x01 5255b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_EVENT_OFFLINE_TARGET 0x02 5265b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TOPO_FLAG_REMOVE_HANDLE 0x04 5275b504601Sjiang wu - Sun Microsystems - Beijing China 5285b504601Sjiang wu - Sun Microsystems - Beijing China /* 5295b504601Sjiang wu - Sun Microsystems - Beijing China * SMP target hotplug events 5305b504601Sjiang wu - Sun Microsystems - Beijing China */ 5315b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_EVENT_RECONFIG_SMP 0x10 5325b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_EVENT_OFFLINE_SMP 0x20 5335b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_EVENT_MASK 0x3F 5345b504601Sjiang wu - Sun Microsystems - Beijing China 5355b504601Sjiang wu - Sun Microsystems - Beijing China /* 5365b504601Sjiang wu - Sun Microsystems - Beijing China * mpt hotplug status definition for m_dr_flag 5375b504601Sjiang wu - Sun Microsystems - Beijing China */ 5385b504601Sjiang wu - Sun Microsystems - Beijing China 5395b504601Sjiang wu - Sun Microsystems - Beijing China /* 5405b504601Sjiang wu - Sun Microsystems - Beijing China * MPTSAS_DR_INACTIVE 5415b504601Sjiang wu - Sun Microsystems - Beijing China * 5425b504601Sjiang wu - Sun Microsystems - Beijing China * The target is in a normal operating state. 5435b504601Sjiang wu - Sun Microsystems - Beijing China * No dynamic reconfiguration operation is in progress. 5445b504601Sjiang wu - Sun Microsystems - Beijing China */ 5455b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_INACTIVE 0x0 5465b504601Sjiang wu - Sun Microsystems - Beijing China /* 5475b504601Sjiang wu - Sun Microsystems - Beijing China * MPTSAS_DR_INTRANSITION 5485b504601Sjiang wu - Sun Microsystems - Beijing China * 5495b504601Sjiang wu - Sun Microsystems - Beijing China * The target is in a transition mode since 5505b504601Sjiang wu - Sun Microsystems - Beijing China * hotplug event happens and offline procedure has not 5515b504601Sjiang wu - Sun Microsystems - Beijing China * been finished 5525b504601Sjiang wu - Sun Microsystems - Beijing China */ 5535b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DR_INTRANSITION 0x1 5545b504601Sjiang wu - Sun Microsystems - Beijing China 5555b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_tgt_private { 5565b504601Sjiang wu - Sun Microsystems - Beijing China int t_lun; 5575b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_target *t_private; 5585b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_tgt_private_t; 5595b504601Sjiang wu - Sun Microsystems - Beijing China 5605b504601Sjiang wu - Sun Microsystems - Beijing China /* 5615b504601Sjiang wu - Sun Microsystems - Beijing China * The following defines are used in mptsas_set_init_mode to track the current 5625b504601Sjiang wu - Sun Microsystems - Beijing China * state as we progress through reprogramming the HBA from target mode into 5635b504601Sjiang wu - Sun Microsystems - Beijing China * initiator mode. 5645b504601Sjiang wu - Sun Microsystems - Beijing China */ 5655b504601Sjiang wu - Sun Microsystems - Beijing China 5665b504601Sjiang wu - Sun Microsystems - Beijing China #define IOUC_READ_PAGE0 0x00000100 5675b504601Sjiang wu - Sun Microsystems - Beijing China #define IOUC_READ_PAGE1 0x00000200 5685b504601Sjiang wu - Sun Microsystems - Beijing China #define IOUC_WRITE_PAGE1 0x00000400 5695b504601Sjiang wu - Sun Microsystems - Beijing China #define IOUC_DONE 0x00000800 5705b504601Sjiang wu - Sun Microsystems - Beijing China #define DISCOVERY_IN_PROGRESS MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS 5715b504601Sjiang wu - Sun Microsystems - Beijing China #define AUTO_PORT_CONFIGURATION MPI2_SASIOUNIT0_PORTFLAGS_AUTO_PORT_CONFIG 5725b504601Sjiang wu - Sun Microsystems - Beijing China 5735b504601Sjiang wu - Sun Microsystems - Beijing China /* 5745b504601Sjiang wu - Sun Microsystems - Beijing China * Last allocated slot is used for TM requests. Since only m_max_requests 5755b504601Sjiang wu - Sun Microsystems - Beijing China * frames are allocated, the last SMID will be m_max_requests - 1. 5765b504601Sjiang wu - Sun Microsystems - Beijing China */ 5775b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SLOTS_SIZE(mpt) \ 5785b504601Sjiang wu - Sun Microsystems - Beijing China (sizeof (struct mptsas_slots) + (sizeof (struct mptsas_cmd *) * \ 5795b504601Sjiang wu - Sun Microsystems - Beijing China mpt->m_max_requests)) 5805b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TM_SLOT(mpt) (mpt->m_max_requests - 1) 5815b504601Sjiang wu - Sun Microsystems - Beijing China 5825b504601Sjiang wu - Sun Microsystems - Beijing China /* 5835b504601Sjiang wu - Sun Microsystems - Beijing China * Macro for phy_flags 5845b504601Sjiang wu - Sun Microsystems - Beijing China */ 5855b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_phy_info { 5865b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t port_num; 5875b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t port_flags; 5885b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t ctrl_devhdl; 5895b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t phy_device_type; 5905b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t attached_devhdl; 5915b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t phy_mask; 5925b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_phy_info_t; 5935b504601Sjiang wu - Sun Microsystems - Beijing China 5945b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_doneq_thread_arg { 5955b504601Sjiang wu - Sun Microsystems - Beijing China void *mpt; 5965b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t t; 5975b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_doneq_thread_arg_t; 5985b504601Sjiang wu - Sun Microsystems - Beijing China 5995b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DONEQ_THREAD_ACTIVE 0x1 6005b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas_doneq_thread_list { 6015b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t *doneq; 6025b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t **donetail; 6035b504601Sjiang wu - Sun Microsystems - Beijing China kthread_t *threadp; 6045b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t cv; 6055b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t reserv1; 6065b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t reserv2; 6075b504601Sjiang wu - Sun Microsystems - Beijing China kmutex_t mutex; 6085b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t flag; 6095b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t len; 6105b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_doneq_thread_arg_t arg; 6115b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_doneq_thread_list_t; 6125b504601Sjiang wu - Sun Microsystems - Beijing China 6135b504601Sjiang wu - Sun Microsystems - Beijing China typedef struct mptsas { 6145b504601Sjiang wu - Sun Microsystems - Beijing China int m_instance; 6155b504601Sjiang wu - Sun Microsystems - Beijing China 6165b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas *m_next; 6175b504601Sjiang wu - Sun Microsystems - Beijing China 6185b504601Sjiang wu - Sun Microsystems - Beijing China scsi_hba_tran_t *m_tran; 61996c4a178SChris Horne smp_hba_tran_t *m_smptran; 6205b504601Sjiang wu - Sun Microsystems - Beijing China kmutex_t m_mutex; 6215b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t m_cv; 6225b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t m_passthru_cv; 6235b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t m_fw_cv; 6245b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t m_config_cv; 625*76a4caf6SAda kcondvar_t m_fw_diag_cv; 6265b504601Sjiang wu - Sun Microsystems - Beijing China dev_info_t *m_dip; 6275b504601Sjiang wu - Sun Microsystems - Beijing China 6285b504601Sjiang wu - Sun Microsystems - Beijing China /* 6295b504601Sjiang wu - Sun Microsystems - Beijing China * soft state flags 6305b504601Sjiang wu - Sun Microsystems - Beijing China */ 6315b504601Sjiang wu - Sun Microsystems - Beijing China uint_t m_softstate; 6325b504601Sjiang wu - Sun Microsystems - Beijing China 6335b504601Sjiang wu - Sun Microsystems - Beijing China struct mptsas_slots *m_active; /* outstanding cmds */ 6345b504601Sjiang wu - Sun Microsystems - Beijing China 6355b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t *m_waitq; /* cmd queue for active request */ 6365b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t **m_waitqtail; /* wait queue tail ptr */ 6375b504601Sjiang wu - Sun Microsystems - Beijing China 6385b504601Sjiang wu - Sun Microsystems - Beijing China kmutex_t m_tx_waitq_mutex; 6395b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t *m_tx_waitq; /* TX cmd queue for active request */ 6405b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t **m_tx_waitqtail; /* tx_wait queue tail ptr */ 6415b504601Sjiang wu - Sun Microsystems - Beijing China int m_tx_draining; /* TX queue draining flag */ 6425b504601Sjiang wu - Sun Microsystems - Beijing China 6435b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t *m_doneq; /* queue of completed commands */ 6445b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_cmd_t **m_donetail; /* queue tail ptr */ 6455b504601Sjiang wu - Sun Microsystems - Beijing China 6465b504601Sjiang wu - Sun Microsystems - Beijing China /* 6475b504601Sjiang wu - Sun Microsystems - Beijing China * variables for helper threads (fan-out interrupts) 6485b504601Sjiang wu - Sun Microsystems - Beijing China */ 6495b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_doneq_thread_list_t *m_doneq_thread_id; 6505b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_doneq_thread_n; 6515b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_doneq_thread_threshold; 6525b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_doneq_length_threshold; 6535b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_doneq_len; 6545b504601Sjiang wu - Sun Microsystems - Beijing China kcondvar_t m_doneq_thread_cv; 6555b504601Sjiang wu - Sun Microsystems - Beijing China kmutex_t m_doneq_mutex; 6565b504601Sjiang wu - Sun Microsystems - Beijing China 6575b504601Sjiang wu - Sun Microsystems - Beijing China int m_ncmds; /* number of outstanding commands */ 6585b504601Sjiang wu - Sun Microsystems - Beijing China m_event_struct_t *m_ioc_event_cmdq; /* cmd queue for ioc event */ 6595b504601Sjiang wu - Sun Microsystems - Beijing China m_event_struct_t **m_ioc_event_cmdtail; /* ioc cmd queue tail */ 6605b504601Sjiang wu - Sun Microsystems - Beijing China 6615b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_datap; /* operating regs data access handle */ 6625b504601Sjiang wu - Sun Microsystems - Beijing China 6635b504601Sjiang wu - Sun Microsystems - Beijing China struct _MPI2_SYSTEM_INTERFACE_REGS *m_reg; 6645b504601Sjiang wu - Sun Microsystems - Beijing China 6655b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t m_devid; /* device id of chip. */ 6665b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t m_revid; /* revision of chip. */ 6675b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_svid; /* subsystem Vendor ID of chip */ 6685b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_ssid; /* subsystem Device ID of chip */ 6695b504601Sjiang wu - Sun Microsystems - Beijing China 6705b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t m_sync_offset; /* default offset for this chip. */ 6715b504601Sjiang wu - Sun Microsystems - Beijing China 6725b504601Sjiang wu - Sun Microsystems - Beijing China timeout_id_t m_quiesce_timeid; 6735b504601Sjiang wu - Sun Microsystems - Beijing China timeout_id_t m_pm_timeid; 6745b504601Sjiang wu - Sun Microsystems - Beijing China 6755b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_dma_req_frame_hdl; 6765b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_acc_req_frame_hdl; 6775b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_dma_reply_frame_hdl; 6785b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_acc_reply_frame_hdl; 6795b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_dma_free_queue_hdl; 6805b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_acc_free_queue_hdl; 6815b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_dma_post_queue_hdl; 6825b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_acc_post_queue_hdl; 6835b504601Sjiang wu - Sun Microsystems - Beijing China 6845b504601Sjiang wu - Sun Microsystems - Beijing China /* 6855b504601Sjiang wu - Sun Microsystems - Beijing China * list of reset notification requests 6865b504601Sjiang wu - Sun Microsystems - Beijing China */ 6875b504601Sjiang wu - Sun Microsystems - Beijing China struct scsi_reset_notify_entry *m_reset_notify_listf; 6885b504601Sjiang wu - Sun Microsystems - Beijing China 6895b504601Sjiang wu - Sun Microsystems - Beijing China /* 6905b504601Sjiang wu - Sun Microsystems - Beijing China * qfull handling 6915b504601Sjiang wu - Sun Microsystems - Beijing China */ 6925b504601Sjiang wu - Sun Microsystems - Beijing China timeout_id_t m_restart_cmd_timeid; 6935b504601Sjiang wu - Sun Microsystems - Beijing China 6945b504601Sjiang wu - Sun Microsystems - Beijing China /* 6955b504601Sjiang wu - Sun Microsystems - Beijing China * scsi reset delay per bus 6965b504601Sjiang wu - Sun Microsystems - Beijing China */ 6975b504601Sjiang wu - Sun Microsystems - Beijing China uint_t m_scsi_reset_delay; 6985b504601Sjiang wu - Sun Microsystems - Beijing China 6995b504601Sjiang wu - Sun Microsystems - Beijing China int m_pm_idle_delay; 7005b504601Sjiang wu - Sun Microsystems - Beijing China 7015b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t m_polled_intr; /* intr was polled. */ 7025b504601Sjiang wu - Sun Microsystems - Beijing China uchar_t m_suspended; /* true if driver is suspended */ 7035b504601Sjiang wu - Sun Microsystems - Beijing China 7045b504601Sjiang wu - Sun Microsystems - Beijing China struct kmem_cache *m_kmem_cache; 7055b504601Sjiang wu - Sun Microsystems - Beijing China struct kmem_cache *m_cache_frames; 7065b504601Sjiang wu - Sun Microsystems - Beijing China 7075b504601Sjiang wu - Sun Microsystems - Beijing China /* 7085b504601Sjiang wu - Sun Microsystems - Beijing China * hba options. 7095b504601Sjiang wu - Sun Microsystems - Beijing China */ 7105b504601Sjiang wu - Sun Microsystems - Beijing China uint_t m_options; 7115b504601Sjiang wu - Sun Microsystems - Beijing China 7125b504601Sjiang wu - Sun Microsystems - Beijing China int m_in_callback; 7135b504601Sjiang wu - Sun Microsystems - Beijing China 7145b504601Sjiang wu - Sun Microsystems - Beijing China int m_power_level; /* current power level */ 7155b504601Sjiang wu - Sun Microsystems - Beijing China 7165b504601Sjiang wu - Sun Microsystems - Beijing China int m_busy; /* power management busy state */ 7175b504601Sjiang wu - Sun Microsystems - Beijing China 7185b504601Sjiang wu - Sun Microsystems - Beijing China off_t m_pmcsr_offset; /* PMCSR offset */ 7195b504601Sjiang wu - Sun Microsystems - Beijing China 7205b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_config_handle; 7215b504601Sjiang wu - Sun Microsystems - Beijing China 7225b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_attr_t m_io_dma_attr; /* Used for data I/O */ 7235b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_attr_t m_msg_dma_attr; /* Used for message frames */ 7245b504601Sjiang wu - Sun Microsystems - Beijing China ddi_device_acc_attr_t m_dev_acc_attr; 7255b504601Sjiang wu - Sun Microsystems - Beijing China 7265b504601Sjiang wu - Sun Microsystems - Beijing China /* 7275b504601Sjiang wu - Sun Microsystems - Beijing China * request/reply variables 7285b504601Sjiang wu - Sun Microsystems - Beijing China */ 7295b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_req_frame; 7305b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_req_frame_dma_addr; 7315b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_reply_frame; 7325b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_reply_frame_dma_addr; 7335b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_free_queue; 7345b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_free_queue_dma_addr; 7355b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_post_queue; 7365b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_post_queue_dma_addr; 7375b504601Sjiang wu - Sun Microsystems - Beijing China 7385b504601Sjiang wu - Sun Microsystems - Beijing China m_replyh_arg_t *m_replyh_args; 7395b504601Sjiang wu - Sun Microsystems - Beijing China 7405b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_max_requests; 7415b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_req_frame_size; 7425b504601Sjiang wu - Sun Microsystems - Beijing China 7435b504601Sjiang wu - Sun Microsystems - Beijing China /* 7445b504601Sjiang wu - Sun Microsystems - Beijing China * Max frames per request reprted in IOC Facts 7455b504601Sjiang wu - Sun Microsystems - Beijing China */ 7465b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_max_chain_depth; 7475b504601Sjiang wu - Sun Microsystems - Beijing China /* 7485b504601Sjiang wu - Sun Microsystems - Beijing China * Max frames per request which is used in reality. It's adjusted 7495b504601Sjiang wu - Sun Microsystems - Beijing China * according DMA SG length attribute, and shall not exceed the 7505b504601Sjiang wu - Sun Microsystems - Beijing China * m_max_chain_depth. 7515b504601Sjiang wu - Sun Microsystems - Beijing China */ 7525b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_max_request_frames; 7535b504601Sjiang wu - Sun Microsystems - Beijing China 7545b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_free_queue_depth; 7555b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_post_queue_depth; 7565b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_max_replies; 7575b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_free_index; 7585b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_post_index; 7595b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_reply_frame_size; 760af483cc8Sjianfei wang - Sun Microsystems - Beijing China uint32_t m_ioc_capabilities; 7615b504601Sjiang wu - Sun Microsystems - Beijing China 7625b504601Sjiang wu - Sun Microsystems - Beijing China /* 7635b504601Sjiang wu - Sun Microsystems - Beijing China * indicates if the firmware was upload by the driver 7645b504601Sjiang wu - Sun Microsystems - Beijing China * at boot time 7655b504601Sjiang wu - Sun Microsystems - Beijing China */ 7665b504601Sjiang wu - Sun Microsystems - Beijing China ushort_t m_fwupload; 7675b504601Sjiang wu - Sun Microsystems - Beijing China 7685b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_productid; 7695b504601Sjiang wu - Sun Microsystems - Beijing China 7705b504601Sjiang wu - Sun Microsystems - Beijing China /* 7715b504601Sjiang wu - Sun Microsystems - Beijing China * per instance data structures for dma memory resources for 7725b504601Sjiang wu - Sun Microsystems - Beijing China * MPI handshake protocol. only one handshake cmd can run at a time. 7735b504601Sjiang wu - Sun Microsystems - Beijing China */ 7745b504601Sjiang wu - Sun Microsystems - Beijing China ddi_dma_handle_t m_hshk_dma_hdl; 7755b504601Sjiang wu - Sun Microsystems - Beijing China 7765b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t m_hshk_acc_hdl; 7775b504601Sjiang wu - Sun Microsystems - Beijing China 7785b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t m_hshk_memp; 7795b504601Sjiang wu - Sun Microsystems - Beijing China 7805b504601Sjiang wu - Sun Microsystems - Beijing China size_t m_hshk_dma_size; 7815b504601Sjiang wu - Sun Microsystems - Beijing China 7825b504601Sjiang wu - Sun Microsystems - Beijing China /* Firmware version on the card at boot time */ 7835b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_fwversion; 7845b504601Sjiang wu - Sun Microsystems - Beijing China 7855b504601Sjiang wu - Sun Microsystems - Beijing China /* MSI specific fields */ 7865b504601Sjiang wu - Sun Microsystems - Beijing China ddi_intr_handle_t *m_htable; /* For array of interrupts */ 7875b504601Sjiang wu - Sun Microsystems - Beijing China int m_intr_type; /* What type of interrupt */ 7885b504601Sjiang wu - Sun Microsystems - Beijing China int m_intr_cnt; /* # of intrs count returned */ 7895b504601Sjiang wu - Sun Microsystems - Beijing China size_t m_intr_size; /* Size of intr array */ 7905b504601Sjiang wu - Sun Microsystems - Beijing China uint_t m_intr_pri; /* Interrupt priority */ 7915b504601Sjiang wu - Sun Microsystems - Beijing China int m_intr_cap; /* Interrupt capabilities */ 7925b504601Sjiang wu - Sun Microsystems - Beijing China ddi_taskq_t *m_event_taskq; 7935b504601Sjiang wu - Sun Microsystems - Beijing China 7945b504601Sjiang wu - Sun Microsystems - Beijing China /* SAS specific information */ 7955b504601Sjiang wu - Sun Microsystems - Beijing China 7965b504601Sjiang wu - Sun Microsystems - Beijing China union { 7975b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t m_base_wwid; /* Base WWID */ 7985b504601Sjiang wu - Sun Microsystems - Beijing China struct { 7995b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef _BIG_ENDIAN 8005b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_base_wwid_hi; 8015b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_base_wwid_lo; 8025b504601Sjiang wu - Sun Microsystems - Beijing China #else 8035b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_base_wwid_lo; 8045b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_base_wwid_hi; 8055b504601Sjiang wu - Sun Microsystems - Beijing China #endif 8065b504601Sjiang wu - Sun Microsystems - Beijing China } sasaddr; 8075b504601Sjiang wu - Sun Microsystems - Beijing China } un; 8085b504601Sjiang wu - Sun Microsystems - Beijing China 8095b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_num_phys; /* # of PHYs */ 8105b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_phy_info_t m_phy_info[MPTSAS_MAX_PHYS]; 8115b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_port_chng; /* initiator port changes */ 8125b504601Sjiang wu - Sun Microsystems - Beijing China 8135b504601Sjiang wu - Sun Microsystems - Beijing China /* FMA Capabilities */ 8145b504601Sjiang wu - Sun Microsystems - Beijing China int m_fm_capabilities; 8155b504601Sjiang wu - Sun Microsystems - Beijing China ddi_taskq_t *m_dr_taskq; 8165b504601Sjiang wu - Sun Microsystems - Beijing China int m_mpxio_enable; 8175b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_done_traverse_dev; 8185b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t m_done_traverse_smp; 8195b504601Sjiang wu - Sun Microsystems - Beijing China int m_passthru_in_progress; 820*76a4caf6SAda int m_diag_action_in_progress; 8215b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_dev_handle; 8225b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t m_smp_devhdl; 8235b504601Sjiang wu - Sun Microsystems - Beijing China 8245b504601Sjiang wu - Sun Microsystems - Beijing China /* 8255b504601Sjiang wu - Sun Microsystems - Beijing China * Event recording 8265b504601Sjiang wu - Sun Microsystems - Beijing China */ 82708eb0b82SYong-Feng Du uint8_t m_event_index; 8285b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_event_number; 8295b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t m_event_mask[4]; 8305b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_event_entry_t m_events[MPTSAS_EVENT_QUEUE_SIZE]; 8315b504601Sjiang wu - Sun Microsystems - Beijing China 8325b504601Sjiang wu - Sun Microsystems - Beijing China /* 833*76a4caf6SAda * FW diag Buffer List 834*76a4caf6SAda */ 835*76a4caf6SAda mptsas_fw_diagnostic_buffer_t 836*76a4caf6SAda m_fw_diag_buffer_list[MPI2_DIAG_BUF_TYPE_COUNT]; 837*76a4caf6SAda 838*76a4caf6SAda /* 839*76a4caf6SAda * Event Replay flag (MUR support) 840*76a4caf6SAda */ 841*76a4caf6SAda uint8_t m_event_replay; 842*76a4caf6SAda 843*76a4caf6SAda /* 844*76a4caf6SAda * IR Capable flag 845*76a4caf6SAda */ 846*76a4caf6SAda uint8_t m_ir_capable; 847*76a4caf6SAda 848*76a4caf6SAda /* 8495b504601Sjiang wu - Sun Microsystems - Beijing China * per instance cmd data structures for task management cmds 8505b504601Sjiang wu - Sun Microsystems - Beijing China */ 8515b504601Sjiang wu - Sun Microsystems - Beijing China m_event_struct_t m_event_task_mgmt; /* must be last */ 8525b504601Sjiang wu - Sun Microsystems - Beijing China /* ... scsi_pkt_size */ 8535b504601Sjiang wu - Sun Microsystems - Beijing China } mptsas_t; 8545b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SIZE (sizeof (struct mptsas) - \ 8555b504601Sjiang wu - Sun Microsystems - Beijing China sizeof (struct scsi_pkt) + scsi_pkt_size()) 8565b504601Sjiang wu - Sun Microsystems - Beijing China /* 8575b504601Sjiang wu - Sun Microsystems - Beijing China * Only one of below two conditions is satisfied, we 8585b504601Sjiang wu - Sun Microsystems - Beijing China * think the target is associated to the iport and 8595b504601Sjiang wu - Sun Microsystems - Beijing China * allow call into mptsas_probe_lun(). 8605b504601Sjiang wu - Sun Microsystems - Beijing China * 1. physicalsport == physport 8615b504601Sjiang wu - Sun Microsystems - Beijing China * 2. (phymask & (1 << physport)) == 0 8625b504601Sjiang wu - Sun Microsystems - Beijing China * The condition #2 is because LSI uses lowest PHY 8635b504601Sjiang wu - Sun Microsystems - Beijing China * number as the value of physical port when auto port 8645b504601Sjiang wu - Sun Microsystems - Beijing China * configuration. 8655b504601Sjiang wu - Sun Microsystems - Beijing China */ 8665b504601Sjiang wu - Sun Microsystems - Beijing China #define IS_SAME_PORT(physicalport, physport, phymask, dynamicport) \ 8675b504601Sjiang wu - Sun Microsystems - Beijing China ((physicalport == physport) || (dynamicport && (phymask & \ 8685b504601Sjiang wu - Sun Microsystems - Beijing China (1 << physport)))) 8695b504601Sjiang wu - Sun Microsystems - Beijing China 8705b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(mptsas::m_mutex, mptsas)) 8715b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("safe sharing", mptsas::m_next)) 8725b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("stable data", mptsas::m_dip mptsas::m_tran)) 8735b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(SCHEME_PROTECTS_DATA("stable data", mptsas::m_kmem_cache)) 8745b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_io_dma_attr.dma_attr_sgllen)) 8755b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_devid)) 8765b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_productid)) 8775b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_port_type)) 8785b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_mpxio_enable)) 8795b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_ntargets)) 8805b504601Sjiang wu - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(mptsas::m_instance)) 8815b504601Sjiang wu - Sun Microsystems - Beijing China 8825b504601Sjiang wu - Sun Microsystems - Beijing China /* 8835b504601Sjiang wu - Sun Microsystems - Beijing China * These should eventually migrate into the mpt header files 8845b504601Sjiang wu - Sun Microsystems - Beijing China * that may become the /kernel/misc/mpt module... 8855b504601Sjiang wu - Sun Microsystems - Beijing China */ 8865b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_init_std_hdr(hdl, mp, DevHandle, Lun, ChainOffset, Function) \ 8875b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_put_msg_DevHandle(hdl, mp, DevHandle); \ 8885b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_put_msg_ChainOffset(hdl, mp, ChainOffset); \ 8895b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_put_msg_Function(hdl, mp, Function); \ 8905b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_put_msg_Lun(hdl, mp, Lun) 8915b504601Sjiang wu - Sun Microsystems - Beijing China 8925b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_put_msg_DevHandle(hdl, mp, val) \ 8935b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put16(hdl, &(mp)->DevHandle, (val)) 8945b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_put_msg_ChainOffset(hdl, mp, val) \ 8955b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put8(hdl, &(mp)->ChainOffset, (val)) 8965b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_put_msg_Function(hdl, mp, val) \ 8975b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put8(hdl, &(mp)->Function, (val)) 8985b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_put_msg_Lun(hdl, mp, val) \ 8995b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put8(hdl, &(mp)->LUN[1], (val)) 9005b504601Sjiang wu - Sun Microsystems - Beijing China 9015b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_get_msg_Function(hdl, mp) \ 9025b504601Sjiang wu - Sun Microsystems - Beijing China ddi_get8(hdl, &(mp)->Function) 9035b504601Sjiang wu - Sun Microsystems - Beijing China 9045b504601Sjiang wu - Sun Microsystems - Beijing China #define mptsas_get_msg_MsgFlags(hdl, mp) \ 9055b504601Sjiang wu - Sun Microsystems - Beijing China ddi_get8(hdl, &(mp)->MsgFlags) 9065b504601Sjiang wu - Sun Microsystems - Beijing China 9075b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_ENABLE_DRWE(hdl) \ 9085b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9095b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_FLUSH_KEY_VALUE); \ 9105b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9115b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_1ST_KEY_VALUE); \ 9125b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9135b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_2ND_KEY_VALUE); \ 9145b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9155b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_3RD_KEY_VALUE); \ 9165b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9175b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_4TH_KEY_VALUE); \ 9185b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9195b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_5TH_KEY_VALUE); \ 9205b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl->m_datap, &hdl->m_reg->WriteSequence, \ 9215b504601Sjiang wu - Sun Microsystems - Beijing China MPI2_WRSEQ_6TH_KEY_VALUE); 9225b504601Sjiang wu - Sun Microsystems - Beijing China 9235b504601Sjiang wu - Sun Microsystems - Beijing China /* 9245b504601Sjiang wu - Sun Microsystems - Beijing China * m_options flags 9255b504601Sjiang wu - Sun Microsystems - Beijing China */ 9265b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_OPT_PM 0x01 /* Power Management */ 9275b504601Sjiang wu - Sun Microsystems - Beijing China 9285b504601Sjiang wu - Sun Microsystems - Beijing China /* 9295b504601Sjiang wu - Sun Microsystems - Beijing China * m_softstate flags 9305b504601Sjiang wu - Sun Microsystems - Beijing China */ 9315b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SS_DRAINING 0x02 9325b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SS_QUIESCED 0x04 9335b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SS_MSG_UNIT_RESET 0x08 9345b504601Sjiang wu - Sun Microsystems - Beijing China 9355b504601Sjiang wu - Sun Microsystems - Beijing China /* 9365b504601Sjiang wu - Sun Microsystems - Beijing China * regspec defines. 9375b504601Sjiang wu - Sun Microsystems - Beijing China */ 9385b504601Sjiang wu - Sun Microsystems - Beijing China #define CONFIG_SPACE 0 /* regset[0] - configuration space */ 9395b504601Sjiang wu - Sun Microsystems - Beijing China #define IO_SPACE 1 /* regset[1] - used for i/o mapped device */ 9405b504601Sjiang wu - Sun Microsystems - Beijing China #define MEM_SPACE 2 /* regset[2] - used for memory mapped device */ 9415b504601Sjiang wu - Sun Microsystems - Beijing China #define BASE_REG2 3 /* regset[3] - used for 875 scripts ram */ 9425b504601Sjiang wu - Sun Microsystems - Beijing China 9435b504601Sjiang wu - Sun Microsystems - Beijing China /* 9445b504601Sjiang wu - Sun Microsystems - Beijing China * Handy constants 9455b504601Sjiang wu - Sun Microsystems - Beijing China */ 9465b504601Sjiang wu - Sun Microsystems - Beijing China #define FALSE 0 9475b504601Sjiang wu - Sun Microsystems - Beijing China #define TRUE 1 9485b504601Sjiang wu - Sun Microsystems - Beijing China #define UNDEFINED -1 9495b504601Sjiang wu - Sun Microsystems - Beijing China #define FAILED -2 9505b504601Sjiang wu - Sun Microsystems - Beijing China 9515b504601Sjiang wu - Sun Microsystems - Beijing China /* 9525b504601Sjiang wu - Sun Microsystems - Beijing China * power management. 9535b504601Sjiang wu - Sun Microsystems - Beijing China */ 9545b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_POWER_ON(mpt) { \ 9555b504601Sjiang wu - Sun Microsystems - Beijing China pci_config_put16(mpt->m_config_handle, mpt->m_pmcsr_offset, \ 9565b504601Sjiang wu - Sun Microsystems - Beijing China PCI_PMCSR_D0); \ 9575b504601Sjiang wu - Sun Microsystems - Beijing China delay(drv_usectohz(10000)); \ 9585b504601Sjiang wu - Sun Microsystems - Beijing China (void) pci_restore_config_regs(mpt->m_dip); \ 9595b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_setup_cmd_reg(mpt); \ 9605b504601Sjiang wu - Sun Microsystems - Beijing China } 9615b504601Sjiang wu - Sun Microsystems - Beijing China 9625b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_POWER_OFF(mpt) { \ 9635b504601Sjiang wu - Sun Microsystems - Beijing China (void) pci_save_config_regs(mpt->m_dip); \ 9645b504601Sjiang wu - Sun Microsystems - Beijing China pci_config_put16(mpt->m_config_handle, mpt->m_pmcsr_offset, \ 9655b504601Sjiang wu - Sun Microsystems - Beijing China PCI_PMCSR_D3HOT); \ 9665b504601Sjiang wu - Sun Microsystems - Beijing China mpt->m_power_level = PM_LEVEL_D3; \ 9675b504601Sjiang wu - Sun Microsystems - Beijing China } 9685b504601Sjiang wu - Sun Microsystems - Beijing China 9695b504601Sjiang wu - Sun Microsystems - Beijing China /* 9705b504601Sjiang wu - Sun Microsystems - Beijing China * inq_dtype: 9715b504601Sjiang wu - Sun Microsystems - Beijing China * Bits 5 through 7 are the Peripheral Device Qualifier 9725b504601Sjiang wu - Sun Microsystems - Beijing China * 001b: device not connected to the LUN 9735b504601Sjiang wu - Sun Microsystems - Beijing China * Bits 0 through 4 are the Peripheral Device Type 9745b504601Sjiang wu - Sun Microsystems - Beijing China * 1fh: Unknown or no device type 9755b504601Sjiang wu - Sun Microsystems - Beijing China * 9765b504601Sjiang wu - Sun Microsystems - Beijing China * Although the inquiry may return success, the following value 9775b504601Sjiang wu - Sun Microsystems - Beijing China * means no valid LUN connected. 9785b504601Sjiang wu - Sun Microsystems - Beijing China */ 9795b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_VALID_LUN(sd_inq) \ 9805b504601Sjiang wu - Sun Microsystems - Beijing China (((sd_inq->inq_dtype & 0xe0) != 0x20) && \ 9815b504601Sjiang wu - Sun Microsystems - Beijing China ((sd_inq->inq_dtype & 0x1f) != 0x1f)) 9825b504601Sjiang wu - Sun Microsystems - Beijing China 9835b504601Sjiang wu - Sun Microsystems - Beijing China /* 9845b504601Sjiang wu - Sun Microsystems - Beijing China * Default is to have 10 retries on receiving QFULL status and 9855b504601Sjiang wu - Sun Microsystems - Beijing China * each retry to be after 100 ms. 9865b504601Sjiang wu - Sun Microsystems - Beijing China */ 9875b504601Sjiang wu - Sun Microsystems - Beijing China #define QFULL_RETRIES 10 9885b504601Sjiang wu - Sun Microsystems - Beijing China #define QFULL_RETRY_INTERVAL 100 9895b504601Sjiang wu - Sun Microsystems - Beijing China 9905b504601Sjiang wu - Sun Microsystems - Beijing China /* 9915b504601Sjiang wu - Sun Microsystems - Beijing China * Handy macros 9925b504601Sjiang wu - Sun Microsystems - Beijing China */ 9935b504601Sjiang wu - Sun Microsystems - Beijing China #define Tgt(sp) ((sp)->cmd_pkt->pkt_address.a_target) 9945b504601Sjiang wu - Sun Microsystems - Beijing China #define Lun(sp) ((sp)->cmd_pkt->pkt_address.a_lun) 9955b504601Sjiang wu - Sun Microsystems - Beijing China 9965b504601Sjiang wu - Sun Microsystems - Beijing China #define IS_HEX_DIGIT(n) (((n) >= '0' && (n) <= '9') || \ 9975b504601Sjiang wu - Sun Microsystems - Beijing China ((n) >= 'a' && (n) <= 'f') || ((n) >= 'A' && (n) <= 'F')) 9985b504601Sjiang wu - Sun Microsystems - Beijing China 9995b504601Sjiang wu - Sun Microsystems - Beijing China /* 10005b504601Sjiang wu - Sun Microsystems - Beijing China * poll time for mptsas_pollret() and mptsas_wait_intr() 10015b504601Sjiang wu - Sun Microsystems - Beijing China */ 10025b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_POLL_TIME 30000 /* 30 seconds */ 10035b504601Sjiang wu - Sun Microsystems - Beijing China 10045b504601Sjiang wu - Sun Microsystems - Beijing China /* 10055b504601Sjiang wu - Sun Microsystems - Beijing China * default time for mptsas_do_passthru 10065b504601Sjiang wu - Sun Microsystems - Beijing China */ 10075b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_PASS_THRU_TIME_DEFAULT 60 /* 60 seconds */ 10085b504601Sjiang wu - Sun Microsystems - Beijing China 10095b504601Sjiang wu - Sun Microsystems - Beijing China /* 10105b504601Sjiang wu - Sun Microsystems - Beijing China * macro to return the effective address of a given per-target field 10115b504601Sjiang wu - Sun Microsystems - Beijing China */ 10125b504601Sjiang wu - Sun Microsystems - Beijing China #define EFF_ADDR(start, offset) ((start) + (offset)) 10135b504601Sjiang wu - Sun Microsystems - Beijing China 10145b504601Sjiang wu - Sun Microsystems - Beijing China #define SDEV2ADDR(devp) (&((devp)->sd_address)) 10155b504601Sjiang wu - Sun Microsystems - Beijing China #define SDEV2TRAN(devp) ((devp)->sd_address.a_hba_tran) 10165b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT2TRAN(pkt) ((pkt)->pkt_address.a_hba_tran) 10175b504601Sjiang wu - Sun Microsystems - Beijing China #define ADDR2TRAN(ap) ((ap)->a_hba_tran) 10185b504601Sjiang wu - Sun Microsystems - Beijing China #define DIP2TRAN(dip) (ddi_get_driver_private(dip)) 10195b504601Sjiang wu - Sun Microsystems - Beijing China 10205b504601Sjiang wu - Sun Microsystems - Beijing China 10215b504601Sjiang wu - Sun Microsystems - Beijing China #define TRAN2MPT(hba) ((mptsas_t *)(hba)->tran_hba_private) 10225b504601Sjiang wu - Sun Microsystems - Beijing China #define DIP2MPT(dip) (TRAN2MPT((scsi_hba_tran_t *)DIP2TRAN(dip))) 10235b504601Sjiang wu - Sun Microsystems - Beijing China #define SDEV2MPT(sd) (TRAN2MPT(SDEV2TRAN(sd))) 10245b504601Sjiang wu - Sun Microsystems - Beijing China #define PKT2MPT(pkt) (TRAN2MPT(PKT2TRAN(pkt))) 10255b504601Sjiang wu - Sun Microsystems - Beijing China 10265b504601Sjiang wu - Sun Microsystems - Beijing China #define ADDR2MPT(ap) (TRAN2MPT(ADDR2TRAN(ap))) 10275b504601Sjiang wu - Sun Microsystems - Beijing China 10285b504601Sjiang wu - Sun Microsystems - Beijing China #define POLL_TIMEOUT (2 * SCSI_POLL_TIMEOUT * 1000000) 10295b504601Sjiang wu - Sun Microsystems - Beijing China #define SHORT_POLL_TIMEOUT (1000000) /* in usec, about 1 secs */ 10305b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_QUIESCE_TIMEOUT 1 /* 1 sec */ 10315b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_PM_IDLE_TIMEOUT 60 /* 60 seconds */ 10325b504601Sjiang wu - Sun Microsystems - Beijing China 10335b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_ISTAT(mpt) (ddi_get32((mpt)->m_datap, \ 10345b504601Sjiang wu - Sun Microsystems - Beijing China &(mpt)->m_reg->HostInterruptStatus)) 10355b504601Sjiang wu - Sun Microsystems - Beijing China 10365b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SET_SIGP(P) \ 10375b504601Sjiang wu - Sun Microsystems - Beijing China ClrSetBits(mpt->m_devaddr + NREG_ISTAT, 0, NB_ISTAT_SIGP) 10385b504601Sjiang wu - Sun Microsystems - Beijing China 10395b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_RESET_SIGP(P) (void) ddi_get8(mpt->m_datap, \ 10405b504601Sjiang wu - Sun Microsystems - Beijing China (uint8_t *)(mpt->m_devaddr + NREG_CTEST2)) 10415b504601Sjiang wu - Sun Microsystems - Beijing China 10425b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_INTCODE(P) (ddi_get32(mpt->m_datap, \ 10435b504601Sjiang wu - Sun Microsystems - Beijing China (uint32_t *)(mpt->m_devaddr + NREG_DSPS))) 10445b504601Sjiang wu - Sun Microsystems - Beijing China 10455b504601Sjiang wu - Sun Microsystems - Beijing China 10465b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_START_CMD(mpt, req_desc_lo, req_desc_hi) \ 10475b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(mpt->m_datap, &mpt->m_reg->RequestDescriptorPostLow,\ 10485b504601Sjiang wu - Sun Microsystems - Beijing China req_desc_lo);\ 10495b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(mpt->m_datap, &mpt->m_reg->RequestDescriptorPostHigh,\ 10505b504601Sjiang wu - Sun Microsystems - Beijing China req_desc_hi); 10515b504601Sjiang wu - Sun Microsystems - Beijing China 10525b504601Sjiang wu - Sun Microsystems - Beijing China #define INTPENDING(mpt) \ 10535b504601Sjiang wu - Sun Microsystems - Beijing China (MPTSAS_GET_ISTAT(mpt) & MPI2_HIS_REPLY_DESCRIPTOR_INTERRUPT) 10545b504601Sjiang wu - Sun Microsystems - Beijing China 10555b504601Sjiang wu - Sun Microsystems - Beijing China /* 10565b504601Sjiang wu - Sun Microsystems - Beijing China * Mask all interrupts to disable 10575b504601Sjiang wu - Sun Microsystems - Beijing China */ 10585b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DISABLE_INTR(mpt) \ 10595b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32((mpt)->m_datap, &(mpt)->m_reg->HostInterruptMask, \ 10605b504601Sjiang wu - Sun Microsystems - Beijing China (MPI2_HIM_RIM | MPI2_HIM_DIM | MPI2_HIM_RESET_IRQ_MASK)) 10615b504601Sjiang wu - Sun Microsystems - Beijing China 10625b504601Sjiang wu - Sun Microsystems - Beijing China /* 10635b504601Sjiang wu - Sun Microsystems - Beijing China * Mask Doorbell and Reset interrupts to enable reply desc int. 10645b504601Sjiang wu - Sun Microsystems - Beijing China */ 10655b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_ENABLE_INTR(mpt) \ 10665b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(mpt->m_datap, &mpt->m_reg->HostInterruptMask, \ 10675b504601Sjiang wu - Sun Microsystems - Beijing China (MPI2_HIM_DIM | MPI2_HIM_RESET_IRQ_MASK)) 10685b504601Sjiang wu - Sun Microsystems - Beijing China 10695b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_NEXT_REPLY(mpt, index) \ 10705b504601Sjiang wu - Sun Microsystems - Beijing China &((uint64_t *)(void *)mpt->m_post_queue)[index] 10715b504601Sjiang wu - Sun Microsystems - Beijing China 10725b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_NEXT_FRAME(mpt, SMID) \ 10735b504601Sjiang wu - Sun Microsystems - Beijing China (mpt->m_req_frame + (mpt->m_req_frame_size * SMID)) 10745b504601Sjiang wu - Sun Microsystems - Beijing China 10755b504601Sjiang wu - Sun Microsystems - Beijing China #define ClrSetBits32(hdl, reg, clr, set) \ 10765b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put32(hdl, (reg), \ 10775b504601Sjiang wu - Sun Microsystems - Beijing China ((ddi_get32(mpt->m_datap, (reg)) & ~(clr)) | (set))) 10785b504601Sjiang wu - Sun Microsystems - Beijing China 10795b504601Sjiang wu - Sun Microsystems - Beijing China #define ClrSetBits(reg, clr, set) \ 10805b504601Sjiang wu - Sun Microsystems - Beijing China ddi_put8(mpt->m_datap, (uint8_t *)(reg), \ 10815b504601Sjiang wu - Sun Microsystems - Beijing China ((ddi_get8(mpt->m_datap, (uint8_t *)(reg)) & ~(clr)) | (set))) 10825b504601Sjiang wu - Sun Microsystems - Beijing China 10835b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_WAITQ_RM(mpt, cmdp) \ 10845b504601Sjiang wu - Sun Microsystems - Beijing China if ((cmdp = mpt->m_waitq) != NULL) { \ 10855b504601Sjiang wu - Sun Microsystems - Beijing China /* If the queue is now empty fix the tail pointer */ \ 10865b504601Sjiang wu - Sun Microsystems - Beijing China if ((mpt->m_waitq = cmdp->cmd_linkp) == NULL) \ 10875b504601Sjiang wu - Sun Microsystems - Beijing China mpt->m_waitqtail = &mpt->m_waitq; \ 10885b504601Sjiang wu - Sun Microsystems - Beijing China cmdp->cmd_linkp = NULL; \ 10895b504601Sjiang wu - Sun Microsystems - Beijing China cmdp->cmd_queued = FALSE; \ 10905b504601Sjiang wu - Sun Microsystems - Beijing China } 10915b504601Sjiang wu - Sun Microsystems - Beijing China 10925b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_TX_WAITQ_RM(mpt, cmdp) \ 10935b504601Sjiang wu - Sun Microsystems - Beijing China if ((cmdp = mpt->m_tx_waitq) != NULL) { \ 10945b504601Sjiang wu - Sun Microsystems - Beijing China /* If the queue is now empty fix the tail pointer */ \ 10955b504601Sjiang wu - Sun Microsystems - Beijing China if ((mpt->m_tx_waitq = cmdp->cmd_linkp) == NULL) \ 10965b504601Sjiang wu - Sun Microsystems - Beijing China mpt->m_tx_waitqtail = &mpt->m_tx_waitq; \ 10975b504601Sjiang wu - Sun Microsystems - Beijing China cmdp->cmd_linkp = NULL; \ 10985b504601Sjiang wu - Sun Microsystems - Beijing China cmdp->cmd_queued = FALSE; \ 10995b504601Sjiang wu - Sun Microsystems - Beijing China } 11005b504601Sjiang wu - Sun Microsystems - Beijing China 11015b504601Sjiang wu - Sun Microsystems - Beijing China /* 11025b504601Sjiang wu - Sun Microsystems - Beijing China * defaults for the global properties 11035b504601Sjiang wu - Sun Microsystems - Beijing China */ 11045b504601Sjiang wu - Sun Microsystems - Beijing China #define DEFAULT_SCSI_OPTIONS SCSI_OPTIONS_DR 11055b504601Sjiang wu - Sun Microsystems - Beijing China #define DEFAULT_TAG_AGE_LIMIT 2 11065b504601Sjiang wu - Sun Microsystems - Beijing China #define DEFAULT_WD_TICK 10 11075b504601Sjiang wu - Sun Microsystems - Beijing China 11085b504601Sjiang wu - Sun Microsystems - Beijing China /* 11095b504601Sjiang wu - Sun Microsystems - Beijing China * invalid hostid. 11105b504601Sjiang wu - Sun Microsystems - Beijing China */ 11115b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_INVALID_HOSTID -1 11125b504601Sjiang wu - Sun Microsystems - Beijing China 11135b504601Sjiang wu - Sun Microsystems - Beijing China /* 11145b504601Sjiang wu - Sun Microsystems - Beijing China * Get/Set hostid from SCSI port configuration page 11155b504601Sjiang wu - Sun Microsystems - Beijing China */ 11165b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_GET_HOST_ID(configuration) (configuration & 0xFF) 11175b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SET_HOST_ID(hostid) (hostid | ((1 << hostid) << 16)) 11185b504601Sjiang wu - Sun Microsystems - Beijing China 11195b504601Sjiang wu - Sun Microsystems - Beijing China /* 11205b504601Sjiang wu - Sun Microsystems - Beijing China * Config space. 11215b504601Sjiang wu - Sun Microsystems - Beijing China */ 11225b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_LATENCY_TIMER 0x40 11235b504601Sjiang wu - Sun Microsystems - Beijing China 11245b504601Sjiang wu - Sun Microsystems - Beijing China /* 11255b504601Sjiang wu - Sun Microsystems - Beijing China * Offset to firmware version 11265b504601Sjiang wu - Sun Microsystems - Beijing China */ 11275b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_FW_VERSION_OFFSET 9 11285b504601Sjiang wu - Sun Microsystems - Beijing China 11295b504601Sjiang wu - Sun Microsystems - Beijing China /* 11305b504601Sjiang wu - Sun Microsystems - Beijing China * Offset and masks to get at the ProductId field 11315b504601Sjiang wu - Sun Microsystems - Beijing China */ 11325b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_FW_PRODUCTID_OFFSET 8 11335b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_FW_PRODUCTID_MASK 0xFFFF0000 11345b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_FW_PRODUCTID_SHIFT 16 11355b504601Sjiang wu - Sun Microsystems - Beijing China 11365b504601Sjiang wu - Sun Microsystems - Beijing China /* 11375b504601Sjiang wu - Sun Microsystems - Beijing China * Subsystem ID for HBAs. 11385b504601Sjiang wu - Sun Microsystems - Beijing China */ 11395b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_HBA_SUBSYSTEM_ID 0x10C0 11405b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_RHEA_SUBSYSTEM_ID 0x10B0 11415b504601Sjiang wu - Sun Microsystems - Beijing China 11425b504601Sjiang wu - Sun Microsystems - Beijing China /* 11435b504601Sjiang wu - Sun Microsystems - Beijing China * reset delay tick 11445b504601Sjiang wu - Sun Microsystems - Beijing China */ 11455b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_WATCH_RESET_DELAY_TICK 50 /* specified in milli seconds */ 11465b504601Sjiang wu - Sun Microsystems - Beijing China 11475b504601Sjiang wu - Sun Microsystems - Beijing China /* 11485b504601Sjiang wu - Sun Microsystems - Beijing China * Ioc reset return values 11495b504601Sjiang wu - Sun Microsystems - Beijing China */ 11505b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_RESET_FAIL -1 11515b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_NO_RESET 0 11525b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_SUCCESS_HARDRESET 1 11535b504601Sjiang wu - Sun Microsystems - Beijing China 11545b504601Sjiang wu - Sun Microsystems - Beijing China /* 11555b504601Sjiang wu - Sun Microsystems - Beijing China * throttle support. 11565b504601Sjiang wu - Sun Microsystems - Beijing China */ 11575b504601Sjiang wu - Sun Microsystems - Beijing China #define MAX_THROTTLE 32 11585b504601Sjiang wu - Sun Microsystems - Beijing China #define HOLD_THROTTLE 0 11595b504601Sjiang wu - Sun Microsystems - Beijing China #define DRAIN_THROTTLE -1 11605b504601Sjiang wu - Sun Microsystems - Beijing China #define QFULL_THROTTLE -2 11615b504601Sjiang wu - Sun Microsystems - Beijing China 11625b504601Sjiang wu - Sun Microsystems - Beijing China /* 11635b504601Sjiang wu - Sun Microsystems - Beijing China * Passthrough/config request flags 11645b504601Sjiang wu - Sun Microsystems - Beijing China */ 11655b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DATA_ALLOCATED 0x0001 11665b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DATAOUT_ALLOCATED 0x0002 11675b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_REQUEST_POOL_CMD 0x0004 11685b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_ADDRESS_REPLY 0x0008 11695b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_CMD_TIMEOUT 0x0010 11705b504601Sjiang wu - Sun Microsystems - Beijing China 11715b504601Sjiang wu - Sun Microsystems - Beijing China /* 1172af483cc8Sjianfei wang - Sun Microsystems - Beijing China * response code tlr flag 1173af483cc8Sjianfei wang - Sun Microsystems - Beijing China */ 1174af483cc8Sjianfei wang - Sun Microsystems - Beijing China #define MPTSAS_SCSI_RESPONSE_CODE_TLR_OFF 0x02 1175af483cc8Sjianfei wang - Sun Microsystems - Beijing China 1176af483cc8Sjianfei wang - Sun Microsystems - Beijing China /* 11775b504601Sjiang wu - Sun Microsystems - Beijing China * System Events 11785b504601Sjiang wu - Sun Microsystems - Beijing China */ 11795b504601Sjiang wu - Sun Microsystems - Beijing China #ifndef DDI_VENDOR_LSI 11805b504601Sjiang wu - Sun Microsystems - Beijing China #define DDI_VENDOR_LSI "LSI" 11815b504601Sjiang wu - Sun Microsystems - Beijing China #endif /* DDI_VENDOR_LSI */ 11825b504601Sjiang wu - Sun Microsystems - Beijing China 11835b504601Sjiang wu - Sun Microsystems - Beijing China /* 11845b504601Sjiang wu - Sun Microsystems - Beijing China * Shared functions 11855b504601Sjiang wu - Sun Microsystems - Beijing China */ 11865b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_save_cmd(struct mptsas *mpt, struct mptsas_cmd *cmd); 11875b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_remove_cmd(mptsas_t *mpt, mptsas_cmd_t *cmd); 11885b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_waitq_add(mptsas_t *mpt, mptsas_cmd_t *cmd); 11895b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_config_space_init(struct mptsas *mpt); 11905b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_init_chip(mptsas_t *mpt, int first_time); 11915b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_log(struct mptsas *mpt, int level, char *fmt, ...); 11925b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_poll(mptsas_t *mpt, mptsas_cmd_t *poll_cmd, int polltime); 11935b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_do_dma(mptsas_t *mpt, uint32_t size, int var, int (*callback)()); 11945b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_config_request_msg(mptsas_t *mpt, uint8_t action, 11955b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pagetype, uint32_t pageaddress, uint8_t pagenumber, 11965b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pageversion, uint8_t pagelength, uint32_t 11975b504601Sjiang wu - Sun Microsystems - Beijing China SGEflagslength, uint32_t SGEaddress32); 11985b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_extended_config_request_msg(mptsas_t *mpt, uint8_t action, 11995b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t extpagetype, uint32_t pageaddress, uint8_t pagenumber, 12005b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pageversion, uint16_t extpagelength, 12015b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t SGEflagslength, uint32_t SGEaddress32); 12025b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_update_flash(mptsas_t *mpt, caddr_t ptrbuffer, uint32_t size, 12035b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t type, int mode); 12045b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_flash(mptsas_t *mpt, caddr_t origfile, uint32_t size, 12055b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t type, int mode); 12065b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_download_firmware(); 12075b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_can_download_firmware(); 1208*76a4caf6SAda int mptsas_dma_alloc(mptsas_t *mpt, mptsas_dma_alloc_state_t *dma_statep); 1209*76a4caf6SAda void mptsas_dma_free(mptsas_dma_alloc_state_t *dma_statep); 12105b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t mptsas_physport_to_phymask(mptsas_t *mpt, uint8_t physport); 12115b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t mptsas_phymask_to_physport(mptsas_t *mpt, uint8_t phymask); 12125b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_fma_check(mptsas_t *mpt, mptsas_cmd_t *cmd); 12135b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_acc_handle(ddi_acc_handle_t handle); 12145b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_check_dma_handle(ddi_dma_handle_t handle); 12155b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_fm_ereport(mptsas_t *mpt, char *detail); 12165b504601Sjiang wu - Sun Microsystems - Beijing China 12175b504601Sjiang wu - Sun Microsystems - Beijing China /* 12185b504601Sjiang wu - Sun Microsystems - Beijing China * impl functions 12195b504601Sjiang wu - Sun Microsystems - Beijing China */ 12205b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_wait_for_response(mptsas_t *mpt); 12215b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_wait_for_doorbell(mptsas_t *mpt); 12225b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_reset(mptsas_t *mpt); 12235b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes, 12245b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp); 12255b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_handshake_msg(mptsas_t *mpt, caddr_t memp, int numbytes, 12265b504601Sjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp); 12275b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_config_request_msg(mptsas_t *mpt, uint8_t action, 12285b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pagetype, uint32_t pageaddress, uint8_t pagenumber, 12295b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pageversion, uint8_t pagelength, uint32_t SGEflagslength, 12305b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t SGEaddress32); 12315b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_extended_config_request_msg(mptsas_t *mpt, uint8_t action, 12325b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t extpagetype, uint32_t pageaddress, uint8_t pagenumber, 12335b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t pageversion, uint16_t extpagelength, 12345b504601Sjiang wu - Sun Microsystems - Beijing China uint32_t SGEflagslength, uint32_t SGEaddress32); 12355b504601Sjiang wu - Sun Microsystems - Beijing China 12365b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_request_from_pool(mptsas_t *mpt, mptsas_cmd_t **cmd, 12375b504601Sjiang wu - Sun Microsystems - Beijing China struct scsi_pkt **pkt); 12385b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_return_to_pool(mptsas_t *mpt, mptsas_cmd_t *cmd); 12395b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_destroy_ioc_event_cmd(mptsas_t *mpt); 12405b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_start_config_page_access(mptsas_t *mpt, mptsas_cmd_t *cmd); 12415b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_access_config_page(mptsas_t *mpt, uint8_t action, uint8_t page_type, 12425b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t page_number, uint32_t page_address, int (*callback) (mptsas_t *, 12435b504601Sjiang wu - Sun Microsystems - Beijing China caddr_t, ddi_acc_handle_t, uint16_t, uint32_t, va_list), ...); 12445b504601Sjiang wu - Sun Microsystems - Beijing China 12455b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_task_management(mptsas_t *mpt, int task_type, 12465b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t dev_handle, int lun); 12475b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_send_event_ack(mptsas_t *mpt, uint32_t event, uint32_t eventcntx); 12485b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_send_pending_event_ack(mptsas_t *mpt); 12495b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_set_throttle(struct mptsas *mpt, mptsas_target_t *ptgt, int what); 12505b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_restart_ioc(mptsas_t *mpt); 12515b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_update_driver_data(struct mptsas *mpt); 12525b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t mptsas_get_sata_guid(mptsas_t *mpt, mptsas_target_t *ptgt, int lun); 12535b504601Sjiang wu - Sun Microsystems - Beijing China 12545b504601Sjiang wu - Sun Microsystems - Beijing China /* 12555b504601Sjiang wu - Sun Microsystems - Beijing China * init functions 12565b504601Sjiang wu - Sun Microsystems - Beijing China */ 12575b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_get_facts(mptsas_t *mpt); 12585b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_get_port_facts(mptsas_t *mpt, int port); 12595b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_enable_port(mptsas_t *mpt); 12605b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_enable_event_notification(mptsas_t *mpt); 12615b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_ioc_init(mptsas_t *mpt); 12625b504601Sjiang wu - Sun Microsystems - Beijing China 12635b504601Sjiang wu - Sun Microsystems - Beijing China /* 12645b504601Sjiang wu - Sun Microsystems - Beijing China * configuration pages operation 12655b504601Sjiang wu - Sun Microsystems - Beijing China */ 12665b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_device_page0(mptsas_t *mpt, uint32_t page_address, 12675b504601Sjiang wu - Sun Microsystems - Beijing China uint16_t *dev_handle, uint64_t *sas_wwn, uint32_t *dev_info, 12685b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t *physport, uint8_t *phynum); 12695b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_io_unit_page(mptsas_t *mpt); 12705b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_io_unit_page_hndshk(mptsas_t *mpt); 12715b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_expander_page0(mptsas_t *mpt, uint32_t page_address, 12725b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_smp_t *info); 12735b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_set_initiator_mode(mptsas_t *mpt); 12745b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_set_ioc_params(mptsas_t *mpt); 12755b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_manufacture_page5(mptsas_t *mpt); 12765b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_sas_port_page0(mptsas_t *mpt, uint32_t page_address, 12775b504601Sjiang wu - Sun Microsystems - Beijing China uint64_t *sas_wwn, uint8_t *portwidth); 127808eb0b82SYong-Feng Du int mptsas_get_bios_page3(mptsas_t *mpt, uint32_t *bios_version); 12795b504601Sjiang wu - Sun Microsystems - Beijing China 12805b504601Sjiang wu - Sun Microsystems - Beijing China /* 12815b504601Sjiang wu - Sun Microsystems - Beijing China * RAID functions 12825b504601Sjiang wu - Sun Microsystems - Beijing China */ 12835b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_raid_settings(mptsas_t *mpt, mptsas_raidvol_t *raidvol); 12845b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_raid_info(mptsas_t *mpt); 12855b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_get_physdisk_settings(mptsas_t *mpt, mptsas_raidvol_t *raidvol, 12865b504601Sjiang wu - Sun Microsystems - Beijing China uint8_t physdisknum); 12875b504601Sjiang wu - Sun Microsystems - Beijing China int mptsas_delete_volume(mptsas_t *mpt, uint16_t volid); 1288*76a4caf6SAda void mptsas_raid_action_system_shutdown(mptsas_t *mpt); 12895b504601Sjiang wu - Sun Microsystems - Beijing China 12905b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_IOCSTATUS(status) (status & MPI2_IOCSTATUS_MASK) 12915b504601Sjiang wu - Sun Microsystems - Beijing China /* 12925b504601Sjiang wu - Sun Microsystems - Beijing China * debugging. 12935b504601Sjiang wu - Sun Microsystems - Beijing China */ 12945b504601Sjiang wu - Sun Microsystems - Beijing China #if defined(MPTSAS_DEBUG) 12955b504601Sjiang wu - Sun Microsystems - Beijing China 12965b504601Sjiang wu - Sun Microsystems - Beijing China void mptsas_printf(char *fmt, ...); 12975b504601Sjiang wu - Sun Microsystems - Beijing China 12985b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DBGPR(m, args) \ 12995b504601Sjiang wu - Sun Microsystems - Beijing China if (mptsas_debug_flags & (m)) \ 13005b504601Sjiang wu - Sun Microsystems - Beijing China mptsas_printf args 13015b504601Sjiang wu - Sun Microsystems - Beijing China #else /* ! defined(MPTSAS_DEBUG) */ 13025b504601Sjiang wu - Sun Microsystems - Beijing China #define MPTSAS_DBGPR(m, args) 13035b504601Sjiang wu - Sun Microsystems - Beijing China #endif /* defined(MPTSAS_DEBUG) */ 13045b504601Sjiang wu - Sun Microsystems - Beijing China 13055b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG0(args) MPTSAS_DBGPR(0x01, args) /* init */ 13065b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG1(args) MPTSAS_DBGPR(0x02, args) /* normal running */ 13075b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG2(args) MPTSAS_DBGPR(0x04, args) /* property handling */ 13085b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG3(args) MPTSAS_DBGPR(0x08, args) /* pkt handling */ 13095b504601Sjiang wu - Sun Microsystems - Beijing China 13105b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG4(args) MPTSAS_DBGPR(0x10, args) /* kmem alloc/free */ 13115b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG5(args) MPTSAS_DBGPR(0x20, args) /* polled cmds */ 13125b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG6(args) MPTSAS_DBGPR(0x40, args) /* interrupts */ 13135b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG7(args) MPTSAS_DBGPR(0x80, args) /* queue handling */ 13145b504601Sjiang wu - Sun Microsystems - Beijing China 13155b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG8(args) MPTSAS_DBGPR(0x0100, args) /* arq */ 13165b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG9(args) MPTSAS_DBGPR(0x0200, args) /* Tagged Q'ing */ 13175b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG10(args) MPTSAS_DBGPR(0x0400, args) /* halting chip */ 13185b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG11(args) MPTSAS_DBGPR(0x0800, args) /* power management */ 13195b504601Sjiang wu - Sun Microsystems - Beijing China 13205b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG12(args) MPTSAS_DBGPR(0x1000, args) /* enumeration */ 13215b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG13(args) MPTSAS_DBGPR(0x2000, args) /* configuration page */ 13225b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG14(args) MPTSAS_DBGPR(0x4000, args) 13235b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG15(args) MPTSAS_DBGPR(0x8000, args) 13245b504601Sjiang wu - Sun Microsystems - Beijing China 13255b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG16(args) MPTSAS_DBGPR(0x010000, args) 13265b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG17(args) MPTSAS_DBGPR(0x020000, args) /* scatter/gather */ 13275b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG18(args) MPTSAS_DBGPR(0x040000, args) 13285b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG19(args) MPTSAS_DBGPR(0x080000, args) /* handshaking */ 13295b504601Sjiang wu - Sun Microsystems - Beijing China 13305b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG20(args) MPTSAS_DBGPR(0x100000, args) /* events */ 13315b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG21(args) MPTSAS_DBGPR(0x200000, args) /* dma */ 13325b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG22(args) MPTSAS_DBGPR(0x400000, args) /* reset */ 13335b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG23(args) MPTSAS_DBGPR(0x800000, args) /* abort */ 13345b504601Sjiang wu - Sun Microsystems - Beijing China 13355b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG24(args) MPTSAS_DBGPR(0x1000000, args) /* capabilities */ 13365b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG25(args) MPTSAS_DBGPR(0x2000000, args) /* flushing */ 13375b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG26(args) MPTSAS_DBGPR(0x4000000, args) 13385b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG27(args) MPTSAS_DBGPR(0x8000000, args) 13395b504601Sjiang wu - Sun Microsystems - Beijing China 13405b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG28(args) MPTSAS_DBGPR(0x10000000, args) /* hotplug */ 13415b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG29(args) MPTSAS_DBGPR(0x20000000, args) /* timeouts */ 13425b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG30(args) MPTSAS_DBGPR(0x40000000, args) /* mptsas_watch */ 13435b504601Sjiang wu - Sun Microsystems - Beijing China #define NDBG31(args) MPTSAS_DBGPR(0x80000000, args) /* negotations */ 13445b504601Sjiang wu - Sun Microsystems - Beijing China 13455b504601Sjiang wu - Sun Microsystems - Beijing China /* 13465b504601Sjiang wu - Sun Microsystems - Beijing China * auto request sense 13475b504601Sjiang wu - Sun Microsystems - Beijing China */ 13485b504601Sjiang wu - Sun Microsystems - Beijing China #define RQ_MAKECOM_COMMON(pkt, flag, cmd) \ 13495b504601Sjiang wu - Sun Microsystems - Beijing China (pkt)->pkt_flags = (flag), \ 13505b504601Sjiang wu - Sun Microsystems - Beijing China ((union scsi_cdb *)(pkt)->pkt_cdbp)->scc_cmd = (cmd), \ 13515b504601Sjiang wu - Sun Microsystems - Beijing China ((union scsi_cdb *)(pkt)->pkt_cdbp)->scc_lun = \ 13525b504601Sjiang wu - Sun Microsystems - Beijing China (pkt)->pkt_address.a_lun 13535b504601Sjiang wu - Sun Microsystems - Beijing China 13545b504601Sjiang wu - Sun Microsystems - Beijing China #define RQ_MAKECOM_G0(pkt, flag, cmd, addr, cnt) \ 13555b504601Sjiang wu - Sun Microsystems - Beijing China RQ_MAKECOM_COMMON((pkt), (flag), (cmd)), \ 13565b504601Sjiang wu - Sun Microsystems - Beijing China FORMG0ADDR(((union scsi_cdb *)(pkt)->pkt_cdbp), (addr)), \ 13575b504601Sjiang wu - Sun Microsystems - Beijing China FORMG0COUNT(((union scsi_cdb *)(pkt)->pkt_cdbp), (cnt)) 13585b504601Sjiang wu - Sun Microsystems - Beijing China 13595b504601Sjiang wu - Sun Microsystems - Beijing China 13605b504601Sjiang wu - Sun Microsystems - Beijing China #ifdef __cplusplus 13615b504601Sjiang wu - Sun Microsystems - Beijing China } 13625b504601Sjiang wu - Sun Microsystems - Beijing China #endif 13635b504601Sjiang wu - Sun Microsystems - Beijing China 13645b504601Sjiang wu - Sun Microsystems - Beijing China #endif /* _SYS_SCSI_ADAPTERS_MPTVAR_H */ 1365