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)