aktifkan / nonaktifkan interupsi PCI

8

Saya menerapkan driver PCIe, dan saya ingin memahami pada level apa interupsi dapat atau harus diaktifkan / dinonaktifkan. Saya sengaja tidak menentukan OS, karena saya berasumsi itu harus relevan untuk platform apa pun. Yang saya maksud dengan level adalah sebagai berikut:

  • Kerangka kerja penanganan OS yang spesifik
  • Interupsi dapat dinonaktifkan atau diaktifkan di register ruang konfigurasi PCI / PCIe, mis. Register PERINTAH
  • Interupsi juga dapat ditutup pada level perangkat, misalnya kita dapat mengkonfigurasi perangkat tidak memicu interupsi tertentu ke host

Saya mengerti bahwa apa pun jenis interupsi yang digunakan pada PCIe (emulasi INTx, MSI atau MSI-X), itu harus dikirim ke OS host.

Jadi pertanyaan saya adalah - apakah kita benar-benar harus mengaktifkan atau menonaktifkan interupsi pada setiap layer, atau itu hanya cukup di dekat perangkat keras, misalnya dalam register PCI yang relevan?

Menandai
sumber
1
Pada driver Windows KMDF Anda tentukan dalam file .inf driver apa jenis interupsi untuk digunakan (MSI vs INTx vs MSI-x) dan kerangka kerja driver akan dengan benar mengkonfigurasi ruang konfigurasi PCIe itu sendiri ketika memuat. Saya tidak tahu tentang OS lain, tetapi karena .inf adalah Windows spesifik, saya pikir itu mungkin tergantung pada OS.
Tom Carpenter
2
Anda biasanya harus mengaktifkannya sepenuhnya dengan memberikan konfigurasi untuk apa yang harus dilakukan dengan interupsi. Setelah selesai, penonaktifan dilakukan hanya pada CPU untuk periode singkat komputasi tanpa gangguan, hingga Anda mengonfigurasi perangkat (mis. Untuk menghemat daya)
pjc50
1
JIKA Anda menggunakan linux, dapatkah Anda menggunakan kerangka DMA untuk aplikasi Anda? Sangat bagus, Anda membuat transaksi, dan kembali dengan batas waktu opsional ketika transaksi selesai - Anda tidak perlu menipu dengan interupsi yang sebenarnya
johnnymopo
@ pjc50, jika driver memilih untuk menggunakan jenis interupsi tertentu, misalnya INTx, apakah ia harus menonaktifkan MSI / MSI-X mengganggu pengiriman melalui register pci MSI_CAP? (Dan sebaliknya - nonaktifkan INTx saat menggunakan MSI)
Tandai

Jawaban:

1

Sistem operasi umumnya mengeluh keras tentang gangguan yang tidak terduga, karena ini adalah kesalahan pemrograman yang mudah terdeteksi pada driver.

Biasanya, perangkat keras Anda akan mulai dalam keadaan yang cukup lembam setelah mengatur ulang di mana ia menunggu untuk dikonfigurasi. Dalam keadaan ini, tidak ada cara yang berarti untuk menghasilkan interupsi, karena belum ada pemetaan yang ditetapkan dan Anda tidak tahu interupsi mana.

Selama konfigurasi, pemetaan interupsi muncul, dan kartu diberi tahu jalur interupsi mana yang harus digunakan (INTA..INTD sebagai legacy PCI, atau MSI / MSI-X), tetapi masih belum ada driver untuk menangani interupsi. Linux memiliki pengendali default di sini yang mengeluh ke log sistem dan kemudian menonaktifkan sumber interupsi, karena peranti kerasnya kelihatannya rusak (yaitu secara default, semua interupsi diaktifkan, tetapi hanya mereka yang penangannya terdaftar diharapkan benar-benar terjadi) .

Pengemudi akhirnya mendaftarkan penangan interupsi dan mengaktifkan interupsi yang diinginkannya. Jika pengemudi tidak lagi tertarik pada kondisi tertentu, ia perlu menonaktifkan interupsi pada perangkat, karena di situlah penyebab interupsi spesifik perangkat ditutup - lapisan bawah hanya tahu bahwa "sesuatu terjadi".

Simon Richter
sumber