usr/src/uts/common/io/ib/clients/iser/iser.c
author Peter Dunlap <Peter.Dunlap@Sun.COM>
Tue, 24 Mar 2009 17:50:49 -0600
changeset 9162 b011b0287065
child 10322 ba47e44899a2
permissions -rw-r--r--
PSARC 2008/395 iSER: iSCSI Extensions for RDMA 6702590 iSCSI initiator needs to support iSER transport 6702591 COMSTAR iSCSI port provider needs to support iSER transport 6797024 COMSTAR iscsit asserted at iscsit_login.c line: 679 6776635 panic[cpu0]/thread=ffffff000f874c60,assertion failed: 0, file: ../../common/io/idm/idm.c, line: 1465 6802232 Bad kernel fault at addr=0x0 from idm_crc32c call
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9162
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     1
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     2
 * CDDL HEADER START
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     3
 *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     7
 *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    11
 * and limitations under the License.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    12
 *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    18
 *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    19
 * CDDL HEADER END
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    20
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    21
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    22
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    23
 * Use is subject to license terms.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    24
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    25
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    26
#include <sys/types.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    27
#include <sys/stat.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    28
#include <sys/conf.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    29
#include <sys/ddi.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    30
#include <sys/sunddi.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    31
#include <sys/modctl.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    32
#include <sys/socket.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    33
#include <netinet/in.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    34
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    35
#include <sys/ib/clients/iser/iser.h>
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    36
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    37
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    38
 * iser.c
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    39
 *    DDI and core routines for Solaris iSER implementation.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    40
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    41
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    42
iser_state_t	*iser_state = NULL;	/* global state */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    43
ddi_taskq_t	*iser_taskq = NULL;	/* global taskq */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    44
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    45
/* set B_TRUE for console logging */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    46
boolean_t iser_logging = B_FALSE;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    47
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    48
/* Driver functions */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    49
static int iser_attach(dev_info_t *, ddi_attach_cmd_t);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    50
static int iser_detach(dev_info_t *, ddi_detach_cmd_t);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    51
static int iser_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    52
static int iser_open(dev_t *, int, int, cred_t *);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    53
static int iser_close(dev_t, int, int, cred_t *);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    54
static int iser_ioctl(dev_t, int, intptr_t, int, cred_t *, int *);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    55
/* static int iser_close(dev_t, int, int, cred_t *); */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    56
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    57
/* Char/Block operations */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    58
static struct cb_ops	iser_cb_ops = {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    59
	iser_open,		/* open */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    60
	iser_close,		/* close */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    61
	nodev,			/* strategy */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    62
	nodev,			/* print */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    63
	nodev,			/* dump */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    64
	nodev,			/* read */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    65
	nodev,			/* write */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    66
	iser_ioctl,		/* ioctl */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    67
	nodev,			/* devmap */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    68
	nodev,			/* mmap */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    69
	nodev,			/* segmap */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    70
	nochpoll,		/* poll */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    71
	ddi_prop_op,		/* prop_op */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    72
	NULL,			/* stream */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    73
	D_MP,			/* cb_flag */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    74
	CB_REV,			/* rev */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    75
	nodev,			/* int (*cb_aread)() */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    76
	nodev,			/* int (*cb_awrite)() */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    77
};
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    78
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    79
/* Device operations */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    80
static struct dev_ops iser_ops = {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    81
	DEVO_REV,		/* devo_rev, */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    82
	0,			/* refcnt  */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    83
	iser_getinfo,		/* getinfo */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    84
	nulldev,		/* identify */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    85
	nulldev,		/* probe */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    86
	iser_attach,		/* attach */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    87
	iser_detach,		/* detach */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    88
	nodev,			/* reset */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    89
	&iser_cb_ops,		/* cb_ops */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    90
	NULL,			/* bus ops */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    91
	NULL,			/* power */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    92
	ddi_quiesce_not_needed	/* quiesce */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    93
};
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    94
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    95
/* Module Driver Info */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    96
#define	ISER_NAME_VERSION	"iSCSI Extensions for RDMA"
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    97
static struct modldrv iser_modldrv = {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    98
	&mod_driverops,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
    99
	ISER_NAME_VERSION,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   100
	&iser_ops,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   101
};
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   102
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   103
/* Module Linkage */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   104
static struct modlinkage iser_modlinkage = {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   105
	MODREV_1,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   106
	&iser_modldrv,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   107
	NULL
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   108
};
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   109
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   110
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   111
 * _init()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   112
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   113
int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   114
_init(void)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   115
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   116
	int	status;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   117
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   118
	iser_state = kmem_zalloc(sizeof (iser_state_t), KM_SLEEP);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   119
	status = mod_install(&iser_modlinkage);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   120
	if (status != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   121
		kmem_free(iser_state, sizeof (iser_state_t));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   122
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   123
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   124
	return (status);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   125
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   126
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   127
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   128
 * _info()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   129
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   130
int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   131
_info(struct modinfo *modinfop)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   132
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   133
	return (mod_info(&iser_modlinkage, modinfop));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   134
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   135
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   136
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   137
 * _fini()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   138
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   139
int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   140
_fini(void)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   141
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   142
	int status;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   143
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   144
	status = mod_remove(&iser_modlinkage);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   145
	if (status != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   146
		return (status);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   147
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   148
	kmem_free(iser_state, sizeof (iser_state_t));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   149
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   150
	return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   151
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   152
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   153
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   154
 * iser_attach()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   155
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   156
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   157
iser_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   158
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   159
	int		instance;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   160
	int		status;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   161
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   162
	switch (cmd) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   163
	case DDI_ATTACH:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   164
		ISER_LOG(CE_CONT, "iser_attach: DDI_ATTACH");
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   165
		instance = ddi_get_instance(dip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   166
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   167
		iser_state->is_dip = dip;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   168
		iser_state->is_instance = instance;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   169
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   170
		/* Initialize the open refcnt and it's lock */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   171
		iser_state->is_open_refcnt = 0;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   172
		mutex_init(&iser_state->is_refcnt_lock, NULL, MUTEX_DRIVER,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   173
		    NULL);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   174
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   175
		iser_taskq = ddi_taskq_create(dip, "iser_taskq",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   176
		    ISER_TASKQ_NTHREADS, TASKQ_DEFAULTPRI, 0);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   177
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   178
		if (iser_taskq == NULL) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   179
			ISER_LOG(CE_CONT, "%s%d: failed to create taskq",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   180
			    "iser", instance);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   181
			mutex_destroy(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   182
			return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   183
		}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   184
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   185
		/* initialize iSER as IB service */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   186
		status = iser_ib_init();
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   187
		if (status != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   188
			ddi_taskq_destroy(iser_taskq);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   189
			mutex_destroy(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   190
			ISER_LOG(CE_CONT, "%s%d: failed to initialize IB",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   191
			    "iser", instance);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   192
			return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   193
		}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   194
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   195
		status = ddi_create_minor_node(
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   196
		    dip, ddi_get_name(dip), S_IFCHR, instance,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   197
		    DDI_PSEUDO, 0);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   198
		if (status != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   199
			(void) iser_ib_fini();
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   200
			ddi_taskq_destroy(iser_taskq);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   201
			mutex_destroy(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   202
			ISER_LOG(CE_CONT, "%s%d: failed ddi_create_minor_node",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   203
			    "iser", instance);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   204
			return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   205
		}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   206
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   207
		ddi_report_dev(dip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   208
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   209
		return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   210
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   211
	case DDI_RESUME:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   212
		ISER_LOG(CE_CONT, "iser_detach: DDI_RESUME unsupported");
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   213
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   214
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   215
	default:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   216
		ISER_LOG(CE_CONT, "%s%d: unknown cmd in attach (0x%x)", "iser",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   217
		    instance, cmd);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   218
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   219
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   220
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   221
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   222
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   223
 * iser_detach()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   224
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   225
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   226
iser_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   227
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   228
	mutex_enter(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   229
	if (iser_state->is_open_refcnt > 0) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   230
		mutex_exit(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   231
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   232
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   233
	mutex_exit(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   234
	mutex_destroy(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   235
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   236
	switch (cmd) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   237
	case DDI_DETACH:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   238
		ISER_LOG(CE_CONT, "iser_detach: DDI_DETACH");
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   239
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   240
		if (iser_ib_fini() != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   241
			ISER_LOG(CE_CONT, "iser_ib_fini failed");
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   242
			return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   243
		}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   244
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   245
		if (iser_taskq != NULL) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   246
			ddi_taskq_destroy(iser_taskq);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   247
			iser_taskq = NULL;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   248
		}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   249
		ddi_remove_minor_node(dip, NULL);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   250
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   251
		return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   252
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   253
	case DDI_SUSPEND:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   254
		ISER_LOG(CE_CONT, "iser_detach: DDI_SUSPEND unsupported");
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   255
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   256
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   257
	default:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   258
		ISER_LOG(CE_CONT, "iser: unknown cmd in detach (0x%x)", cmd);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   259
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   260
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   261
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   262
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   263
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   264
 * iser_getinfo()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   265
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   266
/* ARGSUSED */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   267
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   268
iser_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg, void **result)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   269
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   270
	switch (cmd) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   271
	case DDI_INFO_DEVT2DEVINFO:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   272
		*result = (void *)iser_state->is_dip;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   273
		return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   274
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   275
	case DDI_INFO_DEVT2INSTANCE:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   276
		*result = NULL;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   277
		return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   278
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   279
	default:
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   280
		return (DDI_FAILURE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   281
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   282
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   283
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   284
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   285
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   286
 * iser_open()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   287
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   288
/* ARGSUSED */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   289
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   290
iser_open(dev_t *devp, int flag, int otyp, cred_t *credp)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   291
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   292
	minor_t		instance;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   293
	int		status;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   294
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   295
	instance = getminor(*devp);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   296
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   297
	/* Register the transport with IDM */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   298
	status = iser_idm_register();
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   299
	if (status != DDI_SUCCESS) {
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   300
		ISER_LOG(CE_CONT, "%s%d: failed to register with IDM",
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   301
		    "iser", instance);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   302
		return (ENXIO);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   303
	}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   304
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   305
	/* Increment our open refcnt */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   306
	mutex_enter(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   307
	iser_state->is_open_refcnt++;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   308
	mutex_exit(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   309
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   310
	return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   311
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   312
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   313
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   314
 * iser_close()
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   315
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   316
/* ARGSUSED */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   317
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   318
iser_close(dev_t devp, int flag, int otyp, cred_t *credp)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   319
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   320
	ASSERT(iser_state->is_open_refcnt != 0);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   321
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   322
	mutex_enter(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   323
	iser_state->is_open_refcnt--;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   324
	mutex_exit(&iser_state->is_refcnt_lock);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   325
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   326
	return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   327
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   328
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   329
iser_status_t
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   330
iser_register_service(idm_svc_t *idm_svc)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   331
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   332
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   333
	return (iser_ib_register_service(idm_svc));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   334
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   335
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   336
iser_status_t
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   337
iser_bind_service(idm_svc_t *idm_svc)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   338
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   339
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   340
	return (iser_ib_bind_service(idm_svc));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   341
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   342
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   343
void
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   344
iser_unbind_service(idm_svc_t *idm_svc)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   345
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   346
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   347
	iser_ib_unbind_service(idm_svc);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   348
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   349
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   350
void
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   351
iser_deregister_service(idm_svc_t *idm_svc)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   352
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   353
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   354
	iser_ib_deregister_service(idm_svc);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   355
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   356
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   357
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   358
 * iser_path_exists
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   359
 * This function takes in a pair of endpoints and determines if an iSER path
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   360
 * exists between the two. The actual path information (required for creating
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   361
 * a RC channel) is not returned, instead a boolean value indicating if a path
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   362
 * exists is returned.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   363
 *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   364
 * To use an implicit source, a value of NULL is allowed for laddr.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   365
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   366
boolean_t
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   367
iser_path_exists(idm_sockaddr_t *laddr, idm_sockaddr_t *raddr)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   368
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   369
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   370
	ibt_ip_addr_t		remote_ip, local_ip;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   371
	ibt_path_info_t		path;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   372
	int			status;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   373
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   374
	iser_ib_conv_sockaddr2ibtaddr(raddr, &remote_ip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   375
	iser_ib_conv_sockaddr2ibtaddr(laddr, &local_ip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   376
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   377
	status = iser_ib_get_paths(&local_ip, &remote_ip, &path, NULL);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   378
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   379
	return ((status == IBT_SUCCESS) ? B_TRUE : B_FALSE);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   380
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   381
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   382
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   383
 * iser_channel_alloc
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   384
 * This function allocates a reliable communication channel between the
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   385
 * given endpoints.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   386
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   387
iser_chan_t *
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   388
iser_channel_alloc(idm_sockaddr_t *laddr, idm_sockaddr_t *raddr)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   389
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   390
	ibt_ip_addr_t		remote_ip, local_ip;
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   391
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   392
	iser_ib_conv_sockaddr2ibtaddr(raddr, &remote_ip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   393
	iser_ib_conv_sockaddr2ibtaddr(laddr, &local_ip);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   394
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   395
	return (iser_ib_alloc_rc_channel(&local_ip, &remote_ip));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   396
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   397
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   398
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   399
 * iser_channel_open
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   400
 * This function opens the already allocated communication channel between the
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   401
 * two endpoints.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   402
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   403
iser_status_t
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   404
iser_channel_open(iser_chan_t *chan)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   405
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   406
	return (iser_ib_open_rc_channel(chan));
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   407
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   408
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   409
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   410
 * iser_channel_close
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   411
 * This function closes the already opened communication channel between the
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   412
 * two endpoints.
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   413
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   414
void
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   415
iser_channel_close(iser_chan_t *chan)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   416
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   417
	iser_ib_close_rc_channel(chan);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   418
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   419
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   420
/*
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   421
 * iser_channel_free
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   422
 * This function frees the channel between the given endpoints
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   423
 */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   424
void
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   425
iser_channel_free(iser_chan_t *chan)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   426
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   427
	iser_ib_free_rc_channel(chan);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   428
}
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   429
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   430
/* ARGSUSED */
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   431
static int
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   432
iser_ioctl(dev_t devp, int cmd, intptr_t arg, int mode, cred_t *credp,
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   433
    int *rvalp)
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   434
{
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   435
	return (DDI_SUCCESS);
b011b0287065 PSARC 2008/395 iSER: iSCSI Extensions for RDMA
Peter Dunlap <Peter.Dunlap@Sun.COM>
parents:
diff changeset
   436
}