xref: /onnv-gate/usr/src/uts/sun4v/io/niumx/niumx_var.h (revision 11513:b68f438a1f7f)
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