예제 #1
0
int
_init(void)
{
	int	ret;

	ret = ddi_soft_state_init(&emul64_state, sizeof (struct emul64),
	    EMUL64_INITIAL_SOFT_SPACE);
	if (ret != 0)
		return (ret);

	if ((ret = scsi_hba_init(&modlinkage)) != 0) {
		ddi_soft_state_fini(&emul64_state);
		return (ret);
	}

	/* Set the number of task threads to the number of CPUs */
	if (boot_max_ncpus == -1) {
		emul64_task_nthreads = max_ncpus;
	} else {
		emul64_task_nthreads = boot_max_ncpus;
	}

	emul64_bsd_init();

	ret = mod_install(&modlinkage);
	if (ret != 0) {
		emul64_bsd_fini();
		scsi_hba_fini(&modlinkage);
		ddi_soft_state_fini(&emul64_state);
	}

	return (ret);
}
예제 #2
0
/*
 *
 * --- DDI/DKI entry points
 *
 */
int
_init(void)
{
	int    error;

#ifndef NPROBE
	(void) tnf_mod_load();
#endif
	error = ddi_soft_state_init(&av1394_statep, sizeof (av1394_inst_t), 1);
	if (error != 0) {
#ifndef NPROBE
		(void) tnf_mod_unload(&av1394_modlinkage);
#endif
		return (error);
	}

	if ((error = mod_install(&av1394_modlinkage)) != 0) {
		ddi_soft_state_fini(&av1394_statep);
#ifndef NPROBE
		(void) tnf_mod_unload(&av1394_modlinkage);
#endif
	}

	return (error);
}
예제 #3
0
int
_init(void)
{
	int err;
	uint64_t majornum;
	uint64_t minornum;

	/*
	 * Check HV intr group api versioning.
	 * Note that cnex assumes interrupt cookies is
	 * in version 1.0 of the intr group api.
	 */
	if ((err = hsvc_version(HSVC_GROUP_INTR, &majornum, &minornum)) != 0) {
		cmn_err(CE_WARN, "cnex: failed to get intr api "
		    "group versioning errno=%d", err);
		return (err);
	} else if ((majornum != 1) && (majornum != 2)) {
		cmn_err(CE_WARN, "cnex: unsupported intr api group: "
		    "maj:0x%lx, min:0x%lx", majornum, minornum);
		return (ENOTSUP);
	}

	if ((err = ddi_soft_state_init(&cnex_state,
	    sizeof (cnex_soft_state_t), 0)) != 0) {
		return (err);
	}
	if ((err = mod_install(&modlinkage)) != 0) {
		ddi_soft_state_fini(&cnex_state);
		return (err);
	}
	return (0);
}
예제 #4
0
/**
 * Initializes a loadable module. It calls `mod_install' to install the
 * `modlinkage' and `modldrv' structures.
 */
int _init(void)
{
  int error;
  error = ddi_soft_state_init(&quantis_soft_state_p,
                              sizeof(quantis_soft_state_t),
                              0);
  if (error != 0)
  {
    QUANTIS_ERROR("Could not initialize the soft state tree.\n");
    return error;
  }

  error = mod_install(&modlinkage);
  if (error != 0)
  {
    QUANTIS_ERROR("Could not install the modlinkage structure.\n");
    ddi_soft_state_fini(&quantis_soft_state_p);
    return error;
  }

  mutex_init(&quantis_mutex, NULL, MUTEX_DRIVER, NULL);
  card_count = 0;

  LOG_DEBUG0("Initialized the quantis driver\n");

  return error;
}
예제 #5
0
/*************************************************************************
 * _init(9e), _info(9e), _fini(9e)
 * 
 * ローダブルカーネルモジュールのエントリーポイント
 *************************************************************************/
