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
33static struct modlmisc		i_dls_modlmisc = {
34	&mod_miscops,
35	DLS_INFO
36};
37
38static struct modlinkage	i_dls_modlinkage = {
39	MODREV_1,
40	&i_dls_modlmisc,
41	NULL
42};
43
44/*
45 * Module initialization functions.
46 */
47
48static void
49i_dls_mod_init(void)
50{
51	dls_link_init();
52	dls_mgmt_init();
53}
54
55static int
56i_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
71int
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
90int
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
108int
109_info(struct modinfo *modinfop)
110{
111	return (mod_info(&i_dls_modlinkage, modinfop));
112}
113