110696SDavid.Hollister@Sun.COM /* 210696SDavid.Hollister@Sun.COM * CDDL HEADER START 310696SDavid.Hollister@Sun.COM * 410696SDavid.Hollister@Sun.COM * The contents of this file are subject to the terms of the 510696SDavid.Hollister@Sun.COM * Common Development and Distribution License (the "License"). 610696SDavid.Hollister@Sun.COM * You may not use this file except in compliance with the License. 710696SDavid.Hollister@Sun.COM * 810696SDavid.Hollister@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910696SDavid.Hollister@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010696SDavid.Hollister@Sun.COM * See the License for the specific language governing permissions 1110696SDavid.Hollister@Sun.COM * and limitations under the License. 1210696SDavid.Hollister@Sun.COM * 1310696SDavid.Hollister@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410696SDavid.Hollister@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510696SDavid.Hollister@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610696SDavid.Hollister@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710696SDavid.Hollister@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810696SDavid.Hollister@Sun.COM * 1910696SDavid.Hollister@Sun.COM * CDDL HEADER END 2010696SDavid.Hollister@Sun.COM * 2110696SDavid.Hollister@Sun.COM * 22*11847SDavid.Hollister@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 2310696SDavid.Hollister@Sun.COM * Use is subject to license terms. 2410696SDavid.Hollister@Sun.COM */ 2510696SDavid.Hollister@Sun.COM /* 2610696SDavid.Hollister@Sun.COM * PMC 8x6G Message Passing Interface Definitions 2710696SDavid.Hollister@Sun.COM */ 2810696SDavid.Hollister@Sun.COM #ifndef _PMCS_MPI_H 2910696SDavid.Hollister@Sun.COM #define _PMCS_MPI_H 3010696SDavid.Hollister@Sun.COM #ifdef __cplusplus 3110696SDavid.Hollister@Sun.COM extern "C" { 3210696SDavid.Hollister@Sun.COM #endif 3310696SDavid.Hollister@Sun.COM 3410696SDavid.Hollister@Sun.COM #define PMCS_DWRD(x) (x << 2) 3510696SDavid.Hollister@Sun.COM 3610696SDavid.Hollister@Sun.COM /* 3710696SDavid.Hollister@Sun.COM * MPI Configuration Table Offsets 3810696SDavid.Hollister@Sun.COM */ 3910696SDavid.Hollister@Sun.COM #define PMCS_MPI_AS PMCS_DWRD(0) /* ASCII Signature */ 4010696SDavid.Hollister@Sun.COM #define PMCS_SIGNATURE 0x53434D50 4110696SDavid.Hollister@Sun.COM 4210696SDavid.Hollister@Sun.COM #define PMCS_MPI_IR PMCS_DWRD(1) /* Interface Revision */ 4310696SDavid.Hollister@Sun.COM #define PMCS_MPI_REVISION1 1 4410696SDavid.Hollister@Sun.COM 4510696SDavid.Hollister@Sun.COM #define PMCS_MPI_FW PMCS_DWRD(2) /* Firmware Version */ 4610696SDavid.Hollister@Sun.COM #define PMCS_FW_TYPE(hwp) (hwp->fw & 0xf) 4710696SDavid.Hollister@Sun.COM #define PMCS_FW_TYPE_RELEASED 0 4810696SDavid.Hollister@Sun.COM #define PMCS_FW_TYPE_DEVELOPMENT 1 4910696SDavid.Hollister@Sun.COM #define PMCS_FW_TYPE_ALPHA 2 5010696SDavid.Hollister@Sun.COM #define PMCS_FW_TYPE_BETA 3 5110696SDavid.Hollister@Sun.COM #define PMCS_FW_VARIANT(hwp) ((hwp->fw >> 4) & 0xf) 5210696SDavid.Hollister@Sun.COM #define PMCS_FW_MAJOR(hwp) ((hwp->fw >> 24) & 0xff) 5310696SDavid.Hollister@Sun.COM #define PMCS_FW_MINOR(hwp) ((hwp->fw >> 16) & 0xff) 5410696SDavid.Hollister@Sun.COM #define PMCS_FW_MICRO(hwp) ((hwp->fw >> 8) & 0xff) 5510696SDavid.Hollister@Sun.COM #define PMCS_FW_REV(hwp) ((hwp->fw >> 8) & 0xffffff) 5610696SDavid.Hollister@Sun.COM #define PMCS_FW_VERSION(maj, min, mic) ((maj << 16)|(min << 8)|mic) 5710696SDavid.Hollister@Sun.COM 5810696SDavid.Hollister@Sun.COM #define PMCS_MPI_MOIO PMCS_DWRD(3) /* Maximum # of outstandiong I/Os */ 5910696SDavid.Hollister@Sun.COM #define PMCS_MPI_INFO0 PMCS_DWRD(4) /* Maximum S/G Elem, Max Dev Handle */ 6010696SDavid.Hollister@Sun.COM #define PMCS_MSGL(x) (x & 0xffff) 6110696SDavid.Hollister@Sun.COM #define PMCS_MD(x) ((x >> 16) & 0xffff) 6210696SDavid.Hollister@Sun.COM 6310696SDavid.Hollister@Sun.COM #define PMCS_MPI_INFO1 PMCS_DWRD(5) /* Info #0 */ 6410696SDavid.Hollister@Sun.COM 6510696SDavid.Hollister@Sun.COM #define PMCS_MNIQ(x) (x & 0xff) /* Max # of Inbound Queues */ 6610696SDavid.Hollister@Sun.COM #define PMCS_MNOQ(x) ((x >> 8) & 0xff) /* Max # of Outbound Queues */ 6710696SDavid.Hollister@Sun.COM #define PMCS_HPIQ(x) ((x >> 16) & 0x1) /* High Pri Queue Supported */ 6810696SDavid.Hollister@Sun.COM #define PMCS_ICS(x) ((x >> 18) & 0x1) /* Interrupt Coalescing */ 6910696SDavid.Hollister@Sun.COM #define PMCS_NPHY(x) ((x >> 19) & 0x3f) /* Numbers of PHYs */ 7010696SDavid.Hollister@Sun.COM #define PMCS_SASREV(x) ((x >> 25) & 0x7) /* SAS Revision Specification */ 7110696SDavid.Hollister@Sun.COM 7210696SDavid.Hollister@Sun.COM #define PMCS_MPI_GSTO PMCS_DWRD(6) /* General Status Table Offset */ 7310696SDavid.Hollister@Sun.COM #define PMCS_MPI_IQCTO PMCS_DWRD(7) /* Inbound Queue Config Table Offset */ 7410696SDavid.Hollister@Sun.COM #define PMCS_MPI_OQCTO PMCS_DWRD(8) /* Outbound Queue Config Table Offset */ 7510696SDavid.Hollister@Sun.COM 7610696SDavid.Hollister@Sun.COM #define PMCS_MPI_INFO2 PMCS_DWRD(9) /* Info #1 */ 7710696SDavid.Hollister@Sun.COM 7810696SDavid.Hollister@Sun.COM #define IQ_NORMAL_PRI_DEPTH_SHIFT 0 7910696SDavid.Hollister@Sun.COM #define IQ_NORMAL_PRI_DEPTH_MASK 0xff 8010696SDavid.Hollister@Sun.COM #define IQ_HIPRI_PRI_DEPTH_SHIFT 8 8110696SDavid.Hollister@Sun.COM #define IQ_HIPRI_PRI_DEPTH_MASK 0xff00 8210696SDavid.Hollister@Sun.COM #define GENERAL_EVENT_OQ_SHIFT 16 8310696SDavid.Hollister@Sun.COM #define GENERAL_EVENT_OQ_MASK 0xff0000 8410696SDavid.Hollister@Sun.COM #define DEVICE_HANDLE_REMOVED_SHIFT 24 8510696SDavid.Hollister@Sun.COM #define DEVICE_HANDLE_REMOVED_MASK 0xff000000ul 8610696SDavid.Hollister@Sun.COM 8710696SDavid.Hollister@Sun.COM #define PMCS_MPI_EVQS PMCS_DWRD(0xA) /* SAS Event Queues */ 8810696SDavid.Hollister@Sun.COM #define PMCS_MPI_EVQSET(pwp, oq, phy) { \ 8910696SDavid.Hollister@Sun.COM uint32_t woff = phy / 4; \ 9010696SDavid.Hollister@Sun.COM uint32_t shf = (phy % 4) * 8; \ 9110696SDavid.Hollister@Sun.COM uint32_t tmp = pmcs_rd_mpi_tbl(pwp, PMCS_MPI_EVQS + (woff << 2)); \ 9210696SDavid.Hollister@Sun.COM tmp &= ~(0xff << shf); \ 9310696SDavid.Hollister@Sun.COM tmp |= ((oq & 0xff) << shf); \ 9410696SDavid.Hollister@Sun.COM pmcs_wr_mpi_tbl(pwp, PMCS_MPI_EVQS + (woff << 2), tmp); \ 9510696SDavid.Hollister@Sun.COM } 9610696SDavid.Hollister@Sun.COM 9710696SDavid.Hollister@Sun.COM #define PMCS_MPI_SNCQ PMCS_DWRD(0xC) /* Sata NCQ Notification Queues */ 9810696SDavid.Hollister@Sun.COM #define PMCS_MPI_NCQSET(pwp, oq, phy) { \ 9910696SDavid.Hollister@Sun.COM uint32_t woff = phy / 4; \ 10010696SDavid.Hollister@Sun.COM uint32_t shf = (phy % 4) * 8; \ 10110696SDavid.Hollister@Sun.COM uint32_t tmp = pmcs_rd_mpi_tbl(pwp, PMCS_MPI_SNCQ + (woff << 2)); \ 10210696SDavid.Hollister@Sun.COM tmp &= ~(0xff << shf); \ 10310696SDavid.Hollister@Sun.COM tmp |= ((oq & 0xff) << shf); \ 10410696SDavid.Hollister@Sun.COM pmcs_wr_mpi_tbl(pwp, PMCS_MPI_SNCQ + (woff << 2), tmp); \ 10510696SDavid.Hollister@Sun.COM } 10610696SDavid.Hollister@Sun.COM 10710696SDavid.Hollister@Sun.COM /* 10810696SDavid.Hollister@Sun.COM * I_T Nexus Target Event Notification Queue 10910696SDavid.Hollister@Sun.COM */ 11010696SDavid.Hollister@Sun.COM #define PMCS_MPI_IT_NTENQ PMCS_DWRD(0xE) 11110696SDavid.Hollister@Sun.COM 11210696SDavid.Hollister@Sun.COM /* 11310696SDavid.Hollister@Sun.COM * SSP Target Event Notification Queue 11410696SDavid.Hollister@Sun.COM */ 11510696SDavid.Hollister@Sun.COM #define PMCS_MPI_SSP_TENQ PMCS_DWRD(0x10) 11610696SDavid.Hollister@Sun.COM 11710696SDavid.Hollister@Sun.COM /* 118*11847SDavid.Hollister@Sun.COM * I/O Abort Delay 11910696SDavid.Hollister@Sun.COM */ 120*11847SDavid.Hollister@Sun.COM #define PMCS_MPI_IOABTDLY PMCS_DWRD(0x12) 121*11847SDavid.Hollister@Sun.COM 122*11847SDavid.Hollister@Sun.COM /* 123*11847SDavid.Hollister@Sun.COM * Customization Setting 124*11847SDavid.Hollister@Sun.COM */ 125*11847SDavid.Hollister@Sun.COM #define PMCS_MPI_CUSTSET PMCS_DWRD(0x13) 126*11847SDavid.Hollister@Sun.COM 127*11847SDavid.Hollister@Sun.COM #define PMCS_MPI_CUST_HW_RSC_BSY_ALT 0x1 /* Bit 0 */ 128*11847SDavid.Hollister@Sun.COM #define PMCS_MPI_CUST_ABORT_ITNL 0x2 /* Bit 1 */ 12910696SDavid.Hollister@Sun.COM 13010696SDavid.Hollister@Sun.COM /* 13110696SDavid.Hollister@Sun.COM * This specifies a log buffer in host memory for the MSGU. 13210696SDavid.Hollister@Sun.COM */ 13310696SDavid.Hollister@Sun.COM #define PMCS_MPI_MELBAH PMCS_DWRD(0x14) /* MSGU Log Buffer high 32 bits */ 13410696SDavid.Hollister@Sun.COM #define PMCS_MPI_MELBAL PMCS_DWRD(0x15) /* MSGU Log Buffer low 32 bits */ 13510696SDavid.Hollister@Sun.COM #define PMCS_MPI_MELBS PMCS_DWRD(0x16) /* size in bytes of MSGU log buffer */ 13610696SDavid.Hollister@Sun.COM #define PMCS_MPI_MELSEV PMCS_DWRD(0x17) /* Log Severity */ 13710696SDavid.Hollister@Sun.COM 13810696SDavid.Hollister@Sun.COM /* 13910696SDavid.Hollister@Sun.COM * This specifies a log buffer in host memory for the IOP. 14010696SDavid.Hollister@Sun.COM */ 14110696SDavid.Hollister@Sun.COM #define PMCS_MPI_IELBAH PMCS_DWRD(0x18) /* IOP Log Buffer high 32 bits */ 14210696SDavid.Hollister@Sun.COM #define PMCS_MPI_IELBAL PMCS_DWRD(0x19) /* IOP Log Buffer low 32 bits */ 14310696SDavid.Hollister@Sun.COM #define PMCS_MPI_IELBS PMCS_DWRD(0x1A) /* size in bytes of IOP log buffer */ 14410696SDavid.Hollister@Sun.COM #define PMCS_MPI_IELSEV PMCS_DWRD(0x1B) /* Log Severity */ 14510696SDavid.Hollister@Sun.COM 14610696SDavid.Hollister@Sun.COM /* 14710696SDavid.Hollister@Sun.COM * Fatal Error Handling 14810696SDavid.Hollister@Sun.COM */ 14910696SDavid.Hollister@Sun.COM #define PMCS_MPI_FERR PMCS_DWRD(0x1C) 15010696SDavid.Hollister@Sun.COM #define PMCS_FERRIE 0x1 /* Fatal Err Interrupt Enable */ 151*11847SDavid.Hollister@Sun.COM #define PMCS_PCAD64 0x2 /* PI/CI addresses are 64-bit */ 15210696SDavid.Hollister@Sun.COM #define PMCS_FERIV_MASK 0xff00 /* Fatal Err Interrupt Mask */ 15310696SDavid.Hollister@Sun.COM #define PMCS_FERIV_SHIFT 8 /* Fatal Err Interrupt Shift */ 15410696SDavid.Hollister@Sun.COM 15510696SDavid.Hollister@Sun.COM #define PMCS_MPI_IRAE 0x20000 /* Interrupt Reassertion Enable */ 15610696SDavid.Hollister@Sun.COM #define PMCS_MPI_IRAU 0x40000 /* Interrupt Reassertion Unit */ 15710696SDavid.Hollister@Sun.COM #define PMCS_MPI_IRAD_MASK 0xfff80000 /* Reassertion Delay Mask */ 15810696SDavid.Hollister@Sun.COM 15910696SDavid.Hollister@Sun.COM #define PMCS_FERDOMSGU PMCS_DWRD(0x1D) 16010696SDavid.Hollister@Sun.COM #define PMCS_FERDLMSGU PMCS_DWRD(0x1E) 16110696SDavid.Hollister@Sun.COM #define PMCS_FERDOIOP PMCS_DWRD(0x1F) 16210696SDavid.Hollister@Sun.COM #define PMCS_FERDLIOP PMCS_DWRD(0x20) 16310696SDavid.Hollister@Sun.COM 16410696SDavid.Hollister@Sun.COM /* 16510696SDavid.Hollister@Sun.COM * MPI GST Table Offsets 16610696SDavid.Hollister@Sun.COM */ 16710696SDavid.Hollister@Sun.COM 16810696SDavid.Hollister@Sun.COM #define PMCS_GST_BASE 0 16910696SDavid.Hollister@Sun.COM #define PMCS_GST_IQFRZ0 (PMCS_GST_BASE + PMCS_DWRD(1)) 17010696SDavid.Hollister@Sun.COM #define PMCS_GST_IQFRZ1 (PMCS_GST_BASE + PMCS_DWRD(2)) 17110696SDavid.Hollister@Sun.COM #define PMCS_GST_MSGU_TICK (PMCS_GST_BASE + PMCS_DWRD(3)) 17210696SDavid.Hollister@Sun.COM #define PMCS_GST_IOP_TICK (PMCS_GST_BASE + PMCS_DWRD(4)) 17310696SDavid.Hollister@Sun.COM #define PMCS_GST_PHY_INFO(x) (PMCS_GST_BASE + PMCS_DWRD(0x6) + PMCS_DWRD(x)) 17410696SDavid.Hollister@Sun.COM #define PMCS_GST_RERR_BASE (PMCS_GST_BASE + PMCS_DWRD(0x11)) 17510696SDavid.Hollister@Sun.COM #define PMCS_GST_RERR_INFO(x) (PMCS_GST_RERR_BASE + PMCS_DWRD(x)) 17610696SDavid.Hollister@Sun.COM 17710696SDavid.Hollister@Sun.COM #define PMCS_MPI_S(x) ((x) & 0x7) 17810696SDavid.Hollister@Sun.COM #define PMCS_QF(x) (((x) >> 3) & 0x1) 17910696SDavid.Hollister@Sun.COM #define PMCS_GSTLEN(x) (((x) >> 4) & 0x3fff) 18010696SDavid.Hollister@Sun.COM #define PMCS_HMI_ERR(x) (((x) >> 16) & 0xffff) 18110696SDavid.Hollister@Sun.COM 18210696SDavid.Hollister@Sun.COM #define PMCS_MPI_STATE_NIL 0 18310696SDavid.Hollister@Sun.COM #define PMCS_MPI_STATE_INIT 1 18410696SDavid.Hollister@Sun.COM #define PMCS_MPI_STATE_DEINIT 2 18510696SDavid.Hollister@Sun.COM #define PMCS_MPI_STATE_ERR 3 18610696SDavid.Hollister@Sun.COM 18710696SDavid.Hollister@Sun.COM /* 18810696SDavid.Hollister@Sun.COM * MPI Inbound Queue Configuration Table Offsets 18910696SDavid.Hollister@Sun.COM * 19010696SDavid.Hollister@Sun.COM * Each Inbound Queue configuration area consumes 8 DWORDS (32 bit words), 19110696SDavid.Hollister@Sun.COM * or 32 bytes. 19210696SDavid.Hollister@Sun.COM */ 19310696SDavid.Hollister@Sun.COM #define PMCS_IQC_PARMX(x) ((x) << 5) 19410696SDavid.Hollister@Sun.COM #define PMCS_IQBAHX(x) (((x) << 5) + 4) 19510696SDavid.Hollister@Sun.COM #define PMCS_IQBALX(x) (((x) << 5) + 8) 19610696SDavid.Hollister@Sun.COM #define PMCS_IQCIBAHX(x) (((x) << 5) + 12) 19710696SDavid.Hollister@Sun.COM #define PMCS_IQCIBALX(x) (((x) << 5) + 16) 19810696SDavid.Hollister@Sun.COM #define PMCS_IQPIBARX(x) (((x) << 5) + 20) 19910696SDavid.Hollister@Sun.COM #define PMCS_IQPIOFFX(x) (((x) << 5) + 24) 20010696SDavid.Hollister@Sun.COM #define PMCS_IQDX(x) ((x) & 0xffff) 20110696SDavid.Hollister@Sun.COM #define PMCS_IQESX(x) (((x) >> 16) & 0x3fff) 20210696SDavid.Hollister@Sun.COM #define PMCS_IQPX(x) (((x) >> 30) & 0x3) 20310696SDavid.Hollister@Sun.COM 20410696SDavid.Hollister@Sun.COM /* 20510696SDavid.Hollister@Sun.COM * MPI Outbound Queue Configuration Table Offsets 20610696SDavid.Hollister@Sun.COM * 20710696SDavid.Hollister@Sun.COM * Each Outbound Queue configuration area consumes 9 DWORDS (32 bit words), 20810696SDavid.Hollister@Sun.COM * or 36 bytes. 20910696SDavid.Hollister@Sun.COM */ 21010696SDavid.Hollister@Sun.COM #define PMCS_OQC_PARMX(x) (x * 36) 21110696SDavid.Hollister@Sun.COM #define PMCS_OQBAHX(x) ((x * 36) + 4) 21210696SDavid.Hollister@Sun.COM #define PMCS_OQBALX(x) ((x * 36) + 8) 21310696SDavid.Hollister@Sun.COM #define PMCS_OQPIBAHX(x) ((x * 36) + 12) 21410696SDavid.Hollister@Sun.COM #define PMCS_OQPIBALX(x) ((x * 36) + 16) 21510696SDavid.Hollister@Sun.COM #define PMCS_OQCIBARX(x) ((x * 36) + 20) 21610696SDavid.Hollister@Sun.COM #define PMCS_OQCIOFFX(x) ((x * 36) + 24) 21710696SDavid.Hollister@Sun.COM #define PMCS_OQIPARM(x) ((x * 36) + 28) 21810696SDavid.Hollister@Sun.COM #define PMCS_OQDICX(x) ((x * 36) + 32) 21910696SDavid.Hollister@Sun.COM 22010696SDavid.Hollister@Sun.COM #define PMCS_OQDX(x) ((x) & 0xffff) 22110696SDavid.Hollister@Sun.COM #define PMCS_OQESX(x) (((x) >> 16) & 0x3fff) 22210696SDavid.Hollister@Sun.COM #define PMCS_OQICT(x) ((x) & 0xffff) 22310696SDavid.Hollister@Sun.COM #define PMCS_OQICC(x) (((x) >> 16) & 0xff) 22410696SDavid.Hollister@Sun.COM #define PMCS_OQIV(x) (((x) >> 24) & 0xff) 22510696SDavid.Hollister@Sun.COM 22610696SDavid.Hollister@Sun.COM #define OQIEX (1 << 30) 22710696SDavid.Hollister@Sun.COM 22810696SDavid.Hollister@Sun.COM #ifdef __cplusplus 22910696SDavid.Hollister@Sun.COM } 23010696SDavid.Hollister@Sun.COM #endif 23110696SDavid.Hollister@Sun.COM #endif /* _PMCS_MPI_H */ 232