struktur ISOCH_DESCRIPTOR (1394.h)

Struktur ISOCH_DESCRIPTOR menjelaskan buffer yang akan dilampirkan atau dirinci dari handel sumber daya, menggunakan permintaan REQUEST_ISOCH_ATTACH_BUFFERS dan REQUEST_ISOCH_DETACH_BUFFERS .

Sintaks

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;

Anggota

fulFlags

Menentukan berbagai bendera untuk deskriptor isochronous ini. Setiap buffer terlampir pada saluran memiliki deskriptor isoch terkait.

Sebelum menggunakan buffer tertentu untuk operasi I/O, pengontrol host memeriksa bendera di deskriptor isoch buffer untuk instruksi tentang cara menangani data. Dalam beberapa kasus, pengontrol host akan terus mengamati perilaku yang ditentukan oleh bendera ini selama operasi I/O dengan buffer berikutnya. Misalnya, jika bendera deskriptor isoch menunjukkan bahwa pengontrol host harus memfilter paket yang tidak memiliki nilai Sy tertentu yang dicatat dalam ulSynch, pengontrol host akan melanjutkan operasi pemfilteran ini dengan data di buffer yang mengikuti, bahkan jika deskriptor isoch yang terkait dengan buffer ini tidak memiliki set bendera yang sama.

Tabel berikut ini menjelaskan bendera yang bisa ditetapkan untuk anggota ini.

Bendera Transaksi Isochronous Deskripsi
DESCRIPTOR_SYNCH_ON_SY Dengar Dimulai dengan data dalam buffer saat ini, pengontrol host mengabaikan semua paket yang tidak berisi nilai Sy tertentu yang disematkan dalam paket isochronous. Nilai Sy ditentukan dalam ulSynch. Jika bendera DESCRIPTOR_USE_SY_TAG_IN_FIRST diatur, pengontrol host melanjutkan membaca semua paket setelah menemukan paket pertama dengan nilai Sy yang ditentukan dalam ulSynch. Jika bendera DESCRIPTOR_USE_SY_TAG_IN_FIRST tidak diatur, pengontrol host melanjutkan pemfilteran, membaca paket dengan nilai Sy yang ditunjukkan dan mengabaikan semua yang lain.
DESCRIPTOR_SYNCH_ON_TAG Dengar Dimulai dengan data dalam buffer saat ini, pengontrol host mengabaikan semua paket yang tidak berisi nilai tag tertentu yang disematkan dalam paket isochronous. Nilai tag ditentukan dalam ulTag. Jika bendera DESCRIPTOR_USE_SY_TAG_IN_FIRST diatur, pengontrol host melanjutkan membaca semua paket setelah menemukan paket pertama dengan nilai tag yang ditentukan dalam ulTag. Jika bendera DESCRIPTOR_USE_SY_TAG_IN_FIRST tidak diatur, pengontrol host melanjutkan pemfilteran, membaca paket dengan nilai tag yang ditunjukkan dan mengabaikan semua yang lain.
DESCRIPTOR_SYNCH_ON_TIME Dengar, Bicara Pengontrol host menunggu waktu siklus isochronous tertentu sebelum melanjutkan operasi. Waktu siklus ditentukan dalam anggota CycleTime . Dimulai dengan data dalam buffer saat ini, pengontrol host mengabaikan semua paket yang tidak berisi waktu siklus CycleTime. Setelah menemukan paket dengan waktu siklus yang ditunjukkan, pengontrol host melanjutkan pemrosesan semua paket.
DESCRIPTOR_USE_SY_TAG_IN_FIRST Dengar Pemfilteran pada anggota Sy atau Tag hanya terjadi sampai paket pertama yang cocok diterima. Bendera ini digunakan bersama dengan bendera DESCRIPTOR_SYNCH_ON_SY dan DESCRIPTOR_SYNCH_ON_TAG. Kedua bendera ini memulai operasi pemfilteran berdasarkan nilai dalam Sy atau Tag, kecuali DESCRIPTOR_USE_SY_TAG_IN_FIRST juga diatur, dalam hal ini bendera memulai sinkronisasi daripada operasi pemfilteran. Dalam operasi sinkronisasi ini, pengontrol host mengabaikan semua paket hingga menemukan paket dengan nilai Sy atau Tag yang tepat. Setelah menemukan paket dengan nilai Sy atau Tag yang ditunjukkan, pengontrol host melanjutkan pemrosesan semua paket.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION Dengar, Bicara Setelah pengontrol host menyelesaikan DMA-nya ke atau dari buffer ini, simpan waktu siklus di anggota CycleTime dari ISOCH_DESCRIPTOR.
DESCRIPTOR_PRIORITY_TIME_DELIVERY Berbicara Jika pengontrol host lokal belum siap untuk menulis, jangan coba lagi tulis nanti. (Perilaku default adalah mencoba kembali sampai pengontrol host siap.)
DESCRIPTOR_HEADER_SCATTER_GATHER Berbicara Pengontrol host memperlakukan data dalam buffer ini sebagai urutan header. Pengontrol host menambahkan header dari buffer ini ke setiap paket yang dirakitnya dari data di buffer berikutnya yang terpasang.

