374 };
375
376 static struct dev_ops fm_ops = {
377 DEVO_REV, /* devo_rev, */
378 0, /* refcnt */
379 fm_info, /* get_dev_info */
380 nulldev, /* identify */
381 nulldev, /* probe */
382 fm_attach, /* attach */
383 fm_detach, /* detach */
384 nodev, /* reset */
385 &fm_cb_ops, /* driver operations */
386 (struct bus_ops *)0 /* bus operations */
387 };
388
389 static struct modldrv modldrv = {
390 &mod_driverops, "fault management driver", &fm_ops,
391 };
392
393 static struct modlinkage modlinkage = {
394 MODREV_1, &modldrv, NULL
395 };
396
397 int
398 _init(void)
399 {
400 const fm_vers_t *p;
401 int ret;
402
403
404 if ((ret = mod_install(&modlinkage)) == 0) {
405 (void) nvlist_alloc(&fm_vers_nvl, NV_UNIQUE_NAME, KM_SLEEP);
406 for (p = fm_versions; p->interface != NULL; p++)
407 (void) nvlist_add_uint32(fm_vers_nvl, p->interface,
408 p->version);
409 }
410
411 return (ret);
412 }
413
414 int
|
374 };
375
376 static struct dev_ops fm_ops = {
377 DEVO_REV, /* devo_rev, */
378 0, /* refcnt */
379 fm_info, /* get_dev_info */
380 nulldev, /* identify */
381 nulldev, /* probe */
382 fm_attach, /* attach */
383 fm_detach, /* detach */
384 nodev, /* reset */
385 &fm_cb_ops, /* driver operations */
386 (struct bus_ops *)0 /* bus operations */
387 };
388
389 static struct modldrv modldrv = {
390 &mod_driverops, "fault management driver", &fm_ops,
391 };
392
393 static struct modlinkage modlinkage = {
394 MODREV_1, { &modldrv, NULL }
395 };
396
397 int
398 _init(void)
399 {
400 const fm_vers_t *p;
401 int ret;
402
403
404 if ((ret = mod_install(&modlinkage)) == 0) {
405 (void) nvlist_alloc(&fm_vers_nvl, NV_UNIQUE_NAME, KM_SLEEP);
406 for (p = fm_versions; p->interface != NULL; p++)
407 (void) nvlist_add_uint32(fm_vers_nvl, p->interface,
408 p->version);
409 }
410
411 return (ret);
412 }
413
414 int
|