5255 uts shouldn't open-code ISP2
[illumos-gate.git] / usr / src / uts / common / io / 1394 / s1394.c
bloba3dcd4b5bea30083d387902dceeede06e84d9ddb
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
23 * Copyright (c) 1999-2000 by Sun Microsystems, Inc.
24 * All rights reserved.
27 #pragma ident "%Z%%M% %I% %E% SMI"
30 * s1394.c
31 * 1394 Services Layer Initialization and Cleanup Routines
32 * The routines do all initialization and cleanup for the Sevices Layer
35 #include <sys/conf.h>
36 #include <sys/ddi.h>
37 #include <sys/sunddi.h>
38 #include <sys/types.h>
39 #include <sys/kmem.h>
40 #include <sys/tnf_probe.h>
42 #include <sys/1394/t1394.h>
43 #include <sys/1394/s1394.h>
44 #include <sys/1394/h1394.h>
46 /* Driver State Pointer */
47 s1394_state_t *s1394_statep;
49 /* Module Driver Info */
50 static struct modlmisc s1394_modlmisc = {
51 &mod_miscops,
52 "IEEE 1394 Services Library 1.0"
55 /* Module Linkage */
56 static struct modlinkage s1394_modlinkage = {
57 MODREV_1,
58 &s1394_modlmisc,
59 NULL
62 static int s1394_init();
63 static void s1394_fini();
65 #ifndef NPROBE
66 extern int tnf_mod_load(void);
67 extern int tnf_mod_unload(struct modlinkage *mlp);
68 #endif
70 int
71 _init()
73 int status;
75 #ifndef NPROBE
76 (void) tnf_mod_load();
77 #endif
78 status = s1394_init();
79 if (status != 0) {
80 TNF_PROBE_1(_init_error, S1394_TNF_SL_ERROR, "",
81 tnf_string, msg, "s1394: failed in s1394_init");
82 #ifndef NPROBE
83 (void) tnf_mod_unload(&s1394_modlinkage);
84 #endif
85 return (status);
88 status = mod_install(&s1394_modlinkage);
89 if (status != 0) {
90 TNF_PROBE_1(_init_error, S1394_TNF_SL_ERROR, "",
91 tnf_string, msg, "s1394: failed in mod_install");
92 #ifndef NPROBE
93 (void) tnf_mod_unload(&s1394_modlinkage);
94 #endif
96 return (status);
99 int
100 _info(struct modinfo *modinfop)
102 return (mod_info(&s1394_modlinkage, modinfop));
106 _fini()
108 int status;
110 status = mod_remove(&s1394_modlinkage);
111 if (status != 0) {
112 TNF_PROBE_1(_fini_error, S1394_TNF_SL_ERROR, "",
113 tnf_string, msg, "s1394: failed in mod_remove");
114 return (status);
117 s1394_fini();
118 #ifndef NPROBE
119 (void) tnf_mod_unload(&s1394_modlinkage);
120 #endif
121 return (status);
125 * s1394_init()
126 * initializes the 1394 Software Framework's structures, i.e. the HAL list
127 * and associated mutex.
129 static int
130 s1394_init()
132 TNF_PROBE_0_DEBUG(s1394_init_enter, S1394_TNF_SL_STACK, "");
134 s1394_statep = kmem_zalloc(sizeof (s1394_state_t), KM_SLEEP);
136 s1394_statep->hal_head = NULL;
137 s1394_statep->hal_tail = NULL;
138 mutex_init(&s1394_statep->hal_list_mutex, NULL, MUTEX_DRIVER, NULL);
140 TNF_PROBE_0_DEBUG(s1394_init_exit, S1394_TNF_SL_STACK, "");
141 return (0);
145 * s1394_fini()
146 * cleans up the 1394 Software Framework's structures that were allocated
147 * in s1394_init().
149 static void
150 s1394_fini()
152 TNF_PROBE_0_DEBUG(s1394_fini_enter, S1394_TNF_SL_STACK, "");
154 mutex_destroy(&s1394_statep->hal_list_mutex);
156 kmem_free(s1394_statep, sizeof (s1394_state_t));
158 TNF_PROBE_0_DEBUG(s1394_fini_exit, S1394_TNF_SL_STACK, "");