Mdl

Menentukan MDL yang mewakili buffer tempat data berada, atau akan dimuat.

ulLength

Menentukan panjang Mdl.

nMaxBytesPerFrame

Menentukan byte maksimum yang terkandung dalam setiap bingkai isochronous. Pada tulisan, data dalam buffer dibagi menjadi paket isochronous dengan ukuran ini.

ulSynch

Untuk permintaan IsochTalk, jika bendera DESCRIPTOR_SYNCH_ON_SY diatur, anggota ini menentukan bidang Sy dari paket keluar. Untuk permintaan REQUEST_ISOCH_LISTEN, jika bendera DESCRIPTOR_SYNCH_ON_SY diatur, anggota ini menentukan nilai yang akan cocok dengan pengontrol host terhadap bidang Sy di header paket isochronous.

ulTag

Untuk permintaan IsochTalk, anggota ini menentukan bidang Tag dari paket keluar. Untuk permintaan REQUEST_ISOCH_LISTEN, jika bendera DESCRIPTOR_SYNCH_ON_TAG diatur, anggota ini menentukan nilai yang akan cocok dengan pengontrol host terhadap bidang Tag di header paket isochronous.

CycleTime

Jika bendera DESCRIPTOR_SYNCH_ON_TIME diatur, anggota ini menentukan waktu siklus isochronous untuk disinkronkan. (Resolusi waktu adalah per siklus isochronous. Anggota CycleOffset dari waktu siklus tidak digunakan.) Jika bendera DESCRIPTOR_TIME_STAMP_ON_COMPLETION diatur, pengemudi bus mengisi anggota ini dengan waktu siklus isochronous pada penyelesaian operasi yang menggunakan buffer ini.

Callback

Arahkan ke rutinitas panggilan balik. Jika non-NULL, sopir bus memanggil rutinitas ini untuk menunjukkan bahwa buffer terpasang terkait siap untuk dilepas. Panggilan balik dijalankan di DISPATCH_LEVEL IRQL. Panggilan balik adalah jenis berikut:

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

Context1

Menentukan parameter pertama saat pengemudi bus memanggil rutinitas yang diteruskan di Callback.

Context2

Menentukan parameter kedua saat pengemudi bus memanggil rutinitas yang diteruskan di Callback.

status

Untuk permintaan REQUEST_ISOCH_ATTACH_BUFFERS , anggota ini menentukan status operasi lampirkan pada buffer ini. Jika terjadi kesalahan selama pemrosesan permintaan REQUEST_ISOCH_ATTACH_BUFFERS , driver bus mengisi anggota status dengan kode kesalahan yang sesuai.

Catatan Anggota status harus diinisialisasi untuk STATUS_SUCCESS sebelum permintaan REQUEST_ISOCH_ATTACH_BUFFERS dibuat.

DeviceReserved[8]

Dicadangkan.

BusReserved[8]

Dicadangkan.

PortReserved[16]

Dicadangkan.

Keterangan

Tidak semua bendera DESCRIPTOR_XXX didukung pada semua perangkat keras. Driver perangkat dapat menggunakan permintaan REQUEST_GET_LOCAL_HOST_INFO, dengan nLevel = GET_HOST_CAPABILITIES, untuk menentukan bendera DESCRIPTOR_XXX mana yang didukung. Pengemudi bus mengembalikan pointer ke struktur GET_LOCAL_HOST_INFO2, yang anggota HostCapabilities-nya berisi bendera yang menentukan bendera mana yang didukung pengontrol host. Tabel berikut mencantumkan bendera DESCRIPTOR_XXX mana yang memerlukan dukungan perangkat keras, dan bendera HostCapabilities yang sesuai yang harus diperiksa driver.

bendera DESCRIPTOR_XXX HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

Jika driver mengatur bendera DESCRIPTOR_HEADER_SCATTER_GATHER, pengontrol host menggabungkan data buffer yang ditentukan dalam Mdl dengan data buffer berikutnya yang terpasang. (Buffer berikutnya tidak terpengaruh.) Setiap bingkai buffer ditambahkan ke bingkai buffer berikutnya (dalam urutan data dalam buffer dibagi menjadi bingkai), dan dikirim sebagai data paket isochronous berikutnya. Jumlah bingkai setiap buffer harus cocok, atau pengemudi bus mengembalikan STATUS_INVALID_PARAMETER untuk permintaan REQUEST_ISOCH_ATTACH_BUFFER berikutnya.

Persyaratan

Persyaratan Nilai
Header 1394.h (termasuk 1394.h)

Lihat juga

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK