Sdílet prostřednictvím


Vytváření různých map zdrojů

I když standardní mapy prostředků mohou přiřadit pouze celý hlavní prostředek k dílčí části multifunkčního zařízení, různé mapy prostředků umožňují rozdělit hlavní prostředek mezi dílčí součásti vyčíslené podle mf.sys. Různé mapy prostředků jsou podporovány v systému Windows XP a novějších verzích operačního systému založeného na protokolu NT.

Představte si například multiportovou sériovou kartu na sběrnici PCI. Předpokládejme, že každá funkce UART karty 16550 vyžaduje sadu osmi vstupně-výstupních portů a jediného sdíleného přerušení. Předpokládejme také, že je karta implementována jako jedna funkce PCI. V tomto scénáři je typické požadovat jeden blok vstupně-výstupních portů a pak tento blok rozdělit na osm segmentů, jeden pro každou funkci UART 16550.

Kromě V/V portu a prostředků přerušení vyžadovaných funkcemi 16550 UART karty, předpokládejme, že zařízení také vyžaduje paměťové rozsahy a soukromé prostředky zařízení.

Na základě těchto předpokladů mf.sys vrátí seznam požadavků na prostředky pro toto zařízení vytvořený následujícím způsobem:

Číslo zdroje Zdroj
00 rozsah paměti základní registrační adresa (BAR) 0
01 privátních dat
02 rozsah paměti BAR 1
03 Soukromých dat
04 Vstupně-výstupní rozsah portů BAR 2
05 privátních dat
06 přerušení

Dodavatelé používají direktivy INF file k určení sdílení těchto prostředků mezi funkcemi UART karty 16550. Pro každou funkci, která vyžaduje segment prostředků zařízení, musíte použít VaryingResourceMap položku v INF k vytvoření položky registru. Následuje výňatek ze souboru INF pro toto zařízení:

[DDInstall.RegHW]
; for each "child" function list hardware ID and resource map
; and/or varying resource map
HKR,Child0002,HardwareID,, child0002-hardware ID
HKR,Child0002,VaryingResourceMap,1,04, 10,00,00,00, 08,00,00,00
HKR,Child0002,ResourceMap,1,06

Řádek obsahující VaryingResourceMap se interpretuje takto:

  • Hodnota 1 následující za parametrem VaryingResourceMap určuje, že datový typ položky registru je REG_BINARY.

  • Čísla následující za číslem 1 jsou měnící se hodnoty mapy zdrojů. '04' označuje nadřazený prostředek, jehož segment přiřazujeme tomuto dítěti. V tomto případě přiřadíme podřízenému segment prostředku 04 (BAR 2), což je část prostředku představující osm rozsahů I/O portů pro každý sériový port.

  • Další dva DWORDy označují nejprve posun do zdroje a poté délku rozsahu, který by měl být přidělen tomuto potomku. V tomto případě se tomuto podřízenému zařízení přiděluje osm I/O portů, počínaje offsetem 0x10 v rámci nadřazeného prostředku.

  • Pokud by toto dítě vyžadovalo další rodičovský prostředek, číslo, délka a posun prostředku by byly zahrnuty na stejném řádku INF za prvním prostředkem.

Parametr ResourceMap je popsán v Vytvoření standardních map prostředků a indikuje, že tato podřízená položka by měla získat sdílenou složku prostředku 06, což je v tomto případě přerušení zařízení PCI.

Následuje kompletnější příklad pro toto zařízení, který určuje čtyři podřízené funkce:

[Version]
Signature="$Windows NT$"
Class=MultiFunction
ClassGUID={4d36e971-e325-11ce-bfc1-08002be10318}
Provider=%MYCOMPANY%
DriverVer=1/20/2000
CatalogFile=ExampleCatalog.cat
PnpLockdown=1

[ControlFlags]
ExcludeFromSelect=*

[Manufacturer]
%MYCOMPANY%=MYCOMPANY,NTamd64

[MYCOMPANY.NTamd64]
%MYCOMPANY_4PORT%=MYCOMPANY4PORT_inst, PCI\VEN_10B5&DEV_9050&SUBSYS_003112E0

[MYCOMPANY4PORT_inst]
Include = mf.inf
Needs = MFINSTALL.mf

[MYCOMPANY4PORT_inst.HW]
AddReg=MYCOMPANY4PORT_inst.RegHW

[MYCOMPANY4PORT_inst.Services]
Include = mf.inf
Needs = MFINSTALL.mf.Services

[MYCOMPANY4PORT_inst.RegHW]
HKR,Child0000,HardwareID,,*PNP0501
HKR,Child0000,VaryingResourceMap,1,04, 00,00,00,00, 08,00,00,00
HKR,Child0000,ResourceMap,1,06
HKR,Child0001,HardwareID,,*PNP0501
HKR,Child0001,VaryingResourceMap,1,04, 08,00,00,00, 08,00,00,00
HKR,Child0001,ResourceMap,1,06
HKR,Child0002,HardwareID,,*PNP0501
HKR,Child0002,VaryingResourceMap,1,04, 10,00,00,00, 08,00,00,00
HKR,Child0002,ResourceMap,1,06
HKR,Child0003,HardwareID,,*PNP0501
HKR,Child0003,VaryingResourceMap,1,04, 18,00,00,00, 08,00,00,00
HKR,Child0003,ResourceMap,1,06

[Strings]
MYCOMPANY= "MYCOMPANY Inc."
MYCOMPANY_4PORT="MYCOMPANY 4PORT"