scif_sas_task_request.c revision 230843
1191739Sobrien/*- 2191739Sobrien * This file is provided under a dual BSD/GPLv2 license. When using or 3191739Sobrien * redistributing this file, you may do so under either license. 4191739Sobrien * 5191739Sobrien * GPL LICENSE SUMMARY 6191739Sobrien * 7191739Sobrien * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8191739Sobrien * 9191739Sobrien * This program is free software; you can redistribute it and/or modify 10191739Sobrien * it under the terms of version 2 of the GNU General Public License as 11191739Sobrien * published by the Free Software Foundation. 12191739Sobrien * 13191739Sobrien * This program is distributed in the hope that it will be useful, but 14191739Sobrien * WITHOUT ANY WARRANTY; without even the implied warranty of 15191739Sobrien * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16191739Sobrien * General Public License for more details. 17191739Sobrien * 18191739Sobrien * You should have received a copy of the GNU General Public License 19191739Sobrien * along with this program; if not, write to the Free Software 20191739Sobrien * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21191739Sobrien * The full GNU General Public License is included in this distribution 22191739Sobrien * in the file called LICENSE.GPL. 23191739Sobrien * 24191739Sobrien * BSD LICENSE 25191739Sobrien * 26191739Sobrien * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27226048Sobrien * All rights reserved. 28226048Sobrien * 29191739Sobrien * Redistribution and use in source and binary forms, with or without 30226048Sobrien * modification, are permitted provided that the following conditions 31226048Sobrien * are met: 32226048Sobrien * 33191739Sobrien * * Redistributions of source code must retain the above copyright 34191739Sobrien * notice, this list of conditions and the following disclaimer. 35191739Sobrien * * Redistributions in binary form must reproduce the above copyright 36191739Sobrien * notice, this list of conditions and the following disclaimer in 37191739Sobrien * the documentation and/or other materials provided with the 38267843Sdelphij * distribution. 39191739Sobrien * 40191739Sobrien * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 41191739Sobrien * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 42191739Sobrien * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 43191739Sobrien * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 44191739Sobrien * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45191739Sobrien * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 46191739Sobrien * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 47191739Sobrien * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 48191739Sobrien * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 49191739Sobrien * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 50226048Sobrien * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 51226048Sobrien */ 52226048Sobrien 53191739Sobrien#include <sys/cdefs.h> 54191739Sobrien__FBSDID("$FreeBSD$"); 55191739Sobrien 56191739Sobrien/** 57191739Sobrien * @file 58191739Sobrien * 59191739Sobrien * @brief This file contains the task management request object 60191739Sobrien * (SCIF_SAS_TASK_REQUEST) method implementations. 61192348Sdelphij */ 62191739Sobrien 63191739Sobrien 64191739Sobrien#include <dev/isci/scil/intel_sas.h> 65191739Sobrien 66191739Sobrien#include <dev/isci/scil/scic_task_request.h> 67191739Sobrien#include <dev/isci/scil/scic_remote_device.h> 68191739Sobrien#include <dev/isci/scil/scic_user_callback.h> 69191739Sobrien#include <dev/isci/scil/scic_controller.h> 70191739Sobrien#include <dev/isci/scil/scif_user_callback.h> 71191739Sobrien 72191739Sobrien#include <dev/isci/scil/scif_sas_request.h> 73226048Sobrien#include <dev/isci/scil/scif_sas_task_request.h> 74226048Sobrien#include <dev/isci/scil/scif_sas_stp_task_request.h> 75226048Sobrien#include <dev/isci/scil/scif_sas_logger.h> 76226048Sobrien#include <dev/isci/scil/scif_sas_controller.h> 77191739Sobrien#include <dev/isci/scil/scif_sas_domain.h> 78234250Sobrien#include <dev/isci/scil/scif_sas_remote_device.h> 79191739Sobrien#include <dev/isci/scil/scif_sas_smp_io_request.h> 80191739Sobrien 81191739Sobrien//****************************************************************************** 82226048Sobrien//* P U B L I C M E T H O D S 83226048Sobrien//****************************************************************************** 84191739Sobrien 85191739SobrienU32 scif_task_request_get_object_size( 86226048Sobrien void 87226048Sobrien) 88191739Sobrien{ 89191739Sobrien return (sizeof(SCIF_SAS_TASK_REQUEST_T) + scic_task_request_get_object_size()); 90191739Sobrien} 91191739Sobrien 92191739Sobrien// --------------------------------------------------------------------------- 93191739Sobrien 94191739SobrienU8 scif_sas_task_request_get_function( 95191739Sobrien SCIF_SAS_TASK_REQUEST_T *fw_task 96226048Sobrien) 97226048Sobrien{ 98191739Sobrien return fw_task->function; 99191739Sobrien} 100226048Sobrien 101226048Sobrien// --------------------------------------------------------------------------- 102191739Sobrien 103191739Sobrienstatic 104191739SobrienSCI_STATUS scif_sas_task_request_generic_construct( 105191739Sobrien SCI_CONTROLLER_HANDLE_T scif_controller, 106191739Sobrien SCI_REMOTE_DEVICE_HANDLE_T scif_remote_device, 107191739Sobrien U16 io_tag, 108191739Sobrien void * user_task_request_object, 109191739Sobrien void * task_request_memory, 110191739Sobrien SCI_TASK_REQUEST_HANDLE_T * scif_task_request, 111191739Sobrien U8 task_function 112226048Sobrien) 113226048Sobrien{ 114191739Sobrien SCI_STATUS status; 115191739Sobrien SCIF_SAS_CONTROLLER_T * fw_controller = (SCIF_SAS_CONTROLLER_T*) 116226048Sobrien scif_controller; 117226048Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 118191739Sobrien task_request_memory; 119191739Sobrien SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T*) 120191739Sobrien scif_remote_device; 121191739Sobrien U8 * core_request_memory; 122191739Sobrien 123191739Sobrien SCIF_LOG_TRACE(( 124191739Sobrien sci_base_object_get_logger(fw_controller), 125191739Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 126191739Sobrien "scif_task_request_construct(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x) enter\n", 127191739Sobrien scif_controller, scif_remote_device, io_tag, user_task_request_object, 128191739Sobrien task_request_memory, scif_task_request 129226048Sobrien )); 130226048Sobrien 131226048Sobrien // Initialize the user's handle to the framework task request. 132226048Sobrien *scif_task_request = fw_task; 133226048Sobrien 134226048Sobrien // initialize affected request count 135226048Sobrien fw_task->affected_request_count = 0; 136226048Sobrien fw_task->io_tag_to_manage = SCI_CONTROLLER_INVALID_IO_TAG; 137226048Sobrien fw_task->function = task_function; 138226048Sobrien 139226048Sobrien if (task_function == SCI_SAS_HARD_RESET ) 140226048Sobrien { 141191739Sobrien if (fw_device->containing_device != NULL ) 142191739Sobrien {// Target Reset is for an expander attached device, 143191739Sobrien // go down to construct smp Phy Control request. 144191739Sobrien scif_sas_smp_request_construct_phy_control( 145191739Sobrien fw_controller, 146226048Sobrien fw_device->containing_device, 147226048Sobrien PHY_OPERATION_HARD_RESET, 148226048Sobrien fw_device->expander_phy_identifier, 149226048Sobrien user_task_request_object, 150226048Sobrien task_request_memory 151226048Sobrien ); 152226048Sobrien } 153226048Sobrien else 154226048Sobrien { 155226048Sobrien scif_sas_request_construct( 156226048Sobrien &fw_task->parent, 157226048Sobrien fw_device, 158226048Sobrien sci_base_object_get_logger(fw_controller), 159226048Sobrien scif_sas_task_request_state_table 160226048Sobrien ); 161226048Sobrien 162226048Sobrien // If target reset is for a DA device, don't build task at all. 163226048Sobrien // Just set object association. 164191739Sobrien sci_object_set_association(fw_task, user_task_request_object); 165191739Sobrien } 166191739Sobrien 167191739Sobrien return SCI_SUCCESS; 168191739Sobrien } 169191739Sobrien 170191739Sobrien // Construct the parent object first in order to ensure logging can 171191739Sobrien // function. 172191739Sobrien scif_sas_request_construct( 173191739Sobrien &fw_task->parent, 174191739Sobrien fw_device, 175191739Sobrien sci_base_object_get_logger(fw_controller), 176191739Sobrien scif_sas_task_request_state_table 177191739Sobrien ); 178191739Sobrien 179191739Sobrien core_request_memory = (U8 *)task_request_memory + sizeof(SCIF_SAS_TASK_REQUEST_T); 180191739Sobrien 181191739Sobrien status = scic_task_request_construct( 182226048Sobrien fw_controller->core_object, 183191739Sobrien fw_device->core_object, 184191739Sobrien io_tag, 185191739Sobrien fw_task, 186226048Sobrien core_request_memory, 187191739Sobrien &fw_task->parent.core_object 188191739Sobrien ); 189191739Sobrien 190226048Sobrien if (status == SCI_SUCCESS) 191191739Sobrien { 192191739Sobrien SMP_DISCOVER_RESPONSE_PROTOCOLS_T dev_protocols; 193191739Sobrien 194191739Sobrien // These associations must be set early for the core io request 195191739Sobrien // object construction to complete correctly as there will be 196191739Sobrien // callbacks into the user driver framework during core construction 197191739Sobrien sci_object_set_association(fw_task, user_task_request_object); 198191739Sobrien sci_object_set_association(fw_task->parent.core_object, fw_task); 199191739Sobrien 200191739Sobrien // Perform protocol specific core IO request construction. 201191739Sobrien scic_remote_device_get_protocols(fw_device->core_object, &dev_protocols); 202191739Sobrien if (dev_protocols.u.bits.attached_ssp_target) 203191739Sobrien status = scic_task_request_construct_ssp(fw_task->parent.core_object); 204191739Sobrien else if (dev_protocols.u.bits.attached_stp_target) 205191739Sobrien status = scif_sas_stp_task_request_construct(fw_task); 206191739Sobrien else 207191739Sobrien status = SCI_FAILURE_UNSUPPORTED_PROTOCOL; 208191739Sobrien 209191739Sobrien if (status == SCI_SUCCESS) 210191739Sobrien { 211191739Sobrien sci_base_state_machine_logger_initialize( 212191739Sobrien &fw_task->parent.parent.state_machine_logger, 213191739Sobrien &fw_task->parent.parent.state_machine, 214191739Sobrien &fw_task->parent.parent.parent, 215191739Sobrien scif_cb_logger_log_states, 216191739Sobrien "SCIF_SAS_TASK_REQUEST_T", "base_state_machine", 217191739Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT 218191739Sobrien ); 219191739Sobrien } 220191739Sobrien else 221191739Sobrien { 222191739Sobrien SCIF_LOG_WARNING(( 223226048Sobrien sci_base_object_get_logger(fw_task), 224226048Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 225226048Sobrien "Device:0x%x TaskRequest:0x%x Function:0x%x construct failed\n", 226191739Sobrien fw_device, fw_task, scif_sas_task_request_get_function(fw_task) 227191739Sobrien )); 228191739Sobrien } 229226048Sobrien } 230226048Sobrien 231226048Sobrien return status; 232191739Sobrien} 233191739Sobrien 234191739Sobrien// --------------------------------------------------------------------------- 235191739Sobrien 236191739SobrienSCI_STATUS scif_sas_internal_task_request_construct( 237191739Sobrien SCI_CONTROLLER_HANDLE_T scif_controller, 238191739Sobrien SCI_REMOTE_DEVICE_HANDLE_T scif_remote_device, 239191739Sobrien U16 io_tag, 240191739Sobrien void * task_request_memory, 241191739Sobrien SCI_TASK_REQUEST_HANDLE_T * scif_task_request, 242191739Sobrien U8 task_function 243191739Sobrien) 244191739Sobrien{ 245191739Sobrien SCI_STATUS status; 246191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task; 247191739Sobrien 248191739Sobrien status = scif_sas_task_request_generic_construct( 249191739Sobrien scif_controller, 250191739Sobrien scif_remote_device, 251191739Sobrien io_tag, 252191739Sobrien NULL, 253191739Sobrien task_request_memory, 254191739Sobrien scif_task_request, 255191739Sobrien task_function 256191739Sobrien ); 257191739Sobrien 258191739Sobrien fw_task = (SCIF_SAS_TASK_REQUEST_T *)task_request_memory; 259191739Sobrien 260191739Sobrien fw_task->parent.is_internal = TRUE; 261191739Sobrien 262191739Sobrien return status; 263191739Sobrien} 264192348Sdelphij 265226048Sobrien// --------------------------------------------------------------------------- 266226048Sobrien 267192348SdelphijSCI_STATUS scif_task_request_construct( 268192348Sdelphij SCI_CONTROLLER_HANDLE_T scif_controller, 269192348Sdelphij SCI_REMOTE_DEVICE_HANDLE_T scif_remote_device, 270267843Sdelphij U16 io_tag, 271267843Sdelphij void * user_task_request_object, 272226048Sobrien void * task_request_memory, 273267843Sdelphij SCI_TASK_REQUEST_HANDLE_T * scif_task_request 274192348Sdelphij) 275267843Sdelphij{ 276267843Sdelphij SCI_STATUS status; 277226048Sobrien U8 task_function = 278267843Sdelphij scif_cb_task_request_get_function(user_task_request_object); 279192348Sdelphij 280192348Sdelphij status = scif_sas_task_request_generic_construct( 281192348Sdelphij scif_controller, 282192348Sdelphij scif_remote_device, 283192348Sdelphij io_tag, 284192348Sdelphij user_task_request_object, 285192348Sdelphij task_request_memory, 286192348Sdelphij scif_task_request, 287192348Sdelphij task_function 288192348Sdelphij ); 289192348Sdelphij 290192348Sdelphij return status; 291192348Sdelphij} 292192348Sdelphij 293192348Sdelphij// --------------------------------------------------------------------------- 294192348Sdelphij 295192348Sdelphijvoid scif_sas_internal_task_request_destruct( 296192348Sdelphij SCIF_SAS_TASK_REQUEST_T * fw_internal_task 297192348Sdelphij) 298192348Sdelphij{ 299192348Sdelphij SCIF_SAS_CONTROLLER_T * fw_controller = 300192348Sdelphij fw_internal_task->parent.device->domain->controller; 301267843Sdelphij scif_sas_controller_free_internal_request(fw_controller, fw_internal_task); 302192348Sdelphij} 303192348Sdelphij 304192348Sdelphij// --------------------------------------------------------------------------- 305192348Sdelphij 306192348Sdelphijvoid scic_cb_task_request_complete( 307191739Sobrien SCI_CONTROLLER_HANDLE_T controller, 308192348Sdelphij SCI_REMOTE_DEVICE_HANDLE_T remote_device, 309191739Sobrien SCI_TASK_REQUEST_HANDLE_T task_request, 310192348Sdelphij SCI_TASK_STATUS completion_status 311192348Sdelphij) 312191739Sobrien{ 313192348Sdelphij SCIF_SAS_CONTROLLER_T * fw_controller = (SCIF_SAS_CONTROLLER_T*) 314191739Sobrien sci_object_get_association(controller); 315191739Sobrien SCIF_SAS_REMOTE_DEVICE_T * fw_device = (SCIF_SAS_REMOTE_DEVICE_T*) 316191739Sobrien sci_object_get_association(remote_device); 317191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 318226048Sobrien sci_object_get_association(task_request); 319226048Sobrien SCI_STATUS status; 320192348Sdelphij 321192348Sdelphij SCIF_LOG_TRACE(( 322192348Sdelphij sci_base_object_get_logger(fw_controller), 323191739Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 324192348Sdelphij "scic_cb_task_request_complete(0x%x, 0x%x, 0x%x, 0x%x) enter\n", 325192348Sdelphij controller, remote_device, task_request, completion_status 326192348Sdelphij )); 327192348Sdelphij 328192348Sdelphij status = fw_task->parent.state_handlers->complete_handler( 329192348Sdelphij &fw_task->parent.parent 330192348Sdelphij ); 331192348Sdelphij 332192348Sdelphij if (status == SCI_SUCCESS) 333191739Sobrien { 334192348Sdelphij if (fw_task->parent.protocol_complete_handler != NULL) 335192348Sdelphij { 336192348Sdelphij status = fw_task->parent.protocol_complete_handler( 337191739Sobrien fw_controller, fw_device, &fw_task->parent, (SCI_STATUS *)&completion_status 338191739Sobrien ); 339191739Sobrien } 340191739Sobrien 341192348Sdelphij if (status == SCI_SUCCESS) 342191739Sobrien { 343191739Sobrien SCIF_LOG_WARNING(( 344234250Sobrien sci_base_object_get_logger(fw_task), 345234250Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 346234250Sobrien "RemoteDevice:0x%x TaskRequest:0x%x Function:0x%x CompletionStatus:0x%x " 347234250Sobrien "completed\n", 348191739Sobrien fw_device, fw_task, 349191739Sobrien scif_sas_task_request_get_function(fw_task), 350191739Sobrien completion_status 351191739Sobrien )); 352191739Sobrien 353191739Sobrien // If this isn't an internal framework IO request, then simply pass the 354234250Sobrien // notification up to the SCIF user. Otherwise, immediately complete the 355234250Sobrien // task since there is no SCIF user to notify. 356234250Sobrien if (fw_task->parent.is_internal == FALSE) 357267843Sdelphij { 358234250Sobrien scif_cb_task_request_complete( 359234250Sobrien fw_controller, fw_device, fw_task, completion_status 360267843Sdelphij ); 361234250Sobrien } 362234250Sobrien else 363191739Sobrien { 364234250Sobrien scif_controller_complete_task( 365191739Sobrien fw_controller, 366191739Sobrien fw_device, 367191739Sobrien fw_task 368191739Sobrien ); 369191739Sobrien } 370191739Sobrien } 371191739Sobrien } 372192348Sdelphij} 373191739Sobrien 374191739Sobrien// --------------------------------------------------------------------------- 375191739Sobrien 376192348SdelphijU32 scic_cb_ssp_task_request_get_lun( 377192348Sdelphij void * scic_user_task_request 378191739Sobrien) 379191739Sobrien{ 380191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 381191739Sobrien scic_user_task_request; 382191739Sobrien 383192348Sdelphij fw_task->parent.lun = scif_cb_task_request_get_lun( 384226048Sobrien fw_task->parent.parent.parent.associated_object 385226048Sobrien ); 386192348Sdelphij 387226048Sobrien return fw_task->parent.lun; 388226048Sobrien} 389192348Sdelphij 390192348Sdelphij// --------------------------------------------------------------------------- 391192348Sdelphij 392192348SdelphijU8 scic_cb_ssp_task_request_get_function( 393192348Sdelphij void * scic_user_task_request 394226048Sobrien) 395226048Sobrien{ 396226048Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 397226048Sobrien scic_user_task_request; 398191739Sobrien 399191739Sobrien return scif_sas_task_request_get_function(fw_task); 400191739Sobrien} 401191739Sobrien 402191739Sobrien// --------------------------------------------------------------------------- 403192348Sdelphij 404191739SobrienU16 scic_cb_ssp_task_request_get_io_tag_to_manage( 405191739Sobrien void * scic_user_task_request 406191739Sobrien) 407191739Sobrien{ 408191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 409191739Sobrien scic_user_task_request; 410226048Sobrien 411191739Sobrien fw_task->io_tag_to_manage 412191739Sobrien = scif_cb_task_request_get_io_tag_to_manage( 413191739Sobrien fw_task->parent.parent.parent.associated_object 414191739Sobrien ); 415192348Sdelphij 416192348Sdelphij return fw_task->io_tag_to_manage; 417191739Sobrien} 418191739Sobrien 419191739Sobrien// --------------------------------------------------------------------------- 420191739Sobrien 421191739Sobrienvoid * scic_cb_ssp_task_request_get_response_data_address( 422192348Sdelphij void * scic_user_task_request 423191739Sobrien) 424191739Sobrien{ 425191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 426192348Sdelphij scic_user_task_request; 427226048Sobrien 428192348Sdelphij return scif_cb_task_request_get_response_data_address( 429192348Sdelphij fw_task->parent.parent.parent.associated_object 430192348Sdelphij ); 431234250Sobrien} 432234250Sobrien 433192348Sdelphij// --------------------------------------------------------------------------- 434192348Sdelphij 435192348SdelphijU32 scic_cb_ssp_task_request_get_response_data_length( 436192348Sdelphij void * scic_user_task_request 437192348Sdelphij) 438191739Sobrien{ 439191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task = (SCIF_SAS_TASK_REQUEST_T*) 440191739Sobrien scic_user_task_request; 441191739Sobrien 442192348Sdelphij return scif_cb_task_request_get_response_data_length( 443226048Sobrien fw_task->parent.parent.parent.associated_object 444191739Sobrien ); 445192348Sdelphij} 446192348Sdelphij 447191739Sobrien//****************************************************************************** 448191739Sobrien//* P R O T E C T E D M E T H O D S 449191739Sobrien//****************************************************************************** 450191739Sobrien 451191739Sobrien/** 452191739Sobrien * @brief This method performs functionality required after a task management 453191739Sobrien * operation (either a task management request or a silicon task 454191739Sobrien * termination) has finished. 455191739Sobrien * 456191739Sobrien * @param[in] fw_task This parameter specifies the request that has 457192348Sdelphij * the operation completing. 458191739Sobrien * 459192348Sdelphij * @return none 460267843Sdelphij */ 461267843Sdelphijvoid scif_sas_task_request_operation_complete( 462191739Sobrien SCIF_SAS_TASK_REQUEST_T * fw_task 463191739Sobrien) 464191739Sobrien{ 465191739Sobrien SCIF_LOG_TRACE(( 466191739Sobrien sci_base_object_get_logger(fw_task), 467191739Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 468191739Sobrien "scif_sas_task_request_operation_complete(0x%x) enter\n", 469191739Sobrien fw_task 470191739Sobrien )); 471267843Sdelphij 472267843Sdelphij fw_task->affected_request_count--; 473191739Sobrien 474191739Sobrien SCIF_LOG_INFO(( 475191739Sobrien sci_base_object_get_logger(fw_task), 476226048Sobrien SCIF_LOG_OBJECT_TASK_MANAGEMENT, 477191739Sobrien "TaskRequest:0x%x current affected request count:0x%x\n", 478267843Sdelphij fw_task, fw_task->affected_request_count 479267843Sdelphij )); 480267843Sdelphij} 481267843Sdelphij 482267843Sdelphij