usbdPipeIO

Purpose

Initiates I/O process to and from a logical device.

Syntax

#include <usbdi.h>
USBstatus usbdPipeIO(handle, irp)
USBhandle handle;
PIRP irp;

Parameter

Item Description
handle Handle of open USB logical device that is returned by the USBD_OPEN_DEVICE fp_ioctl.
irp Pointer to an initialized I/O request packet (IRP) structure.

Description

The USB client driver uses this function to starts USB device I/O. Multiple IRPs for the same USB logical device might be grouped together and presented through one call to this function. The pipe handle in the IRP identifies the pipe and the type of data transfer to be started. The IRPs are enqueued to the logical USB device in the order that they are received from the client driver. The IRPs are posted in the order that they are processed by the pipe that might not be the order in which they were received. The function returns to the caller after the IRPs are enqueued to the pipe.

Note: The client is not allowed to change the configuration of the logical USB device. Therefore, certain commands sent to the default control pipe is rejected with a return code of the USBD_ERROR by the USB system driver.

This function is also called internally by the USB protocol driver during enumeration, topology discovery, and device configuration.

Upon receiving this call, the USB Protocol driver breaks down the received IRP into several page sized requests that are called Input/Output Blocks (IOB). It builds the IOBs based on the transfer type that is associated with the pipe. The transfer types such as control, bulk, isochronous, and interrupt are supported. It groups the IOBs and transfers them to adapter driver.

Execution Environment

This function might be called from the interrupt (USBDINTRLEVEL priority or lower) or process environment.

Return Values

Value Description
USBD_SUCCESS Success
All others Failure (no IRPs delivered)