<!--
{
  "availability" : [
    "DriverKit: -"
  ],
  "documentType" : "symbol",
  "framework" : "SCSIControllerDriverKit",
  "identifier" : "/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserStartController",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "SCSIControllerDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserSCSIParallelInterfaceController@F@UserStartController#"
  },
  "title" : "UserStartController"
}
-->

# UserStartController

Starts the controller in response to a call from the framework.

```
virtual kern_return_t UserStartController();
```

## Return Value

A value that indicates the result of initialization. <doc://com.apple.documentation/documentation/DriverKit/kIOReturnSuccess> indicates success. For error definitions, see <doc://com.apple.documentation/documentation/iokit/iokit_constants>.

## Discussion

The framework always calls [`UserStartController`](/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserStartController) before sending any requests to the driver for execution. The framework calls this method after [`UserInitializeController`](/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserInitializeController) to start the services that the specific host bus adapter (HBA) dext driver provides. After completing this call, all services provided by the HBA driver are available to the client.

The following sample implementation of [`UserStartController`](/documentation/SCSIControllerDriverKit/IOUserSCSIParallelInterfaceController/UserStartController) sets its local power state to <doc://com.apple.documentation/documentation/DriverKit/kIOServicePowerCapabilityOn>, then calls a hypothetical `EnableReplyInterrupt()` convenience function. Next, it enables the interrupt dispatch source, and returns <doc://com.apple.documentation/documentation/DriverKit/kIOReturnSuccess>. Signaling success like this indicates to the kernel that the dext is now up and ready to serve I/O.

```objc
kern_return_t
IMPL ( ExampleSCSIDext, UserStartController )
{
    
    kern_return_t ret = kIOReturnError;
    
    ivars->fCurrentPowerState = kIOServicePowerCapabilityOn;

    // Enable interrupts on the hardware
    EnableReplyInterrupt ( );
    
    // Enable interrupt event source
    ret = ivars->fIntSource->SetEnable ( true );
    __Require ( ( kIOReturnSuccess == ret ), Exit );

    …
}
```

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)