int
_init()
{
    int err;
    
    cmn_err(CE_CONT, "%s Filesystem Ver %s \n", PACKAGE_NAME, PACKAGE_VERSION);        

    /*
     * デバイス管理構造体の管理用の iumfscntl_soft_root を初期化
     * iumfscntl のデバイス管理構造体は iumfscntl_soft_t として定義されている。
     */
    if (ddi_soft_state_init(&iumfscntl_soft_root, sizeof (iumfscntl_soft_t), 1) != 0) {
        return (DDI_FAILURE);
    }

    err = mod_install(&modlinkage);
    if (err != 0) {
        ddi_soft_state_fini(&iumfscntl_soft_root);
        cmn_err(CE_CONT, "_init: mod_install returned with error %d", err);
    }

    /*
     * グローバルロックを初期化
     */
    mutex_init(&iumfs_global_lock, NULL, MUTEX_DEFAULT, NULL);
    
    return (err);
}
예제 #6
0
int
_init(void)
{
    int error;

    if (strcmp(tod_module_name, "todds1307") == 0) {
        if ((error = ddi_soft_state_init(&ds1307_statep,
                                         sizeof (ds1307_state_t), 0)) != DDI_SUCCESS) {
            return (error);
        }

        tod_ops.tod_get = todds1307_get;
        tod_ops.tod_set = todds1307_set;
        tod_ops.tod_set_watchdog_timer = todds1307_set_watchdog_timer;
        tod_ops.tod_clear_watchdog_timer =
            todds1307_clear_watchdog_timer;
        tod_ops.tod_set_power_alarm = todds1307_set_power_alarm;
        tod_ops.tod_clear_power_alarm = todds1307_clear_power_alarm;
    }

    (void) todds1307_setup_prom();

    /*
     * Install the module
     */
    if ((error = mod_install(&todds1307_modlinkage)) != 0) {
        ddi_soft_state_fini(&ds1307_statep);
        return (error);
    }
    mutex_init(&todds1307_rd_lock, NULL, MUTEX_DEFAULT, NULL);

    return (0);
}
예제 #7
0
파일: sgsbbc.c 프로젝트: andreiw/polaris
int
_init(void)
{
	int    error;

	if ((error = ddi_soft_state_init(&sbbcp,
		sizeof (sbbc_softstate_t), 1)) != 0)
		return (error);

	if ((error = mod_install(&modlinkage)) != 0) {
		ddi_soft_state_fini(&sbbcp);
		return (error);
	}

	/*
	 * Initialise the global 'chosen' IOSRAM mutex
	 */
	mutex_init(&chosen_lock, NULL, MUTEX_DEFAULT, NULL);

	/*
	 * Initialise the iosram driver
	 */
	iosram_init();

	/*
	 * Initialize the mailbox
	 */
	sbbc_mbox_init();

	return (error);

}
예제 #8
0
/*
 * Module initialization routines.
 */
int
_init(void)
{
	int error;

	/* Initialize soft state pointer. */
	if ((error = ddi_soft_state_init(&acpinex_softstates,
	    sizeof (acpinex_softstate_t), 8)) != 0) {
		cmn_err(CE_WARN,
		    "acpinex: failed to initialize soft state structure.");
		return (error);
	}

	/* Initialize event subsystem. */
	acpinex_event_init();

	/* Install the module. */
	if ((error = mod_install(&modlinkage)) != 0) {
		cmn_err(CE_WARN, "acpinex: failed to install module.");
		ddi_soft_state_fini(&acpinex_softstates);
		return (error);
	}

	mutex_init(&acpinex_lock, NULL, MUTEX_DRIVER, NULL);

	return (0);
}
예제 #9
0
/*
 * One-time module-wide cleanup, after last detach is done.
 */
