1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef _SYS_NDI_IMPLDEFS_H
27 #define	_SYS_NDI_IMPLDEFS_H
28 
29 #include <sys/types.h>
30 #include <sys/param.h>
31 #include <sys/t_lock.h>
32 #include <sys/ddipropdefs.h>
33 #include <sys/devops.h>
34 #include <sys/autoconf.h>
35 #include <sys/mutex.h>
36 #include <vm/page.h>
37 #include <sys/ddi_impldefs.h>
38 
39 #ifdef	__cplusplus
40 extern "C" {
41 #endif
42 
43 /* event handle for callback management */
44 struct ndi_event_hdl {
45 	dev_info_t		*ndi_evthdl_dip;
46 
47 	/*
48 	 * mutex that protect the handle and event defs
49 	 */
50 	kmutex_t		ndi_evthdl_mutex;
51 
52 	/*
53 	 * mutex that just protects the callback list
54 	 */
55 	kmutex_t		ndi_evthdl_cb_mutex;
56 
57 	ddi_iblock_cookie_t	ndi_evthdl_iblock_cookie;
58 
59 	uint_t			ndi_evthdl_high_plevels;
60 	uint_t			ndi_evthdl_other_plevels;
61 
62 	uint_t			ndi_evthdl_n_events;
63 	ndi_event_cookie_t 	*ndi_evthdl_cookie_list;
64 	ndi_event_hdl_t 	ndi_next_hdl;
65 };
66 
67 /* prototypes needed by sunndi.c */
68 int ddi_prop_fm_encode_bytes(prop_handle_t *, void *data, uint_t);
69 
70 int ddi_prop_fm_encode_ints(prop_handle_t *, void *data, uint_t);
71 
72 int ddi_prop_fm_encode_int64(prop_handle_t *, void *data, uint_t);
73 
74 int ddi_prop_int64_op(prop_handle_t *, uint_t, int64_t *);
75 
76 int ddi_prop_update_common(dev_t, dev_info_t *, int, char *, void *, uint_t,
77     int (*)(prop_handle_t *, void *, uint_t));
78 
79 int ddi_prop_lookup_common(dev_t, dev_info_t *, uint_t, char *, void *,
80     uint_t *, int (*)(prop_handle_t *, void *, uint_t *));
81 
82 int ddi_prop_remove_common(dev_t, dev_info_t *, char *, int);
83 void ddi_prop_remove_all_common(dev_info_t *, int);
84 
85 int ddi_prop_fm_encode_string(prop_handle_t *, void *, uint_t);
86 
87 int ddi_prop_fm_encode_strings(prop_handle_t *, void *, uint_t);
88 int ddi_prop_fm_decode_strings(prop_handle_t *, void *, uint_t *);
89 
90 /*
91  * Internal configuration routines
92  */
93 int i_ndi_config_node(dev_info_t *, ddi_node_state_t, uint_t);
94 int i_ndi_unconfig_node(dev_info_t *, ddi_node_state_t, uint_t);
95 
96 /*
97  * Obsolete interface, no longer used, to be removed.
98  * Retained only for driver compatibility.
99  */
100 void i_ndi_block_device_tree_changes(uint_t *);		/* obsolete */
101 void i_ndi_allow_device_tree_changes(uint_t);		/* obsolete */
102 
103 /*
104  * ndi_dev_is_auto_assigned_node: Return non-zero if the nodeid in dev
105  * has been auto-assigned by the framework and should be auto-freed.
106  * (Intended for use by the framework only.)
107  */
108 int i_ndi_dev_is_auto_assigned_node(dev_info_t *);
109 
110 /*
111  * Get and set nodeclass and node attributes.
112  * (Intended for ddi framework use only.)
113  */
114 ddi_node_class_t i_ndi_get_node_class(dev_info_t *);
115 void i_ndi_set_node_class(dev_info_t *, ddi_node_class_t);
116 
117 int i_ndi_get_node_attributes(dev_info_t *);
118 void i_ndi_set_node_attributes(dev_info_t *, int);
119 
120 /*
121  * Set nodeid .. not generally advisable.
122  * (Intended for the ddi framework use only.)
123  */
124 void i_ndi_set_nodeid(dev_info_t *, int);
125 
126 /*
127  * Make driver.conf children.
128  * (Intended for the ddi framework use only.)
129  */
130 int i_ndi_make_spec_children(dev_info_t *, uint_t);
131 
132 #ifdef	__cplusplus
133 }
134 #endif
135 
136 #endif	/* _SYS_NDI_IMPLDEFS_H */
137