| .. | .. |
|---|
| 101 | 101 | Mpi2ConfigRequest_t *mpi_request; |
|---|
| 102 | 102 | char *desc = NULL; |
|---|
| 103 | 103 | |
|---|
| 104 | | - if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 105 | | - return; |
|---|
| 106 | | - |
|---|
| 107 | 104 | mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); |
|---|
| 108 | 105 | switch (mpi_request->Header.PageType & MPI2_CONFIG_PAGETYPE_MASK) { |
|---|
| 109 | 106 | case MPI2_CONFIG_PAGETYPE_IO_UNIT: |
|---|
| .. | .. |
|---|
| 119 | 116 | desc = "raid_volume"; |
|---|
| 120 | 117 | break; |
|---|
| 121 | 118 | case MPI2_CONFIG_PAGETYPE_MANUFACTURING: |
|---|
| 122 | | - desc = "manufaucturing"; |
|---|
| 119 | + desc = "manufacturing"; |
|---|
| 123 | 120 | break; |
|---|
| 124 | 121 | case MPI2_CONFIG_PAGETYPE_RAID_PHYSDISK: |
|---|
| 125 | 122 | desc = "physdisk"; |
|---|
| .. | .. |
|---|
| 175 | 172 | if (!desc) |
|---|
| 176 | 173 | return; |
|---|
| 177 | 174 | |
|---|
| 178 | | - pr_info(MPT3SAS_FMT |
|---|
| 179 | | - "%s: %s(%d), action(%d), form(0x%08x), smid(%d)\n", |
|---|
| 180 | | - ioc->name, calling_function_name, desc, |
|---|
| 181 | | - mpi_request->Header.PageNumber, mpi_request->Action, |
|---|
| 182 | | - le32_to_cpu(mpi_request->PageAddress), smid); |
|---|
| 175 | + ioc_info(ioc, "%s: %s(%d), action(%d), form(0x%08x), smid(%d)\n", |
|---|
| 176 | + calling_function_name, desc, |
|---|
| 177 | + mpi_request->Header.PageNumber, mpi_request->Action, |
|---|
| 178 | + le32_to_cpu(mpi_request->PageAddress), smid); |
|---|
| 183 | 179 | |
|---|
| 184 | 180 | if (!mpi_reply) |
|---|
| 185 | 181 | return; |
|---|
| 186 | 182 | |
|---|
| 187 | 183 | if (mpi_reply->IOCStatus || mpi_reply->IOCLogInfo) |
|---|
| 188 | | - pr_info(MPT3SAS_FMT |
|---|
| 189 | | - "\tiocstatus(0x%04x), loginfo(0x%08x)\n", |
|---|
| 190 | | - ioc->name, le16_to_cpu(mpi_reply->IOCStatus), |
|---|
| 191 | | - le32_to_cpu(mpi_reply->IOCLogInfo)); |
|---|
| 184 | + ioc_info(ioc, "\tiocstatus(0x%04x), loginfo(0x%08x)\n", |
|---|
| 185 | + le16_to_cpu(mpi_reply->IOCStatus), |
|---|
| 186 | + le32_to_cpu(mpi_reply->IOCLogInfo)); |
|---|
| 192 | 187 | } |
|---|
| 193 | 188 | |
|---|
| 194 | 189 | /** |
|---|
| .. | .. |
|---|
| 210 | 205 | mem->page = dma_alloc_coherent(&ioc->pdev->dev, mem->sz, |
|---|
| 211 | 206 | &mem->page_dma, GFP_KERNEL); |
|---|
| 212 | 207 | if (!mem->page) { |
|---|
| 213 | | - pr_err(MPT3SAS_FMT |
|---|
| 214 | | - "%s: dma_alloc_coherent failed asking for (%d) bytes!!\n", |
|---|
| 215 | | - ioc->name, __func__, mem->sz); |
|---|
| 208 | + ioc_err(ioc, "%s: dma_alloc_coherent failed asking for (%d) bytes!!\n", |
|---|
| 209 | + __func__, mem->sz); |
|---|
| 216 | 210 | r = -ENOMEM; |
|---|
| 217 | 211 | } |
|---|
| 218 | 212 | } else { /* use tmp buffer if less than 512 bytes */ |
|---|
| .. | .. |
|---|
| 272 | 266 | mpi_reply->MsgLength*4); |
|---|
| 273 | 267 | } |
|---|
| 274 | 268 | ioc->config_cmds.status &= ~MPT3_CMD_PENDING; |
|---|
| 275 | | - _config_display_some_debug(ioc, smid, "config_done", mpi_reply); |
|---|
| 269 | + if (ioc->logging_level & MPT_DEBUG_CONFIG) |
|---|
| 270 | + _config_display_some_debug(ioc, smid, "config_done", mpi_reply); |
|---|
| 276 | 271 | ioc->config_cmds.smid = USHRT_MAX; |
|---|
| 277 | 272 | complete(&ioc->config_cmds.done); |
|---|
| 278 | 273 | return 1; |
|---|
| .. | .. |
|---|
| 303 | 298 | void *config_page, u16 config_page_sz) |
|---|
| 304 | 299 | { |
|---|
| 305 | 300 | u16 smid; |
|---|
| 306 | | - u32 ioc_state; |
|---|
| 307 | 301 | Mpi2ConfigRequest_t *config_request; |
|---|
| 308 | 302 | int r; |
|---|
| 309 | 303 | u8 retry_count, issue_host_reset = 0; |
|---|
| 310 | | - u16 wait_state_count; |
|---|
| 311 | 304 | struct config_request mem; |
|---|
| 312 | 305 | u32 ioc_status = UINT_MAX; |
|---|
| 313 | 306 | |
|---|
| 314 | 307 | mutex_lock(&ioc->config_cmds.mutex); |
|---|
| 315 | 308 | if (ioc->config_cmds.status != MPT3_CMD_NOT_USED) { |
|---|
| 316 | | - pr_err(MPT3SAS_FMT "%s: config_cmd in use\n", |
|---|
| 317 | | - ioc->name, __func__); |
|---|
| 309 | + ioc_err(ioc, "%s: config_cmd in use\n", __func__); |
|---|
| 318 | 310 | mutex_unlock(&ioc->config_cmds.mutex); |
|---|
| 319 | 311 | return -EAGAIN; |
|---|
| 320 | 312 | } |
|---|
| .. | .. |
|---|
| 362 | 354 | r = -EFAULT; |
|---|
| 363 | 355 | goto free_mem; |
|---|
| 364 | 356 | } |
|---|
| 365 | | - pr_info(MPT3SAS_FMT "%s: attempting retry (%d)\n", |
|---|
| 366 | | - ioc->name, __func__, retry_count); |
|---|
| 357 | + ioc_info(ioc, "%s: attempting retry (%d)\n", |
|---|
| 358 | + __func__, retry_count); |
|---|
| 367 | 359 | } |
|---|
| 368 | | - wait_state_count = 0; |
|---|
| 369 | | - ioc_state = mpt3sas_base_get_iocstate(ioc, 1); |
|---|
| 370 | | - while (ioc_state != MPI2_IOC_STATE_OPERATIONAL) { |
|---|
| 371 | | - if (wait_state_count++ == MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT) { |
|---|
| 372 | | - pr_err(MPT3SAS_FMT |
|---|
| 373 | | - "%s: failed due to ioc not operational\n", |
|---|
| 374 | | - ioc->name, __func__); |
|---|
| 375 | | - ioc->config_cmds.status = MPT3_CMD_NOT_USED; |
|---|
| 376 | | - r = -EFAULT; |
|---|
| 377 | | - goto free_mem; |
|---|
| 378 | | - } |
|---|
| 379 | | - ssleep(1); |
|---|
| 380 | | - ioc_state = mpt3sas_base_get_iocstate(ioc, 1); |
|---|
| 381 | | - pr_info(MPT3SAS_FMT |
|---|
| 382 | | - "%s: waiting for operational state(count=%d)\n", |
|---|
| 383 | | - ioc->name, __func__, wait_state_count); |
|---|
| 384 | | - } |
|---|
| 385 | | - if (wait_state_count) |
|---|
| 386 | | - pr_info(MPT3SAS_FMT "%s: ioc is operational\n", |
|---|
| 387 | | - ioc->name, __func__); |
|---|
| 360 | + |
|---|
| 361 | + r = mpt3sas_wait_for_ioc(ioc, MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT); |
|---|
| 362 | + if (r) |
|---|
| 363 | + goto free_mem; |
|---|
| 388 | 364 | |
|---|
| 389 | 365 | smid = mpt3sas_base_get_smid(ioc, ioc->config_cb_idx); |
|---|
| 390 | 366 | if (!smid) { |
|---|
| 391 | | - pr_err(MPT3SAS_FMT "%s: failed obtaining a smid\n", |
|---|
| 392 | | - ioc->name, __func__); |
|---|
| 367 | + ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); |
|---|
| 393 | 368 | ioc->config_cmds.status = MPT3_CMD_NOT_USED; |
|---|
| 394 | 369 | r = -EAGAIN; |
|---|
| 395 | 370 | goto free_mem; |
|---|
| 396 | 371 | } |
|---|
| 397 | 372 | |
|---|
| 398 | 373 | r = 0; |
|---|
| 399 | | - memset(mpi_reply, 0, sizeof(Mpi2ConfigReply_t)); |
|---|
| 374 | + memset(ioc->config_cmds.reply, 0, sizeof(Mpi2ConfigReply_t)); |
|---|
| 400 | 375 | ioc->config_cmds.status = MPT3_CMD_PENDING; |
|---|
| 401 | 376 | config_request = mpt3sas_base_get_msg_frame(ioc, smid); |
|---|
| 402 | 377 | ioc->config_cmds.smid = smid; |
|---|
| 403 | 378 | memcpy(config_request, mpi_request, sizeof(Mpi2ConfigRequest_t)); |
|---|
| 404 | | - _config_display_some_debug(ioc, smid, "config_request", NULL); |
|---|
| 379 | + if (ioc->logging_level & MPT_DEBUG_CONFIG) |
|---|
| 380 | + _config_display_some_debug(ioc, smid, "config_request", NULL); |
|---|
| 405 | 381 | init_completion(&ioc->config_cmds.done); |
|---|
| 406 | | - mpt3sas_base_put_smid_default(ioc, smid); |
|---|
| 382 | + ioc->put_smid_default(ioc, smid); |
|---|
| 407 | 383 | wait_for_completion_timeout(&ioc->config_cmds.done, timeout*HZ); |
|---|
| 408 | 384 | if (!(ioc->config_cmds.status & MPT3_CMD_COMPLETE)) { |
|---|
| 409 | | - mpt3sas_base_check_cmd_timeout(ioc, |
|---|
| 410 | | - ioc->config_cmds.status, mpi_request, |
|---|
| 411 | | - sizeof(Mpi2ConfigRequest_t)/4); |
|---|
| 385 | + if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 386 | + _config_display_some_debug(ioc, |
|---|
| 387 | + smid, "config_request", NULL); |
|---|
| 388 | + ioc_err(ioc, "%s: command timeout\n", __func__); |
|---|
| 389 | + mpt3sas_base_check_cmd_timeout(ioc, ioc->config_cmds.status, |
|---|
| 390 | + mpi_request, sizeof(Mpi2ConfigRequest_t) / 4); |
|---|
| 412 | 391 | retry_count++; |
|---|
| 413 | 392 | if (ioc->config_cmds.smid == smid) |
|---|
| 414 | 393 | mpt3sas_base_free_smid(ioc, smid); |
|---|
| .. | .. |
|---|
| 427 | 406 | /* Reply Frame Sanity Checks to workaround FW issues */ |
|---|
| 428 | 407 | if ((mpi_request->Header.PageType & 0xF) != |
|---|
| 429 | 408 | (mpi_reply->Header.PageType & 0xF)) { |
|---|
| 409 | + if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 410 | + _config_display_some_debug(ioc, |
|---|
| 411 | + smid, "config_request", NULL); |
|---|
| 430 | 412 | _debug_dump_mf(mpi_request, ioc->request_sz/4); |
|---|
| 431 | | - _debug_dump_reply(mpi_reply, ioc->request_sz/4); |
|---|
| 432 | | - panic(KERN_WARNING MPT3SAS_FMT "%s: Firmware BUG:" \ |
|---|
| 433 | | - " mpi_reply mismatch: Requested PageType(0x%02x)" \ |
|---|
| 434 | | - " Reply PageType(0x%02x)\n", \ |
|---|
| 435 | | - ioc->name, __func__, |
|---|
| 436 | | - (mpi_request->Header.PageType & 0xF), |
|---|
| 437 | | - (mpi_reply->Header.PageType & 0xF)); |
|---|
| 413 | + _debug_dump_reply(mpi_reply, ioc->reply_sz/4); |
|---|
| 414 | + panic("%s: %s: Firmware BUG: mpi_reply mismatch: Requested PageType(0x%02x) Reply PageType(0x%02x)\n", |
|---|
| 415 | + ioc->name, __func__, |
|---|
| 416 | + mpi_request->Header.PageType & 0xF, |
|---|
| 417 | + mpi_reply->Header.PageType & 0xF); |
|---|
| 438 | 418 | } |
|---|
| 439 | 419 | |
|---|
| 440 | 420 | if (((mpi_request->Header.PageType & 0xF) == |
|---|
| 441 | 421 | MPI2_CONFIG_PAGETYPE_EXTENDED) && |
|---|
| 442 | 422 | mpi_request->ExtPageType != mpi_reply->ExtPageType) { |
|---|
| 423 | + if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 424 | + _config_display_some_debug(ioc, |
|---|
| 425 | + smid, "config_request", NULL); |
|---|
| 443 | 426 | _debug_dump_mf(mpi_request, ioc->request_sz/4); |
|---|
| 444 | | - _debug_dump_reply(mpi_reply, ioc->request_sz/4); |
|---|
| 445 | | - panic(KERN_WARNING MPT3SAS_FMT "%s: Firmware BUG:" \ |
|---|
| 446 | | - " mpi_reply mismatch: Requested ExtPageType(0x%02x)" |
|---|
| 447 | | - " Reply ExtPageType(0x%02x)\n", |
|---|
| 448 | | - ioc->name, __func__, mpi_request->ExtPageType, |
|---|
| 449 | | - mpi_reply->ExtPageType); |
|---|
| 427 | + _debug_dump_reply(mpi_reply, ioc->reply_sz/4); |
|---|
| 428 | + panic("%s: %s: Firmware BUG: mpi_reply mismatch: Requested ExtPageType(0x%02x) Reply ExtPageType(0x%02x)\n", |
|---|
| 429 | + ioc->name, __func__, |
|---|
| 430 | + mpi_request->ExtPageType, |
|---|
| 431 | + mpi_reply->ExtPageType); |
|---|
| 450 | 432 | } |
|---|
| 451 | 433 | ioc_status = le16_to_cpu(mpi_reply->IOCStatus) |
|---|
| 452 | 434 | & MPI2_IOCSTATUS_MASK; |
|---|
| 453 | 435 | } |
|---|
| 454 | 436 | |
|---|
| 455 | 437 | if (retry_count) |
|---|
| 456 | | - pr_info(MPT3SAS_FMT "%s: retry (%d) completed!!\n", \ |
|---|
| 457 | | - ioc->name, __func__, retry_count); |
|---|
| 438 | + ioc_info(ioc, "%s: retry (%d) completed!!\n", |
|---|
| 439 | + __func__, retry_count); |
|---|
| 458 | 440 | |
|---|
| 459 | 441 | if ((ioc_status == MPI2_IOCSTATUS_SUCCESS) && |
|---|
| 460 | 442 | config_page && mpi_request->Action == |
|---|
| .. | .. |
|---|
| 465 | 447 | if (p) { |
|---|
| 466 | 448 | if ((mpi_request->Header.PageType & 0xF) != |
|---|
| 467 | 449 | (p[3] & 0xF)) { |
|---|
| 450 | + if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 451 | + _config_display_some_debug(ioc, |
|---|
| 452 | + smid, "config_request", NULL); |
|---|
| 468 | 453 | _debug_dump_mf(mpi_request, ioc->request_sz/4); |
|---|
| 469 | | - _debug_dump_reply(mpi_reply, ioc->request_sz/4); |
|---|
| 454 | + _debug_dump_reply(mpi_reply, ioc->reply_sz/4); |
|---|
| 470 | 455 | _debug_dump_config(p, min_t(u16, mem.sz, |
|---|
| 471 | 456 | config_page_sz)/4); |
|---|
| 472 | | - panic(KERN_WARNING MPT3SAS_FMT |
|---|
| 473 | | - "%s: Firmware BUG:" \ |
|---|
| 474 | | - " config page mismatch:" |
|---|
| 475 | | - " Requested PageType(0x%02x)" |
|---|
| 476 | | - " Reply PageType(0x%02x)\n", |
|---|
| 477 | | - ioc->name, __func__, |
|---|
| 478 | | - (mpi_request->Header.PageType & 0xF), |
|---|
| 479 | | - (p[3] & 0xF)); |
|---|
| 457 | + panic("%s: %s: Firmware BUG: config page mismatch: Requested PageType(0x%02x) Reply PageType(0x%02x)\n", |
|---|
| 458 | + ioc->name, __func__, |
|---|
| 459 | + mpi_request->Header.PageType & 0xF, |
|---|
| 460 | + p[3] & 0xF); |
|---|
| 480 | 461 | } |
|---|
| 481 | 462 | |
|---|
| 482 | 463 | if (((mpi_request->Header.PageType & 0xF) == |
|---|
| 483 | 464 | MPI2_CONFIG_PAGETYPE_EXTENDED) && |
|---|
| 484 | 465 | (mpi_request->ExtPageType != p[6])) { |
|---|
| 466 | + if (!(ioc->logging_level & MPT_DEBUG_CONFIG)) |
|---|
| 467 | + _config_display_some_debug(ioc, |
|---|
| 468 | + smid, "config_request", NULL); |
|---|
| 485 | 469 | _debug_dump_mf(mpi_request, ioc->request_sz/4); |
|---|
| 486 | | - _debug_dump_reply(mpi_reply, ioc->request_sz/4); |
|---|
| 470 | + _debug_dump_reply(mpi_reply, ioc->reply_sz/4); |
|---|
| 487 | 471 | _debug_dump_config(p, min_t(u16, mem.sz, |
|---|
| 488 | 472 | config_page_sz)/4); |
|---|
| 489 | | - panic(KERN_WARNING MPT3SAS_FMT |
|---|
| 490 | | - "%s: Firmware BUG:" \ |
|---|
| 491 | | - " config page mismatch:" |
|---|
| 492 | | - " Requested ExtPageType(0x%02x)" |
|---|
| 493 | | - " Reply ExtPageType(0x%02x)\n", |
|---|
| 494 | | - ioc->name, __func__, |
|---|
| 495 | | - mpi_request->ExtPageType, p[6]); |
|---|
| 473 | + panic("%s: %s: Firmware BUG: config page mismatch: Requested ExtPageType(0x%02x) Reply ExtPageType(0x%02x)\n", |
|---|
| 474 | + ioc->name, __func__, |
|---|
| 475 | + mpi_request->ExtPageType, p[6]); |
|---|
| 496 | 476 | } |
|---|
| 497 | 477 | } |
|---|
| 498 | 478 | memcpy(config_page, mem.page, min_t(u16, mem.sz, |
|---|
| .. | .. |
|---|
| 983 | 963 | out: |
|---|
| 984 | 964 | return r; |
|---|
| 985 | 965 | } |
|---|
| 966 | +/** |
|---|
| 967 | + * mpt3sas_config_get_ioc_pg1 - obtain ioc page 1 |
|---|
| 968 | + * @ioc: per adapter object |
|---|
| 969 | + * @mpi_reply: reply mf payload returned from firmware |
|---|
| 970 | + * @config_page: contents of the config page |
|---|
| 971 | + * Context: sleep. |
|---|
| 972 | + * |
|---|
| 973 | + * Return: 0 for success, non-zero for failure. |
|---|
| 974 | + */ |
|---|
| 975 | +int |
|---|
| 976 | +mpt3sas_config_get_ioc_pg1(struct MPT3SAS_ADAPTER *ioc, |
|---|
| 977 | + Mpi2ConfigReply_t *mpi_reply, Mpi2IOCPage1_t *config_page) |
|---|
| 978 | +{ |
|---|
| 979 | + Mpi2ConfigRequest_t mpi_request; |
|---|
| 980 | + int r; |
|---|
| 981 | + |
|---|
| 982 | + memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); |
|---|
| 983 | + mpi_request.Function = MPI2_FUNCTION_CONFIG; |
|---|
| 984 | + mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER; |
|---|
| 985 | + mpi_request.Header.PageType = MPI2_CONFIG_PAGETYPE_IOC; |
|---|
| 986 | + mpi_request.Header.PageNumber = 1; |
|---|
| 987 | + mpi_request.Header.PageVersion = MPI2_IOCPAGE8_PAGEVERSION; |
|---|
| 988 | + ioc->build_zero_len_sge_mpi(ioc, &mpi_request.PageBufferSGE); |
|---|
| 989 | + r = _config_request(ioc, &mpi_request, mpi_reply, |
|---|
| 990 | + MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, NULL, 0); |
|---|
| 991 | + if (r) |
|---|
| 992 | + goto out; |
|---|
| 993 | + |
|---|
| 994 | + mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT; |
|---|
| 995 | + r = _config_request(ioc, &mpi_request, mpi_reply, |
|---|
| 996 | + MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page, |
|---|
| 997 | + sizeof(*config_page)); |
|---|
| 998 | + out: |
|---|
| 999 | + return r; |
|---|
| 1000 | +} |
|---|
| 1001 | + |
|---|
| 1002 | +/** |
|---|
| 1003 | + * mpt3sas_config_set_ioc_pg1 - modify ioc page 1 |
|---|
| 1004 | + * @ioc: per adapter object |
|---|
| 1005 | + * @mpi_reply: reply mf payload returned from firmware |
|---|
| 1006 | + * @config_page: contents of the config page |
|---|
| 1007 | + * Context: sleep. |
|---|
| 1008 | + * |
|---|
| 1009 | + * Return: 0 for success, non-zero for failure. |
|---|
| 1010 | + */ |
|---|
| 1011 | +int |
|---|
| 1012 | +mpt3sas_config_set_ioc_pg1(struct MPT3SAS_ADAPTER *ioc, |
|---|
| 1013 | + Mpi2ConfigReply_t *mpi_reply, Mpi2IOCPage1_t *config_page) |
|---|
| 1014 | +{ |
|---|
| 1015 | + Mpi2ConfigRequest_t mpi_request; |
|---|
| 1016 | + int r; |
|---|
| 1017 | + |
|---|
| 1018 | + memset(&mpi_request, 0, sizeof(Mpi2ConfigRequest_t)); |
|---|
| 1019 | + mpi_request.Function = MPI2_FUNCTION_CONFIG; |
|---|
| 1020 | + mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_HEADER; |
|---|
| 1021 | + mpi_request.Header.PageType = MPI2_CONFIG_PAGETYPE_IOC; |
|---|
| 1022 | + mpi_request.Header.PageNumber = 1; |
|---|
| 1023 | + mpi_request.Header.PageVersion = MPI2_IOCPAGE8_PAGEVERSION; |
|---|
| 1024 | + ioc->build_zero_len_sge_mpi(ioc, &mpi_request.PageBufferSGE); |
|---|
| 1025 | + r = _config_request(ioc, &mpi_request, mpi_reply, |
|---|
| 1026 | + MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, NULL, 0); |
|---|
| 1027 | + if (r) |
|---|
| 1028 | + goto out; |
|---|
| 1029 | + |
|---|
| 1030 | + mpi_request.Action = MPI2_CONFIG_ACTION_PAGE_WRITE_CURRENT; |
|---|
| 1031 | + r = _config_request(ioc, &mpi_request, mpi_reply, |
|---|
| 1032 | + MPT3_CONFIG_PAGE_DEFAULT_TIMEOUT, config_page, |
|---|
| 1033 | + sizeof(*config_page)); |
|---|
| 1034 | + out: |
|---|
| 1035 | + return r; |
|---|
| 1036 | +} |
|---|
| 986 | 1037 | |
|---|
| 987 | 1038 | /** |
|---|
| 988 | 1039 | * mpt3sas_config_get_sas_device_pg0 - obtain sas device page 0 |
|---|