int
_fini(void)
{
	int rval;

	/*
	 * Remove the module first as this operation is the only thing here
	 * which can fail.
	 */
	rval = mod_remove(&ml);
	if (rval != DDI_SUCCESS)
		return (rval);

	if (iospc_leaf_grps != NULL) {
		iospc_kstat_fini();
		mutex_enter(&iospc_mutex);
		iospc_kstat_inited = 0;
		(void) rfios_unbind_group();
		iospc_leaf_grps = NULL;
		mutex_exit(&iospc_mutex);
	}

	mutex_destroy(&iospc_mutex);

	/* Free px soft state */
	ddi_soft_state_fini(&iospc_state_p);

	return (DDI_SUCCESS);
}
int _fini(void)
{
    LogFlow((DEVICE_NAME ":_fini flow\n"));
    cmn_err(CE_NOTE, DEVICE_NAME ":_fini\n");
    int rc = mod_remove(&g_VBoxVideoSolarisModLinkage);
    ddi_soft_state_fini(&g_pVBoxVideoSolarisState);
    return rc;
}
예제 #11
0
int
_fini(void)
{
	int e;

	if ((e = mod_remove(&modlinkage)) == 0)
		ddi_soft_state_fini(&ppb_state);
	return (e);
}
예제 #12
0
int
_init(void)
{
	int e;
	if ((e = ddi_soft_state_init(&ppb_state, sizeof (ppb_devstate_t),
	    1)) == 0 && (e = mod_install(&modlinkage)) != 0)
		ddi_soft_state_fini(&ppb_state);
	return (e);
}
예제 #13
0
int
_fini(void)
{
	int err;

	if ((err = mod_remove(&modlinkage)) != 0)
		return (err);
	ddi_soft_state_fini(&cnex_state);
	return (0);
}
예제 #14
0
파일: agptarget.c 프로젝트: andreiw/polaris
int
_fini(void)
{
	int	ret;

	if ((ret = mod_remove(&modlinkage)) == 0) {
		ddi_soft_state_fini(&agptarget_glob_soft_handle);
	}
	return (ret);
}
예제 #15
0
int
_fini(void)
{
	int error;

	if ((error = mod_remove(&modlinkage)) == 0) {
		ddi_soft_state_fini(&sbusmem_state_head);
	}
	return (error);
}
예제 #16
0
/**
 * Kernel entry points
 */
int _init(void)
{
    int rc;

    LogFunc((DEVICE_NAME ":_init\n"));

    g_pDip = NULL;

    /*
     * Prevent module autounloading.
     */
    modctl_t *pModCtl = mod_getctl(&g_VBoxUSBMonSolarisModLinkage);
    if (pModCtl)
        pModCtl->mod_loadflags |= MOD_NOAUTOUNLOAD;
    else
        LogRel((DEVICE_NAME ":failed to disable autounloading!\n"));

    /*
     * Initialize IPRT R0 driver, which internally calls OS-specific r0 init.
     */
    rc = RTR0Init(0);
    if (RT_SUCCESS(rc))
    {
        /*
         * Initialize global mutex.
         */
        mutex_init(&g_VBoxUSBMonSolarisMtx, NULL, MUTEX_DRIVER, NULL);
        rc = VBoxUSBFilterInit();
        if (RT_SUCCESS(rc))
        {
            rc = ddi_soft_state_init(&g_pVBoxUSBMonSolarisState, sizeof(vboxusbmon_state_t), 1);
            if (!rc)
            {
                rc = mod_install(&g_VBoxUSBMonSolarisModLinkage);
                if (!rc)
                    return rc;

                LogRel((DEVICE_NAME ":mod_install failed! rc=%d\n", rc));
                ddi_soft_state_fini(&g_pVBoxUSBMonSolarisState);
            }
            else
                LogRel((DEVICE_NAME ":ddi_soft_state_init failed! rc=%d\n", rc));
        }
        else
            LogRel((DEVICE_NAME ":VBoxUSBFilterInit failed! rc=%d\n", rc));

        mutex_destroy(&g_VBoxUSBMonSolarisMtx);
        RTR0Term();
    }
    else
        LogRel((DEVICE_NAME ":RTR0Init failed! rc=%d\n", rc));

    return -1;
}
예제 #17
0
파일: tclient.c 프로젝트: andreiw/polaris
int
_fini(void)
{
	int e;

	if ((e = mod_remove(&modlinkage)) != 0)  {
		return (e);
	}
	ddi_soft_state_fini(&dstates);
	return (e);
}
예제 #18
0
int
_fini(void)
{
	int retval;
	
	if ((retval = mod_remove(&modlinkage) != 0))
		return retval;
	ddi_soft_state_fini(&qotd_state_head);
	
	return retval;
}
예제 #19
0
int
_fini(void)
{
	int    error;

	if ((error = mod_remove(&modlinkage)) == 0) {
		ddi_soft_state_fini(&usbser_keyspan_statep);
	}

	return (error);
}
예제 #20
0
int
_fini(void)
{
	int    err;

	err = mod_remove(&ics951601_modlinkage);
	if (err == 0) {
		ddi_soft_state_fini(&ics951601_soft_statep);
	}
	return (err);
}
예제 #21
0
파일: pcn.c 프로젝트: apprisi/illumos-gate
int
_fini(void)
{
	int	rc;

	if ((rc = mod_remove(&pcn_modlinkage)) == DDI_SUCCESS) {
		mac_fini_ops(&pcn_devops);
		ddi_soft_state_fini(&pcn_ssp);
	}
	return (rc);
}
예제 #22
0
파일: dm2s.c 프로젝트: andreiw/polaris
/*
 * _fini - Module's fini routine.
 */
