emlxs_dfc.c (b3660a96) emlxs_dfc.c (a9800beb)
1/*
2 * CDDL HEADER START
3 *
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.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 6 unchanged lines hidden (view full) ---

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]
18 *
19 * CDDL HEADER END
20 */
21
22/*
1/*
2 * CDDL HEADER START
3 *
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.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 6 unchanged lines hidden (view full) ---

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]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2009 Emulex. All rights reserved.
23 * Copyright 2010 Emulex. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27
28#include <emlxs.h>
29
30/* Required for EMLXS_CONTEXT in EMLXS_MSGF calls */
31EMLXS_MSG_DEF(EMLXS_DFC_C);

--- 278 unchanged lines hidden (view full) ---

310 emlxs_dfc_xlate(dfc->cmd));
311
312 rval = DFC_COPYIN_ERROR;
313 break;
314 }
315
316 dfc->cmd = dfc32.cmd;
317 dfc->flag = dfc32.flag;
24 * Use is subject to license terms.
25 */
26
27
28#include <emlxs.h>
29
30/* Required for EMLXS_CONTEXT in EMLXS_MSGF calls */
31EMLXS_MSG_DEF(EMLXS_DFC_C);

--- 278 unchanged lines hidden (view full) ---

310 emlxs_dfc_xlate(dfc->cmd));
311
312 rval = DFC_COPYIN_ERROR;
313 break;
314 }
315
316 dfc->cmd = dfc32.cmd;
317 dfc->flag = dfc32.flag;
318 dfc->buf1 = (void *)((unsigned long)dfc32.buf1);
318 dfc->buf1 = (void *)((uintptr_t)dfc32.buf1);
319 dfc->buf1_size = dfc32.buf1_size;
320 dfc->data1 = dfc32.data1;
319 dfc->buf1_size = dfc32.buf1_size;
320 dfc->data1 = dfc32.data1;
321 dfc->buf2 = (void *)((unsigned long)dfc32.buf2);
321 dfc->buf2 = (void *)((uintptr_t)dfc32.buf2);
322 dfc->buf2_size = dfc32.buf2_size;
323 dfc->data2 = dfc32.data2;
322 dfc->buf2_size = dfc32.buf2_size;
323 dfc->data2 = dfc32.data2;
324 dfc->buf3 = (void *)((unsigned long)dfc32.buf3);
324 dfc->buf3 = (void *)((uintptr_t)dfc32.buf3);
325 dfc->buf3_size = dfc32.buf3_size;
326 dfc->data3 = dfc32.data3;
325 dfc->buf3_size = dfc32.buf3_size;
326 dfc->data3 = dfc32.data3;
327 dfc->buf4 = (void *)((unsigned long)dfc32.buf4);
327 dfc->buf4 = (void *)((uintptr_t)dfc32.buf4);
328 dfc->buf4_size = dfc32.buf4_size;
329 dfc->data4 = dfc32.data4;
330
331 break;
332 }
333
334 case DDI_MODEL_NONE:
335 if (ddi_copyin((void *)arg, (void *)dfc, sizeof (dfc_t),

--- 639 unchanged lines hidden (view full) ---

975 pm.pm_cmd_buf = fcio->fcio_ibuf;
976 pm.pm_data_len = fcio->fcio_alen;
977 pm.pm_data_buf = fcio->fcio_abuf;
978 pm.pm_stat_len = fcio->fcio_olen;
979 pm.pm_stat_buf = fcio->fcio_obuf;
980 pm.pm_cmd_code = FC_PORT_DIAG;
981 pm.pm_cmd_flags = fcio->fcio_cmd_flags;
982
328 dfc->buf4_size = dfc32.buf4_size;
329 dfc->data4 = dfc32.data4;
330
331 break;
332 }
333
334 case DDI_MODEL_NONE:
335 if (ddi_copyin((void *)arg, (void *)dfc, sizeof (dfc_t),

--- 639 unchanged lines hidden (view full) ---

975 pm.pm_cmd_buf = fcio->fcio_ibuf;
976 pm.pm_data_len = fcio->fcio_alen;
977 pm.pm_data_buf = fcio->fcio_abuf;
978 pm.pm_stat_len = fcio->fcio_olen;
979 pm.pm_stat_buf = fcio->fcio_obuf;
980 pm.pm_cmd_code = FC_PORT_DIAG;
981 pm.pm_cmd_flags = fcio->fcio_cmd_flags;
982
983 rval = emlxs_port_manage(port, &pm);
983 rval = emlxs_fca_port_manage(port, &pm);
984
985 if (rval != FC_SUCCESS) {
986 fcio->fcio_errno = rval;
987
988 if (rval == FC_INVALID_REQUEST) {
989 rval = ENOTTY;
990 } else {
991 rval = EIO;

--- 87 unchanged lines hidden (view full) ---

1079 fcio->fcio_ilen != 8) {
1080 rval = EINVAL;
1081 break;
1082 }
1083
1084 bzero(null_wwn, 8);
1085
1086 if (bcmp((uint8_t *)fcio->fcio_ibuf, null_wwn, 8) == 0) {
984
985 if (rval != FC_SUCCESS) {
986 fcio->fcio_errno = rval;
987
988 if (rval == FC_INVALID_REQUEST) {
989 rval = ENOTTY;
990 } else {
991 rval = EIO;

--- 87 unchanged lines hidden (view full) ---

1079 fcio->fcio_ilen != 8) {
1080 rval = EINVAL;
1081 break;
1082 }
1083
1084 bzero(null_wwn, 8);
1085
1086 if (bcmp((uint8_t *)fcio->fcio_ibuf, null_wwn, 8) == 0) {
1087 rval = emlxs_reset(port, FC_FCA_LINK_RESET);
1087 rval = emlxs_fca_reset(port, FC_FCA_LINK_RESET);
1088
1089 if (rval != FC_SUCCESS) {
1090 fcio->fcio_errno = rval;
1091 rval = EIO;
1092 }
1093 } else {
1094 rval = ENOTSUP;
1095 }
1096 break;
1097 }
1098
1099 case FCIO_RESET_HARD:
1100 case FCIO_RESET_HARD_CORE:
1101 {
1088
1089 if (rval != FC_SUCCESS) {
1090 fcio->fcio_errno = rval;
1091 rval = EIO;
1092 }
1093 } else {
1094 rval = ENOTSUP;
1095 }
1096 break;
1097 }
1098
1099 case FCIO_RESET_HARD:
1100 case FCIO_RESET_HARD_CORE:
1101 {
1102 rval = emlxs_reset(port, FC_FCA_RESET);
1102 rval = emlxs_fca_reset(port, FC_FCA_RESET);
1103
1104 if (rval != FC_SUCCESS) {
1105 fcio->fcio_errno = rval;
1106 rval = EIO;
1107 }
1108 break;
1109 }
1110
1111 case FCIO_DOWNLOAD_FW:
1112 {
1113 fc_fca_pm_t pm;
1114
1115 if (fcio->fcio_xfer != FCIO_XFER_WRITE ||
1103
1104 if (rval != FC_SUCCESS) {
1105 fcio->fcio_errno = rval;
1106 rval = EIO;
1107 }
1108 break;
1109 }
1110
1111 case FCIO_DOWNLOAD_FW:
1112 {
1113 fc_fca_pm_t pm;
1114
1115 if (fcio->fcio_xfer != FCIO_XFER_WRITE ||
1116 fcio->fcio_ilen <= 0) {
1116 fcio->fcio_ilen == 0) {
1117 rval = EINVAL;
1118 break;
1119 }
1120
1121 bzero((caddr_t)&pm, sizeof (pm));
1122
1123 pm.pm_cmd_flags = FC_FCA_PM_WRITE;
1124 pm.pm_cmd_code = FC_PORT_DOWNLOAD_FW;
1125 pm.pm_data_len = fcio->fcio_ilen;
1126 pm.pm_data_buf = fcio->fcio_ibuf;
1127
1117 rval = EINVAL;
1118 break;
1119 }
1120
1121 bzero((caddr_t)&pm, sizeof (pm));
1122
1123 pm.pm_cmd_flags = FC_FCA_PM_WRITE;
1124 pm.pm_cmd_code = FC_PORT_DOWNLOAD_FW;
1125 pm.pm_data_len = fcio->fcio_ilen;
1126 pm.pm_data_buf = fcio->fcio_ibuf;
1127
1128 rval = emlxs_port_manage(port, &pm);
1128 rval = emlxs_fca_port_manage(port, &pm);
1129
1130 if (rval != FC_SUCCESS) {
1131 fcio->fcio_errno = rval;
1132 rval = EIO;
1133 }
1134 break;
1135 }
1136

--- 9 unchanged lines hidden (view full) ---

1146
1147 bzero((caddr_t)&pm, sizeof (pm));
1148
1149 pm.pm_cmd_flags = FC_FCA_PM_READ;
1150 pm.pm_cmd_code = FC_PORT_GET_FW_REV;
1151 pm.pm_data_len = fcio->fcio_olen;
1152 pm.pm_data_buf = fcio->fcio_obuf;
1153
1129
1130 if (rval != FC_SUCCESS) {
1131 fcio->fcio_errno = rval;
1132 rval = EIO;
1133 }
1134 break;
1135 }
1136

--- 9 unchanged lines hidden (view full) ---

1146
1147 bzero((caddr_t)&pm, sizeof (pm));
1148
1149 pm.pm_cmd_flags = FC_FCA_PM_READ;
1150 pm.pm_cmd_code = FC_PORT_GET_FW_REV;
1151 pm.pm_data_len = fcio->fcio_olen;
1152 pm.pm_data_buf = fcio->fcio_obuf;
1153
1154 rval = emlxs_port_manage(port, &pm);
1154 rval = emlxs_fca_port_manage(port, &pm);
1155
1156 if (rval != FC_SUCCESS) {
1157 fcio->fcio_errno = rval;
1158 rval = EIO;
1159 }
1160 break;
1161 }
1162

--- 9 unchanged lines hidden (view full) ---

1172
1173 bzero((caddr_t)&pm, sizeof (pm));
1174
1175 pm.pm_cmd_flags = FC_FCA_PM_READ;
1176 pm.pm_cmd_code = FC_PORT_GET_FCODE_REV;
1177 pm.pm_data_len = fcio->fcio_olen;
1178 pm.pm_data_buf = fcio->fcio_obuf;
1179
1155
1156 if (rval != FC_SUCCESS) {
1157 fcio->fcio_errno = rval;
1158 rval = EIO;
1159 }
1160 break;
1161 }
1162

--- 9 unchanged lines hidden (view full) ---

1172
1173 bzero((caddr_t)&pm, sizeof (pm));
1174
1175 pm.pm_cmd_flags = FC_FCA_PM_READ;
1176 pm.pm_cmd_code = FC_PORT_GET_FCODE_REV;
1177 pm.pm_data_len = fcio->fcio_olen;
1178 pm.pm_data_buf = fcio->fcio_obuf;
1179
1180 rval = emlxs_port_manage(port, &pm);
1180 rval = emlxs_fca_port_manage(port, &pm);
1181
1182 if (rval != FC_SUCCESS) {
1183 fcio->fcio_errno = rval;
1184 rval = EIO;
1185 }
1186 break;
1187 }
1188
1189 case FCIO_DOWNLOAD_FCODE:
1190 {
1191 fc_fca_pm_t pm;
1192
1193 if (fcio->fcio_xfer != FCIO_XFER_WRITE ||
1181
1182 if (rval != FC_SUCCESS) {
1183 fcio->fcio_errno = rval;
1184 rval = EIO;
1185 }
1186 break;
1187 }
1188
1189 case FCIO_DOWNLOAD_FCODE:
1190 {
1191 fc_fca_pm_t pm;
1192
1193 if (fcio->fcio_xfer != FCIO_XFER_WRITE ||
1194 fcio->fcio_ilen <= 0) {
1194 fcio->fcio_ilen == 0) {
1195 rval = EINVAL;
1196 break;
1197 }
1198
1199 bzero((caddr_t)&pm, sizeof (pm));
1200
1201 pm.pm_cmd_flags = FC_FCA_PM_WRITE;
1202 pm.pm_cmd_code = FC_PORT_DOWNLOAD_FCODE;
1203 pm.pm_data_len = fcio->fcio_ilen;
1204 pm.pm_data_buf = fcio->fcio_ibuf;
1205
1195 rval = EINVAL;
1196 break;
1197 }
1198
1199 bzero((caddr_t)&pm, sizeof (pm));
1200
1201 pm.pm_cmd_flags = FC_FCA_PM_WRITE;
1202 pm.pm_cmd_code = FC_PORT_DOWNLOAD_FCODE;
1203 pm.pm_data_len = fcio->fcio_ilen;
1204 pm.pm_data_buf = fcio->fcio_ibuf;
1205
1206 rval = emlxs_port_manage(port, &pm);
1206 rval = emlxs_fca_port_manage(port, &pm);
1207
1208 if (rval != FC_SUCCESS) {
1209 fcio->fcio_errno = rval;
1210 rval = EIO;
1211 }
1212 break;
1213 }
1214

