158 &logdmuxlrinit,
159 &logdmuxlwinit
160 };
161
162 static int logdmux_info(dev_info_t *, ddi_info_cmd_t, void *, void **);
163 static int logdmux_attach(dev_info_t *, ddi_attach_cmd_t);
164 static int logdmux_detach(dev_info_t *, ddi_detach_cmd_t);
165 static dev_info_t *logdmux_dip;
166
167 DDI_DEFINE_STREAM_OPS(logdmux_ops, nulldev, nulldev, logdmux_attach,
168 logdmux_detach, nulldev, logdmux_info, D_MP | D_MTPERQ, &logdmuxinfo,
169 ddi_quiesce_not_needed);
170
171 static struct modldrv modldrv = {
172 &mod_driverops,
173 "logindmux driver",
174 &logdmux_ops
175 };
176
177 static struct modlinkage modlinkage = {
178 MODREV_1, &modldrv, NULL
179 };
180
181 int
182 _init(void)
183 {
184 int ret;
185
186 mutex_init(&logdmux_peerq_lock, NULL, MUTEX_DRIVER, NULL);
187 mutex_init(&logdmux_qexch_lock, NULL, MUTEX_DRIVER, NULL);
188
189 if ((ret = mod_install(&modlinkage)) != 0) {
190 mutex_destroy(&logdmux_peerq_lock);
191 mutex_destroy(&logdmux_qexch_lock);
192 return (ret);
193 }
194
195 logdmux_minor_arena = vmem_create("logdmux_minor", (void *)1,
196 logdmux_maxminor, 1, NULL, NULL, NULL, 0,
197 VM_SLEEP | VMC_IDENTIFIER);
198 (void) ddi_soft_state_init(&logdmux_statep, sizeof (struct tmx), 1);
|
158 &logdmuxlrinit,
159 &logdmuxlwinit
160 };
161
162 static int logdmux_info(dev_info_t *, ddi_info_cmd_t, void *, void **);
163 static int logdmux_attach(dev_info_t *, ddi_attach_cmd_t);
164 static int logdmux_detach(dev_info_t *, ddi_detach_cmd_t);
165 static dev_info_t *logdmux_dip;
166
167 DDI_DEFINE_STREAM_OPS(logdmux_ops, nulldev, nulldev, logdmux_attach,
168 logdmux_detach, nulldev, logdmux_info, D_MP | D_MTPERQ, &logdmuxinfo,
169 ddi_quiesce_not_needed);
170
171 static struct modldrv modldrv = {
172 &mod_driverops,
173 "logindmux driver",
174 &logdmux_ops
175 };
176
177 static struct modlinkage modlinkage = {
178 MODREV_1, { &modldrv, NULL }
179 };
180
181 int
182 _init(void)
183 {
184 int ret;
185
186 mutex_init(&logdmux_peerq_lock, NULL, MUTEX_DRIVER, NULL);
187 mutex_init(&logdmux_qexch_lock, NULL, MUTEX_DRIVER, NULL);
188
189 if ((ret = mod_install(&modlinkage)) != 0) {
190 mutex_destroy(&logdmux_peerq_lock);
191 mutex_destroy(&logdmux_qexch_lock);
192 return (ret);
193 }
194
195 logdmux_minor_arena = vmem_create("logdmux_minor", (void *)1,
196 logdmux_maxminor, 1, NULL, NULL, NULL, 0,
197 VM_SLEEP | VMC_IDENTIFIER);
198 (void) ddi_soft_state_init(&logdmux_statep, sizeof (struct tmx), 1);
|