int
_fini(void)
{
	int ret;

	if ((ret = mod_remove(&modlinkage)) != 0) {
		return (ret);
	}
	ddi_soft_state_fini(&dm2s_softstate);
	return (ret);
}
예제 #23
0
파일: ltc1427.c 프로젝트: andreiw/polaris
int
_fini(void)
{
	int error;

	error = mod_remove(&ltc1427_modlinkage);
	if (!error)
		ddi_soft_state_fini(&ltc1427soft_statep);

	return (error);
}
예제 #24
0
int
_fini(void)
{
	int error;

	error = mod_remove(&pcf8574_modlinkage);
	if (!error)
		ddi_soft_state_fini(&pcf8574soft_statep);

	return (error);
}
예제 #25
0
int
_fini(void)
{
    int error;

    if ((error = mod_remove(&modlinkage)) != 0)
        return (error);

    ddi_soft_state_fini(&simmstatp);
    return (0);
}
예제 #26
0
int
_fini(void)
{
	int    err;

	err = mod_remove(&pca9556_modlinkage);
	if (err == 0) {
		ddi_soft_state_fini(&pca9556_soft_statep);
	}
	return (err);
}
예제 #27
0
int
_fini(void)
{
	int e;

	if ((e = mod_remove(&modlinkage)) != 0) {
		return (e);
	}
	ddi_soft_state_fini(&statep);

	return (DDI_SUCCESS);
}
예제 #28
0
int
_fini(void)
{
	int	rv;

	rv = mod_remove(&modlinkage);
	if (rv == DDI_SUCCESS) {
		rw_destroy(&bd_lock);
		ddi_soft_state_fini(&bd_state);
	}
	return (rv);
}
예제 #29
0
파일: rmc_comm.c 프로젝트: andreiw/polaris
int
_fini(void)
{
	int err;

	if ((err = mod_remove(&modlinkage)) == 0) {
		ddi_soft_state_fini(&rmc_comm_statep);
		rmc_comm_major = NOMAJOR;
		mutex_destroy(&rmc_comm_attach_lock);
	}
	return (err);
}
예제 #30
0
int
_fini(void)
{
	int error;

	error = mod_remove(&virtionet_modlinkage);
	if (error == 0) {
		mac_fini_ops(&virtionet_devops);
		ddi_soft_state_fini(&virtionet_statep);
	}
	return (error);
}