Condividi tramite


struttura ISOCH_DESCRIPTOR (1394.h)

La struttura ISOCH_DESCRIPTOR descrive un buffer da collegare o dettagliato da un handle di risorse, usando le richieste di REQUEST_ISOCH_ATTACH_BUFFERS e REQUEST_ISOCH_DETACH_BUFFERS .

Sintassi

typedef struct _ISOCH_DESCRIPTOR {
  ULONG                         fulFlags;
  PMDL                          Mdl;
  ULONG                         ulLength;
  ULONG                         nMaxBytesPerFrame;
  ULONG                         ulSynch;
  ULONG                         ulTag;
  CYCLE_TIME                    CycleTime;
  PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
  PVOID                         Context1;
  PVOID                         Context2;
  NTSTATUS                      status;
  ULONG_PTR                     DeviceReserved[8];
  ULONG_PTR                     BusReserved[8];
  ULONG_PTR                     PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;

Members

fulFlags

Specifica vari flag per questo descrittore isochronous. Ogni buffer collegato nel canale ha un descrittore isoch associato.

Prima di usare un buffer specifico per un'operazione di I/O, il controller host esamina i flag nel descrittore isoch del buffer per istruzioni su come gestire i dati. In alcuni casi, il controller host continuerà a osservare il comportamento specificato da questi flag durante le operazioni di I/O con buffer successivi. Ad esempio, se i flag di descrittore isoch indicano che il controller host deve filtrare i pacchetti che non hanno un determinato valore Sy registrato in ulSynch, il controller host continuerà questa operazione di filtro con i dati nei buffer che seguono, anche se i descrittori isoch associati a questi buffer non hanno gli stessi flag impostati.

La tabella seguente descrive i flag che possono essere assegnati a questo membro.

Contrassegno Transazione isochronous Descrizione
DESCRIPTOR_SYNCH_ON_SY Attesa A partire dai dati nel buffer corrente, il controller host ignora tutti i pacchetti che non contengono un determinato valore Sy incorporato nel pacchetto isochronous. Il valore Sy viene specificato in ulSynch. Se il flag di DESCRIPTOR_USE_SY_TAG_IN_FIRST è impostato, il controller host riprende la lettura di tutti i pacchetti dopo aver rilevato il primo pacchetto con il valore Sy specificato in ulSynch. Se il flag di DESCRIPTOR_USE_SY_TAG_IN_FIRST non è impostato, il controller host continua a filtrare, leggere i pacchetti con il valore Sy indicato e ignorare tutti gli altri.
DESCRIPTOR_SYNCH_ON_TAG Attesa A partire dai dati nel buffer corrente, il controller host ignora tutti i pacchetti che non contengono un valore di tag specifico incorporato nel pacchetto isochronous. Il valore del tag viene specificato in ulTag. Se il flag di DESCRIPTOR_USE_SY_TAG_IN_FIRST è impostato, il controller host riprende la lettura di tutti i pacchetti dopo aver rilevato il primo pacchetto con il valore di tag specificato in ulTag. Se il flag DESCRIPTOR_USE_SY_TAG_IN_FIRST non è impostato, il controller host continua a filtrare, leggere i pacchetti con il valore del tag indicato e ignorare tutti gli altri.
DESCRIPTOR_SYNCH_ON_TIME Ascolta, Parla Il controller host attende un determinato tempo di ciclo isocrono prima di continuare l'operazione. L'ora del ciclo viene specificata nel membro CycleTime . A partire dai dati nel buffer corrente, il controller host ignora tutti i pacchetti che non contengono un ciclo di tempo CycleTime. Dopo aver trovato un pacchetto con il tempo del ciclo indicato, il controller host riprende l'elaborazione di tutti i pacchetti.
DESCRIPTOR_USE_SY_TAG_IN_FIRST Attesa Il filtro sui membri Sy o Tag si verifica solo finché non viene ricevuto il primo pacchetto corrispondente. Questo flag viene usato insieme ai flag DESCRIPTOR_SYNCH_ON_SY e DESCRIPTOR_SYNCH_ON_TAG. Questi due flag avviano un'operazione di filtro in base ai valori in Sy o Tag, a meno che non sia impostata anche DESCRIPTOR_USE_SY_TAG_IN_FIRST, nel qual caso questi flag avviano una sincronizzazione anziché un'operazione di filtro. In questa operazione di sincronizzazione il controller host ignora tutti i pacchetti fino all'individuazione di un pacchetto con il valore Sy o Tag corretto. Dopo aver individuato un pacchetto con il valore Sy o Tag indicato, il controller host riprende l'elaborazione di tutti i pacchetti.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION Ascolta, Parla Una volta completato il controller host, il DMA viene archiviato da o verso questo buffer, archiviare il tempo di ciclo nel membro CycleTime del ISOCH_DESCRIPTOR.
DESCRIPTOR_PRIORITY_TIME_DELIVERY Parlare Se il controller host locale non è pronto per una scrittura, non ripetere la scrittura in un secondo momento. Il comportamento predefinito consiste nel ripetere i tentativi fino a quando il controller host non è pronto.
DESCRIPTOR_HEADER_SCATTER_GATHER Parlare Il controller host considera i dati in questo buffer come una sequenza di intestazioni. Il controller host prepende un'intestazione da questo buffer a ogni pacchetto che assembla dai dati nel buffer successivo collegato.

Mdl

Specifica l'MDL che rappresenta un buffer in cui i dati sono o saranno contenuti.

ulLength

Specifica la lunghezza del Mdl.

nMaxBytesPerFrame

Specifica i byte massimi contenuti in ogni frame isochronous. Nelle scritture, i dati nel buffer vengono suddivisi in pacchetti isochronous di queste dimensioni.

ulSynch

Per le richieste IsochTalk, se il flag di DESCRIPTOR_SYNCH_ON_SY è impostato, questo membro specifica il campo Sy del pacchetto in uscita. Per le richieste di REQUEST_ISOCH_LISTEN, se il flag di DESCRIPTOR_SYNCH_ON_SY è impostato, questo membro specifica il valore che il controller host corrisponderà al campo Sy nelle intestazioni del pacchetto isochronous.

ulTag

Per le richieste IsochTalk, questo membro specifica il campo Tag del pacchetto in uscita. Per le richieste di REQUEST_ISOCH_LISTEN, se il flag di DESCRIPTOR_SYNCH_ON_TAG è impostato, questo membro specifica il valore che il controller host corrisponderà al campo Tag nelle intestazioni di pacchetti isochronous.

CycleTime

Se il flag di DESCRIPTOR_SYNCH_ON_TIME è impostato, questo membro specifica il tempo di ciclo isochrono per la sincronizzazione. La risoluzione dei tempi è per ciclo isochrono. Il membro CycleOffset dell'ora del ciclo non viene usato. Se il flag di DESCRIPTOR_TIME_STAMP_ON_COMPLETION è impostato, il driver del bus riempie questo membro con il tempo di ciclo isochrono al completamento dell'operazione che ha usato questo buffer.

Callback

Puntatore a una routine di callback. Se non NULL, il driver del bus chiama questa routine per indicare che i buffer collegati associati sono pronti per essere scollegati. Il callback viene eseguito all'DISPATCH_LEVEL IRQL. Il callback è del tipo seguente:

void Callback(IN PVOID Context1, IN PVOID Context2);

Context1

Specifica il primo parametro quando il driver del bus chiama la routine passata in Callback.

Context2

Specifica il secondo parametro quando il driver del bus chiama la routine passata in Callback.

status

Per REQUEST_ISOCH_ATTACH_BUFFERS richieste, questo membro specifica lo stato dell'operazione di collegamento in questo buffer. Se si verifica un errore durante l'elaborazione della richiesta di REQUEST_ISOCH_ATTACH_BUFFERS , il driver del bus riempie il membro di stato con un codice di errore appropriato.

Nota Il membro di stato deve essere inizializzato in STATUS_SUCCESS prima dell'esecuzione della richiesta di REQUEST_ISOCH_ATTACH_BUFFERS .

DeviceReserved[8]

Riservato.

BusReserved[8]

Riservato.

PortReserved[16]

Riservato.

Commenti

Non tutti i flag di DESCRIPTOR_XXX sono supportati su tutti gli hardware. Il driver di dispositivo può usare la richiesta di REQUEST_GET_LOCAL_HOST_INFO, con nLevel = GET_HOST_CAPABILITIES, per determinare quali flag DESCRIPTOR_XXX sono supportati. Il driver del bus restituisce un puntatore a una struttura GET_LOCAL_HOST_INFO2, il cui membro HostCapabilities contiene flag che determinano quali flag supporta il controller host. Nella tabella seguente sono elencati i flag di DESCRIPTOR_XXX che richiedono il supporto hardware e il flag HostCapabilities corrispondente deve controllare il driver.

flag DESCRIPTOR_XXX HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

Se il driver imposta il flag di DESCRIPTOR_HEADER_SCATTER_GATHER, il controller host combina i dati del buffer specificato in Mdl con i dati del buffer successivo collegato. I buffer successivi non sono interessati. Ogni frame del buffer viene preceduto da un frame del buffer successivo (nell'ordine in cui i dati nel buffer vengono suddivisi in frame) e inviati come dati del pacchetto isocrono successivo. Il numero di fotogrammi di ogni buffer deve corrispondere o il driver del bus restituisce STATUS_INVALID_PARAMETER per la richiesta di REQUEST_ISOCH_ATTACH_BUFFER successiva.

Requisiti

Requisito Valore
Intestazione 1394.h (include 1394.h)

Vedi anche

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK