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]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
31 * Verify that a given adapter is present on the system.
32 * No checks will be performed on the targets, and it is assumed
33 * that an adapter can't change the number of ports it has.
36 verifyAdapter(struct sun_sas_hba
*hba_ptr
) {
37 const char ROUTINE
[] = "verifyAdapter";
38 char *charptr
, path
[MAXPATHLEN
+1];
43 * valid test for a removed HBA.
45 if (hba_ptr
== NULL
) {
46 log(LOG_DEBUG
, ROUTINE
, "Null hba_ptr argument");
47 return (HBA_STATUS_ERROR
);
49 (void) strlcpy(path
, hba_ptr
->device_path
, sizeof (path
));
51 charptr
= strrchr(path
, ':');
58 node
= di_init(path
, DINFOCPYALL
);
59 if (node
== DI_NODE_NIL
) {
60 log(LOG_DEBUG
, ROUTINE
,
61 "Unable to take devinfo snapshot on HBA \"%s\" due to %s",
62 path
, strerror(errno
));
63 return (HBA_STATUS_ERROR
);
65 state
= di_state(node
);
66 if (((state
& DI_DRIVER_DETACHED
) == DI_DRIVER_DETACHED
) ||
67 ((state
& DI_BUS_DOWN
) == DI_BUS_DOWN
) ||
68 ((state
& DI_BUS_QUIESCED
) == DI_BUS_QUIESCED
)) {
70 log(LOG_DEBUG
, ROUTINE
,
71 "devinfo node is not online state: %d", state
);
72 return (HBA_STATUS_ERROR
);
78 return (HBA_STATUS_OK
);