Hallo, im moment lese ich mich duch die Spezifikation von dem PCIe. Als ich über die Endpoints stolperte, sah ich das es zwei unterschiedliche gibt: native und legacy. Wo ist der Unterschied zwischen den beiden? Vielen Dank für die Antwort! mfg andreas
Andreas, Die PCI SIG möchten drei PCI Eigenschaften aufs Abstellgleis schicken: 1) I/O Space 2) Devices deren BAR Resources unterhalb 4 GB gelegt werden muessen bzw. dessen DMA Controller keine 64-Bit Adressen generieren können. 3) Unterstützung von PCI Lock Semantics Fällt dein Endpoint in einer dieser Kategorien, dann ist es ein Legacy Device sonst ein Full-Featured Device. Was aber nicht heisst, dass dein full-featured Device z.B. keine I/O Space unterstützen darf. Nur wenn du I/O space unterstützt, muessen diese Register auch über Memory Space (Memory Mapped I/O) erreichbar sein. Entweder innerhalb eines bestehenden Mem-Space BARS oder über einen getrennten Mem Space BAR. Bzgl. der 4 GB Anforderung, gilt das auch nur für prefetchable Mem Space. Nicht prefetchable Mem Space (FIFOs, Control Regs, Status Regs....) darf nach wie auf einer Plazierung < 4 GB ausgelegt sein. Es wird aber gefordert. dass alle Resourcen ohne "Side Effects" (eben alles ausser FIFOs, Cmd/Ctl Regs etc.) als prefetchable markiert sein muessen. Noch ein übrigens, Legacy in diesem Zusammenhang hat gar nichts mit Legacy Interrupts (emulierte INTA.. INTD) zu tun. Sowohl full-featured als auch Legacy Endpoints muessen auch Legacy Interrupts unterstützen (natürlich nur falls Interrupts in deinem Design überhaupt verwendet werden). MSI(-X) muessen auch beide unterstützen (wieder, falls Ints überhaupt verwendet werden natürlich)
entschuldigt wenn ich mich da einmische, aber müssen bei native PCI-Express wirklich auch die alten INT-Signale unterstützt werden? so weit ich die Spec verstanden hab darf man auch nur MSI und/oder MSI-X anbieten
Erik, die Legacy INT-__Signale__ werden natürlich nicht unterstützt. PCIe kennt keine Sideband Signale (ausser im PC Umfeld, WAKE, SMBUS, JTAG etc.). Für die Legacy Interrupts INTA/INTB/INTC/INTD gibt es insgesamt acht Messages, je ein Assert_INTx sowie Deassert_INTx. Der Empfänger eines Interrupt Messages muss sich einen virtuellen Draht dazu "denken", der den aktuellen Zustand eines equivalenten INTx-Signals nachbildet. Der Legacy Interrupt Enable Mechanismus über das PCI Command Register is auch gleich geblieben. Zum zweiten Teil deiner Frage, ja diese Messages muessen unbedingt von Legacy und nicht-legacy interrupt-fähigen Endpoints unterstützt werden. Windows XP z.B. kann gar kein MSI. Ein Endpoint, der gar keine INTx Messages generieren kann, würde unter XP nicht funktionieren. Ein Win-XP Gerätetreiber wird daher immer nur Legacy Interrupts aktivieren. Charles
Hallo Charles, Danke für Deine Antwort. Das ältere Windowse kein MSI(-X) unterstützen ist mir bewusst, meine Frage zielte eher darauf ab ob die PCI(-Express)-Spezifikation explizit verlangt das ein interrupt-fähiger Endpoint auch immer die alten INT#-Signale (bei Express natürlich INT#-Messages) unterstützen muss. Ich habe so etwas nicht in den Spezifikationen gefunden. Gerade wenn man an AHCI oder xHCI denkt, wo jeweils die Unterstützung von MSI und/oder MSI-X ausdrücklich verlangt wird, könnte man meinen das die alten INT#-Mechanismen aussterben sollen. Grüße Erik
Hallo, zu der 4GB-Grenze muss noch gesagt werden das non-prefetchable Speicher gar nicht über der 4GB-Grenze liegen kann weil PCI-Bridges non-prefetchable Speicher nur unterhalb der 4GB-Grenze routen können. Nur für prefetchable Speicher kann man in einer PCI-2-PCI-Bridge auch einen Speicherbereich eintragen der oberhalb der 4GB-Grenze liegt. Man könnte zwar ein PCI-Device bauen das für non-prefetchable Speicher so einen Doppel-BAR hat der auch Adressen über der 4GB-Grenze erlaubt (das ist in der PCI-Spezifikation nirgends explizit verboten) aber nutzen kann man das nicht wirklich (also man kann nur Adressen unter der 4GB-Grenze eintragen) weil die PCI-Bridges das eben nicht unterstützen. Grüße Erik
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.