Transakcja punktu końcowego PCIe do pamięci systemowej / punktu końcowego


1

Mam PCIe Endpoint & Root Complex na PC z linuksem. Teraz chcę wysłać kilka bajtów (powiedzmy 4 bajty) z EP do pamięci systemowej (RC) za pomocą żądania odczytu pamięci PCIe (TLP) Przykład TLP pamięci PCIe.

Żądanie pamięci TLP


Aby wysłać to, EP musi znać adres pamięci systemowej. O ile rozumiem, RC będzie podłączone do pamięci systemowej, więc każda transakcja ukierunkowana na RC będzie dotyczyła pamięci systemowej, więc EP powinien znać zakres adresów RC. Oto przykładowy obraz:

Transakcja z EP do pamięci systemowej

Moje pytania:

  1. Skąd PE zna adres pamięci systemowej? Czy RC BAR jest mapowany do pamięci systemowej? Jeśli tak, czy EP może uzyskać dostęp do RC BAR? Jeśli tak to jak?

  2. Podobnie, gdy EP chce komunikować się z inną EP, powinien znać docelowy adres EP BAR. Więc skąd EP zna adres innej EP?

    Przykładowy obraz:Transakcja z pamięci EP na EP

  3. Czy jest jakiś kod / sterownik linux, który mógłbym odnieść do EP-ki do pamięci systemowej / innej komunikacji EP?


Wielkie dzięki za wszelką pomoc.


Nie pytałeś o to wcześniej? Przynajmniej pamiętam bardzo podobne pytanie. Odpowiedź jest nadal: nie wysyłasz tylko żądań EP „do odczytu pamięci”. To żądanie ma jakiś cel. Musisz nam powiedzieć, jaki jest cel. Zwykle celem będzie angażowanie sterownika po stronie komputera, a ten sterownik zarezerwuje pamięć jako obszar komunikacji i poinformuje sprzęt o fizycznym adresie pamięci dla DMA itp. I nie, BAR nigdy nie jest mapowany na pamięć komputera .
reż

Tak, pytanie jest bardzo podobne, ale to jest bardziej rozbudowane. Celem jest po prostu transfer danych z EP na PC (RC). Czy to oznacza, że ​​sterownik RC po stronie linuksa zapewni interfejs API do uzyskania fizycznego adresu pamięci dla DMA, który mógłby być wykorzystany przez EP? Jeśli tak, czy możesz mi pomóc zlokalizować ten interfejs? Przepraszam, jestem tylko początkującym w systemie Linux.
Abhinav kumar

Nie możesz „po prostu przesłać danych”. Jeśli „po prostu chcesz zrobić transfer danych”, umieścić dane gdzieś w przedziale adres barów i mają PC wydać odczytu / zapisu żądania do punktu końcowego. Spowoduje to przesłanie danych z / do twojego urządzenia. Działa to nawet bez sterownika, IIRC gdzieś w / proc lub / sys znajduje się „plik” reprezentujący obszary BAR.
dirkt

Wielkie dzięki, kierownictwo za odpowiedź. Wierzę, że podałeś możliwe rozwiązania jednego z moich problemów. W przypadku drugiego pytania dotyczącego komunikacji między PE a PE, w jaki sposób zostanie to rozwiązane? Czy będzie coś takiego: umieść dane gdzieś w zakresie adresów jednego z pasków jednego EP, a następnie przenieś je do innego EP, poproś komputer o odczyt / zapis do innego punktu końcowego odpowiedniego BAR?
Abhinav kumar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.