4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
36 MP_GetProprietaryLoadBalanceProperties(MP_OID oid
,
37 MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
*pProps
)
39 mp_iocdata_t mp_ioctl
;
40 mp_proprietary_loadbalance_prop_t lbProps
;
44 MP_STATUS mpStatus
= MP_STATUS_SUCCESS
;
47 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()", " - enter");
50 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
51 "oid.objectSequenceNumber = %llx",
52 oid
.objectSequenceNumber
);
54 if (g_scsi_vhci_fd
< 0) {
55 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
56 "invalid driver file handle");
57 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties",
59 return (MP_STATUS_FAILED
);
62 (void) memset(&mp_ioctl
, 0, sizeof (mp_iocdata_t
));
63 (void) memset(&lbProps
, 0, sizeof (mp_proprietary_loadbalance_prop_t
));
65 mp_ioctl
.mp_cmd
= MP_GET_PROPRIETARY_LOADBALANCE_PROP
;
66 mp_ioctl
.mp_ibuf
= (caddr_t
)&oid
.objectSequenceNumber
;
67 mp_ioctl
.mp_ilen
= sizeof (oid
.objectSequenceNumber
);
68 mp_ioctl
.mp_obuf
= (caddr_t
)&lbProps
;
69 mp_ioctl
.mp_olen
= sizeof (mp_proprietary_loadbalance_prop_t
);
70 mp_ioctl
.mp_xfer
= MP_XFER_READ
;
72 ioctlStatus
= ioctl(g_scsi_vhci_fd
, MP_CMD
, &mp_ioctl
);
74 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
75 " IOCTL call returned: %d", ioctlStatus
);
77 if (ioctlStatus
< 0) {
81 if (ioctlStatus
!= 0) {
82 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
83 "IOCTL call failed. IOCTL error is: %d",
85 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
86 "IOCTL call failed. IOCTL error is: %s",
87 strerror(ioctlStatus
));
88 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
89 "IOCTL call failed. mp_ioctl.mp_errno: %x",
92 if (ENOTSUP
== ioctlStatus
) {
93 mpStatus
= MP_STATUS_UNSUPPORTED
;
94 } else if (0 == mp_ioctl
.mp_errno
) {
95 mpStatus
= MP_STATUS_FAILED
;
97 mpStatus
= getStatus4ErrorCode(mp_ioctl
.mp_errno
);
100 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()",
106 (void) memset(pProps
, 0,
107 sizeof (MP_PROPRIETARY_LOAD_BALANCE_PROPERTIES
));
109 (void) mbstowcs(pProps
->name
, lbProps
.name
, 256);
115 * pProps->proprietaryPropertyCount &
116 * pProps->proprietaryProperties
118 * when they are available
122 pProps
->typeIndex
= lbProps
.typeIndex
;
123 (void) mbstowcs(pProps
->vendorName
, lbProps
.vendorName
, 256);
126 log(LOG_INFO
, "MP_GetProprietaryLoadBalanceProperties()", " - exit");
128 return (MP_STATUS_SUCCESS
);