ISOCH_DESCRIPTOR-Struktur (1394.h)

Die ISOCH_DESCRIPTOR-Struktur beschreibt einen Puffer, der angefügt oder aus einem Ressourcenhandle mithilfe der REQUEST_ISOCH_ATTACH_BUFFERS - und REQUEST_ISOCH_DETACH_BUFFERS-Anforderungen angefügt werden soll.

Syntax

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;

Member

fulFlags

Gibt verschiedene Flags für diesen isochronen Deskriptor an. Jeder angefügte Puffer im Kanal verfügt über einen zugeordneten isoch-Deskriptor.

Bevor ein bestimmter Puffer für einen E/A-Vorgang verwendet wird, untersucht der Hostcontroller die Flags im isoch-Deskriptor des Puffers, um Anweisungen zur Behandlung der Daten zu erhalten. In einigen Fällen beobachtet der Hostcontroller weiterhin das von diesen Flags angegebene Verhalten bei E/A-Vorgängen mit nachfolgenden Puffern. Wenn für instance die Isoch-Deskriptorflags angeben, dass der Hostcontroller Pakete herausfiltern soll, die keinen bestimmten Sy-Wert in ulSynch aufgezeichnet haben, setzt der Hostcontroller diesen Filtervorgang mit den Daten in den folgenden Puffern fort, auch wenn für die diesen Puffern zugeordneten isoch-Deskriptoren nicht die gleichen Flags festgelegt sind.

In der folgenden Tabelle werden die Flags beschrieben, die diesem Member zugewiesen werden können.

Flag Isochrone Transaktion BESCHREIBUNG
DESCRIPTOR_SYNCH_ON_SY Lauschen Beginnend mit den Daten im aktuellen Puffer ignoriert der Hostcontroller alle Pakete, die keinen bestimmten Sy-Wert enthalten, der in das isochrone Paket eingebettet ist. Der Sy-Wert wird in ulSynch angegeben. Wenn das flag DESCRIPTOR_USE_SY_TAG_IN_FIRST festgelegt ist, setzt der Hostcontroller das Lesen aller Pakete fort, nachdem das erste Paket mit dem in ulSynch angegebenen Sy-Wert aufgetreten ist. Wenn das flag DESCRIPTOR_USE_SY_TAG_IN_FIRST nicht festgelegt ist, setzt der Hostcontroller die Filterung fort, liest Pakete mit dem angegebenen Sy-Wert und ignoriert alle anderen.
DESCRIPTOR_SYNCH_ON_TAG Lauschen Beginnend mit den Daten im aktuellen Puffer ignoriert der Hostcontroller alle Pakete, die keinen bestimmten Tagwert enthalten, der in das isochrone Paket eingebettet ist. Der Tagwert wird in ulTag angegeben. Wenn das flag DESCRIPTOR_USE_SY_TAG_IN_FIRST festgelegt ist, setzt der Hostcontroller das Lesen aller Pakete fort, nachdem das erste Paket mit dem in ulTag angegebenen Tagwert aufgetreten ist. Wenn das DESCRIPTOR_USE_SY_TAG_IN_FIRST-Flag nicht festgelegt ist, setzt der Hostcontroller die Filterung fort, liest Pakete mit dem angegebenen Tagwert und ignoriert alle anderen.
DESCRIPTOR_SYNCH_ON_TIME Zuhören, Sprechen Der Hostcontroller wartet auf eine bestimmte isochrone Zykluszeit, bevor der Vorgang fortgesetzt wird. Die Zykluszeit wird im CycleTime-Member angegeben. Beginnend mit den Daten im aktuellen Puffer ignoriert der Hostcontroller alle Pakete, die keine Zykluszeit von CycleTime enthalten. Nachdem ein Paket mit der angegebenen Zykluszeit gefunden wurde, setzt der Hostcontroller die Verarbeitung aller Pakete fort.
DESCRIPTOR_USE_SY_TAG_IN_FIRST Lauschen Das Filtern nach Sy - oder Tag-Membern erfolgt nur, bis das erste übereinstimmende Paket empfangen wird. Dieses Flag wird in Verbindung mit den Flags DESCRIPTOR_SYNCH_ON_SY und DESCRIPTOR_SYNCH_ON_TAG verwendet. Diese beiden Flags initiieren einen Filtervorgang basierend auf den Werten in Sy oder Tag, es sei denn, DESCRIPTOR_USE_SY_TAG_IN_FIRST ist ebenfalls festgelegt. In diesem Fall initiieren diese Flags eine Synchronisierung anstelle eines Filtervorgangs. Bei diesem Synchronisierungsvorgang ignoriert der Hostcontroller alle Pakete, bis ein Paket mit dem richtigen Sy - oder Tag-Wert ermittelt wird. Nach dem Ermitteln eines Pakets mit dem angegebenen Sy- oder Tag-Wert setzt der Hostcontroller die Verarbeitung aller Pakete fort.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION Zuhören, Sprechen Nachdem der Hostcontroller seinen DMA in oder aus diesem Puffer abgeschlossen hat, speichern Sie die Zykluszeit im CycleTime-Member des ISOCH_DESCRIPTOR.
DESCRIPTOR_PRIORITY_TIME_DELIVERY Sich unterhalten Wenn der lokale Hostcontroller nicht für einen Schreibvorgang bereit ist, wiederholen Sie den Schreibvorgang später nicht. (Das Standardverhalten besteht darin, einen Wiederholungsversuch auszuführen, bis der Hostcontroller bereit ist.)
DESCRIPTOR_HEADER_SCATTER_GATHER Sich unterhalten Der Hostcontroller behandelt die Daten in diesem Puffer als Sequenz von Headern. Der Hostcontroller stellt jedem Paket, das er aus den Daten im nächsten angefügten Puffer zusammenstellt, einen Header aus diesem Puffer vor.