--- 360 unchanged lines hidden (view full) ---

1575
1576 bzero((caddr_t)&pm, sizeof (pm));
1577
1578 pm.pm_cmd_flags = FC_FCA_PM_READ;
1579 pm.pm_cmd_code = FC_PORT_GET_NODE_ID;
1580 pm.pm_data_len = fcio->fcio_olen;
1581 pm.pm_data_buf = fcio->fcio_obuf;
1582
1207
1208 if (rval != FC_SUCCESS) {
1209 fcio->fcio_errno = rval;
1210 rval = EIO;
1211 }
1212 break;
1213 }
1214

--- 360 unchanged lines hidden (view full) ---

1575
1576 bzero((caddr_t)&pm, sizeof (pm));
1577
1578 pm.pm_cmd_flags = FC_FCA_PM_READ;
1579 pm.pm_cmd_code = FC_PORT_GET_NODE_ID;
1580 pm.pm_data_len = fcio->fcio_olen;
1581 pm.pm_data_buf = fcio->fcio_obuf;
1582
1583 rval = emlxs_port_manage(port, &pm);
1583 rval = emlxs_fca_port_manage(port, &pm);
1584
1585 if (rval != FC_SUCCESS) {
1586 fcio->fcio_errno = rval;
1587 rval = EIO;
1588 }
1589 break;
1590 }
1591

--- 9 unchanged lines hidden (view full) ---

1601
1602 bzero((caddr_t)&pm, sizeof (pm));
1603
1604 pm.pm_cmd_flags = FC_FCA_PM_READ;
1605 pm.pm_cmd_code = FC_PORT_SET_NODE_ID;
1606 pm.pm_data_len = fcio->fcio_ilen;
1607 pm.pm_data_buf = fcio->fcio_ibuf;
1608
1584
1585 if (rval != FC_SUCCESS) {
1586 fcio->fcio_errno = rval;
1587 rval = EIO;
1588 }
1589 break;
1590 }
1591

--- 9 unchanged lines hidden (view full) ---

1601
1602 bzero((caddr_t)&pm, sizeof (pm));
1603
1604 pm.pm_cmd_flags = FC_FCA_PM_READ;
1605 pm.pm_cmd_code = FC_PORT_SET_NODE_ID;
1606 pm.pm_data_len = fcio->fcio_ilen;
1607 pm.pm_data_buf = fcio->fcio_ibuf;
1608
1609 rval = emlxs_port_manage(port, &pm);
1609 rval = emlxs_fca_port_manage(port, &pm);
1610
1611 if (rval != FC_SUCCESS) {
1612 fcio->fcio_errno = rval;
1613 rval = EIO;
1614 }
1615 break;
1616 }
1617

--- 292 unchanged lines hidden (view full) ---

1910 if (portid->port_id == 0 || portid->port_id == port->did) {
1911 bzero((caddr_t)&pm, sizeof (pm));
1912
1913 pm.pm_cmd_flags = FC_FCA_PM_READ;
1914 pm.pm_cmd_code = FC_PORT_RLS;
1915 pm.pm_data_len = sizeof (fc_rls_acc_t);
1916 pm.pm_data_buf = (caddr_t)rls;
1917
1610
1611 if (rval != FC_SUCCESS) {
1612 fcio->fcio_errno = rval;
1613 rval = EIO;
1614 }
1615 break;
1616 }
1617

--- 292 unchanged lines hidden (view full) ---

1910 if (portid->port_id == 0 || portid->port_id == port->did) {
1911 bzero((caddr_t)&pm, sizeof (pm));
1912
1913 pm.pm_cmd_flags = FC_FCA_PM_READ;
1914 pm.pm_cmd_code = FC_PORT_RLS;
1915 pm.pm_data_len = sizeof (fc_rls_acc_t);
1916 pm.pm_data_buf = (caddr_t)rls;
1917
1918 rval = emlxs_port_manage(port, &pm);
1918 rval = emlxs_fca_port_manage(port, &pm);
1919
1920 if (rval != FC_SUCCESS) {
1921 fcio->fcio_errno = rval;
1922 rval = EIO;
1923 }
1924 } else {
1925 rval = ENOTSUP;
1926 }

--- 211 unchanged lines hidden (view full) ---

2138
2139 (void) strcpy((caddr_t)fcio->fcio_obuf, (caddr_t)port->snn);
2140
2141 break;
2142 }
2143
2144 case FCIO_FORCE_DUMP:
2145 {
1919
1920 if (rval != FC_SUCCESS) {
1921 fcio->fcio_errno = rval;
1922 rval = EIO;
1923 }
1924 } else {
1925 rval = ENOTSUP;
1926 }

--- 211 unchanged lines hidden (view full) ---

2138
2139 (void) strcpy((caddr_t)fcio->fcio_obuf, (caddr_t)port->snn);
2140
2141 break;
2142 }
2143
2144 case FCIO_FORCE_DUMP:
2145 {
2146 rval = emlxs_reset(port, FC_FCA_CORE);
2146 rval = emlxs_fca_reset(port, FC_FCA_CORE);
2147
2148 if (rval != FC_SUCCESS) {
2149 fcio->fcio_errno = rval;
2150 rval = EIO;
2151 break;
2152 }
2153
2154 break;

--- 11 unchanged lines hidden (view full) ---

2166
2167 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2168
2169 pm.pm_data_len = fcio->fcio_olen;
2170 pm.pm_data_buf = fcio->fcio_obuf;
2171 pm.pm_cmd_code = FC_PORT_GET_DUMP_SIZE;
2172 pm.pm_cmd_flags = FC_FCA_PM_READ;
2173
2147
2148 if (rval != FC_SUCCESS) {
2149 fcio->fcio_errno = rval;
2150 rval = EIO;
2151 break;
2152 }
2153
2154 break;

--- 11 unchanged lines hidden (view full) ---

2166
2167 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2168
2169 pm.pm_data_len = fcio->fcio_olen;
2170 pm.pm_data_buf = fcio->fcio_obuf;
2171 pm.pm_cmd_code = FC_PORT_GET_DUMP_SIZE;
2172 pm.pm_cmd_flags = FC_FCA_PM_READ;
2173
2174 rval = emlxs_port_manage(port, &pm);
2174 rval = emlxs_fca_port_manage(port, &pm);
2175
2176 if (rval != FC_SUCCESS) {
2177 fcio->fcio_errno = rval;
2178
2179 if (rval == FC_INVALID_REQUEST) {
2180 rval = ENOTTY;
2181 } else {
2182 rval = EIO;

--- 15 unchanged lines hidden (view full) ---

2198
2199 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2200
2201 pm.pm_data_len = sizeof (uint32_t);
2202 pm.pm_data_buf = (caddr_t)&dump_size;
2203 pm.pm_cmd_code = FC_PORT_GET_DUMP_SIZE;
2204 pm.pm_cmd_flags = FC_FCA_PM_READ;
2205
2175
2176 if (rval != FC_SUCCESS) {
2177 fcio->fcio_errno = rval;
2178
2179 if (rval == FC_INVALID_REQUEST) {
2180 rval = ENOTTY;
2181 } else {
2182 rval = EIO;

--- 15 unchanged lines hidden (view full) ---

2198
2199 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2200
2201 pm.pm_data_len = sizeof (uint32_t);
2202 pm.pm_data_buf = (caddr_t)&dump_size;
2203 pm.pm_cmd_code = FC_PORT_GET_DUMP_SIZE;
2204 pm.pm_cmd_flags = FC_FCA_PM_READ;
2205
2206 rval = emlxs_port_manage(port, &pm);
2206 rval = emlxs_fca_port_manage(port, &pm);
2207
2208 if (rval != FC_SUCCESS) {
2209 fcio->fcio_errno = rval;
2210
2211 if (rval == FC_INVALID_REQUEST) {
2212 rval = ENOTTY;
2213 } else {
2214 rval = EIO;

--- 9 unchanged lines hidden (view full) ---

2224
2225 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2226
2227 pm.pm_data_len = fcio->fcio_olen;
2228 pm.pm_data_buf = fcio->fcio_obuf;
2229 pm.pm_cmd_code = FC_PORT_GET_DUMP;
2230 pm.pm_cmd_flags = FC_FCA_PM_READ;
2231
2207
2208 if (rval != FC_SUCCESS) {
2209 fcio->fcio_errno = rval;
2210
2211 if (rval == FC_INVALID_REQUEST) {
2212 rval = ENOTTY;
2213 } else {
2214 rval = EIO;

--- 9 unchanged lines hidden (view full) ---

2224
2225 bzero((caddr_t)&pm, sizeof (fc_fca_pm_t));
2226
2227 pm.pm_data_len = fcio->fcio_olen;
2228 pm.pm_data_buf = fcio->fcio_obuf;
2229 pm.pm_cmd_code = FC_PORT_GET_DUMP;
2230 pm.pm_cmd_flags = FC_FCA_PM_READ;
2231
2232 rval = emlxs_port_manage(port, &pm);
2232 rval = emlxs_fca_port_manage(port, &pm);
2233
2234 if (rval != FC_SUCCESS) {
2235 fcio->fcio_errno = rval;
2236
2237 if (rval == FC_INVALID_REQUEST) {
2238 rval = ENOTTY;
2239 } else {
2240 rval = EIO;

--- 201 unchanged lines hidden (view full) ---

2442 }
2443
2444 /* Establish a WWPN */
2445 bzero(wwn, 8);
2446 if (!(bcmp(wwn, dfc_vport.wwpn, 8))) {
2447 /* Generate new WWPN */
2448 bcopy((caddr_t)&hba->wwpn, (caddr_t)dfc_vport.wwpn, 8);
2449 dfc_vport.wwpn[0] = 0x20;
2233
2234 if (rval != FC_SUCCESS) {
2235 fcio->fcio_errno = rval;
2236
2237 if (rval == FC_INVALID_REQUEST) {
2238 rval = ENOTTY;
2239 } else {
2240 rval = EIO;

--- 201 unchanged lines hidden (view full) ---

2442 }
2443
2444 /* Establish a WWPN */
2445 bzero(wwn, 8);
2446 if (!(bcmp(wwn, dfc_vport.wwpn, 8))) {
2447 /* Generate new WWPN */
2448 bcopy((caddr_t)&hba->wwpn, (caddr_t)dfc_vport.wwpn, 8);
2449 dfc_vport.wwpn[0] = 0x20;
2450 dfc_vport.wwpn[1] = vpi;
2450 dfc_vport.wwpn[1] = (uint8_t)vpi;
2451 } else { /* use one provided */
2452
2453 /* Make sure WWPN is unique */
2454 if (tport = emlxs_vport_find_wwpn(hba, dfc_vport.wwpn)) {
2455 if ((tport->flag & EMLXS_PORT_CONFIG) &&
2456 (tport->flag & EMLXS_PORT_BOUND)) {
2457 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
2458 "%s: WWPN already exists. vpi=%d",

--- 4 unchanged lines hidden (view full) ---

2463 }
2464
2465 /* Establish a WWNN */
2466 bzero(wwn, 8);
2467 if (!(bcmp(wwn, dfc_vport.wwnn, 8))) {
2468 /* Generate new WWNN */
2469 bcopy((caddr_t)&hba->wwnn, (caddr_t)dfc_vport.wwnn, 8);
2470 dfc_vport.wwnn[0] = 0x28;
2451 } else { /* use one provided */
2452
2453 /* Make sure WWPN is unique */
2454 if (tport = emlxs_vport_find_wwpn(hba, dfc_vport.wwpn)) {
2455 if ((tport->flag & EMLXS_PORT_CONFIG) &&
2456 (tport->flag & EMLXS_PORT_BOUND)) {
2457 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
2458 "%s: WWPN already exists. vpi=%d",

--- 4 unchanged lines hidden (view full) ---

2463 }
2464
2465 /* Establish a WWNN */
2466 bzero(wwn, 8);
2467 if (!(bcmp(wwn, dfc_vport.wwnn, 8))) {
2468 /* Generate new WWNN */
2469 bcopy((caddr_t)&hba->wwnn, (caddr_t)dfc_vport.wwnn, 8);
2470 dfc_vport.wwnn[0] = 0x28;
2471 dfc_vport.wwnn[1] = vpi;
2471 dfc_vport.wwnn[1] = (uint8_t)vpi;
2472 }
2473 /* else use WWNN provided */
2474
2475 /* Generate the symbolic node name */
2476 if (dfc_vport.snn[0]) {
2477 (void) strcpy(name, dfc_vport.snn);
2478 (void) sprintf(dfc_vport.snn, "%s %s", hba->snn, name);
2479 } else {

--- 352 unchanged lines hidden (view full) ---

2832 if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
2833 int i;
2834 int total_rpi;
2835 emlxs_port_t *vport;
2836
2837 total_rpi = 0;
2838 for (i = 0; i < hba->sli.sli4.VPICount; i++) {
2839 vport = &VPORT(i);
2472 }
2473 /* else use WWNN provided */
2474
2475 /* Generate the symbolic node name */
2476 if (dfc_vport.snn[0]) {
2477 (void) strcpy(name, dfc_vport.snn);
2478 (void) sprintf(dfc_vport.snn, "%s %s", hba->snn, name);
2479 } else {

--- 352 unchanged lines hidden (view full) ---

2832 if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
2833 int i;
2834 int total_rpi;
2835 emlxs_port_t *vport;
2836
2837 total_rpi = 0;
2838 for (i = 0; i < hba->sli.sli4.VPICount; i++) {
2839 vport = &VPORT(i);
2840 total_rpi += vport->outstandingRPIs;
2840 total_rpi += vport->VPIobj.rpi_online;
2841 }
2842
2843 vres.vpi_max = hba->sli.sli4.VPICount - 1;
2841 }
2842
2843 vres.vpi_max = hba->sli.sli4.VPICount - 1;
2844 vres.vpi_inuse = (port->VFIp == NULL) ? 0 :
2845 port->VFIp->outstandingVPIs - 1;
2844 vres.vpi_inuse = (port->VPIobj.vfip == NULL) ? 0 :
2845 (port->VPIobj.vfip->vpi_online - 1);
2846 vres.rpi_max = hba->sli.sli4.RPICount;
2847 vres.rpi_inuse = total_rpi;
2848
2849 if (ddi_copyout((void *)&vres, (void *)dfc->buf1,
2850 sizeof (dfc_vport_resource_t), mode) != 0) {
2851 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
2852 "%s: ddi_copyout failed.",
2853 emlxs_dfc_xlate(dfc->cmd));

--- 295 unchanged lines hidden (view full) ---

3149 checklist |= CL_FABRIC_HAS_RESOURCES;
3150 }
3151 }
3152
3153 /*
3154 * Free up default RPIs and VPI
3155 */
3156free_resc:
2846 vres.rpi_max = hba->sli.sli4.RPICount;
2847 vres.rpi_inuse = total_rpi;
2848
2849 if (ddi_copyout((void *)&vres, (void *)dfc->buf1,
2850 sizeof (dfc_vport_resource_t), mode) != 0) {
2851 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
2852 "%s: ddi_copyout failed.",
2853 emlxs_dfc_xlate(dfc->cmd));

--- 295 unchanged lines hidden (view full) ---

3149 checklist |= CL_FABRIC_HAS_RESOURCES;
3150 }
3151 }
3152
3153 /*
3154 * Free up default RPIs and VPI
3155 */
3156free_resc:
3157 if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
3158 (void) emlxs_sli4_unreg_all_rpi_by_port(vport);
3159 } else {
3160 (void) emlxs_mb_unreg_rpi(vport, 0xffff, 0, 0, 0);
3161 }
3157
3158 /* Unregister all nodes */
3159 (void) emlxs_mb_unreg_node(vport, 0, 0, 0, 0);
3160
3162 (void) emlxs_mb_unreg_vpi(vport);
3163
3164done:
3165 if (ddi_copyout((void *)&checklist, (void *)dfc->buf1,
3166 sizeof (uint32_t), mode) != 0) {
3167 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
3168 "%s: ddi_copyout failed.", emlxs_dfc_xlate(dfc->cmd));
3169 rval = DFC_COPYOUT_ERROR;

--- 1469 unchanged lines hidden (view full) ---

4639 EMLXS_MSGF(EMLXS_CONTEXT,
4640 &emlxs_invalid_dma_handle_msg,
4641 "emlxs_dfc_send_mbox: hdl=%p",
4642 rx_mp->dma_handle);
4643 rval = DFC_IO_ERROR;
4644 }
4645 }
4646#endif /* FMA_SUPPORT */
3161 (void) emlxs_mb_unreg_vpi(vport);
3162
3163done:
3164 if (ddi_copyout((void *)&checklist, (void *)dfc->buf1,
3165 sizeof (uint32_t), mode) != 0) {
3166 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
3167 "%s: ddi_copyout failed.", emlxs_dfc_xlate(dfc->cmd));
3168 rval = DFC_COPYOUT_ERROR;

--- 1469 unchanged lines hidden (view full) ---

4638 EMLXS_MSGF(EMLXS_CONTEXT,
4639 &emlxs_invalid_dma_handle_msg,
4640 "emlxs_dfc_send_mbox: hdl=%p",
4641 rx_mp->dma_handle);
4642 rval = DFC_IO_ERROR;
4643 }
4644 }
4645#endif /* FMA_SUPPORT */
4647 (void) emlxs_mem_buf_free(hba, rx_mp);
4646 emlxs_mem_buf_free(hba, rx_mp);
4648 }
4649
4650 if (tx_mp) {
4651#ifdef FMA_SUPPORT
4652 if (!rval) {
4653 if (emlxs_fm_check_dma_handle(hba, tx_mp->dma_handle)
4654 != DDI_FM_OK) {
4655 EMLXS_MSGF(EMLXS_CONTEXT,
4656 &emlxs_invalid_dma_handle_msg,
4657 "emlxs_dfc_send_mbox: hdl=%p",
4658 tx_mp->dma_handle);
4659 rval = DFC_IO_ERROR;
4660 }
4661 }
4662#endif /* FMA_SUPPORT */
4647 }
4648
4649 if (tx_mp) {
4650#ifdef FMA_SUPPORT
4651 if (!rval) {
4652 if (emlxs_fm_check_dma_handle(hba, tx_mp->dma_handle)
4653 != DDI_FM_OK) {
4654 EMLXS_MSGF(EMLXS_CONTEXT,
4655 &emlxs_invalid_dma_handle_msg,
4656 "emlxs_dfc_send_mbox: hdl=%p",
4657 tx_mp->dma_handle);
4658 rval = DFC_IO_ERROR;
4659 }
4660 }
4661#endif /* FMA_SUPPORT */
4663 (void) emlxs_mem_buf_free(hba, tx_mp);
4662 emlxs_mem_buf_free(hba, tx_mp);
4664 }
4665
4666 return (rval);
4667
4668} /* emlxs_dfc_send_mbox() */
4669
4670
4671static int32_t

--- 839 unchanged lines hidden (view full) ---

5511extern int32_t
5512emlxs_send_menlo_cmd(emlxs_hba_t *hba, uint8_t *cmd_buf, uint32_t cmd_size,
5513 uint8_t *rsp_buf, uint32_t *rsp_size)
5514{
5515 emlxs_port_t *port = &PPORT;
5516 uint8_t *data_buf = NULL;
5517 uint32_t data_size = 0;
5518 fc_packet_t *pkt = NULL;
4663 }
4664
4665 return (rval);
4666
4667} /* emlxs_dfc_send_mbox() */
4668
4669
4670static int32_t

--- 839 unchanged lines hidden (view full) ---

5510extern int32_t
5511emlxs_send_menlo_cmd(emlxs_hba_t *hba, uint8_t *cmd_buf, uint32_t cmd_size,
5512 uint8_t *rsp_buf, uint32_t *rsp_size)
5513{
5514 emlxs_port_t *port = &PPORT;
5515 uint8_t *data_buf = NULL;
5516 uint32_t data_size = 0;
5517 fc_packet_t *pkt = NULL;
5519 uint32_t rval = 0;
5518 int32_t rval = 0;
5520 menlo_set_cmd_t set_cmd;
5521 menlo_reset_cmd_t reset_cmd;
5522 uint32_t rsp_code;
5523 uint32_t mm_mode = 0;
5524 uint32_t cmd_code;
5525 clock_t timeout;
5526 MAILBOXQ *mbq = NULL;
5527 MAILBOX *mb;

--- 3015 unchanged lines hidden (view full) ---

8543 return (rval);
8544} /* emlxs_dfc_loopback_mode() */
8545
8546
8547static int32_t
8548emlxs_dfc_loopback_test(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
8549{
8550 emlxs_port_t *port = &PPORT;
5519 menlo_set_cmd_t set_cmd;
5520 menlo_reset_cmd_t reset_cmd;
5521 uint32_t rsp_code;
5522 uint32_t mm_mode = 0;
5523 uint32_t cmd_code;
5524 clock_t timeout;
5525 MAILBOXQ *mbq = NULL;
5526 MAILBOX *mb;

--- 3015 unchanged lines hidden (view full) ---

8542 return (rval);
8543} /* emlxs_dfc_loopback_mode() */
8544
8545
8546static int32_t
8547emlxs_dfc_loopback_test(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
8548{
8549 emlxs_port_t *port = &PPORT;
8551 uint32_t rval = 0;
8550 int32_t rval = 0;
8552 NODELIST *ndlp;
8553 clock_t timeout;
8554 fc_packet_t *pkt = NULL;
8555 SLI_CT_REQUEST *CtCmd;
8556 uint16_t CtRsp;
8557
8558 if (hba->model_info.flags & EMLXS_FCOE_SUPPORTED) {
8559 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,

--- 199 unchanged lines hidden (view full) ---

8759 if (rval) {
8760 mutex_enter(&EMLXS_PKT_LOCK);
8761 if (pkt && (hba->loopback_pkt == pkt)) {
8762 hba->loopback_pkt = NULL;
8763 }
8764 mutex_exit(&EMLXS_PKT_LOCK);
8765
8766 /* Reset the adapter */
8551 NODELIST *ndlp;
8552 clock_t timeout;
8553 fc_packet_t *pkt = NULL;
8554 SLI_CT_REQUEST *CtCmd;
8555 uint16_t CtRsp;
8556
8557 if (hba->model_info.flags & EMLXS_FCOE_SUPPORTED) {
8558 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,

--- 199 unchanged lines hidden (view full) ---

8758 if (rval) {
8759 mutex_enter(&EMLXS_PKT_LOCK);
8760 if (pkt && (hba->loopback_pkt == pkt)) {
8761 hba->loopback_pkt = NULL;
8762 }
8763 mutex_exit(&EMLXS_PKT_LOCK);
8764
8765 /* Reset the adapter */
8767 (void) emlxs_reset(port, FC_FCA_LINK_RESET);
8766 (void) emlxs_fca_reset(port, FC_FCA_LINK_RESET);
8768 }
8769
8770 if (pkt) {
8771 emlxs_pkt_free(pkt);
8772 }
8773
8774 return (rval);
8775

--- 1486 unchanged lines hidden (view full) ---

10262
10263
10264static int32_t
10265emlxs_dfc_get_fcflist(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
10266{
10267 emlxs_port_t *port = &PPORT;
10268 DFC_FCoEFCFInfo_t *fcflistentry;
10269 DFC_FCoEFCFList_t *fcflist;
8767 }
8768
8769 if (pkt) {
8770 emlxs_pkt_free(pkt);
8771 }
8772
8773 return (rval);
8774

--- 1486 unchanged lines hidden (view full) ---

10261
10262
10263static int32_t
10264emlxs_dfc_get_fcflist(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
10265{
10266 emlxs_port_t *port = &PPORT;
10267 DFC_FCoEFCFInfo_t *fcflistentry;
10268 DFC_FCoEFCFList_t *fcflist;
10270 FCFIobj_t *fp;
10269 FCFIobj_t *fcfp;
10271 uint32_t size;
10272 uint32_t i;
10273 uint32_t count = 0;
10274 uint32_t rval = 0;
10275
10276 if (!dfc->buf1 || !dfc->buf1_size) {
10277 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10278 "%s: Null buffer1 found.", emlxs_dfc_xlate(dfc->cmd));

--- 19 unchanged lines hidden (view full) ---

10298 if (hba->state != FC_READY) {
10299 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10300 "%s: HBA not ready.", emlxs_dfc_xlate(dfc->cmd));
10301
10302 return (DFC_DRV_ERROR);
10303 }
10304
10305 size = sizeof (DFC_FCoEFCFList_t) +
10270 uint32_t size;
10271 uint32_t i;
10272 uint32_t count = 0;
10273 uint32_t rval = 0;
10274
10275 if (!dfc->buf1 || !dfc->buf1_size) {
10276 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10277 "%s: Null buffer1 found.", emlxs_dfc_xlate(dfc->cmd));

--- 19 unchanged lines hidden (view full) ---

10297 if (hba->state != FC_READY) {
10298 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10299 "%s: HBA not ready.", emlxs_dfc_xlate(dfc->cmd));
10300
10301 return (DFC_DRV_ERROR);
10302 }
10303
10304 size = sizeof (DFC_FCoEFCFList_t) +
10306 hba->sli.sli4.FCFICount * sizeof (DFC_FCoEFCFInfo_t);
10305 hba->sli.sli4.fcftab.table_count * sizeof (DFC_FCoEFCFInfo_t);
10307 fcflist = (DFC_FCoEFCFList_t *)kmem_zalloc(size, KM_SLEEP);
10308
10309 if (ddi_copyin(dfc->buf1, (void *)fcflist,
10310 sizeof (DFC_FCoEFCFList_t), mode) != 0) {
10311 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10312 "%s: ddi_copyin failed.", emlxs_dfc_xlate(dfc->cmd));
10313
10314 rval = DFC_COPYIN_ERROR;
10315 goto done;
10316 }
10317
10318 fcflistentry = fcflist->entries;
10306 fcflist = (DFC_FCoEFCFList_t *)kmem_zalloc(size, KM_SLEEP);
10307
10308 if (ddi_copyin(dfc->buf1, (void *)fcflist,
10309 sizeof (DFC_FCoEFCFList_t), mode) != 0) {
10310 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10311 "%s: ddi_copyin failed.", emlxs_dfc_xlate(dfc->cmd));
10312
10313 rval = DFC_COPYIN_ERROR;
10314 goto done;
10315 }
10316
10317 fcflistentry = fcflist->entries;
10319 mutex_enter(&hba->sli.sli4.id_lock);
10320 fp = hba->sli.sli4.FCFIp;
10321 for (i = 0; i < hba->sli.sli4.FCFICount; i ++) {
10322 if ((fp->state == RESOURCE_ALLOCATED) &&
10323 (fp->fcf_rec.fcf_valid)) {
10324 fcflistentry->Priority = fp->fcf_rec.fip_priority;
10325 if (fp->fcf_rec.fcf_available)
10318 mutex_enter(&EMLXS_FCF_LOCK);
10319 fcfp = hba->sli.sli4.fcftab.table;
10320 for (i = 0; i < hba->sli.sli4.fcftab.table_count; i++, fcfp++) {
10321 if ((fcfp->state != FCFI_STATE_FREE) &&
10322 (fcfp->fcf_rec.fcf_valid)) {
10323 fcflistentry->Priority = fcfp->fcf_rec.fip_priority;
10324 if (fcfp->fcf_rec.fcf_available) {
10326 fcflistentry->State = FCF_AVAILABLE_STATE;
10325 fcflistentry->State = FCF_AVAILABLE_STATE;
10327 fcflistentry->LKA_Period = fp->fcf_rec.fka_adv_period;
10326 }
10327 fcflistentry->LKA_Period = fcfp->fcf_rec.fka_adv_period;
10328
10328
10329 bcopy((void *)fp->fcf_rec.vlan_bitmap,
10329 bcopy((void *)fcfp->fcf_rec.vlan_bitmap,
10330 (void *)fcflistentry->VLanBitMap, 512);
10330 (void *)fcflistentry->VLanBitMap, 512);
10331 bcopy((void *)fp->fcf_rec.fc_map,
10331 bcopy((void *)fcfp->fcf_rec.fc_map,
10332 (void *)fcflistentry->FC_Map, 3);
10332 (void *)fcflistentry->FC_Map, 3);
10333 bcopy((void *)fp->fcf_rec.fabric_name_identifier,
10333 bcopy((void *)fcfp->fcf_rec.fabric_name_identifier,
10334 (void *)fcflistentry->FabricName, 8);
10334 (void *)fcflistentry->FabricName, 8);
10335 bcopy((void *)fp->fcf_rec.switch_name_identifier,
10335 bcopy((void *)fcfp->fcf_rec.switch_name_identifier,
10336 (void *)fcflistentry->SwitchName, 8);
10336 (void *)fcflistentry->SwitchName, 8);
10337 bcopy((void *)&fp->fcf_rec.fcf_mac_address_hi,
10337 bcopy((void *)&fcfp->fcf_rec.fcf_mac_address_hi,
10338 (void *)fcflistentry->Mac, 6);
10339
10338 (void *)fcflistentry->Mac, 6);
10339
10340 count ++;
10341 fcflistentry ++;
10340 count++;
10341 fcflistentry++;
10342 }
10342 }
10343 fp ++;
10344 }
10343 }
10345 mutex_exit(&hba->sli.sli4.id_lock);
10344 mutex_exit(&EMLXS_FCF_LOCK);
10346
10345
10347 if (count > fcflist->numberOfEntries)
10346 fcflist->nActiveFCFs = hba->sli.sli4.fcftab.fcfi_count;
10347
10348 if (count > fcflist->numberOfEntries) {
10348 rval = DFC_ARG_TOOSMALL;
10349 rval = DFC_ARG_TOOSMALL;
10350 }
10349
10350 i = sizeof (DFC_FCoEFCFList_t) +
10351 (fcflist->numberOfEntries - 1) * sizeof (DFC_FCoEFCFInfo_t);
10351
10352 i = sizeof (DFC_FCoEFCFList_t) +
10353 (fcflist->numberOfEntries - 1) * sizeof (DFC_FCoEFCFInfo_t);
10352 fcflist->numberOfEntries = count;
10354 fcflist->numberOfEntries = (uint16_t)count;
10353
10354 if (ddi_copyout((void *) fcflist, dfc->buf1,
10355 i, mode) != 0) {
10356 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10357 "%s: ddi_copyout failed.", emlxs_dfc_xlate(dfc->cmd));
10358
10359 rval = DFC_COPYOUT_ERROR;
10360 goto done;

--- 151 unchanged lines hidden (view full) ---

10512
10513 return (rval);
10514} /* emlxs_dfc_send_mbox4() */
10515
10516
10517static int
10518emlxs_dfc_rd_be_fcf(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
10519{
10355
10356 if (ddi_copyout((void *) fcflist, dfc->buf1,
10357 i, mode) != 0) {
10358 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10359 "%s: ddi_copyout failed.", emlxs_dfc_xlate(dfc->cmd));
10360
10361 rval = DFC_COPYOUT_ERROR;
10362 goto done;

--- 151 unchanged lines hidden (view full) ---

10514
10515 return (rval);
10516} /* emlxs_dfc_send_mbox4() */
10517
10518
10519static int
10520emlxs_dfc_rd_be_fcf(emlxs_hba_t *hba, dfc_t *dfc, int32_t mode)
10521{
10520 emlxs_port_t *port = &PPORT;
10521 MATCHMAP *mp;
10522 MAILBOX4 *mb = NULL;
10523 MAILBOXQ *mbq = NULL;
10524 IOCTL_FCOE_READ_FCF_TABLE *fcf;
10525 mbox_req_hdr_t *hdr_req;
10526 FCF_RECORD_t *fcfrec;
10527 int32_t rc = 0;
10528 uint32_t rval = 0;
10529 uint16_t index;
10522 emlxs_port_t *port = &PPORT;
10523 MATCHMAP *mp;
10524 MAILBOX4 *mb = NULL;
10525 MAILBOXQ *mbq = NULL;
10526 IOCTL_FCOE_READ_FCF_TABLE *fcf;
10527 mbox_req_hdr_t *hdr_req;
10528 mbox_rsp_hdr_t *hdr_rsp;
10529 FCF_RECORD_t *fcfrec;
10530 uint32_t rc = 0;
10531 uint32_t rval = 0;
10532 uint16_t index;
10530
10531 if (!dfc->buf1 || !dfc->buf1_size) {
10532 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10533 "%s: Null buffer1 found.", emlxs_dfc_xlate(dfc->cmd));
10534
10535 return (DFC_ARG_NULL);
10536 }
10537

--- 4 unchanged lines hidden (view full) ---

10542 mb = (MAILBOX4 *)mbq;
10543
10544 bzero((void *) mb, MAILBOX_CMD_SLI4_BSIZE);
10545
10546 if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF, 1)) == 0) {
10547 rval = DFC_SYSRES_ERROR;
10548 goto done;
10549 }
10533
10534 if (!dfc->buf1 || !dfc->buf1_size) {
10535 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10536 "%s: Null buffer1 found.", emlxs_dfc_xlate(dfc->cmd));
10537
10538 return (DFC_ARG_NULL);
10539 }
10540

--- 4 unchanged lines hidden (view full) ---

10545 mb = (MAILBOX4 *)mbq;
10546
10547 bzero((void *) mb, MAILBOX_CMD_SLI4_BSIZE);
10548
10549 if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF, 1)) == 0) {
10550 rval = DFC_SYSRES_ERROR;
10551 goto done;
10552 }
10553 bzero(mp->virt, mp->size);
10554
10550 /*
10555 /*
10551 * Save address for completion
10552 * Signifies a non-embedded command
10553 */
10554 mb->un.varSLIConfig.be.embedded = 0;
10556 * Signifies a non-embedded command
10557 */
10558 mb->un.varSLIConfig.be.embedded = 0;
10555 mbq->nonembed = (uint8_t *)mp;
10559 mbq->nonembed = (void *)mp;
10556 mbq->mbox_cmpl = NULL;
10557
10558 mb->mbxCommand = MBX_SLI_CONFIG;
10559 mb->mbxOwner = OWN_HOST;
10560
10561 hdr_req = (mbox_req_hdr_t *)mp->virt;
10560 mbq->mbox_cmpl = NULL;
10561
10562 mb->mbxCommand = MBX_SLI_CONFIG;
10563 mb->mbxOwner = OWN_HOST;
10564
10565 hdr_req = (mbox_req_hdr_t *)mp->virt;
10566 hdr_rsp = (mbox_rsp_hdr_t *)mp->virt;
10567
10562 hdr_req->subsystem = IOCTL_SUBSYSTEM_FCOE;
10563 hdr_req->opcode = FCOE_OPCODE_READ_FCF_TABLE;
10564 hdr_req->timeout = 0;
10565 hdr_req->req_length = sizeof (IOCTL_FCOE_READ_FCF_TABLE);
10566 fcf = (IOCTL_FCOE_READ_FCF_TABLE *)(hdr_req + 1);
10567 fcf->params.request.fcf_index = index;
10568
10569 rc = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);

--- 7 unchanged lines hidden (view full) ---

10577 (void *)&fcf->params.response.next_valid_fcf_index,
10578 (void *)dfc->buf2, dfc->buf2_size, mode) != 0) {
10579 rval = DFC_COPYOUT_ERROR;
10580 }
10581 } else {
10582 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10583 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),
10584 emlxs_mb_cmd_xlate(mb->mbxCommand), rc);
10568 hdr_req->subsystem = IOCTL_SUBSYSTEM_FCOE;
10569 hdr_req->opcode = FCOE_OPCODE_READ_FCF_TABLE;
10570 hdr_req->timeout = 0;
10571 hdr_req->req_length = sizeof (IOCTL_FCOE_READ_FCF_TABLE);
10572 fcf = (IOCTL_FCOE_READ_FCF_TABLE *)(hdr_req + 1);
10573 fcf->params.request.fcf_index = index;
10574
10575 rc = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);

