Zapobiegaj zmianie przez Windows 7 rejestru poleceń PCI

1

Mam kartę Compact PCI w obudowie PXI; ma 2 paski pamięci, które powinny być dostępne za pośrednictwem operacji NiVisa firmy National Instruments. Mam problem z tym, że Windows 7 zmienia rejestr poleceń na karcie podczas sekwencji uruchamiania, tak że paski pamięci karty są niedostępne. Uruchomiłem analizator magistrali i zauważyłem, że rejestr poleceń przestrzeni konfiguracyjnej jest ustawiony na pożądaną wartość (0x0197) po uruchomieniu systemu BIOS.

Chciałbym, aby ta wartość utrzymywała się w sekwencji uruchamiania systemu Windows. Pozostaje taki sam, gdy używasz systemu operacyjnego Windows XP, ale nie działa w systemie Windows 7. Skonfigurowałem maszynę z podwójnym uruchomieniem z Windows XP i Windows 7, aby upewnić się, że cały sprzęt jest taki sam podczas porównania. Po sekwencji uruchamiania systemu Windows 7 wartością jest 0x0194.

Jestem w stanie ustawić rejestr poleceń na 0x197, aby uzyskać te dwa ostatnie bity tak, jak chcę z poziomu programu, którego używam do rozmowy z kartą PXI, a to pozwala mi używać karty zgodnie z życzeniem, ale jest nie stabilna poprawka. Pojawiają się częste błędy podczas rozpoczynania nowych sesji komunikacyjnych (po zamknięciu starych sesji), że alokacja pamięci nie może być wykonana przez biblioteki National Instruments.

  • Czy istnieje sposób, aby uniemożliwić systemowi Windows 7 skonfigurowanie karty PXI?

Wygląda na to, że już tak chcę po zakończeniu BIOS-u. Wygląda na to, że Windows CE wyłącza konfigurację karty z flagą rejestru NoConfig . Nie byłem w stanie znaleźć metody, która działałaby w systemie Windows 7 lub Windows XP.

Windows XP próbuje również zmienić konfigurację przestrzeni konfiguracyjnej karty, ale pozostawia ją w stanie użytecznym. Opcjonalnie, ponieważ zwiększy to moje zrozumienie, ale prawdopodobnie jest styczne do rozwiązania mojego problemu, jestem zainteresowany:

  • Jaką różnicę robi rekonfiguracja systemu Windows 7, która ma inny wynik na tej karcie niż system Windows XP?
Atreys
źródło

Odpowiedzi:

1

Witamy w 21 wieku. Używasz systemu operacyjnego Plug and Play.

Nie można przejść do mapowania pamięci urządzenia i rejestrów we / wy do pamięci i wolnej przestrzeni we / wy, co właśnie zrobi ręcznie włączając pamięć i dostęp do we / wy na urządzeniu PCI. Mapowanie zasobów urządzenia należy wykonać w połączeniu z menedżerem Plug and Play systemu operacyjnego. Menedżer Plug and Play śledzi, jakie zakresy adresów i adresów We / Wy są używane i przez kogo, i zapewnia, że ​​nie wystąpią konflikty z powodu (powiedzmy) wielu urządzeń mapujących te same zakresy adresów.

System Windows wyłącza pamięć i cykle we / wy w urządzeniu, ponieważ nie było możliwe przypisanie pamięci i zasobów we / wy do urządzenia w ramach wyliczenia magistrali Plug and Play i arbitrażu zasobów. (Pomijam możliwość, że Windows zdecydował się cię wyłączyć, biorąc pod uwagę, że pozostawił włączony busmastering). Albo po prostu nie ma miejsca na mapie pamięci fizycznej twojego komputera na zasoby, które urządzenie chce zmapować, albo nie było możliwe jest uruchomienie urządzenia z przypisaną konfiguracją zasobów. (Pomijam możliwość, że twoje urządzenie jest po prostu zepsute i nie zgłasza poprawnie wymagań dotyczących zasobów w obszarze konfiguracji PCI).

To drugie jest bardziej prawdopodobne. Zwykle przyczyną jest urządzenie PCI, które nie ma sterownika urządzenia. Bez sterownika urządzenia, który napędza urządzenie w pierwszej kolejności, PaP Manager nie może przypisać konfiguracji zasobów do urządzenia i doprowadzić go do stanu „uruchomionego”. Wymagają one (funkcji) sterownika urządzenia, aby reagować na odpowiednie IORP PaP. W takim przypadku: Twoje urządzenie potrzebuje sterownika urządzenia.

Menedżer urządzeń powie ci, co dzieje się z twoim urządzeniem w tym zakresie.

JdeBP
źródło
Ponieważ nie jestem ekspertem od PCI, zwróciłem się do Internetu, aby pomóc mi w debugowaniu tego problemu. Kilka witryn sugerowało, że właściwe jest włączenie bitów rejestru poleceń z oprogramowania wymaganego do uruchomienia aplikacji. Nie powinno być problemu z włączeniem pamięci i operacji we / wy na karcie, jeśli wiesz, że karta ma taką możliwość, i robisz to przed próbą użycia dostępnych operacji pamięci i operacji we / wy. Czy masz jakieś odniesienia stwierdzające, że zmiana rejestru poleceń nie jest możliwa? Menedżer urządzeń uważa, że ​​wszystko jest w porządku z kartą. Będę szukać „IORP”.
Atreys
Masz na myśli oprócz sekcji 6.5.2 specyfikacji lokalnej magistrali PCI wersja 2.3? (-: Nietrudno jest wyobrazić sobie, że nie jest to program do rejestrowania. Paski BAR muszą zostać skonfigurowane najpierw, z adresami przypisanymi przez PaP Managera , ponieważ włączenie dekodowania umożliwia dekodowanie pod dowolnym adresem w BAR . W systemie Windows wszystkie te czynności są obsługiwane przez sterownik magistrali PCI, który odpowiada na odpowiednie pakiety żądań We / Wy PaP . Jeśli BARy nie zostały zaprogramowane lub dekodowanie nie jest włączone, to dlatego, że zarząd PaP zdecydował, że nie do.
JdeBP
Dziękuję za odniesienie, to bardzo przydatne. Mój menedżer urządzeń wyświetla zakresy adresów pamięci dla pasków BAR dla funkcji karty, która ma pamięć. Czy to oznacza, że ​​PaP przydzielił tę pamięć do użycia karty?
Atreys
Jeśli zasoby są wymienione na liście urządzeń w Menedżerze urządzeń , a Menedżer urządzeń nie wskazuje na konflikt zasobów, wówczas zasoby te powinny zostać przypisane do urządzenia, tak. W przypadku większości urządzeń PCI PDO dostarczany przez pci.sysprogramuje paski BAR z przypisanymi zasobami po otrzymaniu IRP_MN_START_DEVICEIORP. Sterownik wyższego poziomu może zmodyfikować ten proces. Jest to jednak kwestia tego, kto napisał ten sterownik urządzenia. To nie jest normalny sposób.
JdeBP
Nawiasem mówiąc, powinien to być punkt 6.2.5, a nie 6.5.2 powyżej. Błąd pisania z mojej strony.
JdeBP