18b47140eSrab /*
28b47140eSrab * CDDL HEADER START
38b47140eSrab *
48b47140eSrab * The contents of this file are subject to the terms of the
58b47140eSrab * Common Development and Distribution License (the "License").
68b47140eSrab * You may not use this file except in compliance with the License.
78b47140eSrab *
88b47140eSrab * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98b47140eSrab * or http://www.opensolaris.org/os/licensing.
108b47140eSrab * See the License for the specific language governing permissions
118b47140eSrab * and limitations under the License.
128b47140eSrab *
138b47140eSrab * When distributing Covered Code, include this CDDL HEADER in each
148b47140eSrab * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158b47140eSrab * If applicable, add the following below this CDDL HEADER, with the
168b47140eSrab * fields enclosed by brackets "[]" replaced with your own identifying
178b47140eSrab * information: Portions Copyright [yyyy] [name of copyright owner]
188b47140eSrab *
198b47140eSrab * CDDL HEADER END
208b47140eSrab */
21*c73799ddSYuri Pankov
228b47140eSrab /*
238b47140eSrab * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
248b47140eSrab * Use is subject to license terms.
258b47140eSrab */
268b47140eSrab
278b47140eSrab /*
28*c73799ddSYuri Pankov * Fake cmdk module. Prevents the real cmdk driver from loading in
29*c73799ddSYuri Pankov * a xen HVM domain so that xdf may operate instead.
308b47140eSrab */
318b47140eSrab
328b47140eSrab #include <sys/sunddi.h>
338b47140eSrab #include <sys/errno.h>
348b47140eSrab #include <sys/modctl.h>
358b47140eSrab
36*c73799ddSYuri Pankov /*ARGSUSED*/
37*c73799ddSYuri Pankov static int
stubattach(dev_info_t * dip,ddi_attach_cmd_t cmd)38*c73799ddSYuri Pankov stubattach(dev_info_t *dip, ddi_attach_cmd_t cmd)
39*c73799ddSYuri Pankov {
40*c73799ddSYuri Pankov return (DDI_SUCCESS);
41*c73799ddSYuri Pankov }
42*c73799ddSYuri Pankov
43*c73799ddSYuri Pankov /*ARGSUSED*/
44*c73799ddSYuri Pankov static int
stubdetach(dev_info_t * dip,ddi_detach_cmd_t cmd)45*c73799ddSYuri Pankov stubdetach(dev_info_t *dip, ddi_detach_cmd_t cmd)
46*c73799ddSYuri Pankov {
47*c73799ddSYuri Pankov return (DDI_SUCCESS);
48*c73799ddSYuri Pankov }
49*c73799ddSYuri Pankov
50*c73799ddSYuri Pankov static struct dev_ops stub_ops = {
518b47140eSrab DEVO_REV,
528b47140eSrab 0,
538b47140eSrab NULL,
548b47140eSrab nulldev,
558b47140eSrab nulldev,
56*c73799ddSYuri Pankov stubattach,
57*c73799ddSYuri Pankov stubdetach,
588b47140eSrab nodev,
598b47140eSrab NULL,
6019397407SSherry Moore NULL,
6119397407SSherry Moore NULL,
62*c73799ddSYuri Pankov ddi_quiesce_not_needed
638b47140eSrab };
648b47140eSrab
658b47140eSrab static struct modldrv modldrv = {
668b47140eSrab &mod_driverops,
67*c73799ddSYuri Pankov "xVM cmdk stub",
68*c73799ddSYuri Pankov &stub_ops
698b47140eSrab };
708b47140eSrab
718b47140eSrab static struct modlinkage modlinkage = {
728b47140eSrab MODREV_1, (void *)&modldrv, NULL
738b47140eSrab };
748b47140eSrab
758b47140eSrab int
_init(void)768b47140eSrab _init(void)
778b47140eSrab {
788b47140eSrab return (mod_install(&modlinkage));
798b47140eSrab }
808b47140eSrab
818b47140eSrab int
_info(struct modinfo * modinfop)828b47140eSrab _info(struct modinfo *modinfop)
838b47140eSrab {
848b47140eSrab return (mod_info(&modlinkage, modinfop));
858b47140eSrab }
868b47140eSrab
878b47140eSrab int
_fini(void)888b47140eSrab _fini(void)
898b47140eSrab {
908b47140eSrab return (EBUSY);
918b47140eSrab }
92