18311SSukumar.Swaminathan@Sun.COM /* 28311SSukumar.Swaminathan@Sun.COM * CDDL HEADER START 38311SSukumar.Swaminathan@Sun.COM * 48311SSukumar.Swaminathan@Sun.COM * The contents of this file are subject to the terms of the 58311SSukumar.Swaminathan@Sun.COM * Common Development and Distribution License (the "License"). 68311SSukumar.Swaminathan@Sun.COM * You may not use this file except in compliance with the License. 78311SSukumar.Swaminathan@Sun.COM * 88311SSukumar.Swaminathan@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 98311SSukumar.Swaminathan@Sun.COM * or http://www.opensolaris.org/os/licensing. 108311SSukumar.Swaminathan@Sun.COM * See the License for the specific language governing permissions 118311SSukumar.Swaminathan@Sun.COM * and limitations under the License. 128311SSukumar.Swaminathan@Sun.COM * 138311SSukumar.Swaminathan@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 148311SSukumar.Swaminathan@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 158311SSukumar.Swaminathan@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 168311SSukumar.Swaminathan@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 178311SSukumar.Swaminathan@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 188311SSukumar.Swaminathan@Sun.COM * 198311SSukumar.Swaminathan@Sun.COM * CDDL HEADER END 208311SSukumar.Swaminathan@Sun.COM */ 218311SSukumar.Swaminathan@Sun.COM 2211541SDaniel.Beauregard@Sun.COM /* Copyright 2010 QLogic Corporation */ 238311SSukumar.Swaminathan@Sun.COM 248311SSukumar.Swaminathan@Sun.COM /* 25*12279SDaniel.Beauregard@Sun.COM * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 268311SSukumar.Swaminathan@Sun.COM */ 278311SSukumar.Swaminathan@Sun.COM 288311SSukumar.Swaminathan@Sun.COM #ifndef _QL_API_H 298311SSukumar.Swaminathan@Sun.COM #define _QL_API_H 308311SSukumar.Swaminathan@Sun.COM 318311SSukumar.Swaminathan@Sun.COM /* 328311SSukumar.Swaminathan@Sun.COM * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file. 338311SSukumar.Swaminathan@Sun.COM * 348311SSukumar.Swaminathan@Sun.COM * *********************************************************************** 358311SSukumar.Swaminathan@Sun.COM * * ** 368311SSukumar.Swaminathan@Sun.COM * * NOTICE ** 3711541SDaniel.Beauregard@Sun.COM * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION ** 388311SSukumar.Swaminathan@Sun.COM * * ALL RIGHTS RESERVED ** 398311SSukumar.Swaminathan@Sun.COM * * ** 408311SSukumar.Swaminathan@Sun.COM * *********************************************************************** 418311SSukumar.Swaminathan@Sun.COM * 428311SSukumar.Swaminathan@Sun.COM */ 438311SSukumar.Swaminathan@Sun.COM 448311SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus 458311SSukumar.Swaminathan@Sun.COM extern "C" { 468311SSukumar.Swaminathan@Sun.COM #endif 478311SSukumar.Swaminathan@Sun.COM 488311SSukumar.Swaminathan@Sun.COM /* OS include files. */ 498311SSukumar.Swaminathan@Sun.COM #include <sys/scsi/scsi_types.h> 508311SSukumar.Swaminathan@Sun.COM #include <sys/byteorder.h> 518311SSukumar.Swaminathan@Sun.COM #include <sys/pci.h> 528311SSukumar.Swaminathan@Sun.COM #include <sys/utsname.h> 538311SSukumar.Swaminathan@Sun.COM #include <sys/file.h> 548311SSukumar.Swaminathan@Sun.COM #include <sys/param.h> 558311SSukumar.Swaminathan@Sun.COM #include <ql_open.h> 568311SSukumar.Swaminathan@Sun.COM 578311SSukumar.Swaminathan@Sun.COM #include <sys/fibre-channel/fc.h> 588311SSukumar.Swaminathan@Sun.COM #include <sys/fibre-channel/impl/fc_fcaif.h> 598311SSukumar.Swaminathan@Sun.COM 608311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_TYPE_FIXED 618311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_TYPE_FIXED 0x1 628311SSukumar.Swaminathan@Sun.COM #endif 638311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_TYPE_MSI 648311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_TYPE_MSI 0x2 658311SSukumar.Swaminathan@Sun.COM #endif 668311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_TYPE_MSIX 678311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_TYPE_MSIX 0x4 688311SSukumar.Swaminathan@Sun.COM #endif 698311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_FLAG_BLOCK 708311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_FLAG_BLOCK 0x100 718311SSukumar.Swaminathan@Sun.COM #endif 728311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_ALLOC_NORMAL 738311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_ALLOC_NORMAL 0 748311SSukumar.Swaminathan@Sun.COM #endif 758311SSukumar.Swaminathan@Sun.COM #ifndef DDI_INTR_ALLOC_STRICT 768311SSukumar.Swaminathan@Sun.COM #define DDI_INTR_ALLOC_STRICT 1 778311SSukumar.Swaminathan@Sun.COM #endif 788311SSukumar.Swaminathan@Sun.COM 798311SSukumar.Swaminathan@Sun.COM /* 808311SSukumar.Swaminathan@Sun.COM * NPIV defines 818311SSukumar.Swaminathan@Sun.COM */ 828311SSukumar.Swaminathan@Sun.COM #ifndef FC_NPIV_FDISC_FAILED 838311SSukumar.Swaminathan@Sun.COM #define FC_NPIV_FDISC_FAILED 0x45 848311SSukumar.Swaminathan@Sun.COM #endif 858311SSukumar.Swaminathan@Sun.COM #ifndef FC_NPIV_FDISC_WWN_INUSE 868311SSukumar.Swaminathan@Sun.COM #define FC_NPIV_FDISC_WWN_INUSE 0x46 878311SSukumar.Swaminathan@Sun.COM #endif 888311SSukumar.Swaminathan@Sun.COM #ifndef FC_NPIV_NOT_SUPPORTED 898311SSukumar.Swaminathan@Sun.COM #define FC_NPIV_NOT_SUPPORTED 0x47 908311SSukumar.Swaminathan@Sun.COM #endif 918311SSukumar.Swaminathan@Sun.COM #ifndef FC_NPIV_WRONG_TOPOLOGY 928311SSukumar.Swaminathan@Sun.COM #define FC_NPIV_WRONG_TOPOLOGY 0x48 938311SSukumar.Swaminathan@Sun.COM #endif 948311SSukumar.Swaminathan@Sun.COM #ifndef FC_NPIV_NPIV_BOUND 958311SSukumar.Swaminathan@Sun.COM #define FC_NPIV_NPIV_BOUND 0x49 968311SSukumar.Swaminathan@Sun.COM #endif 978311SSukumar.Swaminathan@Sun.COM 988311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_supported_types 998311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_nintrs 1008311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_alloc 1018311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_free 1028311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_pri 1038311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_add_handler 1048311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_dup_handler 1058311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_navail 1068311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_block_disable 1078311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_block_enable 1088311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_disable 1098311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_enable 1108311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_get_cap 1118311SSukumar.Swaminathan@Sun.COM #pragma weak ddi_intr_remove_handler 1128311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_supported_types(); 1138311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_nintrs(); 1148311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_alloc(); 1158311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_free(); 1168311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_pri(); 1178311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_add_handler(); 1188311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_dup_handler(); 1198311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_navail(); 1208311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_block_disable(); 1218311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_block_enable(); 1228311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_disable(); 1238311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_enable(); 1248311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_get_cap(); 1258311SSukumar.Swaminathan@Sun.COM extern int ddi_intr_remove_handler(); 1268311SSukumar.Swaminathan@Sun.COM 1278311SSukumar.Swaminathan@Sun.COM #ifndef QL_DRV_HARDENING 1288311SSukumar.Swaminathan@Sun.COM #define ddi_devstate_t int 1298311SSukumar.Swaminathan@Sun.COM #define DDI_DEVSTATE_UP 0 1308311SSukumar.Swaminathan@Sun.COM #define ddi_get_devstate(a) DDI_DEVSTATE_UP 1318311SSukumar.Swaminathan@Sun.COM #define ddi_dev_report_fault(a, b, c, d) 1328311SSukumar.Swaminathan@Sun.COM #define ddi_check_dma_handle(a) DDI_SUCCESS 1338311SSukumar.Swaminathan@Sun.COM #define ddi_check_acc_handle(a) DDI_SUCCESS 1348311SSukumar.Swaminathan@Sun.COM #define QL_CLEAR_DMA_HANDLE(x) 1358311SSukumar.Swaminathan@Sun.COM #else 1368311SSukumar.Swaminathan@Sun.COM #define QL_CLEAR_DMA_HANDLE(x) ((ddi_dma_impl_t *)x)->dmai_fault_notify = 0; \ 1378311SSukumar.Swaminathan@Sun.COM ((ddi_dma_impl_t *)x)->dmai_fault_check = 0; \ 1388311SSukumar.Swaminathan@Sun.COM ((ddi_dma_impl_t *)x)->dmai_fault = 0 1398311SSukumar.Swaminathan@Sun.COM #endif 1408311SSukumar.Swaminathan@Sun.COM 1418311SSukumar.Swaminathan@Sun.COM #ifndef FC_STATE_1GBIT_SPEED 1429446SDaniel.Beauregard@Sun.COM #define FC_STATE_1GBIT_SPEED 0x0100 /* 1 Gbit/sec */ 1438311SSukumar.Swaminathan@Sun.COM #endif 1448311SSukumar.Swaminathan@Sun.COM #ifndef FC_STATE_2GBIT_SPEED 1459446SDaniel.Beauregard@Sun.COM #define FC_STATE_2GBIT_SPEED 0x0400 /* 2 Gbit/sec */ 1468311SSukumar.Swaminathan@Sun.COM #endif 1478311SSukumar.Swaminathan@Sun.COM #ifndef FC_STATE_4GBIT_SPEED 1489446SDaniel.Beauregard@Sun.COM #define FC_STATE_4GBIT_SPEED 0x0500 /* 4 Gbit/sec */ 1499446SDaniel.Beauregard@Sun.COM #endif 1509446SDaniel.Beauregard@Sun.COM #ifndef FC_STATE_8GBIT_SPEED 1519446SDaniel.Beauregard@Sun.COM #define FC_STATE_8GBIT_SPEED 0x0700 /* 8 Gbit/sec */ 1529446SDaniel.Beauregard@Sun.COM #endif 1539446SDaniel.Beauregard@Sun.COM #ifndef FC_STATE_10GBIT_SPEED 1549446SDaniel.Beauregard@Sun.COM #define FC_STATE_10GBIT_SPEED 0x0600 /* 10 Gbit/sec */ 1558311SSukumar.Swaminathan@Sun.COM #endif 1568311SSukumar.Swaminathan@Sun.COM 1578311SSukumar.Swaminathan@Sun.COM /* 1588311SSukumar.Swaminathan@Sun.COM * Data bit definitions. 1598311SSukumar.Swaminathan@Sun.COM */ 1608311SSukumar.Swaminathan@Sun.COM #define BIT_0 0x1 1618311SSukumar.Swaminathan@Sun.COM #define BIT_1 0x2 1628311SSukumar.Swaminathan@Sun.COM #define BIT_2 0x4 1638311SSukumar.Swaminathan@Sun.COM #define BIT_3 0x8 1648311SSukumar.Swaminathan@Sun.COM #define BIT_4 0x10 1658311SSukumar.Swaminathan@Sun.COM #define BIT_5 0x20 1668311SSukumar.Swaminathan@Sun.COM #define BIT_6 0x40 1678311SSukumar.Swaminathan@Sun.COM #define BIT_7 0x80 1688311SSukumar.Swaminathan@Sun.COM #define BIT_8 0x100 1698311SSukumar.Swaminathan@Sun.COM #define BIT_9 0x200 1708311SSukumar.Swaminathan@Sun.COM #define BIT_10 0x400 1718311SSukumar.Swaminathan@Sun.COM #define BIT_11 0x800 1728311SSukumar.Swaminathan@Sun.COM #define BIT_12 0x1000 1738311SSukumar.Swaminathan@Sun.COM #define BIT_13 0x2000 1748311SSukumar.Swaminathan@Sun.COM #define BIT_14 0x4000 1758311SSukumar.Swaminathan@Sun.COM #define BIT_15 0x8000 1768311SSukumar.Swaminathan@Sun.COM #define BIT_16 0x10000 1778311SSukumar.Swaminathan@Sun.COM #define BIT_17 0x20000 1788311SSukumar.Swaminathan@Sun.COM #define BIT_18 0x40000 1798311SSukumar.Swaminathan@Sun.COM #define BIT_19 0x80000 1808311SSukumar.Swaminathan@Sun.COM #define BIT_20 0x100000 1818311SSukumar.Swaminathan@Sun.COM #define BIT_21 0x200000 1828311SSukumar.Swaminathan@Sun.COM #define BIT_22 0x400000 1838311SSukumar.Swaminathan@Sun.COM #define BIT_23 0x800000 1848311SSukumar.Swaminathan@Sun.COM #define BIT_24 0x1000000 1858311SSukumar.Swaminathan@Sun.COM #define BIT_25 0x2000000 1868311SSukumar.Swaminathan@Sun.COM #define BIT_26 0x4000000 1878311SSukumar.Swaminathan@Sun.COM #define BIT_27 0x8000000 1888311SSukumar.Swaminathan@Sun.COM #define BIT_28 0x10000000 1898311SSukumar.Swaminathan@Sun.COM #define BIT_29 0x20000000 1908311SSukumar.Swaminathan@Sun.COM #define BIT_30 0x40000000 1918311SSukumar.Swaminathan@Sun.COM #define BIT_31 0x80000000 1928311SSukumar.Swaminathan@Sun.COM 1938311SSukumar.Swaminathan@Sun.COM /* 1948311SSukumar.Swaminathan@Sun.COM * Local Macro Definitions. 1958311SSukumar.Swaminathan@Sun.COM */ 1968311SSukumar.Swaminathan@Sun.COM #ifndef TRUE 1978311SSukumar.Swaminathan@Sun.COM #define TRUE B_TRUE 1988311SSukumar.Swaminathan@Sun.COM #endif 1998311SSukumar.Swaminathan@Sun.COM 2008311SSukumar.Swaminathan@Sun.COM #ifndef FALSE 2018311SSukumar.Swaminathan@Sun.COM #define FALSE B_FALSE 2028311SSukumar.Swaminathan@Sun.COM #endif 2038311SSukumar.Swaminathan@Sun.COM 2048311SSukumar.Swaminathan@Sun.COM /* 2058311SSukumar.Swaminathan@Sun.COM * I/O register 2068311SSukumar.Swaminathan@Sun.COM */ 2078311SSukumar.Swaminathan@Sun.COM #define RD_REG_BYTE(ha, addr) \ 20811924SDaniel.Beauregard@Sun.COM (uint8_t)ddi_get8(ha->dev_handle, (uint8_t *)(addr)) 2098311SSukumar.Swaminathan@Sun.COM #define RD_REG_WORD(ha, addr) \ 21011924SDaniel.Beauregard@Sun.COM (uint16_t)ddi_get16(ha->dev_handle, (uint16_t *)(addr)) 2118311SSukumar.Swaminathan@Sun.COM #define RD_REG_DWORD(ha, addr) \ 21211924SDaniel.Beauregard@Sun.COM (uint32_t)ddi_get32(ha->dev_handle, (uint32_t *)(addr)) 21311924SDaniel.Beauregard@Sun.COM #define RD_REG_DDWORD(ha, addr) \ 21411924SDaniel.Beauregard@Sun.COM (uint64_t)ddi_get64(ha->dev_handle, (uint64_t *)(addr)) 2158311SSukumar.Swaminathan@Sun.COM 2168311SSukumar.Swaminathan@Sun.COM #define WRT_REG_BYTE(ha, addr, data) \ 21711924SDaniel.Beauregard@Sun.COM ddi_put8(ha->dev_handle, (uint8_t *)(addr), (uint8_t)(data)) 2188311SSukumar.Swaminathan@Sun.COM #define WRT_REG_WORD(ha, addr, data) \ 21911924SDaniel.Beauregard@Sun.COM ddi_put16(ha->dev_handle, (uint16_t *)(addr), (uint16_t)(data)) 2208311SSukumar.Swaminathan@Sun.COM #define WRT_REG_DWORD(ha, addr, data) \ 22111924SDaniel.Beauregard@Sun.COM ddi_put32(ha->dev_handle, (uint32_t *)(addr), (uint32_t)(data)) 22211924SDaniel.Beauregard@Sun.COM #define WRT_REG_DDWORD(ha, addr, data) \ 22311924SDaniel.Beauregard@Sun.COM ddi_put64(ha->dev_handle, (uint64_t *)(addr), (uint64_t)(data)) 2248311SSukumar.Swaminathan@Sun.COM 2258311SSukumar.Swaminathan@Sun.COM #define RD8_IO_REG(ha, regname) \ 2268311SSukumar.Swaminathan@Sun.COM RD_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname)) 2278311SSukumar.Swaminathan@Sun.COM #define RD16_IO_REG(ha, regname) \ 2288311SSukumar.Swaminathan@Sun.COM RD_REG_WORD(ha, (ha->iobase + ha->reg_off->regname)) 2298311SSukumar.Swaminathan@Sun.COM #define RD32_IO_REG(ha, regname) \ 2308311SSukumar.Swaminathan@Sun.COM RD_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname)) 2318311SSukumar.Swaminathan@Sun.COM 2328311SSukumar.Swaminathan@Sun.COM #define WRT8_IO_REG(ha, regname, data) \ 23311924SDaniel.Beauregard@Sun.COM WRT_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname), (data)) 2348311SSukumar.Swaminathan@Sun.COM #define WRT16_IO_REG(ha, regname, data) \ 23511924SDaniel.Beauregard@Sun.COM WRT_REG_WORD(ha, (ha->iobase + ha->reg_off->regname), (data)) 2368311SSukumar.Swaminathan@Sun.COM #define WRT32_IO_REG(ha, regname, data) \ 23711924SDaniel.Beauregard@Sun.COM WRT_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname), (data)) 2388311SSukumar.Swaminathan@Sun.COM 2398311SSukumar.Swaminathan@Sun.COM #define RD_IOREG_BYTE(ha, addr) \ 24011924SDaniel.Beauregard@Sun.COM (uint8_t)ddi_get8(ha->iomap_dev_handle, (uint8_t *)(addr)) 2418311SSukumar.Swaminathan@Sun.COM #define RD_IOREG_WORD(ha, addr) \ 24211924SDaniel.Beauregard@Sun.COM (uint16_t)ddi_get16(ha->iomap_dev_handle, (uint16_t *)(addr)) 2438311SSukumar.Swaminathan@Sun.COM #define RD_IOREG_DWORD(ha, addr) \ 24411924SDaniel.Beauregard@Sun.COM (uint32_t)ddi_get32(ha->iomap_dev_handle, (uint32_t *)(addr)) 2458311SSukumar.Swaminathan@Sun.COM 2468311SSukumar.Swaminathan@Sun.COM #define WRT_IOREG_BYTE(ha, addr, data) \ 24711924SDaniel.Beauregard@Sun.COM ddi_put8(ha->iomap_dev_handle, (uint8_t *)addr, (uint8_t)(data)) 2488311SSukumar.Swaminathan@Sun.COM #define WRT_IOREG_WORD(ha, addr, data) \ 24911924SDaniel.Beauregard@Sun.COM ddi_put16(ha->iomap_dev_handle, (uint16_t *)addr, (uint16_t)(data)) 2508311SSukumar.Swaminathan@Sun.COM #define WRT_IOREG_DWORD(ha, addr, data) \ 25111924SDaniel.Beauregard@Sun.COM ddi_put32(ha->iomap_dev_handle, (uint32_t *)addr, (uint32_t)(data)) 2528311SSukumar.Swaminathan@Sun.COM 2538311SSukumar.Swaminathan@Sun.COM #define RD8_IOMAP_REG(ha, regname) \ 2548311SSukumar.Swaminathan@Sun.COM RD_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname)) 2558311SSukumar.Swaminathan@Sun.COM #define RD16_IOMAP_REG(ha, regname) \ 2568311SSukumar.Swaminathan@Sun.COM RD_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname)) 2578311SSukumar.Swaminathan@Sun.COM #define RD32_IOMAP_REG(ha, regname) \ 2588311SSukumar.Swaminathan@Sun.COM RD_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname)) 2598311SSukumar.Swaminathan@Sun.COM 2608311SSukumar.Swaminathan@Sun.COM #define WRT8_IOMAP_REG(ha, regname, data) \ 26111924SDaniel.Beauregard@Sun.COM WRT_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname), (data)) 2628311SSukumar.Swaminathan@Sun.COM #define WRT16_IOMAP_REG(ha, regname, data) \ 26311924SDaniel.Beauregard@Sun.COM WRT_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data)) 2648311SSukumar.Swaminathan@Sun.COM #define WRT32_IOMAP_REG(ha, regname, data) \ 26511924SDaniel.Beauregard@Sun.COM WRT_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data)) 2668311SSukumar.Swaminathan@Sun.COM 2678311SSukumar.Swaminathan@Sun.COM /* 2688311SSukumar.Swaminathan@Sun.COM * FCA definitions 2698311SSukumar.Swaminathan@Sun.COM */ 2708311SSukumar.Swaminathan@Sun.COM #define MAX_LUNS 16384 2718311SSukumar.Swaminathan@Sun.COM #define QL_FCA_BRAND 0x0fca2200 2728311SSukumar.Swaminathan@Sun.COM 2738311SSukumar.Swaminathan@Sun.COM /* Following to be removed when defined by OS. */ 2748311SSukumar.Swaminathan@Sun.COM /* ************************************************************************ */ 2758311SSukumar.Swaminathan@Sun.COM #define LA_ELS_FARP_REQ 0x54 2768311SSukumar.Swaminathan@Sun.COM #define LA_ELS_FARP_REPLY 0x55 2778311SSukumar.Swaminathan@Sun.COM #define LA_ELS_LPC 0x71 2788311SSukumar.Swaminathan@Sun.COM #define LA_ELS_LSTS 0x72 2798311SSukumar.Swaminathan@Sun.COM 2808311SSukumar.Swaminathan@Sun.COM typedef struct { 2818311SSukumar.Swaminathan@Sun.COM ls_code_t ls_code; 2828311SSukumar.Swaminathan@Sun.COM uint8_t rsvd[3]; 2838311SSukumar.Swaminathan@Sun.COM uint8_t port_control; 2848311SSukumar.Swaminathan@Sun.COM uint8_t lpb[16]; 2858311SSukumar.Swaminathan@Sun.COM uint8_t lpe[16]; 2868311SSukumar.Swaminathan@Sun.COM } ql_lpc_t; 2878311SSukumar.Swaminathan@Sun.COM 2888311SSukumar.Swaminathan@Sun.COM typedef struct { 2898311SSukumar.Swaminathan@Sun.COM ls_code_t ls_code; 2908311SSukumar.Swaminathan@Sun.COM } ql_acc_rjt_t; 2918311SSukumar.Swaminathan@Sun.COM 2928311SSukumar.Swaminathan@Sun.COM typedef fc_linit_resp_t ql_lpc_resp_t; 2938311SSukumar.Swaminathan@Sun.COM typedef fc_scr_resp_t ql_rscn_resp_t; 2948311SSukumar.Swaminathan@Sun.COM 2958311SSukumar.Swaminathan@Sun.COM typedef struct { 2968311SSukumar.Swaminathan@Sun.COM uint16_t class_valid_svc_opt; 2978311SSukumar.Swaminathan@Sun.COM uint16_t initiator_ctl; 2988311SSukumar.Swaminathan@Sun.COM uint16_t recipient_ctl; 2998311SSukumar.Swaminathan@Sun.COM uint16_t rcv_data_size; 3008311SSukumar.Swaminathan@Sun.COM uint16_t conc_sequences; 3018311SSukumar.Swaminathan@Sun.COM uint16_t n_port_end_to_end_credit; 3028311SSukumar.Swaminathan@Sun.COM uint16_t open_sequences_per_exch; 3038311SSukumar.Swaminathan@Sun.COM uint16_t unused; 3048311SSukumar.Swaminathan@Sun.COM } class_svc_param_t; 3058311SSukumar.Swaminathan@Sun.COM 3068311SSukumar.Swaminathan@Sun.COM typedef struct { 3078311SSukumar.Swaminathan@Sun.COM uint8_t type; 3088311SSukumar.Swaminathan@Sun.COM uint8_t rsvd; 3098311SSukumar.Swaminathan@Sun.COM uint16_t process_assoc_flags; 3108311SSukumar.Swaminathan@Sun.COM uint32_t originator_process; 3118311SSukumar.Swaminathan@Sun.COM uint32_t responder_process; 3128311SSukumar.Swaminathan@Sun.COM uint32_t process_flags; 3138311SSukumar.Swaminathan@Sun.COM } prli_svc_param_t; 3148311SSukumar.Swaminathan@Sun.COM /* *********************************************************************** */ 3158311SSukumar.Swaminathan@Sun.COM 3168311SSukumar.Swaminathan@Sun.COM /* 3178311SSukumar.Swaminathan@Sun.COM * Fibre Channel device definitions. 3188311SSukumar.Swaminathan@Sun.COM */ 3198311SSukumar.Swaminathan@Sun.COM #define MAX_22_FIBRE_DEVICES 256 3208311SSukumar.Swaminathan@Sun.COM #define MAX_24_FIBRE_DEVICES 2048 3219156SDaniel.Beauregard@Sun.COM #define MAX_24_VIRTUAL_PORTS 127 3229156SDaniel.Beauregard@Sun.COM #define MAX_25_VIRTUAL_PORTS 254 3238311SSukumar.Swaminathan@Sun.COM 3248311SSukumar.Swaminathan@Sun.COM #define LAST_LOCAL_LOOP_ID 0x7d 3258311SSukumar.Swaminathan@Sun.COM #define FL_PORT_LOOP_ID 0x7e /* FFFFFE Fabric F_Port */ 3268311SSukumar.Swaminathan@Sun.COM #define SWITCH_FABRIC_CONTROLLER_LOOP_ID 0x7f /* FFFFFD Fabric Controller */ 3278311SSukumar.Swaminathan@Sun.COM #define SIMPLE_NAME_SERVER_LOOP_ID 0x80 /* FFFFFC Directory Server */ 3288311SSukumar.Swaminathan@Sun.COM #define SNS_FIRST_LOOP_ID 0x81 3298311SSukumar.Swaminathan@Sun.COM #define SNS_LAST_LOOP_ID 0xfe 3308311SSukumar.Swaminathan@Sun.COM #define IP_BROADCAST_LOOP_ID 0xff /* FFFFFF Broadcast */ 3318311SSukumar.Swaminathan@Sun.COM #define BROADCAST_ADDR 0xffffff /* FFFFFF Broadcast */ 3328311SSukumar.Swaminathan@Sun.COM 3338311SSukumar.Swaminathan@Sun.COM /* 3348311SSukumar.Swaminathan@Sun.COM * Fibre Channel 24xx device definitions. 3358311SSukumar.Swaminathan@Sun.COM */ 3368311SSukumar.Swaminathan@Sun.COM #define LAST_N_PORT_HDL 0x7ef 3378311SSukumar.Swaminathan@Sun.COM #define SNS_24XX_HDL 0x7FC /* SNS FFFFFCh */ 3388311SSukumar.Swaminathan@Sun.COM #define SFC_24XX_HDL 0x7FD /* fabric controller FFFFFDh */ 3398311SSukumar.Swaminathan@Sun.COM #define FL_PORT_24XX_HDL 0x7FE /* F_Port FFFFFEh */ 3408311SSukumar.Swaminathan@Sun.COM #define BROADCAST_24XX_HDL 0x7FF /* IP broadcast FFFFFFh */ 3418311SSukumar.Swaminathan@Sun.COM 3428311SSukumar.Swaminathan@Sun.COM /* Loop ID's used as flags, must be higher than any valid Loop ID */ 3438311SSukumar.Swaminathan@Sun.COM #define PORT_NO_LOOP_ID 0x8000 /* Device does not have loop ID. */ 3448311SSukumar.Swaminathan@Sun.COM #define PORT_LOST_ID 0x4000 /* Device has been lost. */ 3458311SSukumar.Swaminathan@Sun.COM 3468311SSukumar.Swaminathan@Sun.COM /* Fibre Channel Topoploy. */ 3478311SSukumar.Swaminathan@Sun.COM #define QL_N_PORT BIT_0 3488311SSukumar.Swaminathan@Sun.COM #define QL_NL_PORT BIT_1 3498311SSukumar.Swaminathan@Sun.COM #define QL_F_PORT BIT_2 3508311SSukumar.Swaminathan@Sun.COM #define QL_FL_PORT BIT_3 3518311SSukumar.Swaminathan@Sun.COM #define QL_SNS_CONNECTION BIT_4 3528311SSukumar.Swaminathan@Sun.COM #define QL_LOOP_CONNECTION (QL_NL_PORT | QL_FL_PORT) 3538311SSukumar.Swaminathan@Sun.COM #define QL_P2P_CONNECTION (QL_F_PORT | QL_N_PORT) 3548311SSukumar.Swaminathan@Sun.COM 3558311SSukumar.Swaminathan@Sun.COM /* Timeout timer counts in seconds (must greater than 1 second). */ 3568311SSukumar.Swaminathan@Sun.COM #define WATCHDOG_TIME 5 /* 0 - 255 */ 3578311SSukumar.Swaminathan@Sun.COM #define PORT_RETRY_TIME 2 /* 0 - 255 */ 3588311SSukumar.Swaminathan@Sun.COM #define LOOP_DOWN_TIMER_OFF 0 3598311SSukumar.Swaminathan@Sun.COM #define LOOP_DOWN_TIMER_START 240 /* 0 - 255 */ 3608311SSukumar.Swaminathan@Sun.COM #define LOOP_DOWN_TIMER_END 1 3618311SSukumar.Swaminathan@Sun.COM #define LOOP_DOWN_RESET (LOOP_DOWN_TIMER_START - 45) /* 0 - 255 */ 3628311SSukumar.Swaminathan@Sun.COM #define R_A_TOV_DEFAULT 20 /* 0 - 65535 */ 3638311SSukumar.Swaminathan@Sun.COM #define IDLE_CHECK_TIMER 300 /* 0 - 65535 */ 3648311SSukumar.Swaminathan@Sun.COM #define MAX_DEVICE_LOST_RETRY 16 /* 0 - 255 */ 365*12279SDaniel.Beauregard@Sun.COM #define TIMEOUT_THRESHOLD 16 /* 0 - 255 */ 3668311SSukumar.Swaminathan@Sun.COM 3678311SSukumar.Swaminathan@Sun.COM /* Maximum outstanding commands in ISP queues (1-4095) */ 3688311SSukumar.Swaminathan@Sun.COM #define MAX_OUTSTANDING_COMMANDS 0x400 3698311SSukumar.Swaminathan@Sun.COM #define OSC_INDEX_MASK 0xfff 3708311SSukumar.Swaminathan@Sun.COM #define OSC_INDEX_SHIFT 12 3718311SSukumar.Swaminathan@Sun.COM 3728311SSukumar.Swaminathan@Sun.COM /* Maximum unsolicited buffers (1-65535) */ 3738311SSukumar.Swaminathan@Sun.COM #define QL_UB_LIMIT 256 3748311SSukumar.Swaminathan@Sun.COM 3758311SSukumar.Swaminathan@Sun.COM /* ISP request, response and receive buffer entry counts */ 3768311SSukumar.Swaminathan@Sun.COM #define REQUEST_ENTRY_CNT 512 /* Request entries (205-65535) */ 3778311SSukumar.Swaminathan@Sun.COM #define RESPONSE_ENTRY_CNT 256 /* Response entries (1-65535) */ 3788311SSukumar.Swaminathan@Sun.COM #define RCVBUF_CONTAINER_CNT 64 /* Rcv buffer containers (8-1024) */ 3798311SSukumar.Swaminathan@Sun.COM 3808311SSukumar.Swaminathan@Sun.COM /* 3818311SSukumar.Swaminathan@Sun.COM * ISP request, response, mailbox and receive buffer queue sizes 3828311SSukumar.Swaminathan@Sun.COM */ 3838311SSukumar.Swaminathan@Sun.COM #define REQUEST_ENTRY_SIZE 64 3848311SSukumar.Swaminathan@Sun.COM #define REQUEST_QUEUE_SIZE (REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT) 3858311SSukumar.Swaminathan@Sun.COM 3868311SSukumar.Swaminathan@Sun.COM #define RESPONSE_ENTRY_SIZE 64 3878311SSukumar.Swaminathan@Sun.COM #define RESPONSE_QUEUE_SIZE (RESPONSE_ENTRY_SIZE * RESPONSE_ENTRY_CNT) 3888311SSukumar.Swaminathan@Sun.COM 3898311SSukumar.Swaminathan@Sun.COM #define MAILBOX_BUFFER_SIZE 0x4000 3908311SSukumar.Swaminathan@Sun.COM 3918311SSukumar.Swaminathan@Sun.COM #define RCVBUF_CONTAINER_SIZE 12 3928311SSukumar.Swaminathan@Sun.COM #define RCVBUF_QUEUE_SIZE (RCVBUF_CONTAINER_SIZE * RCVBUF_CONTAINER_CNT) 3938311SSukumar.Swaminathan@Sun.COM 3948311SSukumar.Swaminathan@Sun.COM /* 3958311SSukumar.Swaminathan@Sun.COM * ISP DMA buffer definitions 3968311SSukumar.Swaminathan@Sun.COM */ 3978311SSukumar.Swaminathan@Sun.COM #define REQUEST_Q_BUFFER_OFFSET 0 3988311SSukumar.Swaminathan@Sun.COM #define RESPONSE_Q_BUFFER_OFFSET (REQUEST_Q_BUFFER_OFFSET + REQUEST_QUEUE_SIZE) 3998311SSukumar.Swaminathan@Sun.COM #define RCVBUF_Q_BUFFER_OFFSET (RESPONSE_Q_BUFFER_OFFSET + RESPONSE_QUEUE_SIZE) 4008311SSukumar.Swaminathan@Sun.COM 4018311SSukumar.Swaminathan@Sun.COM /* 4028311SSukumar.Swaminathan@Sun.COM * DMA attributes definitions. 4038311SSukumar.Swaminathan@Sun.COM */ 4048311SSukumar.Swaminathan@Sun.COM #define QL_DMA_LOW_ADDRESS (uint64_t)0 4058311SSukumar.Swaminathan@Sun.COM #define QL_DMA_HIGH_64BIT_ADDRESS (uint64_t)0xffffffffffffffff 4068311SSukumar.Swaminathan@Sun.COM #define QL_DMA_HIGH_32BIT_ADDRESS (uint64_t)0xffffffff 4078311SSukumar.Swaminathan@Sun.COM #define QL_DMA_XFER_COUNTER (uint64_t)0xffffffff 4088311SSukumar.Swaminathan@Sun.COM #define QL_DMA_ADDRESS_ALIGNMENT (uint64_t)8 4098311SSukumar.Swaminathan@Sun.COM #define QL_DMA_ALIGN_8_BYTE_BOUNDARY (uint64_t)BIT_3 4108311SSukumar.Swaminathan@Sun.COM #define QL_DMA_RING_ADDRESS_ALIGNMENT (uint64_t)64 4118311SSukumar.Swaminathan@Sun.COM #define QL_DMA_ALIGN_64_BYTE_BOUNDARY (uint64_t)BIT_6 4128311SSukumar.Swaminathan@Sun.COM #define QL_DMA_BURSTSIZES 0xff 4138311SSukumar.Swaminathan@Sun.COM #define QL_DMA_MIN_XFER_SIZE 1 4148311SSukumar.Swaminathan@Sun.COM #define QL_DMA_MAX_XFER_SIZE (uint64_t)0xffffffff 4158311SSukumar.Swaminathan@Sun.COM #define QL_DMA_SEGMENT_BOUNDARY (uint64_t)0xffffffff 4168311SSukumar.Swaminathan@Sun.COM 4178311SSukumar.Swaminathan@Sun.COM #ifdef __sparc 4188311SSukumar.Swaminathan@Sun.COM #define QL_DMA_SG_LIST_LENGTH 1 4198311SSukumar.Swaminathan@Sun.COM #define QL_FCSM_CMD_SGLLEN 1 4208311SSukumar.Swaminathan@Sun.COM #define QL_FCSM_RSP_SGLLEN 1 4218311SSukumar.Swaminathan@Sun.COM #define QL_FCIP_CMD_SGLLEN 1 4228311SSukumar.Swaminathan@Sun.COM #define QL_FCIP_RSP_SGLLEN 1 4238311SSukumar.Swaminathan@Sun.COM #define QL_FCP_CMD_SGLLEN 1 4248311SSukumar.Swaminathan@Sun.COM #define QL_FCP_RSP_SGLLEN 1 4258311SSukumar.Swaminathan@Sun.COM #else 4268311SSukumar.Swaminathan@Sun.COM #define QL_DMA_SG_LIST_LENGTH 1024 4278311SSukumar.Swaminathan@Sun.COM #define QL_FCSM_CMD_SGLLEN 1 4288311SSukumar.Swaminathan@Sun.COM #define QL_FCSM_RSP_SGLLEN 6 4298311SSukumar.Swaminathan@Sun.COM /* 4308311SSukumar.Swaminathan@Sun.COM * QL_FCIP_CMD_SGLLEN needs to be increased as we changed the max fcip packet 4318311SSukumar.Swaminathan@Sun.COM * size to about 64K. With this, we need to increase the maximum number of 4328311SSukumar.Swaminathan@Sun.COM * scatter-gather elements allowable from the existing 7. We want it to be more 4338311SSukumar.Swaminathan@Sun.COM * like 17 (max fragments for an fcip packet that is unaligned). (64K / 4K) + 1 4348311SSukumar.Swaminathan@Sun.COM * or whatever. Otherwise the DMA breakup routines will give bad results. 4358311SSukumar.Swaminathan@Sun.COM */ 4368311SSukumar.Swaminathan@Sun.COM #define QL_FCIP_CMD_SGLLEN 17 4378311SSukumar.Swaminathan@Sun.COM #define QL_FCIP_RSP_SGLLEN 1 4388311SSukumar.Swaminathan@Sun.COM #define QL_FCP_CMD_SGLLEN 1 4398311SSukumar.Swaminathan@Sun.COM #define QL_FCP_RSP_SGLLEN 1 4408311SSukumar.Swaminathan@Sun.COM #endif 4418311SSukumar.Swaminathan@Sun.COM 4428311SSukumar.Swaminathan@Sun.COM #ifndef DDI_DMA_RELAXED_ORDERING 4438311SSukumar.Swaminathan@Sun.COM #define DDI_DMA_RELAXED_ORDERING 0x400 4448311SSukumar.Swaminathan@Sun.COM #endif 4458311SSukumar.Swaminathan@Sun.COM 4468311SSukumar.Swaminathan@Sun.COM #define QL_DMA_GRANULARITY 1 4478311SSukumar.Swaminathan@Sun.COM #define QL_DMA_XFER_FLAGS 0 4488311SSukumar.Swaminathan@Sun.COM 4498311SSukumar.Swaminathan@Sun.COM typedef union { 4508311SSukumar.Swaminathan@Sun.COM uint64_t size64; /* 1 X 64 bit number */ 4518311SSukumar.Swaminathan@Sun.COM uint32_t size32[2]; /* 2 x 32 bit number */ 4528311SSukumar.Swaminathan@Sun.COM uint16_t size16[4]; /* 4 x 16 bit number */ 4538311SSukumar.Swaminathan@Sun.COM uint8_t size8[8]; /* 8 x 8 bit number */ 4548311SSukumar.Swaminathan@Sun.COM } conv_num_t; 4558311SSukumar.Swaminathan@Sun.COM 4568311SSukumar.Swaminathan@Sun.COM /* 4578311SSukumar.Swaminathan@Sun.COM * Device register offsets. 4588311SSukumar.Swaminathan@Sun.COM */ 4598311SSukumar.Swaminathan@Sun.COM #define MAX_MBOX_COUNT 32 4608311SSukumar.Swaminathan@Sun.COM typedef struct { 46111924SDaniel.Beauregard@Sun.COM uint16_t flash_address; /* Flash BIOS address */ 46211924SDaniel.Beauregard@Sun.COM uint16_t flash_data; /* Flash BIOS data */ 46311924SDaniel.Beauregard@Sun.COM uint16_t ctrl_status; /* Control/Status */ 46411924SDaniel.Beauregard@Sun.COM uint16_t ictrl; /* Interrupt control */ 46511924SDaniel.Beauregard@Sun.COM uint16_t istatus; /* Interrupt status */ 46611924SDaniel.Beauregard@Sun.COM uint16_t semaphore; /* Semaphore */ 46711924SDaniel.Beauregard@Sun.COM uint16_t nvram; /* NVRAM register. */ 46811924SDaniel.Beauregard@Sun.COM uint16_t req_in; /* for 2200 MBX 4 Write */ 46911924SDaniel.Beauregard@Sun.COM uint16_t req_out; /* for 2200 MBX 4 read */ 47011924SDaniel.Beauregard@Sun.COM uint16_t resp_in; /* for 2200 MBX 5 Read */ 47111924SDaniel.Beauregard@Sun.COM uint16_t resp_out; /* for 2200 MBX 5 Write */ 47211924SDaniel.Beauregard@Sun.COM uint16_t risc2host; 47311924SDaniel.Beauregard@Sun.COM uint16_t mbox_cnt; /* Number of mailboxes */ 47411924SDaniel.Beauregard@Sun.COM uint16_t mailbox_in[MAX_MBOX_COUNT]; /* Mailbox registers */ 47511924SDaniel.Beauregard@Sun.COM uint16_t mailbox_out[MAX_MBOX_COUNT]; /* Mailbox registers */ 47611924SDaniel.Beauregard@Sun.COM uint16_t fpm_diag_config; 47711924SDaniel.Beauregard@Sun.COM uint16_t pcr; /* Processor Control Register. */ 47811924SDaniel.Beauregard@Sun.COM uint16_t mctr; /* Memory Configuration and Timing. */ 47911924SDaniel.Beauregard@Sun.COM uint16_t fb_cmd; 48011924SDaniel.Beauregard@Sun.COM uint16_t hccr; /* Host command & control register. */ 48111924SDaniel.Beauregard@Sun.COM uint16_t gpiod; /* GPIO Data register. */ 48211924SDaniel.Beauregard@Sun.COM uint16_t gpioe; /* GPIO Enable register. */ 48311924SDaniel.Beauregard@Sun.COM uint16_t host_to_host_sema; /* 2312 resource lock register */ 48411924SDaniel.Beauregard@Sun.COM uint16_t pri_req_in; /* 2400 */ 48511924SDaniel.Beauregard@Sun.COM uint16_t pri_req_out; /* 2400 */ 48611924SDaniel.Beauregard@Sun.COM uint16_t atio_req_in; /* 2400 */ 48711924SDaniel.Beauregard@Sun.COM uint16_t atio_req_out; /* 2400 */ 48811924SDaniel.Beauregard@Sun.COM uint16_t io_base_addr; /* 2400 */ 48911924SDaniel.Beauregard@Sun.COM uint16_t nx_host_int; /* NetXen */ 49011924SDaniel.Beauregard@Sun.COM uint16_t nx_risc_int; /* NetXen */ 4918311SSukumar.Swaminathan@Sun.COM } reg_off_t; 4928311SSukumar.Swaminathan@Sun.COM 4938311SSukumar.Swaminathan@Sun.COM /* 4948311SSukumar.Swaminathan@Sun.COM * Mbox-8 read maximum debounce count. 4958311SSukumar.Swaminathan@Sun.COM * Reading Mbox-8 could be debouncing, before getting stable value. 4968311SSukumar.Swaminathan@Sun.COM * This is the recommended driver fix from Qlogic along with firmware fix. 4978311SSukumar.Swaminathan@Sun.COM * During testing, maximum count did not cross 3. 4988311SSukumar.Swaminathan@Sun.COM */ 4998311SSukumar.Swaminathan@Sun.COM #define QL_MAX_DEBOUNCE 10 5008311SSukumar.Swaminathan@Sun.COM 5018311SSukumar.Swaminathan@Sun.COM /* 5028311SSukumar.Swaminathan@Sun.COM * Control Status register definitions 5038311SSukumar.Swaminathan@Sun.COM */ 5048311SSukumar.Swaminathan@Sun.COM #define ISP_FUNC_NUM_MASK (BIT_15 | BIT_14) 5058311SSukumar.Swaminathan@Sun.COM #define ISP_FLASH_64K_BANK BIT_3 /* Flash BIOS 64K Bank Select */ 5068311SSukumar.Swaminathan@Sun.COM #define ISP_FLASH_ENABLE BIT_1 /* Flash BIOS Read/Write enable */ 5078311SSukumar.Swaminathan@Sun.COM #define ISP_RESET BIT_0 /* ISP soft reset */ 5088311SSukumar.Swaminathan@Sun.COM 5098311SSukumar.Swaminathan@Sun.COM /* 5108311SSukumar.Swaminathan@Sun.COM * Control Status 24xx register definitions 5118311SSukumar.Swaminathan@Sun.COM */ 5128311SSukumar.Swaminathan@Sun.COM #define FLASH_NVRAM_ACCESS_ERROR BIT_18 5138311SSukumar.Swaminathan@Sun.COM #define DMA_ACTIVE BIT_17 5148311SSukumar.Swaminathan@Sun.COM #define DMA_SHUTDOWN BIT_16 5158311SSukumar.Swaminathan@Sun.COM #define FUNCTION_NUMBER BIT_15 5168311SSukumar.Swaminathan@Sun.COM 5178311SSukumar.Swaminathan@Sun.COM #define MWB_4096_BYTES (BIT_5 | BIT_4) 5188311SSukumar.Swaminathan@Sun.COM #define MWB_2048_BYTES BIT_5 5198311SSukumar.Swaminathan@Sun.COM #define MWB_1024_BYTES BIT_4 5208311SSukumar.Swaminathan@Sun.COM #define MWB_512_BYTES 0 5218311SSukumar.Swaminathan@Sun.COM 5228311SSukumar.Swaminathan@Sun.COM /* 5238311SSukumar.Swaminathan@Sun.COM * Interrupt Control register definitions 5248311SSukumar.Swaminathan@Sun.COM */ 5258311SSukumar.Swaminathan@Sun.COM #define ISP_EN_INT BIT_15 /* ISP enable interrupts. */ 5268311SSukumar.Swaminathan@Sun.COM #define ISP_EN_RISC BIT_3 /* ISP enable RISC interrupts. */ 5278311SSukumar.Swaminathan@Sun.COM 5288311SSukumar.Swaminathan@Sun.COM /* 5298311SSukumar.Swaminathan@Sun.COM * Interrupt Status register definitions 5308311SSukumar.Swaminathan@Sun.COM */ 5318311SSukumar.Swaminathan@Sun.COM #define RISC_INT BIT_3 /* RISC interrupt */ 5328311SSukumar.Swaminathan@Sun.COM 5338311SSukumar.Swaminathan@Sun.COM /* 53411924SDaniel.Beauregard@Sun.COM * NetXen Host/Risc Interrupt register definitions 53511924SDaniel.Beauregard@Sun.COM */ 53611924SDaniel.Beauregard@Sun.COM #define NX_MBX_CMD BIT_0 /* Mailbox command present */ 53711924SDaniel.Beauregard@Sun.COM #define NX_RISC_INT BIT_0 /* RISC interrupt present */ 53811924SDaniel.Beauregard@Sun.COM 53911924SDaniel.Beauregard@Sun.COM /* 5408311SSukumar.Swaminathan@Sun.COM * NVRAM register definitions. 5418311SSukumar.Swaminathan@Sun.COM */ 5428311SSukumar.Swaminathan@Sun.COM #define NV_DESELECT 0 5438311SSukumar.Swaminathan@Sun.COM #define NV_CLOCK BIT_0 5448311SSukumar.Swaminathan@Sun.COM #define NV_SELECT BIT_1 5458311SSukumar.Swaminathan@Sun.COM #define NV_DATA_OUT BIT_2 5468311SSukumar.Swaminathan@Sun.COM #define NV_DATA_IN BIT_3 5478311SSukumar.Swaminathan@Sun.COM #define NV_PR_ENABLE BIT_13 /* protection register enable */ 5488311SSukumar.Swaminathan@Sun.COM #define NV_WR_ENABLE BIT_14 /* write enable */ 5498311SSukumar.Swaminathan@Sun.COM #define NV_BUSY BIT_15 5508311SSukumar.Swaminathan@Sun.COM 5518311SSukumar.Swaminathan@Sun.COM /* 5528311SSukumar.Swaminathan@Sun.COM * Flash/NVRAM 24xx definitions 5538311SSukumar.Swaminathan@Sun.COM */ 5548311SSukumar.Swaminathan@Sun.COM #define FLASH_DATA_FLAG BIT_31 5558311SSukumar.Swaminathan@Sun.COM #define FLASH_CONF_ADDR 0x7FFD0000 5569446SDaniel.Beauregard@Sun.COM #define FLASH_24_25_DATA_ADDR 0x7FF00000 5579446SDaniel.Beauregard@Sun.COM #define FLASH_8100_DATA_ADDR 0x7F800000 5588311SSukumar.Swaminathan@Sun.COM #define FLASH_ADDR_MASK 0x7FFF0000 5598311SSukumar.Swaminathan@Sun.COM 5608311SSukumar.Swaminathan@Sun.COM #define NVRAM_CONF_ADDR 0x7FFF0000 5618311SSukumar.Swaminathan@Sun.COM #define NVRAM_DATA_ADDR 0x7FFE0000 5628311SSukumar.Swaminathan@Sun.COM 5639446SDaniel.Beauregard@Sun.COM #define NVRAM_2200_FUNC0_ADDR 0x0 5649446SDaniel.Beauregard@Sun.COM #define NVRAM_2300_FUNC0_ADDR 0x0 5659446SDaniel.Beauregard@Sun.COM #define NVRAM_2300_FUNC1_ADDR 0x80 5669446SDaniel.Beauregard@Sun.COM #define NVRAM_2400_FUNC0_ADDR 0x80 5679446SDaniel.Beauregard@Sun.COM #define NVRAM_2400_FUNC1_ADDR 0x180 5689446SDaniel.Beauregard@Sun.COM #define NVRAM_2500_FUNC0_ADDR 0x48080 5699446SDaniel.Beauregard@Sun.COM #define NVRAM_2500_FUNC1_ADDR 0x48180 5709446SDaniel.Beauregard@Sun.COM #define NVRAM_8100_FUNC0_ADDR 0xD0080 5719446SDaniel.Beauregard@Sun.COM #define NVRAM_8100_FUNC1_ADDR 0xD0180 57211924SDaniel.Beauregard@Sun.COM #define NVRAM_8021_FUNC0_ADDR 0xF0080 57311924SDaniel.Beauregard@Sun.COM #define NVRAM_8021_FUNC1_ADDR 0xF0180 5748311SSukumar.Swaminathan@Sun.COM 5759446SDaniel.Beauregard@Sun.COM #define VPD_2400_FUNC0_ADDR 0 5769446SDaniel.Beauregard@Sun.COM #define VPD_2400_FUNC1_ADDR 0x100 5779446SDaniel.Beauregard@Sun.COM #define VPD_2500_FUNC0_ADDR 0x48000 5789446SDaniel.Beauregard@Sun.COM #define VPD_2500_FUNC1_ADDR 0x48100 5799446SDaniel.Beauregard@Sun.COM #define VPD_8100_FUNC0_ADDR 0xD0000 5809446SDaniel.Beauregard@Sun.COM #define VPD_8100_FUNC1_ADDR 0xD0400 58111924SDaniel.Beauregard@Sun.COM #define VPD_8021_FUNC0_ADDR 0xFA300 58211924SDaniel.Beauregard@Sun.COM #define VPD_8021_FUNC1_ADDR 0xFA300 5839446SDaniel.Beauregard@Sun.COM #define VPD_SIZE 0x80 5848311SSukumar.Swaminathan@Sun.COM 5859446SDaniel.Beauregard@Sun.COM #define FLASH_2200_FIRMWARE_ADDR 0x20000 5869446SDaniel.Beauregard@Sun.COM #define FLASH_2300_FIRMWARE_ADDR 0x20000 5879446SDaniel.Beauregard@Sun.COM #define FLASH_2400_FIRMWARE_ADDR 0x20000 5889446SDaniel.Beauregard@Sun.COM #define FLASH_2500_FIRMWARE_ADDR 0x20000 5899446SDaniel.Beauregard@Sun.COM #define FLASH_8100_FIRMWARE_ADDR 0xA0000 59011924SDaniel.Beauregard@Sun.COM #define FLASH_8021_FIRMWARE_ADDR 0x40000 59111924SDaniel.Beauregard@Sun.COM #define FLASH_8021_FIRMWARE_SIZE 0x80000 59211924SDaniel.Beauregard@Sun.COM #define FLASH_8021_BOOTLOADER_ADDR 0x4000 59311924SDaniel.Beauregard@Sun.COM #define FLASH_8021_BOOTLOADER_SIZE 0x8000 5949446SDaniel.Beauregard@Sun.COM 5959446SDaniel.Beauregard@Sun.COM #define FLASH_2400_ERRLOG_START_ADDR_0 0 5969446SDaniel.Beauregard@Sun.COM #define FLASH_2400_ERRLOG_START_ADDR_1 0 5978311SSukumar.Swaminathan@Sun.COM #define FLASH_2500_ERRLOG_START_ADDR_0 0x54000 5988311SSukumar.Swaminathan@Sun.COM #define FLASH_2500_ERRLOG_START_ADDR_1 0x54400 5999446SDaniel.Beauregard@Sun.COM #define FLASH_8100_ERRLOG_START_ADDR_0 0xDC000 6009446SDaniel.Beauregard@Sun.COM #define FLASH_8100_ERRLOG_START_ADDR_1 0xDC400 6018311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_SIZE 0x200 6028311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_ENTRY_SIZE 4 6039446SDaniel.Beauregard@Sun.COM 6049446SDaniel.Beauregard@Sun.COM #define FLASH_2400_DESCRIPTOR_TABLE 0 6058311SSukumar.Swaminathan@Sun.COM #define FLASH_2500_DESCRIPTOR_TABLE 0x50000 6069446SDaniel.Beauregard@Sun.COM #define FLASH_8100_DESCRIPTOR_TABLE 0xD8000 60711924SDaniel.Beauregard@Sun.COM #define FLASH_8021_DESCRIPTOR_TABLE 0 6089446SDaniel.Beauregard@Sun.COM 6099446SDaniel.Beauregard@Sun.COM #define FLASH_2400_LAYOUT_TABLE 0x11400 6109446SDaniel.Beauregard@Sun.COM #define FLASH_2500_LAYOUT_TABLE 0x50400 6119446SDaniel.Beauregard@Sun.COM #define FLASH_8100_LAYOUT_TABLE 0xD8400 61211924SDaniel.Beauregard@Sun.COM #define FLASH_8021_LAYOUT_TABLE 0xFC400 6138311SSukumar.Swaminathan@Sun.COM 6148311SSukumar.Swaminathan@Sun.COM /* 6158311SSukumar.Swaminathan@Sun.COM * Flash Error Log Event Codes. 6168311SSukumar.Swaminathan@Sun.COM */ 6178311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_AEN_8002 0x8002 6188311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_AEN_8003 0x8003 6198311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_AEN_8004 0x8004 6208311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_RESET_ERR 0xF00B 6218311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_ISP_ERR 0xF020 6228311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_PARITY_ERR 0xF022 6238311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_NVRAM_CHKSUM_ERR 0xF023 6248311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_FLASH_FW_ERR 0xF024 6258311SSukumar.Swaminathan@Sun.COM 6268311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_END 0x78 6278311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_CHKSUM "RV" 6288311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_SN "SN" 6298311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_PN "PN" 6308311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_PRODID "\x82" 6318311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_LRT 0x90 6328311SSukumar.Swaminathan@Sun.COM #define VPD_TAG_LRTC 0x91 6338311SSukumar.Swaminathan@Sun.COM 6348311SSukumar.Swaminathan@Sun.COM /* 6358311SSukumar.Swaminathan@Sun.COM * RISC to Host Status register definitions. 6368311SSukumar.Swaminathan@Sun.COM */ 6378311SSukumar.Swaminathan@Sun.COM #define RH_RISC_INT BIT_15 /* RISC to Host Intrpt Req */ 6388311SSukumar.Swaminathan@Sun.COM #define RH_RISC_PAUSED BIT_8 /* RISC Paused bit. */ 6398311SSukumar.Swaminathan@Sun.COM 6408311SSukumar.Swaminathan@Sun.COM /* 6418311SSukumar.Swaminathan@Sun.COM * RISC to Host Status register status field definitions. 6428311SSukumar.Swaminathan@Sun.COM */ 6438311SSukumar.Swaminathan@Sun.COM #define ROM_MBX_SUCCESS 0x01 6448311SSukumar.Swaminathan@Sun.COM #define ROM_MBX_ERR 0x02 6458311SSukumar.Swaminathan@Sun.COM #define MBX_SUCCESS 0x10 6468311SSukumar.Swaminathan@Sun.COM #define MBX_ERR 0x11 6478311SSukumar.Swaminathan@Sun.COM #define ASYNC_EVENT 0x12 6488311SSukumar.Swaminathan@Sun.COM #define RESP_UPDATE 0x13 6498311SSukumar.Swaminathan@Sun.COM #define REQ_UPDATE 0x14 6508311SSukumar.Swaminathan@Sun.COM #define SCSI_FAST_POST_16 0x15 6518311SSukumar.Swaminathan@Sun.COM #define SCSI_FAST_POST_32 0x16 6528311SSukumar.Swaminathan@Sun.COM #define CTIO_FAST_POST 0x17 6538311SSukumar.Swaminathan@Sun.COM #define IP_FAST_POST_XMT 0x18 6548311SSukumar.Swaminathan@Sun.COM #define IP_FAST_POST_RCV 0x19 6558311SSukumar.Swaminathan@Sun.COM #define IP_FAST_POST_BRD 0x1a 6568311SSukumar.Swaminathan@Sun.COM #define IP_FAST_POST_RCV_ALN 0x1b 6578311SSukumar.Swaminathan@Sun.COM #define ATIO_UPDATE 0x1c 6588311SSukumar.Swaminathan@Sun.COM #define ATIO_RESP_UPDATE 0x1d 6598311SSukumar.Swaminathan@Sun.COM 6608311SSukumar.Swaminathan@Sun.COM /* 6618311SSukumar.Swaminathan@Sun.COM * HCCR commands. 6628311SSukumar.Swaminathan@Sun.COM */ 6638311SSukumar.Swaminathan@Sun.COM #define HC_RESET_RISC 0x1000 /* Reset RISC */ 6648311SSukumar.Swaminathan@Sun.COM #define HC_PAUSE_RISC 0x2000 /* Pause RISC */ 6658311SSukumar.Swaminathan@Sun.COM #define HC_RELEASE_RISC 0x3000 /* Release RISC from reset. */ 6668311SSukumar.Swaminathan@Sun.COM #define HC_DISABLE_PARITY_PAUSE 0x4001 /* qla2200/2300 - disable parity err */ 6678311SSukumar.Swaminathan@Sun.COM /* RISC pause. */ 6688311SSukumar.Swaminathan@Sun.COM #define HC_SET_HOST_INT 0x5000 /* Set host interrupt */ 6698311SSukumar.Swaminathan@Sun.COM #define HC_CLR_HOST_INT 0x6000 /* Clear HOST interrupt */ 6708311SSukumar.Swaminathan@Sun.COM #define HC_CLR_RISC_INT 0x7000 /* Clear RISC interrupt */ 6718311SSukumar.Swaminathan@Sun.COM #define HC_HOST_INT BIT_7 /* Host interrupt bit */ 6728311SSukumar.Swaminathan@Sun.COM #define HC_RISC_PAUSE BIT_5 /* Pause mode bit */ 6738311SSukumar.Swaminathan@Sun.COM 6748311SSukumar.Swaminathan@Sun.COM /* 6758311SSukumar.Swaminathan@Sun.COM * HCCR commands for 24xx and 25xx. 6768311SSukumar.Swaminathan@Sun.COM */ 6778311SSukumar.Swaminathan@Sun.COM #define HC24_RESET_RISC 0x10000000 /* Reset RISC */ 6788311SSukumar.Swaminathan@Sun.COM #define HC24_CLEAR_RISC_RESET 0x20000000 /* Release RISC from reset. */ 6798311SSukumar.Swaminathan@Sun.COM #define HC24_PAUSE_RISC 0x30000000 /* Pause RISC */ 6808311SSukumar.Swaminathan@Sun.COM #define HC24_RELEASE_PAUSE 0x40000000 /* Release RISC from pause */ 6818311SSukumar.Swaminathan@Sun.COM #define HC24_SET_HOST_INT 0x50000000 /* Set host interrupt */ 6828311SSukumar.Swaminathan@Sun.COM #define HC24_CLR_HOST_INT 0x60000000 /* Clear HOST interrupt */ 6838311SSukumar.Swaminathan@Sun.COM #define HC24_CLR_RISC_INT 0xA0000000 /* Clear RISC interrupt */ 6848311SSukumar.Swaminathan@Sun.COM #define HC24_HOST_INT BIT_6 /* Host to RISC intrpt bit */ 6858311SSukumar.Swaminathan@Sun.COM #define HC24_RISC_RESET BIT_5 /* RISC Reset mode bit. */ 6868311SSukumar.Swaminathan@Sun.COM 6878311SSukumar.Swaminathan@Sun.COM /* 6888311SSukumar.Swaminathan@Sun.COM * ISP Initialization Control Blocks. 6898311SSukumar.Swaminathan@Sun.COM * Little endian except where noted. 6908311SSukumar.Swaminathan@Sun.COM */ 6918311SSukumar.Swaminathan@Sun.COM #define ICB_VERSION 1 6928311SSukumar.Swaminathan@Sun.COM typedef struct ql_init_cb { 6938311SSukumar.Swaminathan@Sun.COM uint8_t version; 6948311SSukumar.Swaminathan@Sun.COM uint8_t reserved; 6958311SSukumar.Swaminathan@Sun.COM 6968311SSukumar.Swaminathan@Sun.COM /* 6978311SSukumar.Swaminathan@Sun.COM * LSB BIT 0 = enable_hard_loop_id 6988311SSukumar.Swaminathan@Sun.COM * LSB BIT 1 = enable_fairness 6998311SSukumar.Swaminathan@Sun.COM * LSB BIT 2 = enable_full_duplex 7008311SSukumar.Swaminathan@Sun.COM * LSB BIT 3 = enable_fast_posting 7018311SSukumar.Swaminathan@Sun.COM * LSB BIT 4 = enable_target_mode 7028311SSukumar.Swaminathan@Sun.COM * LSB BIT 5 = disable_initiator_mode 7038311SSukumar.Swaminathan@Sun.COM * LSB BIT 6 = enable_adisc 7048311SSukumar.Swaminathan@Sun.COM * LSB BIT 7 = enable_target_inquiry_data 7058311SSukumar.Swaminathan@Sun.COM * 7068311SSukumar.Swaminathan@Sun.COM * MSB BIT 0 = enable_port_update_ae 7078311SSukumar.Swaminathan@Sun.COM * MSB BIT 1 = disable_initial_lip 7088311SSukumar.Swaminathan@Sun.COM * MSB BIT 2 = enable_decending_soft_assign 7098311SSukumar.Swaminathan@Sun.COM * MSB BIT 3 = previous_assigned_addressing 7108311SSukumar.Swaminathan@Sun.COM * MSB BIT 4 = enable_stop_q_on_full 7118311SSukumar.Swaminathan@Sun.COM * MSB BIT 5 = enable_full_login_on_lip 7128311SSukumar.Swaminathan@Sun.COM * MSB BIT 6 = enable_node_name 7138311SSukumar.Swaminathan@Sun.COM * MSB BIT 7 = extended_control_block 7148311SSukumar.Swaminathan@Sun.COM */ 7158311SSukumar.Swaminathan@Sun.COM uint8_t firmware_options[2]; 7168311SSukumar.Swaminathan@Sun.COM 7178311SSukumar.Swaminathan@Sun.COM uint8_t max_frame_length[2]; 7188311SSukumar.Swaminathan@Sun.COM uint8_t max_iocb_allocation[2]; 7198311SSukumar.Swaminathan@Sun.COM uint8_t execution_throttle[2]; 7208311SSukumar.Swaminathan@Sun.COM uint8_t login_retry_count; 7218311SSukumar.Swaminathan@Sun.COM uint8_t retry_delay; /* unused */ 7228311SSukumar.Swaminathan@Sun.COM uint8_t port_name[8]; /* Big endian. */ 7238311SSukumar.Swaminathan@Sun.COM uint8_t hard_address[2]; /* option bit 0 */ 7248311SSukumar.Swaminathan@Sun.COM uint8_t inquiry; /* option bit 7 */ 7258311SSukumar.Swaminathan@Sun.COM uint8_t login_timeout; 7268311SSukumar.Swaminathan@Sun.COM uint8_t node_name[8]; /* Big endian */ 7278311SSukumar.Swaminathan@Sun.COM uint8_t request_q_outpointer[2]; 7288311SSukumar.Swaminathan@Sun.COM uint8_t response_q_inpointer[2]; 7298311SSukumar.Swaminathan@Sun.COM uint8_t request_q_length[2]; 7308311SSukumar.Swaminathan@Sun.COM uint8_t response_q_length[2]; 7318311SSukumar.Swaminathan@Sun.COM uint8_t request_q_address[8]; 7328311SSukumar.Swaminathan@Sun.COM uint8_t response_q_address[8]; 7338311SSukumar.Swaminathan@Sun.COM uint8_t lun_enables[2]; 7348311SSukumar.Swaminathan@Sun.COM uint8_t command_resouce_count; 7358311SSukumar.Swaminathan@Sun.COM uint8_t immediate_notify_resouce_count; 7368311SSukumar.Swaminathan@Sun.COM uint8_t timeout[2]; 7378311SSukumar.Swaminathan@Sun.COM uint8_t reserved_2[2]; 7388311SSukumar.Swaminathan@Sun.COM 7398311SSukumar.Swaminathan@Sun.COM /* 7408311SSukumar.Swaminathan@Sun.COM * LSB BIT 0 = Timer operation mode bit 0 7418311SSukumar.Swaminathan@Sun.COM * LSB BIT 1 = Timer operation mode bit 1 7428311SSukumar.Swaminathan@Sun.COM * LSB BIT 2 = Timer operation mode bit 2 7438311SSukumar.Swaminathan@Sun.COM * LSB BIT 3 = Timer operation mode bit 3 7448311SSukumar.Swaminathan@Sun.COM * LSB BIT 4 = P2P Connection option bit 0 7458311SSukumar.Swaminathan@Sun.COM * LSB BIT 5 = P2P Connection option bit 1 7468311SSukumar.Swaminathan@Sun.COM * LSB BIT 6 = P2P Connection option bit 2 7478311SSukumar.Swaminathan@Sun.COM * LSB BIT 7 = Enable Non part on LIHA failure 7488311SSukumar.Swaminathan@Sun.COM * 7498311SSukumar.Swaminathan@Sun.COM * MSB BIT 0 = Enable class 2 7508311SSukumar.Swaminathan@Sun.COM * MSB BIT 1 = Enable ACK0 7518311SSukumar.Swaminathan@Sun.COM * MSB BIT 2 = 7528311SSukumar.Swaminathan@Sun.COM * MSB BIT 3 = 7538311SSukumar.Swaminathan@Sun.COM * MSB BIT 4 = FC Tape Enable 7548311SSukumar.Swaminathan@Sun.COM * MSB BIT 5 = Enable FC Confirm 7558311SSukumar.Swaminathan@Sun.COM * MSB BIT 6 = Enable CRN 7568311SSukumar.Swaminathan@Sun.COM * MSB BIT 7 = 7578311SSukumar.Swaminathan@Sun.COM */ 7588311SSukumar.Swaminathan@Sun.COM uint8_t add_fw_opt[2]; 7598311SSukumar.Swaminathan@Sun.COM 7608311SSukumar.Swaminathan@Sun.COM uint8_t response_accumulation_timer; 7618311SSukumar.Swaminathan@Sun.COM uint8_t interrupt_delay_timer; 7628311SSukumar.Swaminathan@Sun.COM 7638311SSukumar.Swaminathan@Sun.COM /* 7648311SSukumar.Swaminathan@Sun.COM * LSB BIT 0 = Enable Read xfr_rdy 7658311SSukumar.Swaminathan@Sun.COM * LSB BIT 1 = Soft ID only 7668311SSukumar.Swaminathan@Sun.COM * LSB BIT 2 = 7678311SSukumar.Swaminathan@Sun.COM * LSB BIT 3 = 7688311SSukumar.Swaminathan@Sun.COM * LSB BIT 4 = FCP RSP Payload [0] 7698311SSukumar.Swaminathan@Sun.COM * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200 7708311SSukumar.Swaminathan@Sun.COM * LSB BIT 6 = 7718311SSukumar.Swaminathan@Sun.COM * LSB BIT 7 = 7728311SSukumar.Swaminathan@Sun.COM * 7738311SSukumar.Swaminathan@Sun.COM * MSB BIT 0 = Sbus enable - 2300 7748311SSukumar.Swaminathan@Sun.COM * MSB BIT 1 = 7758311SSukumar.Swaminathan@Sun.COM * MSB BIT 2 = 7768311SSukumar.Swaminathan@Sun.COM * MSB BIT 3 = 7778311SSukumar.Swaminathan@Sun.COM * MSB BIT 4 = 7788311SSukumar.Swaminathan@Sun.COM * MSB BIT 5 = enable 50 ohm termination 7798311SSukumar.Swaminathan@Sun.COM * MSB BIT 6 = Data Rate (2300 only) 7808311SSukumar.Swaminathan@Sun.COM * MSB BIT 7 = Data Rate (2300 only) 7818311SSukumar.Swaminathan@Sun.COM */ 7828311SSukumar.Swaminathan@Sun.COM uint8_t special_options[2]; 7838311SSukumar.Swaminathan@Sun.COM 7848311SSukumar.Swaminathan@Sun.COM uint8_t reserved_3[26]; 7858311SSukumar.Swaminathan@Sun.COM } ql_init_cb_t; 7869446SDaniel.Beauregard@Sun.COM 7878311SSukumar.Swaminathan@Sun.COM /* 7888311SSukumar.Swaminathan@Sun.COM * Virtual port definition. 7898311SSukumar.Swaminathan@Sun.COM */ 7908311SSukumar.Swaminathan@Sun.COM typedef struct ql_vp_cfg { 7918311SSukumar.Swaminathan@Sun.COM uint8_t reserved[2]; 7928311SSukumar.Swaminathan@Sun.COM uint8_t options; 7938311SSukumar.Swaminathan@Sun.COM uint8_t hard_prev_addr; 7948311SSukumar.Swaminathan@Sun.COM uint8_t port_name[8]; 7958311SSukumar.Swaminathan@Sun.COM uint8_t node_name[8]; 7968311SSukumar.Swaminathan@Sun.COM } ql_vp_cfg_t; 7978311SSukumar.Swaminathan@Sun.COM 7988311SSukumar.Swaminathan@Sun.COM /* 7998311SSukumar.Swaminathan@Sun.COM * VP options. 8008311SSukumar.Swaminathan@Sun.COM */ 8019611SDaniel.Beauregard@Sun.COM #define VPO_ENABLE_SNS_LOGIN_SCR BIT_6 8028311SSukumar.Swaminathan@Sun.COM #define VPO_TARGET_MODE_DISABLED BIT_5 8038311SSukumar.Swaminathan@Sun.COM #define VPO_INITIATOR_MODE_ENABLED BIT_4 8048311SSukumar.Swaminathan@Sun.COM #define VPO_ENABLED BIT_3 8058311SSukumar.Swaminathan@Sun.COM #define VPO_ID_NOT_ACQUIRED BIT_2 8068311SSukumar.Swaminathan@Sun.COM #define VPO_PREVIOUSLY_ASSIGNED_ID BIT_1 8078311SSukumar.Swaminathan@Sun.COM #define VPO_HARD_ASSIGNED_ID BIT_0 8088311SSukumar.Swaminathan@Sun.COM 8098311SSukumar.Swaminathan@Sun.COM #define ICB_24XX_VERSION 1 8108311SSukumar.Swaminathan@Sun.COM typedef struct ql_init_24xx_cb { 8118311SSukumar.Swaminathan@Sun.COM uint8_t version[2]; 8128311SSukumar.Swaminathan@Sun.COM uint8_t reserved_1[2]; 8138311SSukumar.Swaminathan@Sun.COM uint8_t max_frame_length[2]; 8148311SSukumar.Swaminathan@Sun.COM uint8_t execution_throttle[2]; 8158311SSukumar.Swaminathan@Sun.COM uint8_t exchange_count[2]; 8168311SSukumar.Swaminathan@Sun.COM uint8_t hard_address[2]; 8178311SSukumar.Swaminathan@Sun.COM uint8_t port_name[8]; /* Big endian. */ 8188311SSukumar.Swaminathan@Sun.COM uint8_t node_name[8]; /* Big endian. */ 8198311SSukumar.Swaminathan@Sun.COM 8208311SSukumar.Swaminathan@Sun.COM uint8_t response_q_inpointer[2]; 8218311SSukumar.Swaminathan@Sun.COM uint8_t request_q_outpointer[2]; 8228311SSukumar.Swaminathan@Sun.COM 8238311SSukumar.Swaminathan@Sun.COM uint8_t login_retry_count[2]; 8248311SSukumar.Swaminathan@Sun.COM 8258311SSukumar.Swaminathan@Sun.COM uint8_t prio_request_q_outpointer[2]; 8268311SSukumar.Swaminathan@Sun.COM 8278311SSukumar.Swaminathan@Sun.COM uint8_t response_q_length[2]; 8288311SSukumar.Swaminathan@Sun.COM uint8_t request_q_length[2]; 8298311SSukumar.Swaminathan@Sun.COM 8308311SSukumar.Swaminathan@Sun.COM uint8_t link_down_on_nos[2]; 8318311SSukumar.Swaminathan@Sun.COM 8328311SSukumar.Swaminathan@Sun.COM uint8_t prio_request_q_length[2]; 8338311SSukumar.Swaminathan@Sun.COM uint8_t request_q_address[8]; 8348311SSukumar.Swaminathan@Sun.COM uint8_t response_q_address[8]; 8358311SSukumar.Swaminathan@Sun.COM uint8_t prio_request_q_address[8]; 8369446SDaniel.Beauregard@Sun.COM uint8_t msi_x_vector[2]; 8379446SDaniel.Beauregard@Sun.COM uint8_t reserved_2[6]; 8388311SSukumar.Swaminathan@Sun.COM uint8_t atio_q_inpointer[2]; 8398311SSukumar.Swaminathan@Sun.COM uint8_t atio_q_length[2]; 8408311SSukumar.Swaminathan@Sun.COM uint8_t atio_q_address[8]; 8418311SSukumar.Swaminathan@Sun.COM 8428311SSukumar.Swaminathan@Sun.COM uint8_t interrupt_delay_timer[2]; /* 100us per */ 8438311SSukumar.Swaminathan@Sun.COM uint8_t login_timeout[2]; 8448311SSukumar.Swaminathan@Sun.COM /* 8458311SSukumar.Swaminathan@Sun.COM * BIT 0 = Hard Assigned Loop ID 8468311SSukumar.Swaminathan@Sun.COM * BIT 1 = Enable Fairness 8478311SSukumar.Swaminathan@Sun.COM * BIT 2 = Enable Full-Duplex 8488311SSukumar.Swaminathan@Sun.COM * BIT 3 = Reserved 8498311SSukumar.Swaminathan@Sun.COM * BIT 4 = Target Mode Enable 8508311SSukumar.Swaminathan@Sun.COM * BIT 5 = Initiator Mode Disable 8518311SSukumar.Swaminathan@Sun.COM * BIT 6 = Reserved 8528311SSukumar.Swaminathan@Sun.COM * BIT 7 = Reserved 8538311SSukumar.Swaminathan@Sun.COM * 8548311SSukumar.Swaminathan@Sun.COM * BIT 8 = Reserved 8558311SSukumar.Swaminathan@Sun.COM * BIT 9 = Disable Initial LIP 8568311SSukumar.Swaminathan@Sun.COM * BIT 10 = Descending Loop ID Search 8578311SSukumar.Swaminathan@Sun.COM * BIT 11 = Previous Assigned Loop ID 8588311SSukumar.Swaminathan@Sun.COM * BIT 12 = Reserved 8598311SSukumar.Swaminathan@Sun.COM * BIT 13 = Full Login after LIP 8608311SSukumar.Swaminathan@Sun.COM * BIT 14 = Node Name Option 8618311SSukumar.Swaminathan@Sun.COM * BIT 15-31 = Reserved 8628311SSukumar.Swaminathan@Sun.COM */ 8638311SSukumar.Swaminathan@Sun.COM uint8_t firmware_options_1[4]; 8648311SSukumar.Swaminathan@Sun.COM 8658311SSukumar.Swaminathan@Sun.COM /* 8668311SSukumar.Swaminathan@Sun.COM * BIT 0 = Operation Mode bit 0 8678311SSukumar.Swaminathan@Sun.COM * BIT 1 = Operation Mode bit 1 8688311SSukumar.Swaminathan@Sun.COM * BIT 2 = Operation Mode bit 2 8698311SSukumar.Swaminathan@Sun.COM * BIT 3 = Operation Mode bit 3 8708311SSukumar.Swaminathan@Sun.COM * BIT 4 = Connection Options bit 0 8718311SSukumar.Swaminathan@Sun.COM * BIT 5 = Connection Options bit 1 8728311SSukumar.Swaminathan@Sun.COM * BIT 6 = Connection Options bit 2 8738311SSukumar.Swaminathan@Sun.COM * BIT 7 = Enable Non part on LIHA failure 8748311SSukumar.Swaminathan@Sun.COM * 8758311SSukumar.Swaminathan@Sun.COM * BIT 8 = Enable Class 2 8768311SSukumar.Swaminathan@Sun.COM * BIT 9 = Enable ACK0 8778311SSukumar.Swaminathan@Sun.COM * BIT 10 = Reserved 8788311SSukumar.Swaminathan@Sun.COM * BIT 11 = Enable FC-SP Security 8798311SSukumar.Swaminathan@Sun.COM * BIT 12 = FC Tape Enable 8809446SDaniel.Beauregard@Sun.COM * BIT 13 = Reserved 8819446SDaniel.Beauregard@Sun.COM * BIT 14 = Target PRLI Control 8829446SDaniel.Beauregard@Sun.COM * BIT 15 = Reserved 8839446SDaniel.Beauregard@Sun.COM * 8849446SDaniel.Beauregard@Sun.COM * BIT 16 = Enable Emulated MSIX 8859446SDaniel.Beauregard@Sun.COM * BIT 17 = Reserved 8869446SDaniel.Beauregard@Sun.COM * BIT 18 = Enable Alternate Device Number 8879446SDaniel.Beauregard@Sun.COM * BIT 19 = Enable Alternate Bus Number 8889446SDaniel.Beauregard@Sun.COM * BIT 20 = Enable Translated Address 8899446SDaniel.Beauregard@Sun.COM * BIT 21 = Enable VM Security 8909446SDaniel.Beauregard@Sun.COM * BIT 22 = Enable Interrupt Handshake 8919446SDaniel.Beauregard@Sun.COM * BIT 23 = Enable Multiple Queue 8929446SDaniel.Beauregard@Sun.COM * 8939446SDaniel.Beauregard@Sun.COM * BIT 24 = IOCB Security 8949446SDaniel.Beauregard@Sun.COM * BIT 25 = qos 8959446SDaniel.Beauregard@Sun.COM * BIT 26-31 = Reserved 8968311SSukumar.Swaminathan@Sun.COM */ 8978311SSukumar.Swaminathan@Sun.COM uint8_t firmware_options_2[4]; 8988311SSukumar.Swaminathan@Sun.COM 8998311SSukumar.Swaminathan@Sun.COM /* 9008311SSukumar.Swaminathan@Sun.COM * BIT 0 = Reserved 9018311SSukumar.Swaminathan@Sun.COM * BIT 1 = Soft ID only 9028311SSukumar.Swaminathan@Sun.COM * BIT 2 = Reserved 9038311SSukumar.Swaminathan@Sun.COM * BIT 3 = Reserved 9048311SSukumar.Swaminathan@Sun.COM * BIT 4 = FCP RSP Payload bit 0 9058311SSukumar.Swaminathan@Sun.COM * BIT 5 = FCP RSP Payload bit 1 9068311SSukumar.Swaminathan@Sun.COM * BIT 6 = Enable Rec Out-of-Order data frame handling 9078311SSukumar.Swaminathan@Sun.COM * BIT 7 = Disable Automatic PLOGI on Local Loop 9088311SSukumar.Swaminathan@Sun.COM * 9098311SSukumar.Swaminathan@Sun.COM * BIT 8 = Reserved 9108311SSukumar.Swaminathan@Sun.COM * BIT 9 = Enable Out-of-Order FCP_XFER_RDY relative 9118311SSukumar.Swaminathan@Sun.COM * offset handling 9128311SSukumar.Swaminathan@Sun.COM * BIT 10 = Reserved 9138311SSukumar.Swaminathan@Sun.COM * BIT 11 = Reserved 9148311SSukumar.Swaminathan@Sun.COM * BIT 12 = Reserved 9158311SSukumar.Swaminathan@Sun.COM * BIT 13 = Data Rate bit 0 9168311SSukumar.Swaminathan@Sun.COM * BIT 14 = Data Rate bit 1 9178311SSukumar.Swaminathan@Sun.COM * BIT 15 = Data Rate bit 2 9189446SDaniel.Beauregard@Sun.COM * 9198311SSukumar.Swaminathan@Sun.COM * BIT 16 = 75-ohm Termination Select 9209446SDaniel.Beauregard@Sun.COM * BIT 17 = Enable Multiple FCFs 9219446SDaniel.Beauregard@Sun.COM * BIT 18 = MAC Addressing Mode 9229446SDaniel.Beauregard@Sun.COM * BIT 19 = MAC Addressing Mode 9239446SDaniel.Beauregard@Sun.COM * BIT 20 = MAC Addressing Mode 9249446SDaniel.Beauregard@Sun.COM * BIT 21 = Ethernet Data Rate 9259446SDaniel.Beauregard@Sun.COM * BIT 22 = Ethernet Data Rate 9269446SDaniel.Beauregard@Sun.COM * BIT 23 = Ethernet Data Rate 9279446SDaniel.Beauregard@Sun.COM * 9289446SDaniel.Beauregard@Sun.COM * BIT 24 = Ethernet Data Rate 9299446SDaniel.Beauregard@Sun.COM * BIT 25 = Ethernet Data Rate 9309446SDaniel.Beauregard@Sun.COM * BIT 26 = Enable Ethernet Header ATIO Queue 9319446SDaniel.Beauregard@Sun.COM * BIT 27 = Enable Ethernet Header Response Queue 9329446SDaniel.Beauregard@Sun.COM * BIT 28 = SPMA Selection 9339446SDaniel.Beauregard@Sun.COM * BIT 29 = SPMA Selection 9349446SDaniel.Beauregard@Sun.COM * BIT 30 = Reserved 9359446SDaniel.Beauregard@Sun.COM * BIT 31 = Reserved 9368311SSukumar.Swaminathan@Sun.COM */ 9378311SSukumar.Swaminathan@Sun.COM uint8_t firmware_options_3[4]; 9388311SSukumar.Swaminathan@Sun.COM 9399446SDaniel.Beauregard@Sun.COM uint8_t qos[2]; 9409446SDaniel.Beauregard@Sun.COM uint8_t rid[2]; 9419446SDaniel.Beauregard@Sun.COM 9429446SDaniel.Beauregard@Sun.COM uint8_t reserved_3[4]; 9439446SDaniel.Beauregard@Sun.COM 9449446SDaniel.Beauregard@Sun.COM uint8_t enode_mac_addr[6]; 9459446SDaniel.Beauregard@Sun.COM 9469446SDaniel.Beauregard@Sun.COM uint8_t reserved_4[10]; 9478311SSukumar.Swaminathan@Sun.COM 9488311SSukumar.Swaminathan@Sun.COM /* 9498311SSukumar.Swaminathan@Sun.COM * Multi-ID firmware. 9508311SSukumar.Swaminathan@Sun.COM */ 9518311SSukumar.Swaminathan@Sun.COM uint8_t vp_count[2]; 9528311SSukumar.Swaminathan@Sun.COM 9538311SSukumar.Swaminathan@Sun.COM /* 9548311SSukumar.Swaminathan@Sun.COM * BIT 1 = Allows mode 2 connection option 9558311SSukumar.Swaminathan@Sun.COM */ 9568311SSukumar.Swaminathan@Sun.COM uint8_t global_vp_option[2]; 9578311SSukumar.Swaminathan@Sun.COM 9589446SDaniel.Beauregard@Sun.COM ql_vp_cfg_t vpc[MAX_25_VIRTUAL_PORTS + 1]; 9599446SDaniel.Beauregard@Sun.COM 9609446SDaniel.Beauregard@Sun.COM /* 9619446SDaniel.Beauregard@Sun.COM * Extended Initialization Control Block 9629446SDaniel.Beauregard@Sun.COM */ 9639446SDaniel.Beauregard@Sun.COM ql_ext_icb_8100_t ext_blk; 9648311SSukumar.Swaminathan@Sun.COM } ql_init_24xx_cb_t; 9658311SSukumar.Swaminathan@Sun.COM 9668311SSukumar.Swaminathan@Sun.COM typedef union ql_comb_init_cb { 9678311SSukumar.Swaminathan@Sun.COM ql_init_cb_t cb; 9688311SSukumar.Swaminathan@Sun.COM ql_init_24xx_cb_t cb24; 9698311SSukumar.Swaminathan@Sun.COM } ql_comb_init_cb_t; 9708311SSukumar.Swaminathan@Sun.COM 9718311SSukumar.Swaminathan@Sun.COM /* 9728311SSukumar.Swaminathan@Sun.COM * ISP IP Initialization Control Block. 9738311SSukumar.Swaminathan@Sun.COM * Little endian except where noted. 9748311SSukumar.Swaminathan@Sun.COM */ 9758311SSukumar.Swaminathan@Sun.COM #define IP_ICB_VERSION 1 9768311SSukumar.Swaminathan@Sun.COM typedef struct ql_ip_init_cb { 9778311SSukumar.Swaminathan@Sun.COM uint8_t version; 9788311SSukumar.Swaminathan@Sun.COM uint8_t reserved; 9798311SSukumar.Swaminathan@Sun.COM 9808311SSukumar.Swaminathan@Sun.COM /* 9818311SSukumar.Swaminathan@Sun.COM * LSB BIT 0 = receive_buffer_address_length 9828311SSukumar.Swaminathan@Sun.COM * LSB BIT 1 = fast post broadcast received 9838311SSukumar.Swaminathan@Sun.COM * LSB BIT 2 = allow out of receive buffers AE 9848311SSukumar.Swaminathan@Sun.COM */ 9858311SSukumar.Swaminathan@Sun.COM uint8_t ip_firmware_options[2]; 9868311SSukumar.Swaminathan@Sun.COM uint8_t ip_header_size[2]; 9878311SSukumar.Swaminathan@Sun.COM uint8_t mtu_size[2]; /* max value is 65280 */ 9888311SSukumar.Swaminathan@Sun.COM uint8_t buf_size[2]; 9898311SSukumar.Swaminathan@Sun.COM uint8_t reserved_1[8]; 9908311SSukumar.Swaminathan@Sun.COM uint8_t queue_size[2]; /* 8-1024 */ 9918311SSukumar.Swaminathan@Sun.COM uint8_t low_water_mark[2]; 9928311SSukumar.Swaminathan@Sun.COM uint8_t queue_address[8]; 9938311SSukumar.Swaminathan@Sun.COM uint8_t queue_inpointer[2]; 9948311SSukumar.Swaminathan@Sun.COM uint8_t fast_post_reg_count[2]; /* 0-14 */ 9958311SSukumar.Swaminathan@Sun.COM uint8_t cc[2]; 9968311SSukumar.Swaminathan@Sun.COM uint8_t reserved_2[28]; 9978311SSukumar.Swaminathan@Sun.COM } ql_ip_init_cb_t; 9988311SSukumar.Swaminathan@Sun.COM 9998311SSukumar.Swaminathan@Sun.COM #define IP_ICB_24XX_VERSION 1 10008311SSukumar.Swaminathan@Sun.COM typedef struct ql_ip_init_24xx_cb { 10018311SSukumar.Swaminathan@Sun.COM uint8_t version; 10028311SSukumar.Swaminathan@Sun.COM uint8_t reserved; 10038311SSukumar.Swaminathan@Sun.COM /* 10048311SSukumar.Swaminathan@Sun.COM * LSB BIT 2 = allow out of receive buffers AE 10058311SSukumar.Swaminathan@Sun.COM */ 10068311SSukumar.Swaminathan@Sun.COM uint8_t ip_firmware_options[2]; 10078311SSukumar.Swaminathan@Sun.COM uint8_t ip_header_size[2]; 10088311SSukumar.Swaminathan@Sun.COM uint8_t mtu_size[2]; 10098311SSukumar.Swaminathan@Sun.COM uint8_t buf_size[2]; 10108311SSukumar.Swaminathan@Sun.COM uint8_t reserved_1[10]; 10118311SSukumar.Swaminathan@Sun.COM uint8_t low_water_mark[2]; 10128311SSukumar.Swaminathan@Sun.COM uint8_t reserved_3[12]; 10138311SSukumar.Swaminathan@Sun.COM uint8_t cc[2]; 10148311SSukumar.Swaminathan@Sun.COM uint8_t reserved_2[28]; 10158311SSukumar.Swaminathan@Sun.COM } ql_ip_init_24xx_cb_t; 10168311SSukumar.Swaminathan@Sun.COM 10178311SSukumar.Swaminathan@Sun.COM typedef union ql_comb_ip_init_cb { 10188311SSukumar.Swaminathan@Sun.COM ql_ip_init_cb_t cb; 10198311SSukumar.Swaminathan@Sun.COM ql_ip_init_24xx_cb_t cb24; 10208311SSukumar.Swaminathan@Sun.COM } ql_comb_ip_init_cb_t; 10218311SSukumar.Swaminathan@Sun.COM 10228311SSukumar.Swaminathan@Sun.COM /* 10238311SSukumar.Swaminathan@Sun.COM * f/w module table 10248311SSukumar.Swaminathan@Sun.COM */ 10258311SSukumar.Swaminathan@Sun.COM struct fw_table { 10268311SSukumar.Swaminathan@Sun.COM uint16_t fw_class; 10278311SSukumar.Swaminathan@Sun.COM int8_t *fw_version; 10288311SSukumar.Swaminathan@Sun.COM }; 10298311SSukumar.Swaminathan@Sun.COM 10308311SSukumar.Swaminathan@Sun.COM /* 10318311SSukumar.Swaminathan@Sun.COM * aif function table 10328311SSukumar.Swaminathan@Sun.COM */ 10338311SSukumar.Swaminathan@Sun.COM typedef struct ql_ifunc { 10348311SSukumar.Swaminathan@Sun.COM uint_t (*ifunc)(); 10358311SSukumar.Swaminathan@Sun.COM } ql_ifunc_t; 10368311SSukumar.Swaminathan@Sun.COM 10378311SSukumar.Swaminathan@Sun.COM #define QL_MSIX_AIF 0x0 10388311SSukumar.Swaminathan@Sun.COM #define QL_MSIX_RSPQ 0x1 10398311SSukumar.Swaminathan@Sun.COM #define QL_MSIX_MAXAIF QL_MSIX_RSPQ + 1 10408311SSukumar.Swaminathan@Sun.COM 10418311SSukumar.Swaminathan@Sun.COM /* 10428311SSukumar.Swaminathan@Sun.COM * DMA memory type. 10438311SSukumar.Swaminathan@Sun.COM */ 10448311SSukumar.Swaminathan@Sun.COM typedef enum mem_alloc_type { 10458311SSukumar.Swaminathan@Sun.COM UNKNOWN_MEMORY, 10468311SSukumar.Swaminathan@Sun.COM TASK_MEMORY, 10478311SSukumar.Swaminathan@Sun.COM LITTLE_ENDIAN_DMA, 10488311SSukumar.Swaminathan@Sun.COM BIG_ENDIAN_DMA, 10498311SSukumar.Swaminathan@Sun.COM KERNEL_MEM, 10508311SSukumar.Swaminathan@Sun.COM NO_SWAP_DMA, 10518311SSukumar.Swaminathan@Sun.COM STRUCT_BUF_MEMORY 10528311SSukumar.Swaminathan@Sun.COM } mem_alloc_type_t; 10538311SSukumar.Swaminathan@Sun.COM 10548311SSukumar.Swaminathan@Sun.COM /* 10558311SSukumar.Swaminathan@Sun.COM * DMA memory alignment type. 10568311SSukumar.Swaminathan@Sun.COM */ 10578311SSukumar.Swaminathan@Sun.COM typedef enum men_align_type { 10589156SDaniel.Beauregard@Sun.COM QL_DMA_DATA_ALIGN, 10599156SDaniel.Beauregard@Sun.COM QL_DMA_RING_ALIGN, 10608311SSukumar.Swaminathan@Sun.COM } mem_alignment_t; 10618311SSukumar.Swaminathan@Sun.COM 10628311SSukumar.Swaminathan@Sun.COM /* 10638311SSukumar.Swaminathan@Sun.COM * DMA memory object. 10648311SSukumar.Swaminathan@Sun.COM */ 10658311SSukumar.Swaminathan@Sun.COM typedef struct dma_mem { 10668311SSukumar.Swaminathan@Sun.COM uint64_t alignment; 10678311SSukumar.Swaminathan@Sun.COM void *bp; 10688311SSukumar.Swaminathan@Sun.COM ddi_dma_cookie_t *cookies; 10698311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t acc_handle; 10708311SSukumar.Swaminathan@Sun.COM ddi_dma_handle_t dma_handle; 10718311SSukumar.Swaminathan@Sun.COM ddi_dma_cookie_t cookie; 10728311SSukumar.Swaminathan@Sun.COM uint32_t cookie_count; 10738311SSukumar.Swaminathan@Sun.COM uint32_t size; 10748311SSukumar.Swaminathan@Sun.COM uint32_t memflags; 10758311SSukumar.Swaminathan@Sun.COM mem_alloc_type_t type; 10768311SSukumar.Swaminathan@Sun.COM uint32_t flags; /* Solaris DMA flags. */ 10778311SSukumar.Swaminathan@Sun.COM } dma_mem_t; 10788311SSukumar.Swaminathan@Sun.COM 10798311SSukumar.Swaminathan@Sun.COM /* 10808311SSukumar.Swaminathan@Sun.COM * dma_mem_t memflags defines 10818311SSukumar.Swaminathan@Sun.COM */ 10828311SSukumar.Swaminathan@Sun.COM #define MFLG_32BIT_ONLY BIT_0 10838311SSukumar.Swaminathan@Sun.COM 10848311SSukumar.Swaminathan@Sun.COM /* 10858311SSukumar.Swaminathan@Sun.COM * 24 bit port ID type definition. 10868311SSukumar.Swaminathan@Sun.COM */ 10878311SSukumar.Swaminathan@Sun.COM typedef union { 10888311SSukumar.Swaminathan@Sun.COM struct { 10898311SSukumar.Swaminathan@Sun.COM uint8_t d_id[3]; 10908311SSukumar.Swaminathan@Sun.COM uint8_t rsvd_1; 10918311SSukumar.Swaminathan@Sun.COM }r; 10928311SSukumar.Swaminathan@Sun.COM 10938311SSukumar.Swaminathan@Sun.COM uint32_t b24 : 24; 10948311SSukumar.Swaminathan@Sun.COM 10958311SSukumar.Swaminathan@Sun.COM #if defined(_BIT_FIELDS_LTOH) 10968311SSukumar.Swaminathan@Sun.COM struct { 10978311SSukumar.Swaminathan@Sun.COM uint8_t al_pa; 10988311SSukumar.Swaminathan@Sun.COM uint8_t area; 10998311SSukumar.Swaminathan@Sun.COM uint8_t domain; 11008311SSukumar.Swaminathan@Sun.COM uint8_t rsvd_1; 11018311SSukumar.Swaminathan@Sun.COM }b; 11028311SSukumar.Swaminathan@Sun.COM #elif defined(_BIT_FIELDS_HTOL) 11038311SSukumar.Swaminathan@Sun.COM struct { 11048311SSukumar.Swaminathan@Sun.COM uint8_t domain; 11058311SSukumar.Swaminathan@Sun.COM uint8_t area; 11068311SSukumar.Swaminathan@Sun.COM uint8_t al_pa; 11078311SSukumar.Swaminathan@Sun.COM uint8_t rsvd_1; 11088311SSukumar.Swaminathan@Sun.COM }b; 11098311SSukumar.Swaminathan@Sun.COM #else 11108311SSukumar.Swaminathan@Sun.COM #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined 11118311SSukumar.Swaminathan@Sun.COM #endif 11128311SSukumar.Swaminathan@Sun.COM } port_id_t; 11138311SSukumar.Swaminathan@Sun.COM 11148311SSukumar.Swaminathan@Sun.COM /* 11158311SSukumar.Swaminathan@Sun.COM * Link list definitions. 11168311SSukumar.Swaminathan@Sun.COM */ 11178311SSukumar.Swaminathan@Sun.COM typedef struct ql_link { 11188311SSukumar.Swaminathan@Sun.COM struct ql_link *prev; 11198311SSukumar.Swaminathan@Sun.COM struct ql_link *next; 11208311SSukumar.Swaminathan@Sun.COM void *base_address; 11218311SSukumar.Swaminathan@Sun.COM struct ql_head *head; /* the queue this link is on */ 11228311SSukumar.Swaminathan@Sun.COM } ql_link_t; 11238311SSukumar.Swaminathan@Sun.COM 11248311SSukumar.Swaminathan@Sun.COM typedef struct ql_head { 11258311SSukumar.Swaminathan@Sun.COM ql_link_t *first; 11268311SSukumar.Swaminathan@Sun.COM ql_link_t *last; 11278311SSukumar.Swaminathan@Sun.COM } ql_head_t; 11288311SSukumar.Swaminathan@Sun.COM 11298311SSukumar.Swaminathan@Sun.COM /* 11308311SSukumar.Swaminathan@Sun.COM * This is the per-command structure 11318311SSukumar.Swaminathan@Sun.COM */ 11328311SSukumar.Swaminathan@Sun.COM typedef struct ql_srb { 11338311SSukumar.Swaminathan@Sun.COM /* Command link. */ 11348311SSukumar.Swaminathan@Sun.COM ql_link_t cmd; 11358311SSukumar.Swaminathan@Sun.COM 11368311SSukumar.Swaminathan@Sun.COM /* Watchdog link and timer. */ 11378311SSukumar.Swaminathan@Sun.COM ql_link_t wdg; 11388311SSukumar.Swaminathan@Sun.COM time_t wdg_q_time; 11398311SSukumar.Swaminathan@Sun.COM time_t init_wdg_q_time; 11408311SSukumar.Swaminathan@Sun.COM uint16_t isp_timeout; 11418311SSukumar.Swaminathan@Sun.COM 11428311SSukumar.Swaminathan@Sun.COM /* FCA and FC Transport data. */ 11438311SSukumar.Swaminathan@Sun.COM fc_packet_t *pkt; 11448311SSukumar.Swaminathan@Sun.COM struct ql_adapter_state *ha; 11458311SSukumar.Swaminathan@Sun.COM uint32_t magic_number; 11468311SSukumar.Swaminathan@Sun.COM 11478311SSukumar.Swaminathan@Sun.COM /* unsolicited buffer context. */ 11488311SSukumar.Swaminathan@Sun.COM dma_mem_t ub_buffer; 11498311SSukumar.Swaminathan@Sun.COM uint32_t ub_type; 11508311SSukumar.Swaminathan@Sun.COM uint32_t ub_size; 11518311SSukumar.Swaminathan@Sun.COM 11528311SSukumar.Swaminathan@Sun.COM /* FCP command. */ 11538311SSukumar.Swaminathan@Sun.COM fcp_cmd_t *fcp; 11548311SSukumar.Swaminathan@Sun.COM 11558311SSukumar.Swaminathan@Sun.COM /* Request sense. */ 11568311SSukumar.Swaminathan@Sun.COM uint32_t request_sense_length; 11578311SSukumar.Swaminathan@Sun.COM caddr_t request_sense_ptr; 11588311SSukumar.Swaminathan@Sun.COM 11598311SSukumar.Swaminathan@Sun.COM /* Device queue pointer. */ 11608311SSukumar.Swaminathan@Sun.COM struct ql_lun *lun_queue; 11618311SSukumar.Swaminathan@Sun.COM 11628311SSukumar.Swaminathan@Sun.COM /* Command state/status flags. */ 11638311SSukumar.Swaminathan@Sun.COM volatile uint32_t flags; 11648311SSukumar.Swaminathan@Sun.COM 11658311SSukumar.Swaminathan@Sun.COM /* Command IOCB context. */ 11668311SSukumar.Swaminathan@Sun.COM void (*iocb)(struct ql_adapter_state *, 11678311SSukumar.Swaminathan@Sun.COM struct ql_srb *, void *); 1168*12279SDaniel.Beauregard@Sun.COM struct cmd_entry *request_ring_ptr; 11698311SSukumar.Swaminathan@Sun.COM uint32_t handle; 11708311SSukumar.Swaminathan@Sun.COM uint16_t req_cnt; 11718311SSukumar.Swaminathan@Sun.COM uint8_t retry_count; 1172*12279SDaniel.Beauregard@Sun.COM dma_mem_t sg_dma; 11738311SSukumar.Swaminathan@Sun.COM } ql_srb_t; 11748311SSukumar.Swaminathan@Sun.COM 11758311SSukumar.Swaminathan@Sun.COM #define SRB_ISP_STARTED BIT_0 /* Command sent to ISP. */ 11768311SSukumar.Swaminathan@Sun.COM #define SRB_ISP_COMPLETED BIT_1 /* ISP finished with command. */ 11778311SSukumar.Swaminathan@Sun.COM #define SRB_RETRY BIT_2 /* Driver retrying command. */ 11788311SSukumar.Swaminathan@Sun.COM #define SRB_POLL BIT_3 /* Poll for completion. */ 11798311SSukumar.Swaminathan@Sun.COM #define SRB_WATCHDOG_ENABLED BIT_4 /* Command on watchdog list. */ 11808311SSukumar.Swaminathan@Sun.COM #define SRB_ABORT BIT_5 /* SRB to be aborted. */ 11818311SSukumar.Swaminathan@Sun.COM #define SRB_UB_IN_FCA BIT_6 /* FCA holds unsolicited buffer */ 11828311SSukumar.Swaminathan@Sun.COM #define SRB_UB_IN_ISP BIT_7 /* ISP holds unsolicited buffer */ 11838311SSukumar.Swaminathan@Sun.COM #define SRB_UB_CALLBACK BIT_8 /* Unsolicited callback needed. */ 11848311SSukumar.Swaminathan@Sun.COM #define SRB_UB_RSCN BIT_9 /* Unsolicited RSCN callback. */ 11858311SSukumar.Swaminathan@Sun.COM #define SRB_UB_FCP BIT_10 /* Unsolicited RSCN callback. */ 11868311SSukumar.Swaminathan@Sun.COM #define SRB_FCP_CMD_PKT BIT_11 /* FCP command type packet. */ 11878311SSukumar.Swaminathan@Sun.COM #define SRB_FCP_DATA_PKT BIT_12 /* FCP data type packet. */ 11888311SSukumar.Swaminathan@Sun.COM #define SRB_FCP_RSP_PKT BIT_13 /* FCP response type packet. */ 11898311SSukumar.Swaminathan@Sun.COM #define SRB_IP_PKT BIT_14 /* IP type packet. */ 11908311SSukumar.Swaminathan@Sun.COM #define SRB_GENERIC_SERVICES_PKT BIT_15 /* Generic services type packet */ 11918311SSukumar.Swaminathan@Sun.COM #define SRB_COMMAND_TIMEOUT BIT_16 /* Command timed out. */ 11928311SSukumar.Swaminathan@Sun.COM #define SRB_ABORTING BIT_17 /* SRB aborting. */ 11938311SSukumar.Swaminathan@Sun.COM #define SRB_IN_DEVICE_QUEUE BIT_18 /* In Device Queue */ 11948311SSukumar.Swaminathan@Sun.COM #define SRB_IN_TOKEN_ARRAY BIT_19 /* In Token Array */ 11958311SSukumar.Swaminathan@Sun.COM #define SRB_UB_FREE_REQUESTED BIT_20 /* UB Free requested */ 11968311SSukumar.Swaminathan@Sun.COM #define SRB_UB_ACQUIRED BIT_21 /* UB selected for upcall */ 11978311SSukumar.Swaminathan@Sun.COM #define SRB_MS_PKT BIT_22 /* Management Service pkt */ 11989446SDaniel.Beauregard@Sun.COM #define SRB_ELS_PKT BIT_23 /* Extended Link Services pkt */ 11998311SSukumar.Swaminathan@Sun.COM 12008311SSukumar.Swaminathan@Sun.COM /* 12018311SSukumar.Swaminathan@Sun.COM * This byte will be used to define flags for the LUN on the target. 12028311SSukumar.Swaminathan@Sun.COM * Presently, we have untagged-command as one flag. Others can be 12038311SSukumar.Swaminathan@Sun.COM * added later, if needed. 12048311SSukumar.Swaminathan@Sun.COM */ 12058311SSukumar.Swaminathan@Sun.COM typedef struct tgt_lun_flags { 12068311SSukumar.Swaminathan@Sun.COM uint8_t 12078311SSukumar.Swaminathan@Sun.COM untagged_pending:1, 12088311SSukumar.Swaminathan@Sun.COM unused_bits:7; 12098311SSukumar.Swaminathan@Sun.COM } tgt_lun_flags_t; 12108311SSukumar.Swaminathan@Sun.COM 12118311SSukumar.Swaminathan@Sun.COM #define QL_IS_UNTAGGED_PENDING(q, lun_num) \ 12128311SSukumar.Swaminathan@Sun.COM ((q->lun_flags[lun_num].untagged_pending == TRUE) ? 1 : 0) 12138311SSukumar.Swaminathan@Sun.COM #define QL_SET_UNTAGGED_PENDING(q, lun_num) \ 12148311SSukumar.Swaminathan@Sun.COM (q->lun_flags[lun_num].untagged_pending = TRUE) 12158311SSukumar.Swaminathan@Sun.COM #define QL_CLEAR_UNTAGGED_PENDING(q, lun_num) \ 12168311SSukumar.Swaminathan@Sun.COM (q->lun_flags[lun_num].untagged_pending = FALSE) 12178311SSukumar.Swaminathan@Sun.COM 12188311SSukumar.Swaminathan@Sun.COM /* 12198311SSukumar.Swaminathan@Sun.COM * Fibre Channel LUN Queue structure 12208311SSukumar.Swaminathan@Sun.COM */ 12218311SSukumar.Swaminathan@Sun.COM typedef struct ql_lun { 12228311SSukumar.Swaminathan@Sun.COM /* Head command link. */ 12238311SSukumar.Swaminathan@Sun.COM ql_head_t cmd; 12248311SSukumar.Swaminathan@Sun.COM 12258311SSukumar.Swaminathan@Sun.COM struct ql_target *target_queue; 12268311SSukumar.Swaminathan@Sun.COM 12278311SSukumar.Swaminathan@Sun.COM uint32_t flags; 12288311SSukumar.Swaminathan@Sun.COM 12298311SSukumar.Swaminathan@Sun.COM /* LUN execution throttle. */ 12308311SSukumar.Swaminathan@Sun.COM uint16_t lun_outcnt; 12318311SSukumar.Swaminathan@Sun.COM 12328311SSukumar.Swaminathan@Sun.COM uint16_t lun_no; 12338311SSukumar.Swaminathan@Sun.COM 12348311SSukumar.Swaminathan@Sun.COM ql_link_t link; 12358311SSukumar.Swaminathan@Sun.COM } ql_lun_t; 12368311SSukumar.Swaminathan@Sun.COM 12378311SSukumar.Swaminathan@Sun.COM /* 12388311SSukumar.Swaminathan@Sun.COM * LUN Queue flags 12398311SSukumar.Swaminathan@Sun.COM */ 12408311SSukumar.Swaminathan@Sun.COM #define LQF_UNTAGGED_PENDING BIT_0 12418311SSukumar.Swaminathan@Sun.COM 12428311SSukumar.Swaminathan@Sun.COM /* 12438311SSukumar.Swaminathan@Sun.COM * Fibre Channel Device Queue structure 12448311SSukumar.Swaminathan@Sun.COM */ 12458311SSukumar.Swaminathan@Sun.COM typedef struct ql_target { 12468311SSukumar.Swaminathan@Sun.COM /* Device queue lock. */ 12478311SSukumar.Swaminathan@Sun.COM kmutex_t mutex; 12488311SSukumar.Swaminathan@Sun.COM 12498311SSukumar.Swaminathan@Sun.COM /* Head target command link. */ 12508311SSukumar.Swaminathan@Sun.COM ql_head_t tgt_cmd; 12518311SSukumar.Swaminathan@Sun.COM 12528311SSukumar.Swaminathan@Sun.COM volatile uint32_t flags; 12538311SSukumar.Swaminathan@Sun.COM port_id_t d_id; 12548311SSukumar.Swaminathan@Sun.COM uint16_t loop_id; 12558311SSukumar.Swaminathan@Sun.COM volatile uint16_t outcnt; /* # of cmds running in ISP */ 12568311SSukumar.Swaminathan@Sun.COM uint32_t iidma_rate; 12578311SSukumar.Swaminathan@Sun.COM 12588311SSukumar.Swaminathan@Sun.COM /* Device link. */ 12598311SSukumar.Swaminathan@Sun.COM ql_link_t device; 12608311SSukumar.Swaminathan@Sun.COM 12618311SSukumar.Swaminathan@Sun.COM /* Head watchdog link. */ 12628311SSukumar.Swaminathan@Sun.COM ql_head_t wdg; 12638311SSukumar.Swaminathan@Sun.COM 12648311SSukumar.Swaminathan@Sun.COM /* Unsolicited buffer IP data. */ 12658311SSukumar.Swaminathan@Sun.COM uint32_t ub_frame_ro; 12668311SSukumar.Swaminathan@Sun.COM uint16_t ub_sequence_length; 12678311SSukumar.Swaminathan@Sun.COM uint16_t ub_loop_id; 12688311SSukumar.Swaminathan@Sun.COM uint8_t ub_total_seg_cnt; 12698311SSukumar.Swaminathan@Sun.COM uint8_t ub_seq_cnt; 12708311SSukumar.Swaminathan@Sun.COM uint8_t ub_seq_id; 12718311SSukumar.Swaminathan@Sun.COM 12728311SSukumar.Swaminathan@Sun.COM /* Port down retry counter. */ 12738311SSukumar.Swaminathan@Sun.COM uint16_t port_down_retry_count; 12748311SSukumar.Swaminathan@Sun.COM uint16_t qfull_retry_count; 12758311SSukumar.Swaminathan@Sun.COM 12768311SSukumar.Swaminathan@Sun.COM /* logout sent state */ 12778311SSukumar.Swaminathan@Sun.COM uint8_t logout_sent; 12788311SSukumar.Swaminathan@Sun.COM 12798311SSukumar.Swaminathan@Sun.COM /* Data from Port database matches machine type. */ 12808311SSukumar.Swaminathan@Sun.COM uint8_t master_state; 12818311SSukumar.Swaminathan@Sun.COM uint8_t slave_state; 12828311SSukumar.Swaminathan@Sun.COM port_id_t hard_addr; 12838311SSukumar.Swaminathan@Sun.COM uint8_t port_name[8]; 12848311SSukumar.Swaminathan@Sun.COM uint8_t node_name[8]; 12858311SSukumar.Swaminathan@Sun.COM uint16_t cmn_features; 12868311SSukumar.Swaminathan@Sun.COM uint16_t conc_sequences; 12878311SSukumar.Swaminathan@Sun.COM uint16_t relative_offset; 12888311SSukumar.Swaminathan@Sun.COM uint16_t class3_recipient_ctl; 12898311SSukumar.Swaminathan@Sun.COM uint16_t class3_rcv_data_size; 12908311SSukumar.Swaminathan@Sun.COM uint16_t class3_conc_sequences; 12918311SSukumar.Swaminathan@Sun.COM uint16_t class3_open_sequences_per_exch; 12928311SSukumar.Swaminathan@Sun.COM uint16_t prli_payload_length; 12938311SSukumar.Swaminathan@Sun.COM uint16_t prli_svc_param_word_0; 12948311SSukumar.Swaminathan@Sun.COM uint16_t prli_svc_param_word_3; 12958311SSukumar.Swaminathan@Sun.COM 12968311SSukumar.Swaminathan@Sun.COM /* LUN context. */ 12978311SSukumar.Swaminathan@Sun.COM ql_head_t lun_queues; 12988311SSukumar.Swaminathan@Sun.COM ql_lun_t *last_lun_queue; 12998311SSukumar.Swaminathan@Sun.COM } ql_tgt_t; 13008311SSukumar.Swaminathan@Sun.COM 13018311SSukumar.Swaminathan@Sun.COM /* 13028311SSukumar.Swaminathan@Sun.COM * Target Queue flags 13038311SSukumar.Swaminathan@Sun.COM */ 13048311SSukumar.Swaminathan@Sun.COM #define TQF_TAPE_DEVICE BIT_0 13058311SSukumar.Swaminathan@Sun.COM #define TQF_QUEUE_SUSPENDED BIT_1 /* Queue suspended. */ 13068311SSukumar.Swaminathan@Sun.COM #define TQF_FABRIC_DEVICE BIT_2 13078311SSukumar.Swaminathan@Sun.COM #define TQF_INITIATOR_DEVICE BIT_3 13088311SSukumar.Swaminathan@Sun.COM #define TQF_RSCN_RCVD BIT_4 13098311SSukumar.Swaminathan@Sun.COM #define TQF_NEED_AUTHENTICATION BIT_5 13108311SSukumar.Swaminathan@Sun.COM #define TQF_PLOGI_PROGRS BIT_6 13118311SSukumar.Swaminathan@Sun.COM #define TQF_IIDMA_NEEDED BIT_7 13129446SDaniel.Beauregard@Sun.COM /* 13139446SDaniel.Beauregard@Sun.COM * Tempoary N_Port information 13149446SDaniel.Beauregard@Sun.COM */ 13159446SDaniel.Beauregard@Sun.COM typedef struct ql_n_port_info { 13169446SDaniel.Beauregard@Sun.COM uint16_t n_port_handle; 13179446SDaniel.Beauregard@Sun.COM uint8_t port_name[8]; /* Big endian. */ 13189446SDaniel.Beauregard@Sun.COM uint8_t node_name[8]; /* Big endian. */ 13199446SDaniel.Beauregard@Sun.COM } ql_n_port_info_t; 13208311SSukumar.Swaminathan@Sun.COM 13218311SSukumar.Swaminathan@Sun.COM /* 13228311SSukumar.Swaminathan@Sun.COM * iiDMA 13238311SSukumar.Swaminathan@Sun.COM */ 13248311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_INIT 0xffffffff /* init state */ 13258311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_NDEF 0xfffffffe /* not defined in conf file */ 13268311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_1GB 0x0 13278311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_2GB 0x1 13288311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_4GB 0x3 13298311SSukumar.Swaminathan@Sun.COM #define IIDMA_RATE_8GB 0x4 13309446SDaniel.Beauregard@Sun.COM #define IIDMA_RATE_10GB 0x13 13319446SDaniel.Beauregard@Sun.COM #define IIDMA_RATE_MAX IIDMA_RATE_10GB 13328311SSukumar.Swaminathan@Sun.COM 13338311SSukumar.Swaminathan@Sun.COM /* 13348311SSukumar.Swaminathan@Sun.COM * Kernel statistic structure definitions. 13358311SSukumar.Swaminathan@Sun.COM */ 13368311SSukumar.Swaminathan@Sun.COM typedef struct ql_device_stat { 13378311SSukumar.Swaminathan@Sun.COM int logouts_recvd; 13388311SSukumar.Swaminathan@Sun.COM int task_mgmt_failures; 13398311SSukumar.Swaminathan@Sun.COM int data_ro_mismatches; 13408311SSukumar.Swaminathan@Sun.COM int dl_len_mismatches; 13418311SSukumar.Swaminathan@Sun.COM } ql_device_stat_t; 13428311SSukumar.Swaminathan@Sun.COM 13438311SSukumar.Swaminathan@Sun.COM typedef struct ql_adapter_24xx_stat { 13448311SSukumar.Swaminathan@Sun.COM int version; /* version of this struct */ 13458311SSukumar.Swaminathan@Sun.COM int lip_count; /* lips forced */ 13468311SSukumar.Swaminathan@Sun.COM int ncmds; /* outstanding commands */ 13478311SSukumar.Swaminathan@Sun.COM ql_adapter_revlvl_t revlvl; /* adapter revision levels */ 13488311SSukumar.Swaminathan@Sun.COM ql_device_stat_t d_stats[MAX_24_FIBRE_DEVICES]; /* per device stats */ 13498311SSukumar.Swaminathan@Sun.COM } ql_adapter_stat_t; 13508311SSukumar.Swaminathan@Sun.COM 13518311SSukumar.Swaminathan@Sun.COM /* 13528311SSukumar.Swaminathan@Sun.COM * Firmware code segment. 13538311SSukumar.Swaminathan@Sun.COM */ 13548311SSukumar.Swaminathan@Sun.COM #define MAX_RISC_CODE_SEGMENTS 3 13558311SSukumar.Swaminathan@Sun.COM typedef struct fw_code { 13568311SSukumar.Swaminathan@Sun.COM caddr_t code; 13578311SSukumar.Swaminathan@Sun.COM uint32_t addr; 13588311SSukumar.Swaminathan@Sun.COM uint32_t length; 13598311SSukumar.Swaminathan@Sun.COM } ql_fw_code_t; 13608311SSukumar.Swaminathan@Sun.COM 13618311SSukumar.Swaminathan@Sun.COM /* diagnostic els ECHO defines */ 13628311SSukumar.Swaminathan@Sun.COM #define QL_ECHO_CMD 0x10000000 /* echo opcode */ 13638311SSukumar.Swaminathan@Sun.COM #define QL_ECHO_CMD_LENGTH 220 /* command length */ 13648311SSukumar.Swaminathan@Sun.COM 13658311SSukumar.Swaminathan@Sun.COM /* DUMP state flags. */ 13668311SSukumar.Swaminathan@Sun.COM #define QL_DUMPING BIT_0 13678311SSukumar.Swaminathan@Sun.COM #define QL_DUMP_VALID BIT_1 13688311SSukumar.Swaminathan@Sun.COM #define QL_DUMP_UPLOADED BIT_2 13698311SSukumar.Swaminathan@Sun.COM 13709156SDaniel.Beauregard@Sun.COM typedef struct el_trace_desc { 13719156SDaniel.Beauregard@Sun.COM kmutex_t mutex; 13729156SDaniel.Beauregard@Sun.COM uint16_t next; 13739156SDaniel.Beauregard@Sun.COM uint32_t trace_buffer_size; 13749156SDaniel.Beauregard@Sun.COM char *trace_buffer; 13759156SDaniel.Beauregard@Sun.COM } el_trace_desc_t; 13769156SDaniel.Beauregard@Sun.COM 13778311SSukumar.Swaminathan@Sun.COM /* 137811541SDaniel.Beauregard@Sun.COM * NVRAM cache descriptor. 137911541SDaniel.Beauregard@Sun.COM */ 138011541SDaniel.Beauregard@Sun.COM typedef struct nvram_cache_desc { 138111541SDaniel.Beauregard@Sun.COM kmutex_t mutex; 138211541SDaniel.Beauregard@Sun.COM uint32_t valid; 138311541SDaniel.Beauregard@Sun.COM uint32_t size; 138411541SDaniel.Beauregard@Sun.COM void *cache; 138511541SDaniel.Beauregard@Sun.COM } nvram_cache_desc_t; 138611541SDaniel.Beauregard@Sun.COM 138711541SDaniel.Beauregard@Sun.COM /* 13888311SSukumar.Swaminathan@Sun.COM * ql attach progress indication 13898311SSukumar.Swaminathan@Sun.COM */ 13908311SSukumar.Swaminathan@Sun.COM #define QL_SOFT_STATE_ALLOCED BIT_0 13918311SSukumar.Swaminathan@Sun.COM #define QL_REGS_MAPPED BIT_1 13928311SSukumar.Swaminathan@Sun.COM #define QL_HBA_BUFFER_SETUP BIT_2 13938311SSukumar.Swaminathan@Sun.COM #define QL_MUTEX_CV_INITED BIT_3 13948311SSukumar.Swaminathan@Sun.COM #define QL_INTR_ADDED BIT_4 13958311SSukumar.Swaminathan@Sun.COM #define QL_CONFIG_SPACE_SETUP BIT_5 13968311SSukumar.Swaminathan@Sun.COM #define QL_TASK_DAEMON_STARTED BIT_6 13978311SSukumar.Swaminathan@Sun.COM #define QL_KSTAT_CREATED BIT_7 13988311SSukumar.Swaminathan@Sun.COM #define QL_MINOR_NODE_CREATED BIT_8 13998311SSukumar.Swaminathan@Sun.COM #define QL_FCA_TRAN_ALLOCED BIT_9 14008311SSukumar.Swaminathan@Sun.COM #define QL_FCA_ATTACH_DONE BIT_10 14018311SSukumar.Swaminathan@Sun.COM #define QL_IOMAP_IOBASE_MAPPED BIT_11 14029446SDaniel.Beauregard@Sun.COM #define QL_N_PORT_INFO_CREATED BIT_12 140311924SDaniel.Beauregard@Sun.COM #define QL_DB_IOBASE_MAPPED BIT_13 14048311SSukumar.Swaminathan@Sun.COM /* Device queue head list size (based on AL_PA address). */ 14058311SSukumar.Swaminathan@Sun.COM #define DEVICE_HEAD_LIST_SIZE 0x81 14068311SSukumar.Swaminathan@Sun.COM 140711924SDaniel.Beauregard@Sun.COM struct legacy_intr_set { 140811924SDaniel.Beauregard@Sun.COM uint32_t int_vec_bit; 140911924SDaniel.Beauregard@Sun.COM uint32_t tgt_status_reg; 141011924SDaniel.Beauregard@Sun.COM uint32_t tgt_mask_reg; 141111924SDaniel.Beauregard@Sun.COM uint32_t pci_int_reg; 141211924SDaniel.Beauregard@Sun.COM }; 141311924SDaniel.Beauregard@Sun.COM 14148311SSukumar.Swaminathan@Sun.COM /* 14158311SSukumar.Swaminathan@Sun.COM * Adapter state structure. 14168311SSukumar.Swaminathan@Sun.COM */ 14178311SSukumar.Swaminathan@Sun.COM typedef struct ql_adapter_state { 14188311SSukumar.Swaminathan@Sun.COM ql_link_t hba; 14198311SSukumar.Swaminathan@Sun.COM 14208311SSukumar.Swaminathan@Sun.COM kmutex_t mutex; 14218311SSukumar.Swaminathan@Sun.COM volatile uint32_t flags; /* State flags. */ 14228311SSukumar.Swaminathan@Sun.COM uint32_t state; 14238311SSukumar.Swaminathan@Sun.COM port_id_t d_id; 14248311SSukumar.Swaminathan@Sun.COM uint16_t loop_id; 14258311SSukumar.Swaminathan@Sun.COM uint8_t topology; 14268311SSukumar.Swaminathan@Sun.COM uint16_t sfp_stat; 14278311SSukumar.Swaminathan@Sun.COM 14288311SSukumar.Swaminathan@Sun.COM uint16_t idle_timer; 14298311SSukumar.Swaminathan@Sun.COM uint8_t loop_down_abort_time; 14308311SSukumar.Swaminathan@Sun.COM uint8_t port_retry_timer; 14318311SSukumar.Swaminathan@Sun.COM uint8_t loop_down_timer; 14328311SSukumar.Swaminathan@Sun.COM uint8_t watchdog_timer; 14338311SSukumar.Swaminathan@Sun.COM uint16_t r_a_tov; /* 2 * R_A_TOV + 5 */ 14348311SSukumar.Swaminathan@Sun.COM 14358311SSukumar.Swaminathan@Sun.COM /* Task Daemon context. */ 14368311SSukumar.Swaminathan@Sun.COM callb_cpr_t cprinfo; 14378311SSukumar.Swaminathan@Sun.COM kmutex_t task_daemon_mutex; 14388311SSukumar.Swaminathan@Sun.COM kcondvar_t cv_dr_suspended; 14398311SSukumar.Swaminathan@Sun.COM kcondvar_t cv_task_daemon; 14408311SSukumar.Swaminathan@Sun.COM volatile uint32_t task_daemon_flags; 14418311SSukumar.Swaminathan@Sun.COM ql_head_t callback_queue; 14428311SSukumar.Swaminathan@Sun.COM 14438311SSukumar.Swaminathan@Sun.COM /* Interrupt context. */ 14448311SSukumar.Swaminathan@Sun.COM kmutex_t intr_mutex; 144511924SDaniel.Beauregard@Sun.COM caddr_t iobase; 14468311SSukumar.Swaminathan@Sun.COM uint8_t rev_id; 14478311SSukumar.Swaminathan@Sun.COM uint16_t device_id; 14488311SSukumar.Swaminathan@Sun.COM uint16_t subsys_id; 14498311SSukumar.Swaminathan@Sun.COM uint16_t subven_id; 14508311SSukumar.Swaminathan@Sun.COM uint16_t ven_id; 14518311SSukumar.Swaminathan@Sun.COM uint16_t fw_class; 14528311SSukumar.Swaminathan@Sun.COM ql_srb_t *status_srb; 14538311SSukumar.Swaminathan@Sun.COM volatile uint8_t intr_claimed; 14548311SSukumar.Swaminathan@Sun.COM 14558311SSukumar.Swaminathan@Sun.COM /* 14568311SSukumar.Swaminathan@Sun.COM * ISP request queue, response queue, mailbox buffer and 14578311SSukumar.Swaminathan@Sun.COM * IP receive queue buffer. 14588311SSukumar.Swaminathan@Sun.COM */ 14598311SSukumar.Swaminathan@Sun.COM dma_mem_t hba_buf; 14608311SSukumar.Swaminathan@Sun.COM 14618311SSukumar.Swaminathan@Sun.COM /* ISP request queue context. */ 14628311SSukumar.Swaminathan@Sun.COM kmutex_t req_ring_mutex; 14638311SSukumar.Swaminathan@Sun.COM struct cmd_entry *request_ring_bp; 14648311SSukumar.Swaminathan@Sun.COM struct cmd_entry *request_ring_ptr; 14658311SSukumar.Swaminathan@Sun.COM uint64_t request_dvma; 14668311SSukumar.Swaminathan@Sun.COM uint16_t req_ring_index; 14678311SSukumar.Swaminathan@Sun.COM uint16_t req_q_cnt; /* # of available entries. */ 14688311SSukumar.Swaminathan@Sun.COM ql_head_t pending_cmds; 14698311SSukumar.Swaminathan@Sun.COM ql_srb_t **outstanding_cmds; 14708311SSukumar.Swaminathan@Sun.COM uint16_t osc_index; 14718311SSukumar.Swaminathan@Sun.COM 14728311SSukumar.Swaminathan@Sun.COM /* ISP response queue context. */ 14738311SSukumar.Swaminathan@Sun.COM struct sts_entry *response_ring_bp; 14748311SSukumar.Swaminathan@Sun.COM struct sts_entry *response_ring_ptr; 14758311SSukumar.Swaminathan@Sun.COM uint64_t response_dvma; 14768311SSukumar.Swaminathan@Sun.COM uint16_t rsp_ring_index; 14778311SSukumar.Swaminathan@Sun.COM uint16_t isp_rsp_index; 14788311SSukumar.Swaminathan@Sun.COM 14798311SSukumar.Swaminathan@Sun.COM /* Mailbox context. */ 14808311SSukumar.Swaminathan@Sun.COM kmutex_t mbx_mutex; 14818311SSukumar.Swaminathan@Sun.COM caddr_t mbx_bp; 14828311SSukumar.Swaminathan@Sun.COM struct mbx_cmd *mcp; 14838311SSukumar.Swaminathan@Sun.COM kcondvar_t cv_mbx_wait; 14848311SSukumar.Swaminathan@Sun.COM kcondvar_t cv_mbx_intr; 14858311SSukumar.Swaminathan@Sun.COM volatile uint8_t mailbox_flags; 14868311SSukumar.Swaminathan@Sun.COM 14878311SSukumar.Swaminathan@Sun.COM /* ISP receive buffer queue context. */ 14888311SSukumar.Swaminathan@Sun.COM ql_tgt_t *rcv_dev_q; 14898311SSukumar.Swaminathan@Sun.COM struct rcvbuf *rcvbuf_ring_bp; 14908311SSukumar.Swaminathan@Sun.COM struct rcvbuf *rcvbuf_ring_ptr; 14918311SSukumar.Swaminathan@Sun.COM uint64_t rcvbuf_dvma; 14928311SSukumar.Swaminathan@Sun.COM uint16_t rcvbuf_ring_index; 14938311SSukumar.Swaminathan@Sun.COM 14948311SSukumar.Swaminathan@Sun.COM /* Unsolicited buffer data. */ 14958311SSukumar.Swaminathan@Sun.COM uint16_t ub_outcnt; 14968311SSukumar.Swaminathan@Sun.COM uint8_t ub_seq_id; 14978311SSukumar.Swaminathan@Sun.COM uint8_t ub_command_count; 14988311SSukumar.Swaminathan@Sun.COM uint8_t ub_notify_count; 14998311SSukumar.Swaminathan@Sun.COM uint32_t ub_allocated; 15008311SSukumar.Swaminathan@Sun.COM kmutex_t ub_mutex; 15018311SSukumar.Swaminathan@Sun.COM kcondvar_t cv_ub; 15028311SSukumar.Swaminathan@Sun.COM fc_unsol_buf_t **ub_array; 15038311SSukumar.Swaminathan@Sun.COM 15048311SSukumar.Swaminathan@Sun.COM /* Head of device queue list. */ 15058311SSukumar.Swaminathan@Sun.COM ql_head_t *dev; 15068311SSukumar.Swaminathan@Sun.COM 15078311SSukumar.Swaminathan@Sun.COM /* Kernel statistics. */ 15088311SSukumar.Swaminathan@Sun.COM kstat_t *k_stats; 15098311SSukumar.Swaminathan@Sun.COM ql_adapter_stat_t *adapter_stats; 15108311SSukumar.Swaminathan@Sun.COM 15118311SSukumar.Swaminathan@Sun.COM /* Solaris adapter configuration data */ 15128311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t dev_handle; 15138311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t pci_handle; /* config space */ 15148311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t iomap_dev_handle; 15158311SSukumar.Swaminathan@Sun.COM caddr_t iomap_iobase; 15168311SSukumar.Swaminathan@Sun.COM dev_info_t *dip; 15178311SSukumar.Swaminathan@Sun.COM ddi_iblock_cookie_t iblock_cookie; 15188311SSukumar.Swaminathan@Sun.COM fc_fca_tran_t *tran; 15199156SDaniel.Beauregard@Sun.COM uint32_t instance; 15208311SSukumar.Swaminathan@Sun.COM int8_t *devpath; 15218311SSukumar.Swaminathan@Sun.COM uint32_t fru_hba_index; 15228311SSukumar.Swaminathan@Sun.COM uint32_t fru_port_index; 15238311SSukumar.Swaminathan@Sun.COM uint8_t adapInfo[18]; 15248311SSukumar.Swaminathan@Sun.COM 15258311SSukumar.Swaminathan@Sun.COM /* Adapter context */ 15268311SSukumar.Swaminathan@Sun.COM la_els_logi_t loginparams; 15278311SSukumar.Swaminathan@Sun.COM fc_fca_bind_info_t bind_info; 15288311SSukumar.Swaminathan@Sun.COM ddi_modhandle_t fw_module; 152911924SDaniel.Beauregard@Sun.COM uint32_t fw_major_version; 153011924SDaniel.Beauregard@Sun.COM uint32_t fw_minor_version; 153111924SDaniel.Beauregard@Sun.COM uint32_t fw_subminor_version; 15328311SSukumar.Swaminathan@Sun.COM uint16_t fw_attributes; 15338311SSukumar.Swaminathan@Sun.COM uint32_t fw_ext_memory_size; 15348311SSukumar.Swaminathan@Sun.COM uint32_t parity_pause_errors; 153511924SDaniel.Beauregard@Sun.COM boolean_t log_parity_pause; 15368311SSukumar.Swaminathan@Sun.COM uint16_t parity_hccr_err; 15378311SSukumar.Swaminathan@Sun.COM uint32_t parity_stat_err; 15388311SSukumar.Swaminathan@Sun.COM reg_off_t *reg_off; 15398311SSukumar.Swaminathan@Sun.COM caddr_t risc_code; 15408311SSukumar.Swaminathan@Sun.COM uint32_t risc_code_size; 15418311SSukumar.Swaminathan@Sun.COM ql_fw_code_t risc_fw[MAX_RISC_CODE_SEGMENTS]; 15428311SSukumar.Swaminathan@Sun.COM uint32_t risc_dump_size; 15438311SSukumar.Swaminathan@Sun.COM void (*fcp_cmd)(struct ql_adapter_state *, 15448311SSukumar.Swaminathan@Sun.COM ql_srb_t *, void *); 15458311SSukumar.Swaminathan@Sun.COM void (*ip_cmd)(struct ql_adapter_state *, 15468311SSukumar.Swaminathan@Sun.COM ql_srb_t *, void *); 15478311SSukumar.Swaminathan@Sun.COM void (*ms_cmd)(struct ql_adapter_state *, 15488311SSukumar.Swaminathan@Sun.COM ql_srb_t *, void *); 15498311SSukumar.Swaminathan@Sun.COM uint8_t cmd_segs; 15508311SSukumar.Swaminathan@Sun.COM uint8_t cmd_cont_segs; 15518311SSukumar.Swaminathan@Sun.COM 15528311SSukumar.Swaminathan@Sun.COM /* NVRAM configuration data */ 15538311SSukumar.Swaminathan@Sun.COM uint32_t cfg_flags; 15548311SSukumar.Swaminathan@Sun.COM ql_comb_init_cb_t init_ctrl_blk; 15558311SSukumar.Swaminathan@Sun.COM ql_comb_ip_init_cb_t ip_init_ctrl_blk; 15568311SSukumar.Swaminathan@Sun.COM uint16_t nvram_version; 15578311SSukumar.Swaminathan@Sun.COM uint16_t adapter_features; 15588311SSukumar.Swaminathan@Sun.COM uint32_t fw_transfer_size; 15598311SSukumar.Swaminathan@Sun.COM uint16_t execution_throttle; 15608311SSukumar.Swaminathan@Sun.COM uint16_t port_down_retry_count; 15618311SSukumar.Swaminathan@Sun.COM uint8_t port_down_retry_delay; 15628311SSukumar.Swaminathan@Sun.COM uint8_t qfull_retry_count; 15638311SSukumar.Swaminathan@Sun.COM uint8_t qfull_retry_delay; 15648311SSukumar.Swaminathan@Sun.COM uint16_t serdes_param[4]; 15658311SSukumar.Swaminathan@Sun.COM uint8_t loop_reset_delay; 15668311SSukumar.Swaminathan@Sun.COM 15678311SSukumar.Swaminathan@Sun.COM /* Power management context. */ 15688311SSukumar.Swaminathan@Sun.COM kmutex_t pm_mutex; 15698311SSukumar.Swaminathan@Sun.COM uint32_t busy; 15708311SSukumar.Swaminathan@Sun.COM uint8_t power_level; 15718311SSukumar.Swaminathan@Sun.COM uint8_t pm_capable; 15728311SSukumar.Swaminathan@Sun.COM uint8_t config_saved; 15738311SSukumar.Swaminathan@Sun.COM uint8_t lip_on_panic; 15748311SSukumar.Swaminathan@Sun.COM port_id_t port_hard_address; 15758311SSukumar.Swaminathan@Sun.COM 15768311SSukumar.Swaminathan@Sun.COM /* sbus card data */ 15778311SSukumar.Swaminathan@Sun.COM caddr_t sbus_fpga_iobase; 15788311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t sbus_fpga_dev_handle; 15798311SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t sbus_config_handle; 15808311SSukumar.Swaminathan@Sun.COM caddr_t sbus_config_base; 15818311SSukumar.Swaminathan@Sun.COM 15828311SSukumar.Swaminathan@Sun.COM /* XIOCTL context pointer. */ 15838311SSukumar.Swaminathan@Sun.COM struct ql_xioctl *xioctl; 15848311SSukumar.Swaminathan@Sun.COM 15858311SSukumar.Swaminathan@Sun.COM kmutex_t cache_mutex; 15868311SSukumar.Swaminathan@Sun.COM struct ql_fcache *fcache; 15878311SSukumar.Swaminathan@Sun.COM int8_t *vcache; 15888311SSukumar.Swaminathan@Sun.COM 15898311SSukumar.Swaminathan@Sun.COM /* AIF (Advanced Interrupt Framework) support */ 15908311SSukumar.Swaminathan@Sun.COM ddi_intr_handle_t *htable; 15918311SSukumar.Swaminathan@Sun.COM uint32_t hsize; 15928311SSukumar.Swaminathan@Sun.COM int32_t intr_cnt; 15938311SSukumar.Swaminathan@Sun.COM uint32_t intr_pri; 15948311SSukumar.Swaminathan@Sun.COM int32_t intr_cap; 15958311SSukumar.Swaminathan@Sun.COM uint32_t iflags; 15968311SSukumar.Swaminathan@Sun.COM 15978311SSukumar.Swaminathan@Sun.COM /* PCI maximum read request override */ 15988311SSukumar.Swaminathan@Sun.COM uint16_t pci_max_read_req; 15998311SSukumar.Swaminathan@Sun.COM 16008311SSukumar.Swaminathan@Sun.COM /* port manage mutex */ 16018311SSukumar.Swaminathan@Sun.COM kmutex_t portmutex; 16028311SSukumar.Swaminathan@Sun.COM uint16_t maximum_luns_per_target; 16038311SSukumar.Swaminathan@Sun.COM 16049156SDaniel.Beauregard@Sun.COM /* f/w dump mutex */ 16059156SDaniel.Beauregard@Sun.COM uint32_t ql_dump_size; 16069156SDaniel.Beauregard@Sun.COM uint32_t ql_dump_state; 16079156SDaniel.Beauregard@Sun.COM void *ql_dump_ptr; 16089156SDaniel.Beauregard@Sun.COM kmutex_t dump_mutex; 16099156SDaniel.Beauregard@Sun.COM 16108311SSukumar.Swaminathan@Sun.COM uint8_t fwwait; 16119156SDaniel.Beauregard@Sun.COM 16129156SDaniel.Beauregard@Sun.COM dma_mem_t fwexttracebuf; /* extended trace */ 16139156SDaniel.Beauregard@Sun.COM dma_mem_t fwfcetracebuf; /* event trace */ 16148311SSukumar.Swaminathan@Sun.COM uint32_t fwfcetraceopt; 16158311SSukumar.Swaminathan@Sun.COM uint32_t flash_errlog_start; /* 32bit word addr */ 16168311SSukumar.Swaminathan@Sun.COM uint32_t flash_errlog_ptr; /* 32bit word addr */ 16179446SDaniel.Beauregard@Sun.COM uint8_t send_plogi_timer; 16188311SSukumar.Swaminathan@Sun.COM 16198311SSukumar.Swaminathan@Sun.COM /* Virtual port context. */ 16208311SSukumar.Swaminathan@Sun.COM fca_port_attrs_t *pi_attrs; 16218311SSukumar.Swaminathan@Sun.COM struct ql_adapter_state *pha; 16228311SSukumar.Swaminathan@Sun.COM struct ql_adapter_state *vp_next; 16238311SSukumar.Swaminathan@Sun.COM uint8_t vp_index; 16248311SSukumar.Swaminathan@Sun.COM 16258311SSukumar.Swaminathan@Sun.COM uint16_t free_loop_id; 16268311SSukumar.Swaminathan@Sun.COM 16279446SDaniel.Beauregard@Sun.COM /* Tempoary N_Port information */ 16289446SDaniel.Beauregard@Sun.COM struct ql_n_port_info *n_port; 16299446SDaniel.Beauregard@Sun.COM 16309446SDaniel.Beauregard@Sun.COM void (*els_cmd)(struct ql_adapter_state *, 16319446SDaniel.Beauregard@Sun.COM ql_srb_t *, void *); 16329156SDaniel.Beauregard@Sun.COM el_trace_desc_t *el_trace_desc; 16339446SDaniel.Beauregard@Sun.COM 16349446SDaniel.Beauregard@Sun.COM uint32_t flash_data_addr; 16359446SDaniel.Beauregard@Sun.COM uint32_t flash_fw_addr; 16369446SDaniel.Beauregard@Sun.COM uint32_t flash_golden_fw_addr; 16379446SDaniel.Beauregard@Sun.COM uint32_t flash_vpd_addr; 16389446SDaniel.Beauregard@Sun.COM uint32_t flash_nvram_addr; 16399446SDaniel.Beauregard@Sun.COM uint32_t flash_desc_addr; 16409446SDaniel.Beauregard@Sun.COM uint32_t mpi_capability_list; 16419446SDaniel.Beauregard@Sun.COM uint8_t phy_fw_major_version; 16429446SDaniel.Beauregard@Sun.COM uint8_t phy_fw_minor_version; 16439446SDaniel.Beauregard@Sun.COM uint8_t phy_fw_subminor_version; 16449446SDaniel.Beauregard@Sun.COM uint8_t mpi_fw_major_version; 16459446SDaniel.Beauregard@Sun.COM uint8_t mpi_fw_minor_version; 16469446SDaniel.Beauregard@Sun.COM uint8_t mpi_fw_subminor_version; 16479446SDaniel.Beauregard@Sun.COM 16489446SDaniel.Beauregard@Sun.COM uint8_t idc_flash_acc; 1649*12279SDaniel.Beauregard@Sun.COM uint8_t idc_restart_cnt; 16509446SDaniel.Beauregard@Sun.COM uint16_t idc_mb[8]; 1651*12279SDaniel.Beauregard@Sun.COM uint8_t idc_restart_timer; 1652*12279SDaniel.Beauregard@Sun.COM uint8_t idc_flash_acc_timer; 16539793SDaniel.Beauregard@Sun.COM 16549793SDaniel.Beauregard@Sun.COM /* VLAN ID and MAC address */ 16559793SDaniel.Beauregard@Sun.COM uint8_t fcoe_vnport_mac[6]; 16569793SDaniel.Beauregard@Sun.COM uint16_t fabric_params; 16579793SDaniel.Beauregard@Sun.COM uint16_t fcoe_vlan_id; 16589793SDaniel.Beauregard@Sun.COM uint16_t fcoe_fcf_idx; 165911541SDaniel.Beauregard@Sun.COM nvram_cache_desc_t *nvram_cache; 166011924SDaniel.Beauregard@Sun.COM 166111924SDaniel.Beauregard@Sun.COM /* NetXen context */ 166211924SDaniel.Beauregard@Sun.COM ddi_acc_handle_t db_dev_handle; 166311924SDaniel.Beauregard@Sun.COM caddr_t db_iobase; 166411924SDaniel.Beauregard@Sun.COM uint64_t first_page_group_start; 166511924SDaniel.Beauregard@Sun.COM uint64_t first_page_group_end; 166611924SDaniel.Beauregard@Sun.COM uint64_t mn_win_crb; 166711924SDaniel.Beauregard@Sun.COM caddr_t nx_pcibase; /* BAR0 base I/O address */ 166811924SDaniel.Beauregard@Sun.COM uint32_t crb_win; 166911924SDaniel.Beauregard@Sun.COM uint32_t ddr_mn_window; 167011924SDaniel.Beauregard@Sun.COM uint32_t qdr_sn_window; 167111924SDaniel.Beauregard@Sun.COM uint32_t *nx_req_in; 167211924SDaniel.Beauregard@Sun.COM caddr_t db_read; 167311924SDaniel.Beauregard@Sun.COM uint32_t pci_bus_addr; 167411924SDaniel.Beauregard@Sun.COM struct legacy_intr_set nx_legacy_intr; 167511924SDaniel.Beauregard@Sun.COM uint32_t bootloader_size; 167611924SDaniel.Beauregard@Sun.COM uint32_t bootloader_addr; 167711924SDaniel.Beauregard@Sun.COM uint32_t flash_fw_size; 1678*12279SDaniel.Beauregard@Sun.COM uint16_t iidma_rate; 167911924SDaniel.Beauregard@Sun.COM uint8_t function_number; 1680*12279SDaniel.Beauregard@Sun.COM uint8_t timeout_cnt; 16818311SSukumar.Swaminathan@Sun.COM } ql_adapter_state_t; 16828311SSukumar.Swaminathan@Sun.COM 16838311SSukumar.Swaminathan@Sun.COM /* 16848311SSukumar.Swaminathan@Sun.COM * adapter state flags 16858311SSukumar.Swaminathan@Sun.COM */ 16868311SSukumar.Swaminathan@Sun.COM #define FCA_BOUND BIT_0 16878311SSukumar.Swaminathan@Sun.COM #define QL_OPENED BIT_1 16888311SSukumar.Swaminathan@Sun.COM #define ONLINE BIT_2 16898311SSukumar.Swaminathan@Sun.COM #define INTERRUPTS_ENABLED BIT_3 16909156SDaniel.Beauregard@Sun.COM #define ABORT_CMDS_LOOP_DOWN_TMO BIT_4 16918311SSukumar.Swaminathan@Sun.COM #define POINT_TO_POINT BIT_5 16928311SSukumar.Swaminathan@Sun.COM #define IP_ENABLED BIT_6 16938311SSukumar.Swaminathan@Sun.COM #define IP_INITIALIZED BIT_7 16949446SDaniel.Beauregard@Sun.COM #define MENLO_LOGIN_OPERATIONAL BIT_8 16958311SSukumar.Swaminathan@Sun.COM #define ADAPTER_SUSPENDED BIT_9 16968311SSukumar.Swaminathan@Sun.COM #define ADAPTER_TIMER_BUSY BIT_10 16978311SSukumar.Swaminathan@Sun.COM #define PARITY_ERROR BIT_11 16988311SSukumar.Swaminathan@Sun.COM #define FLASH_ERRLOG_MARKER BIT_12 16998311SSukumar.Swaminathan@Sun.COM #define VP_ENABLED BIT_13 17008311SSukumar.Swaminathan@Sun.COM #define FDISC_ENABLED BIT_14 17019446SDaniel.Beauregard@Sun.COM #define FUNCTION_1 BIT_15 17029611SDaniel.Beauregard@Sun.COM #define MPI_RESET_NEEDED BIT_16 17038311SSukumar.Swaminathan@Sun.COM 17048311SSukumar.Swaminathan@Sun.COM /* 17058311SSukumar.Swaminathan@Sun.COM * task daemon flags 17068311SSukumar.Swaminathan@Sun.COM */ 17078311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_STOP_FLG BIT_0 17088311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_SLEEPING_FLG BIT_1 17098311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_ALIVE_FLG BIT_2 17108311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_IDLE_CHK_FLG BIT_3 17118311SSukumar.Swaminathan@Sun.COM #define SUSPENDED_WAKEUP_FLG BIT_4 17128311SSukumar.Swaminathan@Sun.COM #define FC_STATE_CHANGE BIT_5 17138311SSukumar.Swaminathan@Sun.COM #define NEED_UNSOLICITED_BUFFERS BIT_6 17148311SSukumar.Swaminathan@Sun.COM #define RESET_MARKER_NEEDED BIT_7 17158311SSukumar.Swaminathan@Sun.COM #define RESET_ACTIVE BIT_8 17168311SSukumar.Swaminathan@Sun.COM #define ISP_ABORT_NEEDED BIT_9 17178311SSukumar.Swaminathan@Sun.COM #define ABORT_ISP_ACTIVE BIT_10 17188311SSukumar.Swaminathan@Sun.COM #define LOOP_RESYNC_NEEDED BIT_11 17198311SSukumar.Swaminathan@Sun.COM #define LOOP_RESYNC_ACTIVE BIT_12 17208311SSukumar.Swaminathan@Sun.COM #define LOOP_DOWN BIT_13 17218311SSukumar.Swaminathan@Sun.COM #define DRIVER_STALL BIT_14 17228311SSukumar.Swaminathan@Sun.COM #define COMMAND_WAIT_NEEDED BIT_15 17238311SSukumar.Swaminathan@Sun.COM #define COMMAND_WAIT_ACTIVE BIT_16 17248311SSukumar.Swaminathan@Sun.COM #define STATE_ONLINE BIT_17 17258311SSukumar.Swaminathan@Sun.COM #define ABORT_QUEUES_NEEDED BIT_18 17268311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_STALLED_FLG BIT_19 17278311SSukumar.Swaminathan@Sun.COM #define TASK_THREAD_CALLED BIT_20 17288311SSukumar.Swaminathan@Sun.COM #define FIRMWARE_UP BIT_21 17298311SSukumar.Swaminathan@Sun.COM #define LIP_RESET_PENDING BIT_22 17308311SSukumar.Swaminathan@Sun.COM #define FIRMWARE_LOADED BIT_23 17318311SSukumar.Swaminathan@Sun.COM #define RSCN_UPDATE_NEEDED BIT_24 17328311SSukumar.Swaminathan@Sun.COM #define HANDLE_PORT_BYPASS_CHANGE BIT_25 17338311SSukumar.Swaminathan@Sun.COM #define PORT_RETRY_NEEDED BIT_26 17348311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_POWERING_DOWN BIT_27 17358311SSukumar.Swaminathan@Sun.COM #define TD_IIDMA_NEEDED BIT_28 17369156SDaniel.Beauregard@Sun.COM #define SEND_PLOGI BIT_29 1737*12279SDaniel.Beauregard@Sun.COM #define IDC_EVENT BIT_30 17388311SSukumar.Swaminathan@Sun.COM 17398311SSukumar.Swaminathan@Sun.COM /* 17408311SSukumar.Swaminathan@Sun.COM * Mailbox flags 17418311SSukumar.Swaminathan@Sun.COM */ 17429156SDaniel.Beauregard@Sun.COM #define MBX_WANT_FLG BIT_0 17439156SDaniel.Beauregard@Sun.COM #define MBX_BUSY_FLG BIT_1 17449156SDaniel.Beauregard@Sun.COM #define MBX_INTERRUPT BIT_2 17459156SDaniel.Beauregard@Sun.COM #define MBX_ABORT BIT_3 17468311SSukumar.Swaminathan@Sun.COM 17478311SSukumar.Swaminathan@Sun.COM /* 17488311SSukumar.Swaminathan@Sun.COM * Configuration flags 17498311SSukumar.Swaminathan@Sun.COM */ 17509156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_HARD_ADDRESS BIT_0 17519156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_64BIT_ADDRESSING BIT_1 17529156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_LIP_RESET BIT_2 17539156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_FULL_LIP_LOGIN BIT_3 17549156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_TARGET_RESET BIT_4 17559156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_LINK_DOWN_REPORTING BIT_5 17569446SDaniel.Beauregard@Sun.COM #define CFG_DISABLE_EXTENDED_LOGGING_TRACE BIT_6 17579156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_FCP_2_SUPPORT BIT_7 17589156SDaniel.Beauregard@Sun.COM #define CFG_MULTI_CHIP_ADAPTER BIT_8 17599156SDaniel.Beauregard@Sun.COM #define CFG_SBUS_CARD BIT_9 17609156SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2300 BIT_10 17619156SDaniel.Beauregard@Sun.COM #define CFG_CTRL_6322 BIT_11 17629156SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2200 BIT_12 17639156SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2422 BIT_13 17649156SDaniel.Beauregard@Sun.COM #define CFG_CTRL_25XX BIT_14 17659156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_EXTENDED_LOGGING BIT_15 17669156SDaniel.Beauregard@Sun.COM #define CFG_DISABLE_RISC_CODE_LOAD BIT_16 17679156SDaniel.Beauregard@Sun.COM #define CFG_SET_CACHE_LINE_SIZE_1 BIT_17 17689446SDaniel.Beauregard@Sun.COM #define CFG_CTRL_MENLO BIT_18 17699156SDaniel.Beauregard@Sun.COM #define CFG_EXT_FW_INTERFACE BIT_19 17709156SDaniel.Beauregard@Sun.COM #define CFG_LOAD_FLASH_FW BIT_20 17719156SDaniel.Beauregard@Sun.COM #define CFG_DUMP_MAILBOX_TIMEOUT BIT_21 17729156SDaniel.Beauregard@Sun.COM #define CFG_DUMP_ISP_SYSTEM_ERROR BIT_22 17739156SDaniel.Beauregard@Sun.COM #define CFG_DUMP_DRIVER_COMMAND_TIMEOUT BIT_23 17749156SDaniel.Beauregard@Sun.COM #define CFG_DUMP_LOOP_OFFLINE_TIMEOUT BIT_24 17759156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_FWEXTTRACE BIT_25 17769156SDaniel.Beauregard@Sun.COM #define CFG_ENABLE_FWFCETRACE BIT_26 17779156SDaniel.Beauregard@Sun.COM #define CFG_FW_MISMATCH BIT_27 17789446SDaniel.Beauregard@Sun.COM #define CFG_CTRL_81XX BIT_28 177911924SDaniel.Beauregard@Sun.COM #define CFG_CTRL_8021 BIT_29 178011924SDaniel.Beauregard@Sun.COM #define CFG_FAST_TIMEOUT BIT_30 178111924SDaniel.Beauregard@Sun.COM #define CFG_LR_SUPPORT BIT_31 17828311SSukumar.Swaminathan@Sun.COM 17839446SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2425 (CFG_CTRL_2422 | CFG_CTRL_25XX) 178411924SDaniel.Beauregard@Sun.COM #define CFG_CTRL_8081 (CFG_CTRL_8021 | CFG_CTRL_81XX) 17859446SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2581 (CFG_CTRL_25XX | CFG_CTRL_81XX) 17869446SDaniel.Beauregard@Sun.COM #define CFG_CTRL_242581 (CFG_CTRL_2422 | CFG_CTRL_25XX | CFG_CTRL_81XX) 178711924SDaniel.Beauregard@Sun.COM #define CFG_CTRL_24258081 (CFG_CTRL_2425 | CFG_CTRL_8081) 178811924SDaniel.Beauregard@Sun.COM #define CFG_CTRL_258081 (CFG_CTRL_25XX | CFG_CTRL_8081) 178911924SDaniel.Beauregard@Sun.COM #define CFG_CTRL_2480 (CFG_CTRL_2422 | CFG_CTRL_8021) 17909446SDaniel.Beauregard@Sun.COM 17919446SDaniel.Beauregard@Sun.COM #define CFG_IST(ha, cfgflags) (ha->cfg_flags & cfgflags) 17928311SSukumar.Swaminathan@Sun.COM 17938311SSukumar.Swaminathan@Sun.COM /* 17948311SSukumar.Swaminathan@Sun.COM * Interrupt configuration flags 17958311SSukumar.Swaminathan@Sun.COM */ 17969156SDaniel.Beauregard@Sun.COM #define IFLG_INTR_LEGACY BIT_0 17979156SDaniel.Beauregard@Sun.COM #define IFLG_INTR_FIXED BIT_1 17989156SDaniel.Beauregard@Sun.COM #define IFLG_INTR_MSI BIT_2 17999156SDaniel.Beauregard@Sun.COM #define IFLG_INTR_MSIX BIT_3 18008311SSukumar.Swaminathan@Sun.COM 18018311SSukumar.Swaminathan@Sun.COM #define IFLG_INTR_AIF (IFLG_INTR_MSI | IFLG_INTR_FIXED | IFLG_INTR_MSIX) 18028311SSukumar.Swaminathan@Sun.COM 18038311SSukumar.Swaminathan@Sun.COM /* 18048311SSukumar.Swaminathan@Sun.COM * Macros to help code, maintain, etc. 18058311SSukumar.Swaminathan@Sun.COM */ 18068311SSukumar.Swaminathan@Sun.COM #define LSB(x) (uint8_t)(x) 18078311SSukumar.Swaminathan@Sun.COM #define MSB(x) (uint8_t)((uint16_t)(x) >> 8) 18088311SSukumar.Swaminathan@Sun.COM #define MSW(x) (uint16_t)((uint32_t)(x) >> 16) 18098311SSukumar.Swaminathan@Sun.COM #define LSW(x) (uint16_t)(x) 18108311SSukumar.Swaminathan@Sun.COM #define LSD(x) (uint32_t)(x) 18118311SSukumar.Swaminathan@Sun.COM #define MSD(x) (uint32_t)((uint64_t)(x) >> 32) 18128311SSukumar.Swaminathan@Sun.COM 18138311SSukumar.Swaminathan@Sun.COM #define SHORT_TO_LONG(lsw, msw) (uint32_t)((uint16_t)msw << 16 | (uint16_t)lsw) 18148311SSukumar.Swaminathan@Sun.COM #define CHAR_TO_SHORT(lsb, msb) (uint16_t)((uint8_t)msb << 8 | (uint8_t)lsb) 18158311SSukumar.Swaminathan@Sun.COM #define CHAR_TO_LONG(lsb, b1, b2, msb) \ 18168311SSukumar.Swaminathan@Sun.COM (uint32_t)(SHORT_TO_LONG(CHAR_TO_SHORT(lsb, b1), \ 18178311SSukumar.Swaminathan@Sun.COM CHAR_TO_SHORT(b2, msb))) 18188311SSukumar.Swaminathan@Sun.COM 18198311SSukumar.Swaminathan@Sun.COM /* Little endian machine correction defines. */ 18208311SSukumar.Swaminathan@Sun.COM #ifdef _LITTLE_ENDIAN 18218311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_16(x) 18228311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_24(x) 18238311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_32(x) 18248311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_64(x) 18258311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN(bp, bytes) 18268311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_16(x) ql_chg_endian((uint8_t *)x, 2) 18278311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_24(x) ql_chg_endian((uint8_t *)x, 3) 18288311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_32(x) ql_chg_endian((uint8_t *)x, 4) 18298311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_64(x) ql_chg_endian((uint8_t *)x, 8) 18308311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN(bp, bytes) ql_chg_endian((uint8_t *)bp, bytes) 18318311SSukumar.Swaminathan@Sun.COM #endif /* _LITTLE_ENDIAN */ 18328311SSukumar.Swaminathan@Sun.COM 18338311SSukumar.Swaminathan@Sun.COM /* Big endian machine correction defines. */ 18348311SSukumar.Swaminathan@Sun.COM #ifdef _BIG_ENDIAN 18358311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_16(x) ql_chg_endian((uint8_t *)x, 2) 18368311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_24(x) ql_chg_endian((uint8_t *)x, 3) 18378311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_32(x) ql_chg_endian((uint8_t *)x, 4) 18388311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN_64(x) ql_chg_endian((uint8_t *)x, 8) 18398311SSukumar.Swaminathan@Sun.COM #define LITTLE_ENDIAN(bp, bytes) ql_chg_endian((uint8_t *)bp, bytes) 18408311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_16(x) 18418311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_24(x) 18428311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_32(x) 18438311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN_64(x) 18448311SSukumar.Swaminathan@Sun.COM #define BIG_ENDIAN(bp, bytes) 18458311SSukumar.Swaminathan@Sun.COM #endif /* _BIG_ENDIAN */ 18468311SSukumar.Swaminathan@Sun.COM 18478311SSukumar.Swaminathan@Sun.COM #define LOCAL_LOOP_ID(x) (x <= LAST_LOCAL_LOOP_ID) 18488311SSukumar.Swaminathan@Sun.COM 18498311SSukumar.Swaminathan@Sun.COM #define FABRIC_LOOP_ID(x) (x == FL_PORT_LOOP_ID || \ 18508311SSukumar.Swaminathan@Sun.COM x == SIMPLE_NAME_SERVER_LOOP_ID) 18518311SSukumar.Swaminathan@Sun.COM 18528311SSukumar.Swaminathan@Sun.COM #define SNS_LOOP_ID(x) (x >= SNS_FIRST_LOOP_ID && \ 18538311SSukumar.Swaminathan@Sun.COM x <= SNS_LAST_LOOP_ID) 18548311SSukumar.Swaminathan@Sun.COM 18558311SSukumar.Swaminathan@Sun.COM #define BROADCAST_LOOP_ID(x) (x == IP_BROADCAST_LOOP_ID) 18568311SSukumar.Swaminathan@Sun.COM 18578311SSukumar.Swaminathan@Sun.COM #define VALID_LOOP_ID(x) (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x) || \ 18588311SSukumar.Swaminathan@Sun.COM FABRIC_LOOP_ID(x) || BROADCAST_LOOP_ID(x)) 18598311SSukumar.Swaminathan@Sun.COM 18608311SSukumar.Swaminathan@Sun.COM #define VALID_N_PORT_HDL(x) (x <= LAST_N_PORT_HDL || \ 18618311SSukumar.Swaminathan@Sun.COM (x >= SNS_24XX_HDL && x <= BROADCAST_24XX_HDL)) 18628311SSukumar.Swaminathan@Sun.COM 186311924SDaniel.Beauregard@Sun.COM #define VALID_DEVICE_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \ 18648311SSukumar.Swaminathan@Sun.COM VALID_N_PORT_HDL(x) : VALID_LOOP_ID(x)) 18658311SSukumar.Swaminathan@Sun.COM 186611924SDaniel.Beauregard@Sun.COM #define VALID_TARGET_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \ 18678311SSukumar.Swaminathan@Sun.COM (x <= LAST_N_PORT_HDL) : (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x))) 18688311SSukumar.Swaminathan@Sun.COM 186911924SDaniel.Beauregard@Sun.COM #define RESERVED_LOOP_ID(ha, x) (CFG_IST(ha, CFG_CTRL_24258081) ? \ 18708311SSukumar.Swaminathan@Sun.COM (x > LAST_N_PORT_HDL && x <= FL_PORT_24XX_HDL) : \ 18718311SSukumar.Swaminathan@Sun.COM (x >= FL_PORT_LOOP_ID && x <= SIMPLE_NAME_SERVER_LOOP_ID)) 18728311SSukumar.Swaminathan@Sun.COM 18738311SSukumar.Swaminathan@Sun.COM #define QL_LOOP_TRANSITION (RESET_MARKER_NEEDED | RESET_ACTIVE | \ 18748311SSukumar.Swaminathan@Sun.COM ISP_ABORT_NEEDED | ABORT_ISP_ACTIVE | \ 18758311SSukumar.Swaminathan@Sun.COM LOOP_RESYNC_NEEDED | LOOP_RESYNC_ACTIVE | \ 18768311SSukumar.Swaminathan@Sun.COM COMMAND_WAIT_NEEDED | COMMAND_WAIT_ACTIVE) 18778311SSukumar.Swaminathan@Sun.COM 18788311SSukumar.Swaminathan@Sun.COM #define QL_SUSPENDED (QL_LOOP_TRANSITION | LOOP_DOWN | DRIVER_STALL) 18798311SSukumar.Swaminathan@Sun.COM 18808311SSukumar.Swaminathan@Sun.COM #define LOOP_RECONFIGURE(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \ 18818311SSukumar.Swaminathan@Sun.COM DRIVER_STALL)) 18828311SSukumar.Swaminathan@Sun.COM 18838311SSukumar.Swaminathan@Sun.COM #define DRIVER_SUSPENDED(ha) (ha->task_daemon_flags & QL_SUSPENDED) 18848311SSukumar.Swaminathan@Sun.COM 18858311SSukumar.Swaminathan@Sun.COM #define LOOP_NOT_READY(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \ 18868311SSukumar.Swaminathan@Sun.COM LOOP_DOWN)) 18878311SSukumar.Swaminathan@Sun.COM 18888311SSukumar.Swaminathan@Sun.COM #define LOOP_READY(ha) (LOOP_NOT_READY(ha) == 0) 18898311SSukumar.Swaminathan@Sun.COM 18908311SSukumar.Swaminathan@Sun.COM #define QL_TASK_PENDING(ha) ( \ 18918311SSukumar.Swaminathan@Sun.COM ha->task_daemon_flags & (QL_LOOP_TRANSITION | ABORT_QUEUES_NEEDED | \ 18928311SSukumar.Swaminathan@Sun.COM PORT_RETRY_NEEDED) || ha->callback_queue.first != NULL) 18938311SSukumar.Swaminathan@Sun.COM 18948311SSukumar.Swaminathan@Sun.COM #define QL_DAEMON_NOT_ACTIVE(ha) ( \ 18958311SSukumar.Swaminathan@Sun.COM !(ha->task_daemon_flags & TASK_DAEMON_ALIVE_FLG) || \ 18968311SSukumar.Swaminathan@Sun.COM ha->task_daemon_flags & (TASK_DAEMON_SLEEPING_FLG | \ 18978311SSukumar.Swaminathan@Sun.COM TASK_DAEMON_STOP_FLG)) 18988311SSukumar.Swaminathan@Sun.COM 18998311SSukumar.Swaminathan@Sun.COM #define QL_DAEMON_SUSPENDED(ha) (\ 19008311SSukumar.Swaminathan@Sun.COM (((ha)->cprinfo.cc_events & CALLB_CPR_START) ||\ 19018311SSukumar.Swaminathan@Sun.COM ((ha)->flags & ADAPTER_SUSPENDED))) 19028311SSukumar.Swaminathan@Sun.COM 190311924SDaniel.Beauregard@Sun.COM #define INTERRUPT_PENDING(ha) (CFG_IST(ha, CFG_CTRL_8021) ? \ 190411924SDaniel.Beauregard@Sun.COM RD32_IO_REG(ha, nx_risc_int) & NX_RISC_INT : \ 190511924SDaniel.Beauregard@Sun.COM RD16_IO_REG(ha, istatus) & RISC_INT) 190611924SDaniel.Beauregard@Sun.COM 190711924SDaniel.Beauregard@Sun.COM #define QL_MAX_FRAME_SIZE(ha) \ 190811924SDaniel.Beauregard@Sun.COM (uint16_t)(CFG_IST(ha, CFG_CTRL_24258081) ? CHAR_TO_SHORT( \ 190911924SDaniel.Beauregard@Sun.COM ha->init_ctrl_blk.cb24.max_frame_length[0], \ 191011924SDaniel.Beauregard@Sun.COM ha->init_ctrl_blk.cb24.max_frame_length[1]) : CHAR_TO_SHORT( \ 191111924SDaniel.Beauregard@Sun.COM ha->init_ctrl_blk.cb.max_frame_length[0], \ 191211924SDaniel.Beauregard@Sun.COM ha->init_ctrl_blk.cb.max_frame_length[1])) 191311924SDaniel.Beauregard@Sun.COM 19148311SSukumar.Swaminathan@Sun.COM /* 19158311SSukumar.Swaminathan@Sun.COM * Locking Macro Definitions 19168311SSukumar.Swaminathan@Sun.COM */ 19178311SSukumar.Swaminathan@Sun.COM #define GLOBAL_STATE_LOCK() mutex_enter(&ql_global_mutex) 19188311SSukumar.Swaminathan@Sun.COM #define GLOBAL_STATE_UNLOCK() mutex_exit(&ql_global_mutex) 19198311SSukumar.Swaminathan@Sun.COM 19208311SSukumar.Swaminathan@Sun.COM #define TRY_DEVICE_QUEUE_LOCK(q) mutex_tryenter(&q->mutex) 19218311SSukumar.Swaminathan@Sun.COM #define DEVICE_QUEUE_LOCK(q) mutex_enter(&q->mutex) 19228311SSukumar.Swaminathan@Sun.COM #define DEVICE_QUEUE_UNLOCK(q) mutex_exit(&q->mutex) 19238311SSukumar.Swaminathan@Sun.COM 192410240SDaniel.Beauregard@Sun.COM #define TRY_MBX_REGISTER_LOCK(ha) mutex_tryenter(&ha->pha->mbx_mutex) 192510240SDaniel.Beauregard@Sun.COM #define MBX_REGISTER_LOCK_OWNER(ha) mutex_owner(&ha->pha->mbx_mutex) 19268311SSukumar.Swaminathan@Sun.COM #define MBX_REGISTER_LOCK(ha) mutex_enter(&ha->pha->mbx_mutex) 19278311SSukumar.Swaminathan@Sun.COM #define MBX_REGISTER_UNLOCK(ha) mutex_exit(&ha->pha->mbx_mutex) 19288311SSukumar.Swaminathan@Sun.COM 19298311SSukumar.Swaminathan@Sun.COM #define INTR_LOCK(ha) mutex_enter(&ha->pha->intr_mutex) 19308311SSukumar.Swaminathan@Sun.COM #define INTR_UNLOCK(ha) mutex_exit(&ha->pha->intr_mutex) 19318311SSukumar.Swaminathan@Sun.COM 19328311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_LOCK(ha) mutex_enter(&ha->pha->task_daemon_mutex) 19338311SSukumar.Swaminathan@Sun.COM #define TASK_DAEMON_UNLOCK(ha) mutex_exit(&ha->pha->task_daemon_mutex) 19348311SSukumar.Swaminathan@Sun.COM 19358311SSukumar.Swaminathan@Sun.COM #define REQUEST_RING_LOCK(ha) mutex_enter(&ha->pha->req_ring_mutex) 19368311SSukumar.Swaminathan@Sun.COM #define REQUEST_RING_UNLOCK(ha) mutex_exit(&ha->pha->req_ring_mutex) 19378311SSukumar.Swaminathan@Sun.COM 19388311SSukumar.Swaminathan@Sun.COM #define CACHE_LOCK(ha) mutex_enter(&ha->pha->cache_mutex); 19398311SSukumar.Swaminathan@Sun.COM #define CACHE_UNLOCK(ha) mutex_exit(&ha->pha->cache_mutex); 19408311SSukumar.Swaminathan@Sun.COM 19418311SSukumar.Swaminathan@Sun.COM #define PORTMANAGE_LOCK(ha) mutex_enter(&ha->pha->portmutex); 19428311SSukumar.Swaminathan@Sun.COM #define PORTMANAGE_UNLOCK(ha) mutex_exit(&ha->pha->portmutex); 19438311SSukumar.Swaminathan@Sun.COM 19448311SSukumar.Swaminathan@Sun.COM #define ADAPTER_STATE_LOCK(ha) mutex_enter(&ha->pha->mutex) 19458311SSukumar.Swaminathan@Sun.COM #define ADAPTER_STATE_UNLOCK(ha) mutex_exit(&ha->pha->mutex) 19468311SSukumar.Swaminathan@Sun.COM 19479156SDaniel.Beauregard@Sun.COM #define QL_DUMP_LOCK(ha) mutex_enter(&ha->pha->dump_mutex) 19489156SDaniel.Beauregard@Sun.COM #define QL_DUMP_UNLOCK(ha) mutex_exit(&ha->pha->dump_mutex) 19499156SDaniel.Beauregard@Sun.COM 19508311SSukumar.Swaminathan@Sun.COM #define QL_PM_LOCK(ha) mutex_enter(&ha->pha->pm_mutex) 19518311SSukumar.Swaminathan@Sun.COM #define QL_PM_UNLOCK(ha) mutex_exit(&ha->pha->pm_mutex) 19528311SSukumar.Swaminathan@Sun.COM 19538311SSukumar.Swaminathan@Sun.COM #define QL_UB_LOCK(ha) mutex_enter(&ha->pha->ub_mutex) 19548311SSukumar.Swaminathan@Sun.COM #define QL_UB_UNLOCK(ha) mutex_exit(&ha->pha->ub_mutex) 19558311SSukumar.Swaminathan@Sun.COM 19568311SSukumar.Swaminathan@Sun.COM #define GLOBAL_HW_LOCK() mutex_enter(&ql_global_hw_mutex) 19578311SSukumar.Swaminathan@Sun.COM #define GLOBAL_HW_UNLOCK() mutex_exit(&ql_global_hw_mutex) 19588311SSukumar.Swaminathan@Sun.COM 195911541SDaniel.Beauregard@Sun.COM #define NVRAM_CACHE_LOCK(ha) mutex_enter(&ha->nvram_cache->mutex); 196011541SDaniel.Beauregard@Sun.COM #define NVRAM_CACHE_UNLOCK(ha) mutex_exit(&ha->nvram_cache->mutex); 196111541SDaniel.Beauregard@Sun.COM 19628311SSukumar.Swaminathan@Sun.COM /* 19638311SSukumar.Swaminathan@Sun.COM * PCI power management control/status register location 19648311SSukumar.Swaminathan@Sun.COM */ 19658311SSukumar.Swaminathan@Sun.COM #define QL_PM_CS_REG 0x48 19668311SSukumar.Swaminathan@Sun.COM 19678311SSukumar.Swaminathan@Sun.COM /* 19688311SSukumar.Swaminathan@Sun.COM * ql component 19698311SSukumar.Swaminathan@Sun.COM */ 19708311SSukumar.Swaminathan@Sun.COM #define QL_POWER_COMPONENT 0 19718311SSukumar.Swaminathan@Sun.COM 19728311SSukumar.Swaminathan@Sun.COM typedef struct ql_config_space { 19738311SSukumar.Swaminathan@Sun.COM uint16_t chs_command; 19748311SSukumar.Swaminathan@Sun.COM uint8_t chs_cache_line_size; 19758311SSukumar.Swaminathan@Sun.COM uint8_t chs_latency_timer; 19768311SSukumar.Swaminathan@Sun.COM uint8_t chs_header_type; 19778311SSukumar.Swaminathan@Sun.COM uint8_t chs_sec_latency_timer; 19788311SSukumar.Swaminathan@Sun.COM uint8_t chs_bridge_control; 19798311SSukumar.Swaminathan@Sun.COM uint32_t chs_base0; 19808311SSukumar.Swaminathan@Sun.COM uint32_t chs_base1; 19818311SSukumar.Swaminathan@Sun.COM uint32_t chs_base2; 19828311SSukumar.Swaminathan@Sun.COM uint32_t chs_base3; 19838311SSukumar.Swaminathan@Sun.COM uint32_t chs_base4; 19848311SSukumar.Swaminathan@Sun.COM uint32_t chs_base5; 19858311SSukumar.Swaminathan@Sun.COM } ql_config_space_t; 19868311SSukumar.Swaminathan@Sun.COM 19878311SSukumar.Swaminathan@Sun.COM #ifdef USE_DDI_INTERFACES 19888311SSukumar.Swaminathan@Sun.COM 19898311SSukumar.Swaminathan@Sun.COM #define QL_SAVE_CONFIG_REGS(dip) pci_save_config_regs(dip) 19908311SSukumar.Swaminathan@Sun.COM #define QL_RESTORE_CONFIG_REGS(dip) pci_restore_config_regs(dip) 19918311SSukumar.Swaminathan@Sun.COM 19928311SSukumar.Swaminathan@Sun.COM #else /* USE_DDI_INTERFACES */ 19938311SSukumar.Swaminathan@Sun.COM 19948311SSukumar.Swaminathan@Sun.COM #define QL_SAVE_CONFIG_REGS(dip) ql_save_config_regs(dip) 19958311SSukumar.Swaminathan@Sun.COM #define QL_RESTORE_CONFIG_REGS(dip) ql_restore_config_regs(dip) 19968311SSukumar.Swaminathan@Sun.COM 19978311SSukumar.Swaminathan@Sun.COM #endif /* USE_DDI_INTERFACES */ 19988311SSukumar.Swaminathan@Sun.COM 19998311SSukumar.Swaminathan@Sun.COM #define QL_IS_SET(x, y) (((x) & (y)) == (y)) 20008311SSukumar.Swaminathan@Sun.COM 20018311SSukumar.Swaminathan@Sun.COM /* 20028311SSukumar.Swaminathan@Sun.COM * QL local function return status codes 20038311SSukumar.Swaminathan@Sun.COM */ 20048311SSukumar.Swaminathan@Sun.COM #define QL_SUCCESS 0x4000 20058311SSukumar.Swaminathan@Sun.COM #define QL_INVALID_COMMAND 0x4001 20068311SSukumar.Swaminathan@Sun.COM #define QL_INTERFACE_ERROR 0x4002 20078311SSukumar.Swaminathan@Sun.COM #define QL_TEST_FAILED 0x4003 20088311SSukumar.Swaminathan@Sun.COM #define QL_COMMAND_ERROR 0x4005 20098311SSukumar.Swaminathan@Sun.COM #define QL_PARAMETER_ERROR 0x4006 20108311SSukumar.Swaminathan@Sun.COM #define QL_PORT_ID_USED 0x4007 20118311SSukumar.Swaminathan@Sun.COM #define QL_LOOP_ID_USED 0x4008 20128311SSukumar.Swaminathan@Sun.COM #define QL_ALL_IDS_IN_USE 0x4009 20138311SSukumar.Swaminathan@Sun.COM #define QL_NOT_LOGGED_IN 0x400A 20148311SSukumar.Swaminathan@Sun.COM #define QL_LOOP_DOWN 0x400B 20158311SSukumar.Swaminathan@Sun.COM #define QL_LOOP_BACK_ERROR 0x400C 20168311SSukumar.Swaminathan@Sun.COM #define QL_CHECKSUM_ERROR 0x4010 20179446SDaniel.Beauregard@Sun.COM #define QL_CONSUMED 0x4011 20188311SSukumar.Swaminathan@Sun.COM 20198311SSukumar.Swaminathan@Sun.COM #define QL_FUNCTION_TIMEOUT 0x100 20208311SSukumar.Swaminathan@Sun.COM #define QL_FUNCTION_PARAMETER_ERROR 0x101 20218311SSukumar.Swaminathan@Sun.COM #define QL_FUNCTION_FAILED 0x102 20228311SSukumar.Swaminathan@Sun.COM #define QL_MEMORY_ALLOC_FAILED 0x103 20238311SSukumar.Swaminathan@Sun.COM #define QL_FABRIC_NOT_INITIALIZED 0x104 20248311SSukumar.Swaminathan@Sun.COM #define QL_LOCK_TIMEOUT 0x105 20258311SSukumar.Swaminathan@Sun.COM #define QL_ABORTED 0x106 20268311SSukumar.Swaminathan@Sun.COM #define QL_FUNCTION_SUSPENDED 0x107 20278311SSukumar.Swaminathan@Sun.COM #define QL_END_OF_DATA 0x108 20288311SSukumar.Swaminathan@Sun.COM #define QL_IP_UNSUPPORTED 0x109 20298311SSukumar.Swaminathan@Sun.COM #define QL_PM_ERROR 0x10a 20308311SSukumar.Swaminathan@Sun.COM #define QL_DATA_EXISTS 0x10b 20318311SSukumar.Swaminathan@Sun.COM #define QL_NOT_SUPPORTED 0x10c 20328311SSukumar.Swaminathan@Sun.COM #define QL_MEMORY_FULL 0x10d 20338311SSukumar.Swaminathan@Sun.COM #define QL_FW_NOT_SUPPORTED 0x10e 20348311SSukumar.Swaminathan@Sun.COM #define QL_FWMODLOAD_FAILED 0x10f 20359156SDaniel.Beauregard@Sun.COM #define QL_FWSYM_NOT_FOUND 0x110 20369156SDaniel.Beauregard@Sun.COM #define QL_LOGIN_NOT_SUPPORTED 0x111 20378311SSukumar.Swaminathan@Sun.COM 20388311SSukumar.Swaminathan@Sun.COM /* 20398311SSukumar.Swaminathan@Sun.COM * SBus card FPGA register offsets. 20408311SSukumar.Swaminathan@Sun.COM */ 20418311SSukumar.Swaminathan@Sun.COM #define FPGA_CONF 0x100 20428311SSukumar.Swaminathan@Sun.COM #define FPGA_EEPROM_LOADDR 0x102 20438311SSukumar.Swaminathan@Sun.COM #define FPGA_EEPROM_HIADDR 0x104 20448311SSukumar.Swaminathan@Sun.COM #define FPGA_EEPROM_DATA 0x106 20458311SSukumar.Swaminathan@Sun.COM #define FPGA_REVISION 0x108 20468311SSukumar.Swaminathan@Sun.COM 20478311SSukumar.Swaminathan@Sun.COM #define SBUS_FLASH_WRITE_ENABLE 0x0080 20488311SSukumar.Swaminathan@Sun.COM #define QL_SBUS_FCODE_SIZE 0x30000 20498311SSukumar.Swaminathan@Sun.COM #define QL_FCODE_OFFSET 0 20508311SSukumar.Swaminathan@Sun.COM #define QL_FPGA_SIZE 0x40000 20518311SSukumar.Swaminathan@Sun.COM #define QL_FPGA_OFFSET 0x40000 20528311SSukumar.Swaminathan@Sun.COM 20538311SSukumar.Swaminathan@Sun.COM #define READ_PORT_ID(addr) ((uint32_t)((((uint32_t)((addr)[0])) << 16) | \ 20548311SSukumar.Swaminathan@Sun.COM (((uint32_t)((addr)[1])) << 8) | \ 20558311SSukumar.Swaminathan@Sun.COM (((uint32_t)((addr)[2]))))) 20568311SSukumar.Swaminathan@Sun.COM #define READ_PORT_NAME(addr) ((u_longlong_t)((((uint64_t)((addr)[0])) << 56) | \ 20578311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[1])) << 48) | \ 20588311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[2])) << 40) | \ 20598311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[3])) << 32) | \ 20608311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[4])) << 24) | \ 20618311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[5])) << 16) | \ 20628311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[6])) << 8) | \ 20638311SSukumar.Swaminathan@Sun.COM (((uint64_t)((addr)[7]))))) 20649156SDaniel.Beauregard@Sun.COM /* 20659156SDaniel.Beauregard@Sun.COM * Structure used to associate cmds with strings which describe them. 20669156SDaniel.Beauregard@Sun.COM */ 20679156SDaniel.Beauregard@Sun.COM typedef struct cmd_table_entry { 20689156SDaniel.Beauregard@Sun.COM uint16_t cmd; 20699156SDaniel.Beauregard@Sun.COM char *string; 20709156SDaniel.Beauregard@Sun.COM } cmd_table_t; 20719156SDaniel.Beauregard@Sun.COM 20729156SDaniel.Beauregard@Sun.COM /* 20739156SDaniel.Beauregard@Sun.COM * ELS command table initializer 20749156SDaniel.Beauregard@Sun.COM */ 20759156SDaniel.Beauregard@Sun.COM #define ELS_CMD_TABLE() \ 20769156SDaniel.Beauregard@Sun.COM { \ 20779156SDaniel.Beauregard@Sun.COM {LA_ELS_RJT, "LA_ELS_RJT"}, \ 20789156SDaniel.Beauregard@Sun.COM {LA_ELS_ACC, "LA_ELS_ACC"}, \ 20799156SDaniel.Beauregard@Sun.COM {LA_ELS_PLOGI, "LA_ELS_PLOGI"}, \ 20809156SDaniel.Beauregard@Sun.COM {LA_ELS_PDISC, "LA_ELS_PDISC"}, \ 20819156SDaniel.Beauregard@Sun.COM {LA_ELS_FLOGI, "LA_ELS_FLOGI"}, \ 20829156SDaniel.Beauregard@Sun.COM {LA_ELS_FDISC, "LA_ELS_FDISC"}, \ 20839156SDaniel.Beauregard@Sun.COM {LA_ELS_LOGO, "LA_ELS_LOGO"}, \ 20849156SDaniel.Beauregard@Sun.COM {LA_ELS_PRLI, "LA_ELS_PRLI"}, \ 20859156SDaniel.Beauregard@Sun.COM {LA_ELS_PRLO, "LA_ELS_PRLO"}, \ 20869156SDaniel.Beauregard@Sun.COM {LA_ELS_ADISC, "LA_ELS_ADISC"}, \ 20879156SDaniel.Beauregard@Sun.COM {LA_ELS_LINIT, "LA_ELS_LINIT"}, \ 20889156SDaniel.Beauregard@Sun.COM {LA_ELS_LPC, "LA_ELS_LPC"}, \ 20899156SDaniel.Beauregard@Sun.COM {LA_ELS_LSTS, "LA_ELS_LSTS"}, \ 20909156SDaniel.Beauregard@Sun.COM {LA_ELS_SCR, "LA_ELS_SCR"}, \ 20919156SDaniel.Beauregard@Sun.COM {LA_ELS_RSCN, "LA_ELS_RSCN"}, \ 20929156SDaniel.Beauregard@Sun.COM {LA_ELS_FARP_REQ, "LA_ELS_FARP_REQ"}, \ 20939156SDaniel.Beauregard@Sun.COM {LA_ELS_FARP_REPLY, "LA_ELS_FARP_REPLY"}, \ 20949156SDaniel.Beauregard@Sun.COM {LA_ELS_RLS, "LA_ELS_RLS"}, \ 20959156SDaniel.Beauregard@Sun.COM {LA_ELS_RNID, "LA_ELS_RNID"}, \ 20969156SDaniel.Beauregard@Sun.COM {NULL, NULL} \ 20979156SDaniel.Beauregard@Sun.COM } 20989156SDaniel.Beauregard@Sun.COM 20999156SDaniel.Beauregard@Sun.COM /* 21009156SDaniel.Beauregard@Sun.COM * ELS Passthru IOCB data segment descriptor. 21019156SDaniel.Beauregard@Sun.COM */ 21029156SDaniel.Beauregard@Sun.COM typedef struct data_seg_desc { 21039156SDaniel.Beauregard@Sun.COM uint32_t addr[2]; 21049156SDaniel.Beauregard@Sun.COM uint32_t length; 21059156SDaniel.Beauregard@Sun.COM } data_seg_desc_t; 21069156SDaniel.Beauregard@Sun.COM 21079156SDaniel.Beauregard@Sun.COM /* 21089156SDaniel.Beauregard@Sun.COM * ELS descriptor used to abstract the hosts fibre channel packet 21099156SDaniel.Beauregard@Sun.COM * from the ISP ELS code. 21109156SDaniel.Beauregard@Sun.COM */ 21119156SDaniel.Beauregard@Sun.COM typedef struct els_desc { 21129156SDaniel.Beauregard@Sun.COM uint8_t els; /* the ELS command code */ 21139156SDaniel.Beauregard@Sun.COM ddi_acc_handle_t els_handle; 21149156SDaniel.Beauregard@Sun.COM uint16_t n_port_handle; 21159156SDaniel.Beauregard@Sun.COM port_id_t d_id; 21169156SDaniel.Beauregard@Sun.COM port_id_t s_id; 21179156SDaniel.Beauregard@Sun.COM uint16_t control_flags; 21189156SDaniel.Beauregard@Sun.COM uint32_t cmd_byte_count; 21199156SDaniel.Beauregard@Sun.COM uint32_t rsp_byte_count; 21209156SDaniel.Beauregard@Sun.COM data_seg_desc_t tx_dsd; /* FC frame payload */ 21219156SDaniel.Beauregard@Sun.COM data_seg_desc_t rx_dsd; /* ELS resp payload buffer */ 21229156SDaniel.Beauregard@Sun.COM } els_descriptor_t; 21239156SDaniel.Beauregard@Sun.COM 21249156SDaniel.Beauregard@Sun.COM typedef struct prli_svc_pram_resp_page { 21259156SDaniel.Beauregard@Sun.COM uint8_t type_code; 21269156SDaniel.Beauregard@Sun.COM uint8_t type_code_ext; 21279156SDaniel.Beauregard@Sun.COM uint16_t prli_resp_flags; 21289156SDaniel.Beauregard@Sun.COM uint32_t orig_process_associator; 21299156SDaniel.Beauregard@Sun.COM uint32_t resp_process_associator; 21309156SDaniel.Beauregard@Sun.COM uint32_t common_parameters; 21319156SDaniel.Beauregard@Sun.COM } prli_svc_pram_resp_page_t; 21329156SDaniel.Beauregard@Sun.COM 21339156SDaniel.Beauregard@Sun.COM /* 21349156SDaniel.Beauregard@Sun.COM * PRLI accept Service Parameter Page Word 3 21359156SDaniel.Beauregard@Sun.COM */ 21369156SDaniel.Beauregard@Sun.COM #define PRLI_W3_WRITE_FCP_XFR_RDY_DISABLED BIT_0 21379156SDaniel.Beauregard@Sun.COM #define PRLI_W3_READ_FCP_XFR_RDY_DISABLED BIT_1 21389156SDaniel.Beauregard@Sun.COM #define PRLI_W3_OBSOLETE_BIT_2 BIT_2 21399156SDaniel.Beauregard@Sun.COM #define PRLI_W3_OBSOLETE_BIT_3 BIT_3 21409156SDaniel.Beauregard@Sun.COM #define PRLI_W3_TARGET_FUNCTION BIT_4 21419156SDaniel.Beauregard@Sun.COM #define PRLI_W3_INITIATOR_FUNCTION BIT_5 21429156SDaniel.Beauregard@Sun.COM #define PRLI_W3_DATA_OVERLAY_ALLOWED BIT_6 21439156SDaniel.Beauregard@Sun.COM #define PRLI_W3_CONFIRMED_COMP_ALLOWED BIT_7 21449156SDaniel.Beauregard@Sun.COM #define PRLI_W3_RETRY BIT_8 21459156SDaniel.Beauregard@Sun.COM #define PRLI_W3_TASK_RETRY_ID_REQUESTED BIT_9 21469156SDaniel.Beauregard@Sun.COM 21479156SDaniel.Beauregard@Sun.COM typedef struct prli_acc_resp { 21489156SDaniel.Beauregard@Sun.COM uint8_t ls_code; 21499156SDaniel.Beauregard@Sun.COM uint8_t page_length; 21509156SDaniel.Beauregard@Sun.COM uint16_t payload_length; 21519156SDaniel.Beauregard@Sun.COM struct prli_svc_pram_resp_page svc_params; 21529156SDaniel.Beauregard@Sun.COM } prli_acc_resp_t; 21539156SDaniel.Beauregard@Sun.COM 21549156SDaniel.Beauregard@Sun.COM #define EL_TRACE_BUF_SIZE 8192 21558311SSukumar.Swaminathan@Sun.COM 21568311SSukumar.Swaminathan@Sun.COM /* 21578311SSukumar.Swaminathan@Sun.COM * Global Data in ql_api.c source file. 21588311SSukumar.Swaminathan@Sun.COM */ 21598311SSukumar.Swaminathan@Sun.COM extern void *ql_state; /* for soft state routine */ 21608311SSukumar.Swaminathan@Sun.COM extern uint32_t ql_os_release_level; 21618311SSukumar.Swaminathan@Sun.COM extern ql_head_t ql_hba; 21628311SSukumar.Swaminathan@Sun.COM extern kmutex_t ql_global_mutex; 21638311SSukumar.Swaminathan@Sun.COM extern kmutex_t ql_global_hw_mutex; 21648311SSukumar.Swaminathan@Sun.COM extern kmutex_t ql_global_el_mutex; 21658311SSukumar.Swaminathan@Sun.COM extern uint8_t ql_ip_fast_post_count; 21668311SSukumar.Swaminathan@Sun.COM extern uint32_t ql_ip_buffer_count; 21678311SSukumar.Swaminathan@Sun.COM extern uint32_t ql_ip_low_water; 21688311SSukumar.Swaminathan@Sun.COM extern uint8_t ql_alpa_to_index[]; 21698311SSukumar.Swaminathan@Sun.COM extern uint32_t ql_gfru_hba_index; 2170*12279SDaniel.Beauregard@Sun.COM extern uint32_t ql_enable_ets; 2171*12279SDaniel.Beauregard@Sun.COM extern uint16_t ql_osc_wait_count; 21728311SSukumar.Swaminathan@Sun.COM 21738311SSukumar.Swaminathan@Sun.COM /* 21748311SSukumar.Swaminathan@Sun.COM * Global Function Prototypes in ql_api.c source file. 21758311SSukumar.Swaminathan@Sun.COM */ 21768311SSukumar.Swaminathan@Sun.COM void ql_chg_endian(uint8_t *, size_t); 21778311SSukumar.Swaminathan@Sun.COM void ql_populate_hba_fru_details(ql_adapter_state_t *, fc_fca_port_info_t *); 21788311SSukumar.Swaminathan@Sun.COM void ql_setup_fruinfo(ql_adapter_state_t *); 21798311SSukumar.Swaminathan@Sun.COM uint16_t ql_pci_config_get16(ql_adapter_state_t *, off_t); 21808311SSukumar.Swaminathan@Sun.COM uint32_t ql_pci_config_get32(ql_adapter_state_t *, off_t); 21818311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put8(ql_adapter_state_t *, off_t, uint8_t); 21828311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put16(ql_adapter_state_t *, off_t, uint16_t); 21838311SSukumar.Swaminathan@Sun.COM void ql_delay(ql_adapter_state_t *, clock_t); 21848311SSukumar.Swaminathan@Sun.COM void ql_awaken_task_daemon(ql_adapter_state_t *, ql_srb_t *, uint32_t, 21858311SSukumar.Swaminathan@Sun.COM uint32_t); 21868311SSukumar.Swaminathan@Sun.COM int ql_abort_device(ql_adapter_state_t *, ql_tgt_t *, int); 21878311SSukumar.Swaminathan@Sun.COM int ql_binary_fw_dump(ql_adapter_state_t *, int); 21888311SSukumar.Swaminathan@Sun.COM void ql_done(ql_link_t *); 21898311SSukumar.Swaminathan@Sun.COM int ql_24xx_flash_id(ql_adapter_state_t *); 21908311SSukumar.Swaminathan@Sun.COM int ql_24xx_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t, uint32_t); 21918311SSukumar.Swaminathan@Sun.COM int ql_poll_flash(ql_adapter_state_t *, uint32_t, uint8_t); 21928311SSukumar.Swaminathan@Sun.COM void ql_flash_disable(ql_adapter_state_t *); 21938311SSukumar.Swaminathan@Sun.COM void ql_flash_enable(ql_adapter_state_t *); 21948311SSukumar.Swaminathan@Sun.COM int ql_erase_flash(ql_adapter_state_t *, int); 21958311SSukumar.Swaminathan@Sun.COM void ql_write_flash_byte(ql_adapter_state_t *, uint32_t, uint8_t); 21968311SSukumar.Swaminathan@Sun.COM uint8_t ql_read_flash_byte(ql_adapter_state_t *, uint32_t); 21978311SSukumar.Swaminathan@Sun.COM int ql_24xx_read_flash(ql_adapter_state_t *, uint32_t, uint32_t *); 21988311SSukumar.Swaminathan@Sun.COM int ql_24xx_write_flash(ql_adapter_state_t *, uint32_t, uint32_t); 21998311SSukumar.Swaminathan@Sun.COM fc_unsol_buf_t *ql_get_unsolicited_buffer(ql_adapter_state_t *, uint32_t); 22008311SSukumar.Swaminathan@Sun.COM size_t ql_ascii_fw_dump(ql_adapter_state_t *, caddr_t); 22018311SSukumar.Swaminathan@Sun.COM void ql_add_link_b(ql_head_t *, ql_link_t *); 22028311SSukumar.Swaminathan@Sun.COM void ql_add_link_t(ql_head_t *, ql_link_t *); 22038311SSukumar.Swaminathan@Sun.COM void ql_remove_link(ql_head_t *, ql_link_t *); 22048311SSukumar.Swaminathan@Sun.COM void ql_next(ql_adapter_state_t *, ql_lun_t *); 22058311SSukumar.Swaminathan@Sun.COM void ql_send_logo(ql_adapter_state_t *, ql_tgt_t *, ql_head_t *); 22068311SSukumar.Swaminathan@Sun.COM void ql_cthdr_endian(ddi_acc_handle_t, caddr_t, boolean_t); 22078311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_d_id_to_queue(ql_adapter_state_t *, port_id_t); 22088311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_loop_id_to_queue(ql_adapter_state_t *, uint16_t); 22098311SSukumar.Swaminathan@Sun.COM void ql_cmd_wait(ql_adapter_state_t *); 22108311SSukumar.Swaminathan@Sun.COM void ql_loop_online(ql_adapter_state_t *); 22118311SSukumar.Swaminathan@Sun.COM ql_tgt_t *ql_dev_init(ql_adapter_state_t *, port_id_t, uint16_t); 22128311SSukumar.Swaminathan@Sun.COM int ql_ub_frame_hdr(ql_adapter_state_t *, ql_tgt_t *, uint16_t, ql_head_t *); 22138311SSukumar.Swaminathan@Sun.COM void ql_rcv_rscn_els(ql_adapter_state_t *, uint16_t *, ql_head_t *); 22148311SSukumar.Swaminathan@Sun.COM int ql_stall_driver(ql_adapter_state_t *, uint32_t); 22158311SSukumar.Swaminathan@Sun.COM void ql_restart_driver(ql_adapter_state_t *); 22168311SSukumar.Swaminathan@Sun.COM int ql_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t); 22178311SSukumar.Swaminathan@Sun.COM int ql_get_dma_mem(ql_adapter_state_t *, dma_mem_t *, uint32_t, 22188311SSukumar.Swaminathan@Sun.COM mem_alloc_type_t, mem_alignment_t); 22198311SSukumar.Swaminathan@Sun.COM int ql_alloc_phys(ql_adapter_state_t *, dma_mem_t *, int); 22208311SSukumar.Swaminathan@Sun.COM void ql_free_phys(ql_adapter_state_t *, dma_mem_t *); 22218311SSukumar.Swaminathan@Sun.COM void ql_24xx_protect_flash(ql_adapter_state_t *); 22228311SSukumar.Swaminathan@Sun.COM void ql_free_dma_resource(ql_adapter_state_t *, dma_mem_t *); 22238311SSukumar.Swaminathan@Sun.COM uint8_t ql_pci_config_get8(ql_adapter_state_t *, off_t); 22248311SSukumar.Swaminathan@Sun.COM void ql_pci_config_put32(ql_adapter_state_t *, off_t, uint32_t); 22259446SDaniel.Beauregard@Sun.COM int ql_24xx_unprotect_flash(ql_adapter_state_t *); 22269156SDaniel.Beauregard@Sun.COM char *els_cmd_text(int); 22279156SDaniel.Beauregard@Sun.COM char *mbx_cmd_text(int); 22289156SDaniel.Beauregard@Sun.COM char *cmd_text(cmd_table_t *, int); 22298311SSukumar.Swaminathan@Sun.COM uint32_t ql_fwmodule_resolve(ql_adapter_state_t *); 22308311SSukumar.Swaminathan@Sun.COM void ql_port_state(ql_adapter_state_t *, uint32_t, uint32_t); 22319446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_cmd_endian(ql_adapter_state_t *ha, ql_srb_t *srb); 22329446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_rsp_endian(ql_adapter_state_t *ha, ql_srb_t *srb); 22339446SDaniel.Beauregard@Sun.COM void ql_isp_els_handle_endian(ql_adapter_state_t *ha, uint8_t *ptr, 22349446SDaniel.Beauregard@Sun.COM uint8_t ls_code); 223511924SDaniel.Beauregard@Sun.COM int ql_el_trace_desc_ctor(ql_adapter_state_t *); 223611924SDaniel.Beauregard@Sun.COM int ql_el_trace_desc_dtor(ql_adapter_state_t *); 223711924SDaniel.Beauregard@Sun.COM int ql_nvram_cache_desc_ctor(ql_adapter_state_t *); 223811924SDaniel.Beauregard@Sun.COM int ql_nvram_cache_desc_dtor(ql_adapter_state_t *); 22399446SDaniel.Beauregard@Sun.COM int ql_wwn_cmp(ql_adapter_state_t *, la_wwn_t *, la_wwn_t *); 22409446SDaniel.Beauregard@Sun.COM void ql_dev_free(ql_adapter_state_t *, ql_tgt_t *); 22418311SSukumar.Swaminathan@Sun.COM 22428311SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus 22438311SSukumar.Swaminathan@Sun.COM } 22448311SSukumar.Swaminathan@Sun.COM #endif 22458311SSukumar.Swaminathan@Sun.COM 22468311SSukumar.Swaminathan@Sun.COM #endif /* _QL_API_H */ 2247