--- 7 unchanged lines hidden (view full) ---

10583 (void *)&fcf->params.response.next_valid_fcf_index,
10584 (void *)dfc->buf2, dfc->buf2_size, mode) != 0) {
10585 rval = DFC_COPYOUT_ERROR;
10586 }
10587 } else {
10588 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10589 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),
10590 emlxs_mb_cmd_xlate(mb->mbxCommand), rc);
10585 rval = DFC_COPYOUT_ERROR;
10591
10592 if ((rc == MBX_NONEMBED_ERROR) &&
10593 (hdr_rsp->status == MBX_RSP_STATUS_NO_FCF)) {
10594 rval = DFC_FCOE_NO_DATA;
10595 } else {
10596 rval = DFC_IO_ERROR;
10597 }
10586 }
10587done:
10588 if (mp)
10598 }
10599done:
10600 if (mp)
10589 (void) emlxs_mem_put(hba, MEM_BUF, (uint8_t *)mp);
10601 emlxs_mem_put(hba, MEM_BUF, (void *)mp);
10590 if (mbq)
10591 kmem_free(mbq, sizeof (MAILBOXQ));
10592
10593 return (rval);
10594}
10595
10596
10597/*ARGSUSED*/

--- 24 unchanged lines hidden (view full) ---

10622 mb->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
10623 IOCTL_SUBSYSTEM_DCBX;
10624 mb->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
10625 DCBX_OPCODE_SET_DCBX_MODE;
10626 mb->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
10627 mb->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
10628 sizeof (IOCTL_DCBX_SET_DCBX_MODE);
10629 dcbx_mode = (IOCTL_DCBX_SET_DCBX_MODE *)&mb->un.varSLIConfig.payload;
10602 if (mbq)
10603 kmem_free(mbq, sizeof (MAILBOXQ));
10604
10605 return (rval);
10606}
10607
10608
10609/*ARGSUSED*/

