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 }