13156Sgirish /* 23156Sgirish * CDDL HEADER START 33156Sgirish * 43156Sgirish * The contents of this file are subject to the terms of the 53156Sgirish * Common Development and Distribution License (the "License"). 63156Sgirish * You may not use this file except in compliance with the License. 73156Sgirish * 83156Sgirish * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93156Sgirish * or http://www.opensolaris.org/os/licensing. 103156Sgirish * See the License for the specific language governing permissions 113156Sgirish * and limitations under the License. 123156Sgirish * 133156Sgirish * When distributing Covered Code, include this CDDL HEADER in each 143156Sgirish * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153156Sgirish * If applicable, add the following below this CDDL HEADER, with the 163156Sgirish * fields enclosed by brackets "[]" replaced with your own identifying 173156Sgirish * information: Portions Copyright [yyyy] [name of copyright owner] 183156Sgirish * 193156Sgirish * CDDL HEADER END 203156Sgirish */ 213156Sgirish /* 22*11513SAlan.Adamson@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 233156Sgirish * Use is subject to license terms. 243156Sgirish */ 253156Sgirish 263794Sjf137018 #ifndef _SYS_NIUMX_VAR_H 273794Sjf137018 #define _SYS_NIUMX_VAR_H 283156Sgirish 293156Sgirish #ifdef __cplusplus 303156Sgirish extern "C" { 313156Sgirish #endif 323156Sgirish 333156Sgirish typedef enum { /* same sequence as niumx_debug_sym[] */ 34*11513SAlan.Adamson@Sun.COM /* 0 */ NIUMX_DBG_ATTACH, 35*11513SAlan.Adamson@Sun.COM /* 1 */ NIUMX_DBG_MAP, 36*11513SAlan.Adamson@Sun.COM /* 2 */ NIUMX_DBG_CTLOPS, 37*11513SAlan.Adamson@Sun.COM /* 3 */ NIUMX_DBG_INTROPS, 38*11513SAlan.Adamson@Sun.COM /* 4 */ NIUMX_DBG_A_INTX, 39*11513SAlan.Adamson@Sun.COM /* 5 */ NIUMX_DBG_R_INTX, 40*11513SAlan.Adamson@Sun.COM /* 6 */ NIUMX_DBG_INTR, 41*11513SAlan.Adamson@Sun.COM /* 7 */ NIUMX_DBG_DMA_ALLOCH, 42*11513SAlan.Adamson@Sun.COM /* 8 */ NIUMX_DBG_DMA_BINDH, 43*11513SAlan.Adamson@Sun.COM /* 9 */ NIUMX_DBG_DMA_UNBINDH, 44*11513SAlan.Adamson@Sun.COM /* 10 */ NIUMX_DBG_CHK_MOD 453156Sgirish } niumx_debug_bit_t; 463156Sgirish 473156Sgirish #if defined(DEBUG) 483156Sgirish #define DBG niumx_dbg 493156Sgirish extern void niumx_dbg(niumx_debug_bit_t bit, dev_info_t *dip, char *fmt, ...); 503156Sgirish #else 513156Sgirish #define DBG 0 && 523156Sgirish #endif /* DEBUG */ 533156Sgirish 54*11513SAlan.Adamson@Sun.COM typedef uint64_t niudevhandle_t; 553156Sgirish #define NIUMX_DEVHDLE_MASK 0xFFFFFFF 56*11513SAlan.Adamson@Sun.COM typedef uint32_t niucpuid_t; 57*11513SAlan.Adamson@Sun.COM typedef uint32_t niudevino_t; 58*11513SAlan.Adamson@Sun.COM typedef uint64_t niusysino_t; 593156Sgirish 603156Sgirish /* 613156Sgirish * The following structure represents an interrupt handler control block for 623156Sgirish * each interrupt added via ddi_intr_add_handler(). 633156Sgirish */ 643156Sgirish typedef struct niumx_ih { 653156Sgirish dev_info_t *ih_dip; /* devinfo structure */ 663156Sgirish uint32_t ih_inum; /* interrupt index, from leaf */ 67*11513SAlan.Adamson@Sun.COM niusysino_t ih_sysino; /* System virtual inumber, from HV */ 68*11513SAlan.Adamson@Sun.COM niucpuid_t ih_cpuid; /* cpu that ino is targeting */ 69*11513SAlan.Adamson@Sun.COM int ih_state; /* interrupt valid state */ 70*11513SAlan.Adamson@Sun.COM int ih_pri; /* interrupt priority */ 713156Sgirish uint_t (*ih_hdlr)(); /* interrupt handler */ 723156Sgirish caddr_t ih_arg1; /* interrupt handler argument #1 */ 733156Sgirish caddr_t ih_arg2; /* interrupt handler argument #2 */ 743156Sgirish struct niumx_ih *ih_next; /* next in the chain */ 753156Sgirish } niumx_ih_t; 763156Sgirish 77*11513SAlan.Adamson@Sun.COM #define NIUMX_MAX_INTRS 64 78*11513SAlan.Adamson@Sun.COM 79*11513SAlan.Adamson@Sun.COM #define NIUMX_SOFT_STATE_OPEN 1 80*11513SAlan.Adamson@Sun.COM #define NIUMX_SOFT_STATE_OPEN_EXCL 2 81*11513SAlan.Adamson@Sun.COM #define NIUMX_SOFT_STATE_CLOSED 4 82*11513SAlan.Adamson@Sun.COM 8311304SJanie.Lu@Sun.COM 843156Sgirish typedef struct niumx_devstate { 853156Sgirish dev_info_t *dip; 86*11513SAlan.Adamson@Sun.COM int niumx_soft_state; 87*11513SAlan.Adamson@Sun.COM int niumx_open_count; 88*11513SAlan.Adamson@Sun.COM niudevhandle_t niumx_dev_hdl; /* device handle */ 893156Sgirish kmutex_t niumx_mutex; 903325Ssd77468 int niumx_fm_cap; 913325Ssd77468 ddi_iblock_cookie_t niumx_fm_ibc; 9211304SJanie.Lu@Sun.COM niumx_ih_t niumx_ihtable[NIUMX_MAX_INTRS]; 933156Sgirish } niumx_devstate_t; 943156Sgirish 953156Sgirish /* 963156Sgirish * flags for overloading dmai_inuse field of the dma request structure: 973156Sgirish */ 983156Sgirish #define dmai_pfnlst dmai_iopte 993156Sgirish #define dmai_pfn0 dmai_sbi 1003156Sgirish #define dmai_roffset dmai_pool 1013156Sgirish 1023156Sgirish #define NIUMX_PAGE_SHIFT 13 1033156Sgirish #define NIUMX_PAGE_SIZE (1 << NIUMX_PAGE_SHIFT) 1043156Sgirish #define NIUMX_PAGE_MASK ~(NIUMX_PAGE_SIZE - 1) 1053156Sgirish #define NIUMX_PAGE_OFFSET (NIUMX_PAGE_SIZE - 1) 1063156Sgirish #define NIUMX_PTOB(x) (((uint64_t)(x)) << NIUMX_PAGE_SHIFT) 1073156Sgirish 1083156Sgirish /* for "ranges" property */ 1093156Sgirish typedef struct niumx_ranges { 1103156Sgirish uint32_t child_hi; 1113156Sgirish uint32_t child_lo; 1123156Sgirish uint32_t parent_hi; 1133156Sgirish uint32_t parent_lo; 1143156Sgirish uint32_t size_hi; 1153156Sgirish uint32_t size_lo; 1163156Sgirish } niumx_ranges_t; 1173156Sgirish 1183156Sgirish /* IPL of 6 for networking devices */ 1193156Sgirish #define NIUMX_DEFAULT_PIL 6 1203156Sgirish 1213156Sgirish typedef struct { 1223156Sgirish uint32_t addr_high; 1233156Sgirish uint32_t addr_low; 1243156Sgirish uint32_t size_high; 1253156Sgirish uint32_t size_low; 1263156Sgirish } niu_regspec_t; 1273156Sgirish 1283156Sgirish /* 1293310Sjf137018 * HV INTR API versioning. 1303156Sgirish * 1313310Sjf137018 * Currently NIU nexus driver supports version 1.0 1323156Sgirish */ 1333156Sgirish #define NIUMX_INTR_MAJOR_VER_1 0x1ull 1343156Sgirish #define NIUMX_INTR_MAJOR_VER NIUMX_INTR_MAJOR_VER_1 1353156Sgirish 1363156Sgirish #define NIUMX_INTR_MINOR_VER_0 0x0ull 1373156Sgirish #define NIUMX_INTR_MINOR_VER NIUMX_INTR_MINOR_VER_0 1383156Sgirish 139*11513SAlan.Adamson@Sun.COM #define NIUMX_NAMEINST(dip) ddi_driver_name(dip), ddi_get_instance(dip) 140*11513SAlan.Adamson@Sun.COM #define NIUMX_DIP_TO_HANDLE(dip) \ 141*11513SAlan.Adamson@Sun.COM ((niumx_devstate_t *)NIUMX_DIP_TO_STATE(dip))->niumx_dev_hdl 142*11513SAlan.Adamson@Sun.COM #define NIUMX_DIP_TO_INST(dip) ddi_get_instance(dip) 143*11513SAlan.Adamson@Sun.COM #define NIUMX_INST_TO_STATE(inst) ddi_get_soft_state(niumx_state, inst) 144*11513SAlan.Adamson@Sun.COM #define NIUMX_DIP_TO_STATE(dip) NIUMX_INST_TO_STATE(NIUMX_DIP_TO_INST(dip)) 145*11513SAlan.Adamson@Sun.COM #define NIUMX_DEV_TO_SOFTSTATE(dev) \ 146*11513SAlan.Adamson@Sun.COM ((pci_t *)ddi_get_soft_state(niumx_state, \ 147*11513SAlan.Adamson@Sun.COM PCI_MINOR_NUM_TO_INSTANCE(getminor(dev)))) 1483156Sgirish 1493156Sgirish #ifdef __cplusplus 1503156Sgirish } 1513156Sgirish #endif 1523156Sgirish 1533794Sjf137018 #endif /* _SYS_NIUMX_VAR_H */ 154