--- 24 unchanged lines hidden (view full) ---

10634 mb->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
10635 IOCTL_SUBSYSTEM_DCBX;
10636 mb->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
10637 DCBX_OPCODE_SET_DCBX_MODE;
10638 mb->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
10639 mb->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
10640 sizeof (IOCTL_DCBX_SET_DCBX_MODE);
10641 dcbx_mode = (IOCTL_DCBX_SET_DCBX_MODE *)&mb->un.varSLIConfig.payload;
10630 dcbx_mode->params.request.port_num = port_num;
10642 dcbx_mode->params.request.port_num = (uint8_t)port_num;
10631 dcbx_mode->params.request.dcbx_mode = dfc->data1;
10632
10633 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_detail_msg,
10634 "%s requested on port %d.", emlxs_dfc_xlate(dfc->cmd), port_num);
10635 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);
10636 if (rval != MBX_SUCCESS) {
10637 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10638 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),

--- 37 unchanged lines hidden (view full) ---

10676 mb->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
10677 IOCTL_SUBSYSTEM_DCBX;
10678 mb->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
10679 DCBX_OPCODE_GET_DCBX_MODE;
10680 mb->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
10681 mb->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
10682 sizeof (IOCTL_DCBX_SET_DCBX_MODE);
10683 dcbx_mode = (IOCTL_DCBX_GET_DCBX_MODE *)&mb->un.varSLIConfig.payload;
10643 dcbx_mode->params.request.dcbx_mode = dfc->data1;
10644
10645 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_detail_msg,
10646 "%s requested on port %d.", emlxs_dfc_xlate(dfc->cmd), port_num);
10647 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);
10648 if (rval != MBX_SUCCESS) {
10649 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10650 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),