Mdl

Gibt die MDL an, die einen Puffer darstellt, in dem die Daten enthalten sind oder sein werden.

ulLength

Gibt die Länge der Mdl an.

nMaxBytesPerFrame

Gibt die maximale Anzahl von Bytes an, die in jedem isochronen Frame enthalten sind. Bei Schreibvorgängen werden die Daten im Puffer in isochrone Pakete dieser Größe aufgeteilt.

ulSynch

Wenn für IsochTalk-Anforderungen das DESCRIPTOR_SYNCH_ON_SY-Flag festgelegt ist, gibt dieses Element das Feld Sy des ausgehenden Pakets an. Wenn bei REQUEST_ISOCH_LISTEN Anforderungen das flag DESCRIPTOR_SYNCH_ON_SY festgelegt ist, gibt dieses Element den Wert an, den der Hostcontroller mit dem Sy-Feld in isochronen Paketheadern abgleicht.

ulTag

Für IsochTalk-Anforderungen gibt dieses Element das Feld Tag des ausgehenden Pakets an. Wenn für REQUEST_ISOCH_LISTEN Anforderungen das flag DESCRIPTOR_SYNCH_ON_TAG festgelegt ist, gibt dieses Element den Wert an, den der Hostcontroller mit dem Feld Tag in isochronen Paketheadern abgleicht.

CycleTime

Wenn das flag DESCRIPTOR_SYNCH_ON_TIME festgelegt ist, gibt dieses Element die isochrone Zykluszeit an, mit der synchronisiert werden soll. (Die Zeitliche Auflösung ist pro isochronem Zyklus. Der CycleOffset-Member der Zykluszeit wird nicht verwendet.) Wenn das flag DESCRIPTOR_TIME_STAMP_ON_COMPLETION festgelegt ist, füllt der Bustreiber diesen Member mit der isochronen Zykluszeit nach Abschluss des Vorgangs, der diesen Puffer verwendet hat.

Callback

Zeiger auf eine Rückrufroutine. Wenn nicht NULL, ruft der Bustreiber diese Routine auf, um anzugeben, dass die zugeordneten angefügten Puffer bereit sind, um getrennt zu werden. Der Rückruf wird am IRQL-DISPATCH_LEVEL ausgeführt. Der Rückruf hat den folgenden Typ:

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

Context1

Gibt den ersten Parameter an, wenn der Bustreiber die im Rückruf übergebene Routine aufruft.

Context2

Gibt den zweiten Parameter an, wenn der Bustreiber die im Rückruf übergebene Routine aufruft.

status

Für REQUEST_ISOCH_ATTACH_BUFFERS Anforderungen gibt dieser Member die status des Anfügungsvorgangs für diesen Puffer an. Wenn während der Verarbeitung der REQUEST_ISOCH_ATTACH_BUFFERS-Anforderung ein Fehler auftritt, füllt der Bustreiber den status Member mit einem entsprechenden Fehlercode aus.

Hinweis Der status-Member muss in STATUS_SUCCESS initialisiert werden, bevor die REQUEST_ISOCH_ATTACH_BUFFERS-Anforderung gestellt wird.

DeviceReserved[8]

Reserviert.

BusReserved[8]

Reserviert.

PortReserved[16]

Reserviert.

Hinweise

Nicht alle DESCRIPTOR_XXX-Flags werden auf der gesamten Hardware unterstützt. Der Gerätetreiber kann die REQUEST_GET_LOCAL_HOST_INFO-Anforderung mit nLevel = GET_HOST_CAPABILITIES verwenden, um zu bestimmen, welche DESCRIPTOR_XXX Flags unterstützt werden. Der Bustreiber gibt einen Zeiger auf eine GET_LOCAL_HOST_INFO2-Struktur zurück, deren HostCapabilities-Member Flags enthält, die bestimmen, welche Flags der Hostcontroller unterstützt. In der folgenden Tabelle ist aufgeführt, welche DESCRIPTOR_XXX Flags Hardwareunterstützung erfordern, und das entsprechende HostCapabilities-Flag , das der Treiber überprüfen sollte.

DESCRIPTOR_XXX Flags HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

Wenn der Treiber das DESCRIPTOR_HEADER_SCATTER_GATHER-Flag festlegt, kombiniert der Hostcontroller die Daten des in Mdl angegebenen Puffers mit den Daten des nächsten angefügten Puffers. (Nachfolgende Puffer sind nicht betroffen.) Jeder Frame des Puffers wird einem Frame des nächsten Puffers vorangestellt (in der Reihenfolge, in der die Daten im Puffer in Frames aufgeteilt werden) und als Daten des nächsten isochronen Pakets gesendet. Die Anzahl der Frames jedes Puffers muss übereinstimmen, oder der Bustreiber gibt STATUS_INVALID_PARAMETER für die nächste REQUEST_ISOCH_ATTACH_BUFFER Anforderung zurück.

Anforderungen

Anforderung Wert
Header 1394.h (einschließlich 1394.h)

Weitere Informationen

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK