69 static int cln_attach(dev_info_t *, ddi_attach_cmd_t);
70 static dev_info_t *cln_dip; /* private copy of devinfo pointer */
71
72 #define CLONE_CONF_FLAG (D_NEW|D_MP)
73
74 DDI_DEFINE_STREAM_OPS(clone_ops, nulldev, nulldev, cln_attach, nodev, nodev, \
75 cln_info, CLONE_CONF_FLAG, &clninfo, ddi_quiesce_not_needed);
76
77 /*
78 * Module linkage information for the kernel.
79 */
80
81 static struct modldrv modldrv = {
82 &mod_driverops, /* Type of module. This one is a pseudo driver */
83 "Clone Pseudodriver 'clone'",
84 &clone_ops, /* driver ops */
85 };
86
87 static struct modlinkage modlinkage = {
88 MODREV_1,
89 (void *)&modldrv,
90 NULL
91 };
92
93
94 int
95 _init(void)
96 {
97 return (mod_install(&modlinkage));
98 }
99
100 int
101 _fini(void)
102 {
103 /*
104 * Since the clone driver's reference count is unreliable,
105 * make sure we are never unloaded.
106 */
107 return (EBUSY);
108 }
109
110 int
|
69 static int cln_attach(dev_info_t *, ddi_attach_cmd_t);
70 static dev_info_t *cln_dip; /* private copy of devinfo pointer */
71
72 #define CLONE_CONF_FLAG (D_NEW|D_MP)
73
74 DDI_DEFINE_STREAM_OPS(clone_ops, nulldev, nulldev, cln_attach, nodev, nodev, \
75 cln_info, CLONE_CONF_FLAG, &clninfo, ddi_quiesce_not_needed);
76
77 /*
78 * Module linkage information for the kernel.
79 */
80
81 static struct modldrv modldrv = {
82 &mod_driverops, /* Type of module. This one is a pseudo driver */
83 "Clone Pseudodriver 'clone'",
84 &clone_ops, /* driver ops */
85 };
86
87 static struct modlinkage modlinkage = {
88 MODREV_1,
89 { (void *)&modldrv, NULL }
90 };
91
92
93 int
94 _init(void)
95 {
96 return (mod_install(&modlinkage));
97 }
98
99 int
100 _fini(void)
101 {
102 /*
103 * Since the clone driver's reference count is unreliable,
104 * make sure we are never unloaded.
105 */
106 return (EBUSY);
107 }
108
109 int
|