dsw.c revision 3270659f55e0928d6edec3d26217cc29398a8149
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#define _DSW_
#ifdef DS_DDICT
#include "../contract.h"
#endif
#include "dsw.h"
#include "dsw_dev.h"
#define DIDINIT 0x01
#define DIDNODES 0x02
int *rvp);
static int iiread();
iigkstat_t iigkstat = {
{ "ii_debug", KSTAT_DATA_ULONG },
{ "ii_bitmap", KSTAT_DATA_ULONG },
{ "ii_throttle_unit", KSTAT_DATA_ULONG },
{ "ii_throttle_delay", KSTAT_DATA_ULONG },
{ "ii_copy_direct", KSTAT_DATA_ULONG },
{ "num-sets", KSTAT_DATA_ULONG },
{ "assoc-over", KSTAT_DATA_ULONG },
{ "spilled-over", KSTAT_DATA_ULONG },
};
iistrat, /* dummy strategy */
nodev, /* no dump */
iiread, /* dummy read */
nodev, /* no write */
nodev, /* no devmap */
nodev, /* no mmap */
nodev, /* no segmap */
NULL, /* not STREAMS */
};
0,
nodev, /* no getinfo */
nodev, /* no reset */
};
"nws:Point-in-Time:" ISS_VERSION_STR,
};
static struct modlinkage ii_modlinkage = {
&ii_ldrv,
};
struct ii_state {
int instance;
};
/* used for logging sysevent, gets set in _ii_attach */
extern _ii_info_t *_ii_info_top;
extern _ii_lsthead_t *_ii_cluster_top;
extern _ii_lsthead_t *_ii_group_top;
extern kmutex_t _ii_cluster_mutex;
extern kmutex_t _ii_group_mutex;
static void *ii_statep;
extern int _ii_init_dev();
extern void _ii_deinit_dev();
extern int ii_debug;
extern int ii_throttle_unit;
extern int ii_throttle_delay;
extern int ii_copy_direct;
extern int ii_bitmap;
int
_init(void)
{
int error;
if (!error) {
if (error)
}
return (error);
}
int
_fini(void)
{
int error;
if (!error)
return (error);
}
int
{
int rc;
return (rc);
}
/* ARGSUSED */
static int
{
return (DDI_PROBE_SUCCESS);
}
/*ARGSUSED*/
static int
{
if (KSTAT_WRITE == rw) {
return (EACCES);
}
/*
* We do nothing here for now -- the kstat structure is
* updated in-place
*/
return (0);
}
static void
{
/* create global info structure */
if (!ii_gkstat) {
sizeof (iigkstat) / sizeof (kstat_named_t),
if (ii_gkstat) {
ii_gkstat->ks_private = 0;
/* fill in immutable values */
} else {
}
}
}
static int
{
int instance;
int i;
if (cmd != DDI_ATTACH) {
return (DDI_FAILURE);
}
/* save the dev_info_t to be used in logging using ddi_log_sysevent */
instance);
return (DDI_FAILURE);
}
flags = 0;
"!ii: attach: could not get state for instance %d.",
instance);
goto out;
}
if (ii_debug != 0) {
#ifdef DEBUG
#else
if (dsw_micro_rev) {
} else {
}
#endif
switch (ii_debug) {
case 1:
"!ii: ii_debug=%d is enabled.", ii_debug);
break;
default:
"!ii: Value of ii_debug=%d is not 0,1 or 2.",
ii_debug);
}
}
switch (ii_bitmap) {
case II_KMEM:
if (ii_debug > 0)
break;
case II_FWC:
if (ii_debug > 0)
" no FWC");
break;
case II_WTHRU:
if (ii_debug > 0)
break;
default:
"!ii: ii_bitmap=%d out of range; "
}
/* pick up these values if in ii.conf, otherwise leave alone */
if (i > 0) {
ii_throttle_unit = i;
if ((ii_throttle_unit < MIN_THROTTLE_UNIT) ||
(ii_debug > 0))
"!ii: ii_throttle_unit=%d", ii_throttle_unit);
}
if (i > 0) {
ii_throttle_delay = i;
if ((ii_throttle_delay < MIN_THROTTLE_DELAY) ||
(ii_debug > 0))
"!ii: ii_throttle_delay=%d", ii_throttle_delay);
}
if (i > 0) {
ii_copy_direct = i;
"!ii: ii_copy_direct=%d", ii_copy_direct);
}
if (_ii_init_dev()) {
goto out;
}
!= DDI_SUCCESS) {
goto out;
}
return (DDI_SUCCESS);
out:
return (DDI_FAILURE);
}
static int
{
int instance;
if (cmd != DDI_DETACH) {
return (DDI_FAILURE);
}
if (_ii_info_top) {
return (DDI_FAILURE); /* busy */
}
"!ii: detach: could not get state for instance %d.",
instance);
return (DDI_FAILURE);
}
if (ii_gkstat) {
}
return (DDI_SUCCESS);
}
/* ARGSUSED */
static int
{
int error;
return (error);
}
/* ARGSUSED */
static int
{
return (0);
}
/* ARGSUSED */
static int
{
int instance = 0;
return (0);
}
/* ARGSUSED */
static int
{
int rc;
int ilp32;
switch (cmd) {
case DSWIOC_WAIT:
break;
case DSWIOC_RESET:
break;
case DSWIOC_VERSION:
break;
case DSWIOC_ENABLE:
break;
case DSWIOC_RESUME:
break;
case DSWIOC_DISABLE:
break;
case DSWIOC_SUSPEND:
break;
case DSWIOC_ACOPY:
break;
case DSWIOC_COPY:
break;
case DSWIOC_SHUTDOWN:
break;
case DSWIOC_STAT:
break;
case DSWIOC_BITMAP:
break;
case DSWIOC_SEGMENT:
break;
case DSWIOC_ABORT:
break;
case DSWIOC_OFFLINE:
break;
case DSWIOC_LIST:
break;
case DSWIOC_LISTLEN:
case DSWIOC_OLISTLEN:
break;
case DSWIOC_EXPORT:
break;
case DSWIOC_IMPORT:
break;
case DSWIOC_JOIN:
break;
case DSWIOC_COPYP:
break;
case DSWIOC_OCREAT:
break;
case DSWIOC_OATTACH:
break;
case DSWIOC_ODETACH:
break;
case DSWIOC_OLIST:
break;
case DSWIOC_OSTAT:
break;
case DSWIOC_OSTAT2:
break;
case DSWIOC_SBITSSET:
case DSWIOC_CBITSSET:
break;
case DSWIOC_CLIST:
break;
case DSWIOC_GLIST:
break;
case DSWIOC_MOVEGRP:
break;
case DSWIOC_CHANGETAG:
break;
default:
break;
}
return (rc);
}
/*
* dummy function
*/
static int
{
return (0);
}
static int
iiread()
{
return (EIO);
}