Compartir a través de


Identificadores de objeto SpbCx

En este tema se describen los identificadores de objeto definidos para la biblioteca de extensión de marco de SPB (SpbCx).

Además, el SerCx2 DDI usa dos de los tipos de identificadores de objetos genéricos, WDFDEVICE y WDFREQUEST, definidos por el marco de controlador de Kernel-Mode (KMDF). Para obtener más información sobre los tipos de identificadores de marco, vea Resumen de objetos de marco.

En este tema se describen los siguientes identificadores de objeto:

Encabezado: Spbcx.h

Identificador de objeto SPBREQUEST

Un identificador de objeto SPBREQUEST representa una solicitud de E/S que se emite a un dispositivo de destino en el bus.

DECLARE_HANDLE(SPBREQUEST)

La clase de objeto SPBREQUEST se deriva de la clase de objeto WDFREQUEST , que representa una solicitud de E/S enviada por el administrador de E/S. Por lo tanto, los métodos WdfRequestXxx que toman WDFREQUEST controlan valores como parámetros aceptan valores de identificador SPBREQUEST como valores de parámetro válidos. Para obtener más información sobre estos métodos, vea Objetos de solicitud de marco.

Sin embargo, algunos métodos spbCx y funciones de devolución de llamada requieren específicamente identificadores SPBREQUEST como parámetros. Para este parámetro, sustituir un identificador WDFREQUEST que no es también un identificador SPBREQUEST es un error.

Por ejemplo, el método SpbRequestGetTransferParameters toma un identificador SPBREQUEST como parámetro. Para proporcionar, para este parámetro, un identificador WDFREQUEST que no es también un identificador SPBREQUEST es un error. El motivo de este requisito es que un objeto SPBREQUEST debe almacenar información de estado adicional específica de SPB para admitir secuencias de transferencia de E/S. La clase de objeto base WDFREQUEST no proporciona esta compatibilidad.

Durante la inicialización del dispositivo, el controlador SPB puede asignar un contexto por solicitud a un identificador SPBREQUEST llamando al método SpbControllerSetRequestAttributes .

Identificador de objeto SPBTARGET

Un identificador de objeto SPBTARGET identifica una conexión lógica de un cliente (controlador periférico) a un puerto direccionable o dispositivo periférico en el bus.

DECLARE_HANDLE(SPBTARGET)

Para un bus I2C, un identificador SPBTARGET corresponde a una dirección de dispositivo específica.
Para un bus SPI, un identificador SPBTARGET corresponde a una línea de selección de dispositivo.

Normalmente, existe un objeto SPBTARGET desde el inicio de la devolución de llamada del evento EvtSpbTargetConnect hasta el final de la devolución de llamada de eventos EvtSpbTargetDisconnect correspondiente. Sin embargo, la duración del objeto SPBTARGET puede extenderse más allá de la segunda devolución de llamada si el controlador del controlador SPB toma una referencia adicional en el objeto SPBTARGET para evitar que el objeto desaparezca inesperadamente durante el procesamiento de una solicitud de E/S para el destino.

El controlador del controlador SPB realiza todas las operaciones específicas del hardware para un dispositivo de controlador SPB. Cuando un cliente envía una solicitud de IRP_MJ_CREATE para abrir una conexión a un destino en el bus, la extensión de marco de SPB (SpbCx), que administra la cola de E/S del controlador, pasa esta solicitud al controlador del controlador SPB llamando a la función de devolución de llamada EvtSpbTargetConnect de este controlador. Este parámetro Target de esta función es un identificador SPBTARGET . La función puede usar este identificador para recuperar información de recursos específica de la conexión (por ejemplo, la dirección del dispositivo) del administrador de PnP. Cuando el cliente envía una solicitud de IRP_MJ_CLOSE para cerrar la conexión, SpbCx pasa esta solicitud a la función de devolución de llamada EvtSpbTargetDisconnect del controlador SPB, que libera estos recursos.

acceso a Exclusive-Mode

Los clientes tienen el modo exclusivo para acceder a los dispositivos de destino. Solo un cliente puede tener una conexión a un dispositivo de destino determinado a la vez. SpbCx garantiza que solo existe un identificador SPBTARGET para una dirección de dispositivo de destino en el bus. Esta restricción es necesaria porque SpbCx no admite la intercalación de solicitudes de E/S enviadas por dos o más clientes a un dispositivo de destino. Si un dispositivo de destino debe poder recibir solicitudes de varios clientes, este dispositivo requiere un controlador MUX (independiente del controlador) que pueda intercalar correctamente las operaciones solicitadas.

Interoperabilidad con KMDF

Los métodos de compatibilidad del controlador SerCx2 y las funciones de devolución de llamada de eventos spbCx definidas por SpbCx usan identificadores SPBTARGET para representar conexiones abiertas a dispositivos de destino en el bus. Sin embargo, un controlador de controlador normalmente debe llamar a métodos KMDF que requieren controladores WDFFILEOBJECT, en lugar de controladores SPBTARGET , para designar dispositivos de destino.

Un objeto SPBTARGET es similar a un objeto WDFFILEOBJECT. Sin embargo, un objeto SPBTARGET contiene información adicional específica de SPB. Por ejemplo, durante el procesamiento de una solicitud de control de E /S de IOCTL_SPB_EXECUTE_SEQUENCE, el objeto SPBTARGET del dispositivo de destino realiza un seguimiento del estado de las transferencias en la secuencia de transferencia de E /S.

Para obtener el identificador WDFFILEOBJECT a un destino, el controlador SPB llama al método SpbTargetGetFileObject . Este método acepta, como parámetro de entrada, un identificador SPBTARGET en un dispositivo de destino abierto y devuelve el identificador WDFFILEOBJECT correspondiente a este destino.

De acuerdo con las convenciones de KMDF, el controlador del controlador SPB puede adjuntar su propio contexto al objeto SPBTARGET para un dispositivo de destino, y este contexto puede incluir funciones de devolución de llamada EvtCleanupCallback y EvtDestroyCallback asociadas. El controlador spb usa este contexto para realizar un seguimiento de la información específica del controlador y del dispositivo de destino. Además, este controlador puede crear objetos secundarios del objeto SPBTARGET , como temporizadores, DPC o, si es necesario, solicitudes de E/S y colas de E/S.