xref: /illumos-gate/usr/src/uts/common/io/dls/dls_mod.c (revision 598f4ceed9327d2d6c2325dd67cae3aa06f7fea6)
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 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 /*
27  * Data-Link Services Module
28  */
29 
30 #include	<sys/modctl.h>
31 #include	<sys/dld_impl.h>
32 
33 static struct modlmisc		i_dls_modlmisc = {
34 	&mod_miscops,
35 	DLS_INFO
36 };
37 
38 static struct modlinkage	i_dls_modlinkage = {
39 	MODREV_1,
40 	&i_dls_modlmisc,
41 	NULL
42 };
43 
44 /*
45  * Module initialization functions.
46  */
47 
48 static void
49 i_dls_mod_init(void)
50 {
51 	dls_link_init();
52 	dls_mgmt_init();
53 }
54 
55 static int
56 i_dls_mod_fini(void)
57 {
58 	int	err;
59 
60 	if ((err = dls_link_fini()) != 0)
61 		return (err);
62 
63 	dls_mgmt_fini();
64 	return (0);
65 }
66 
67 /*
68  * modlinkage functions.
69  */
70 
71 int
72 _init(void)
73 {
74 	int	err;
75 
76 	i_dls_mod_init();
77 
78 	if ((err = mod_install(&i_dls_modlinkage)) != 0) {
79 		(void) i_dls_mod_fini();
80 		return (err);
81 	}
82 
83 #ifdef	DEBUG
84 	cmn_err(CE_NOTE, "!%s loaded", DLS_INFO);
85 #endif	/* DEBUG */
86 
87 	return (0);
88 }
89 
90 int
91 _fini(void)
92 {
93 	int	err;
94 
95 	if ((err = i_dls_mod_fini()) != 0)
96 		return (err);
97 
98 	if ((err = mod_remove(&i_dls_modlinkage)) != 0)
99 		return (err);
100 
101 #ifdef	DEBUG
102 	cmn_err(CE_NOTE, "!%s unloaded", DLS_INFO);
103 #endif	/* DEBUG */
104 
105 	return (0);
106 }
107 
108 int
109 _info(struct modinfo *modinfop)
110 {
111 	return (mod_info(&i_dls_modlinkage, modinfop));
112 }
113