8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / sun_fc / common / FCHBAPort.h
blob3198942d4d9f73951d0527cc08da917c022a407c
1 /*
2 * CDDL HEADER START
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]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _FCHBAPORT_H
27 #define _FCHBAPORT_H
31 #include <Lockable.h>
32 #include <HBAPort.h>
33 #include <Exceptions.h>
34 #include <string>
35 #include <hbaapi.h>
36 #include <sys/param.h>
37 #include <sys/fibre-channel/fcio.h>
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
44 * Represents a single HBA port
46 class FCHBAPort : public HBAPort {
47 public:
48 FCHBAPort(std::string path);
49 virtual std::string getPath()
50 { return path; }
51 virtual uint64_t getNodeWWN()
52 { return nodeWWN; }
53 virtual uint64_t getPortWWN()
54 { return portWWN; }
55 virtual HBA_PORTATTRIBUTES getPortAttributes(
56 uint64_t &stateChange);
57 virtual HBA_PORTNPIVATTRIBUTES getPortNPIVAttributes(
58 uint64_t &stateChange);
59 virtual uint32_t createNPIVPort(
60 uint64_t vnodewwn,
61 uint64_t vportwwn,
62 uint32_t vindex);
63 virtual uint32_t deleteNPIVPort(
64 uint64_t vportwwn);
65 virtual HBA_PORTATTRIBUTES getDiscoveredAttributes(
66 HBA_UINT32 discoveredport,
67 uint64_t &stateChange);
68 virtual HBA_PORTATTRIBUTES getDiscoveredAttributes(
69 uint64_t wwn,
70 uint64_t &stateChange);
71 virtual void getTargetMappings(
72 PHBA_FCPTARGETMAPPINGV2 userMappings);
73 virtual void getRNIDMgmtInfo(PHBA_MGMTINFO info);
74 virtual void sendCTPassThru(void *requestBuffer,
75 HBA_UINT32 requestSize,
76 void *responseBuffer,
77 HBA_UINT32 *responseSize);
78 virtual void sendRLS(uint64_t destWWN,
79 void *pRspBuffer,
80 HBA_UINT32 *pRspBufferSize);
81 virtual void sendRPL(uint64_t destWWN,
82 HBA_UINT32 agent_domain,
83 HBA_UINT32 port_index,
84 void *pRspBuffer,
85 HBA_UINT32 *pRspBufferSize) {
86 throw NotSupportedException(); }
87 virtual void sendRPS(uint64_t agentWWN,
88 HBA_UINT32 agentDomain,
89 uint64_t objectWWN,
90 HBA_UINT32 objectPortNum,
91 void *pRspBuffer,
92 HBA_UINT32 *pRspBufferSize) {
93 throw NotSupportedException(); }
94 virtual void sendSRL(uint64_t destWWN,
95 HBA_UINT32 agent_domain,
96 void *pRspBuffer,
97 HBA_UINT32 *pRspBufferSize) {
98 throw NotSupportedException(); }
99 virtual void sendLIRR(uint64_t destWWN,
100 HBA_UINT8 function,
101 HBA_UINT8 type,
102 void *pRspBuffer,
103 HBA_UINT32 *pRspBufferSize) {
104 throw NotSupportedException(); }
105 virtual void sendReportLUNs(uint64_t wwn,
106 void *responseBuffer, HBA_UINT32 *responseSize,
107 HBA_UINT8 *scsiStatus,
108 void *senseBuffer, HBA_UINT32 *senseSize);
109 virtual void sendScsiInquiry(uint64_t wwn, HBA_UINT64 fcLun,
110 HBA_UINT8 cdb1, HBA_UINT8 cdb2,
111 void *responseBuffer, HBA_UINT32 *responseSize,
112 HBA_UINT8 *scsiStatus, void *senseBuffer,
113 HBA_UINT32 *senseSize);
114 virtual void sendReadCapacity(uint64_t pwwn,
115 HBA_UINT64 fcLun, void *responseBuffer,
116 HBA_UINT32 *responseSize, HBA_UINT8 *scsiStatus,
117 void *senseBuffer, HBA_UINT32 *senseSize);
118 virtual void sendRNID(uint64_t destwwn, HBA_UINT32 destfcid,
119 HBA_UINT32 nodeIdDataFormat, void *pRspBuffer,
120 HBA_UINT32 *RspBufferSize);
121 virtual void setRNID(HBA_MGMTINFO info);
124 private:
125 std::string path;
126 uint64_t portWWN;
127 uint64_t nodeWWN;
128 uint32_t instanceNumber;
129 int controllerNumber;
130 void sendSCSIPassThru(struct fcp_scsi_cmd *fscsi,
131 HBA_UINT32 *responseSize, HBA_UINT32 *senseSize,
132 HBA_UINT8 *scsiStatus);
133 static const std::string FCSM_DRIVER_PATH;
134 static const int MAX_FCIO_MSG_LEN;
135 static const std::string FCP_DRIVER_PATH;
136 static void transportError(uint32_t fcio_errno, char *message);
138 // Wrapper routines to handle error cases
139 static void fp_ioctl(std::string path, int cmd, fcio_t *arg);
140 static void fp_ioctl(std::string path, int cmd, fcio_t *arg,
141 int openflag);
142 static void fcsm_ioctl(int cmd, fcio_t *arg);
145 #ifdef __cplusplus
147 #endif
149 #endif /* _FCHBAPORT_H */