--- 37 unchanged lines hidden (view full) ---

10688 mb->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
10689 IOCTL_SUBSYSTEM_DCBX;
10690 mb->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
10691 DCBX_OPCODE_GET_DCBX_MODE;
10692 mb->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
10693 mb->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
10694 sizeof (IOCTL_DCBX_SET_DCBX_MODE);
10695 dcbx_mode = (IOCTL_DCBX_GET_DCBX_MODE *)&mb->un.varSLIConfig.payload;
10684 dcbx_mode->params.request.port_num = port_num;
10696 dcbx_mode->params.request.port_num = (uint8_t)port_num;
10685
10686 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_detail_msg,
10687 "%s requested on port %d.", emlxs_dfc_xlate(dfc->cmd), port_num);
10688 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);
10689 if (rval != MBX_SUCCESS) {
10690 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10691 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),
10692 emlxs_mb_cmd_xlate(mb->mbxCommand), rval);

--- 36 unchanged lines hidden (view full) ---

10729 emlxs_dfc_xlate(dfc->cmd));
10730
10731 rval = DFC_COPYOUT_ERROR;
10732 return (rval);
10733 }
10734 }
10735
10736 return (rval);
10697
10698 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_detail_msg,
10699 "%s requested on port %d.", emlxs_dfc_xlate(dfc->cmd), port_num);
10700 rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_WAIT, 0);
10701 if (rval != MBX_SUCCESS) {
10702 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_dfc_error_msg,
10703 "%s: %s failed. mbxstatus=0x%x", emlxs_dfc_xlate(dfc->cmd),
10704 emlxs_mb_cmd_xlate(mb->mbxCommand), rval);

--- 36 unchanged lines hidden (view full) ---

10741 emlxs_dfc_xlate(dfc->cmd));
10742
10743 rval = DFC_COPYOUT_ERROR;
10744 return (rval);
10745 }
10746 }
10747
10748 return (rval);
10737}
10749
10750} /* emlxs_dfc_get_qos() */