PCIe-Endpunkt für Systemspeicher / Endpunkttransaktion

535
Abhinav kumar

Ich habe PCIe Endpoint & Root Complex wird PC sein, auf dem linux läuft. Jetzt möchte ich einige Bytes (z. B. 4 Bytes) von EP an Systemspeicher (RC) unter Verwendung von PCIe-Speicherleseanforderung (TLP) senden. Beispiel für PCIe-Speicher TLP.

Speicheranforderung TLP


Um dies zu senden, muss ein EP die Adresse des Systemspeichers kennen. Soweit ich weiß, wird RC mit dem Systemspeicher verbunden, so dass jede Transaktion, die auf RC abzielt, auf den Systemspeicher abzielt, sodass ein EP den Adressbereich von RC kennen sollte. Hier ist das Beispielbild:

Transaktion "EP in Systemspeicher"

Meine Fragen:

  1. Wie kennt ein EP die Adresse des Systemspeichers? Ist RC BAR dem Systemspeicher zugeordnet? Wenn ja, kann ein EP auf die RC BAR zugreifen? Wenn ja, wie?

  2. Wenn ein EP mit einem anderen EP kommunizieren möchte, sollte es die Zieladresse des EP BAR wissen. Wie kennt ein EP die Adresse eines anderen EP?

    Beispielbild:EP zu EP Memory Transaction

  3. Gibt es einen Linux-Code / Treiber, den ich für EP an Systemspeicher / eine andere EP-Kommunikation beziehen könnte?


Vielen Dank für jede Hilfe.

0
Hast du das nicht schon einmal gefragt? Zumindest erinnere ich mich an eine sehr ähnliche Frage. Die Antwort ist immer noch: Sie senden EP-Anfragen nicht einfach "in den Speicher". Diese Anfrage hat einen bestimmten Zweck. Sie müssen uns sagen, was der Zweck ist. Normalerweise wird ein Treiber auf der PC-Seite verwendet. Dieser Treiber reserviert Speicher als Kommunikationsbereich und teilt der Hardware die physikalische Adresse des Speichers für DMA usw. mit. Nein, die BAR wird niemals dem PC-Speicher zugeordnet . dirkt vor 5 Jahren 0
Vielen Dank für die Info, dirkt. Abhinav kumar vor 5 Jahren 0
Ja, die Frage ist sehr ähnlich, aber diese Frage ist ausführlicher. Der Zweck ist nur die Datenübertragung vom EP zum PC (RC). Bedeutet das also, dass der RC-Treiber auf Linux-Seite ein API liefert, um die physische Adresse des DMA-Speichers zu erhalten, der von einer EP verwendet werden könnte? Wenn ja, könnten Sie mir helfen, diese API zu finden? Sorry, ich bin nur ein Anfänger in Linux. Abhinav kumar vor 5 Jahren 0
Sie können nicht "nur Daten übertragen". Wenn Sie "nur Daten übertragen wollen", legen Sie die Daten irgendwo in den Adressbereich der BARs und lassen Sie den * PC * eine Lese- / Schreibanforderung an den Endpunkt ausgeben. Dadurch werden Daten von / zu Ihrem Gerät übertragen. Das funktioniert auch ohne Treiber, bei IIRC irgendwo in / proc oder / sys gibt es eine "Datei", die die BAR-Bereiche darstellt. dirkt vor 5 Jahren 0
Vielen Dank, dirkt für die Antwort. Ich glaube, Sie haben mögliche Lösungen für eines meiner Probleme gefunden. Wie wird mit der zweiten Frage zur Kommunikation von EP zu EP verfahren? Wird es ungefähr so ​​sein: Daten irgendwo in den Adressbereich einer der BARs einer EP legen und dann auf eine andere EP übertragen, PC auf einem anderen Endpunkt bzw. BAR lesen / schreiben lassen? Abhinav kumar vor 5 Jahren 0

0 Antworten auf die Frage