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.
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk