From: aes on
We are testing our PCI Multiport Serial Adapter drivers (WHQL certified for
2000/XP) with Vista RC2. We use multifunction bus driver mf.sys provided by
Microsoft for child PDO generation. In the child function driver we filter
the resource requirements during IRP_MN_FILTER_RESOURCE_REQUIREMENTS by
modifying the length and offset since each child needs a segment of the BAR
resources. We get the requested resources in IRP_MN_START_DEVICE that
provides the offset and length and we map it and then use it. This seems to
comply with the specification of 'Multifunction Devices' in. Everything
worked fine for the last six years but now it does not work with Vista. In
Vista, we can not modify the offset of the BAR resources, all the fields
related to address offset is NULL, however, the length field is valid and if
we modify the length field then we get the changed length in
IRP_MN_START_DEVICE, but this does not help since the base address passed to
each child same for all. If we map only required segment of the resource then
the driver is functional and works, but I/O manager or such is confused and
the device manager shows that the I/O is in conflict with another device in
'Resources' section and to my surprise the display shows IRQ is also not
available. Following the text snippet from the inf related to resource
declaration

HKR,Child0000,HardwareID,,MF\BH0001
HKR,Child0000,ResourceMap,1,06,02
HKR,Child0001,HardwareID,,MF\BH0002
HKR,Child0001,ResourceMap,1,06,02

We also did experiments involving inf with 'VaryingResourceMap' mentioning
the segment of resources for each child. We get the requested resources in
IRP_MN_START_DEVICE with the offset and length and the driver works fine but
device manager display shows same information with the I/O conflict and IRQ
not available.

While the driver works fine but the display in device manger shows that some
things are not being handled properly.

It seems that multifunction bus driver mf.sys provided by Microsoft is not
implemented properly in Vista. Could someone from Microsoft confirm this and
possibly suggest a workaround if mf.sys is not going to be modified? We have
a few products that use mf.sys and all of them are affected and your help is
very much appreciated.


From: Eliyas Yakub [MSFT] on
The right thing to do is use VaryingResourceMap rather than modifying the
resources in IRP_MN_FILTER_RESOURCE_REQUIREMENTS.

In order to figure out what the conflict issue is, we might need more
information as to the details about the IO ranges and IRQ involved, the
VaryingResourceMap entry, and the specific conflicts reported by device
manager. Also there is a section in the windbg documentation that describes
how to debug resource conflict issues using !arbiter command. Providing the
output of these command would also help.

--
-Eliyas
This posting is provided "AS IS" with no warranties, and confers no rights.
http://www.microsoft.com/whdc/driver/tips/default.mspx

From: aes on
Following is the entry in the 'inf' file regarding memory ranges and IRQ
involved



HKR,Child00,HardwareID,,CTIPORT

HKR,Child00,ResourceMap,1,02

HKR,Child00,VaryingResourceMap,1,00, 00,00,00,00, 00,02,00,00

HKR,Child01,HardwareID,,CTIPORT

HKR,Child01,ResourceMap,1,02

HKR,Child01,VaryingResourceMap,1,00, 00,02,00,00, 00,02,00,00



Port properties of 'Resources' from Device Manager



Communications Port(COM3)



Resource Settings:



Resource type
Setting

IRQ (blue rectangle marked with red)
0x100000010(16)

Memory Range (blue rectangle marked with red) DA000000 – DA0001FF



Conflicting device list:

Interrupt Request 0x100000010(16) not available.

Memory Range (blue rectangle marked with red) DA000000 – DA0001FF not
available.



Port properties of 'Resources' from Device Manager



Communications Port(COM4)



Resource Settings:



Resource type
Setting

IRQ (blue rectangle marked with red)
0x100000010(16)

Memory Range (blue rectangle marked with red) DA000200 – DA0003FF



Conflicting device list:

Interrupt Request 0x100000010(16) not available.

Memory Range (blue rectangle marked with red) DA000200 – DA0003FF not
available.



Following is the output of arbiter command, our device is
PCI\VEN_13A8&DEV_0152&SUBSYS_033012C4&REV_01\4&13699180&0&3048. IRQ is shown
as shared but memory resources are not marked as conflict, the information
does not match with Device Manager.



0: kd> !arbiter 7



DEVNODE 82b47230 (HTREE\ROOT\0)

Interrupt Arbiter "RootIRQ" at 8192cd20

Allocated ranges:

0000000000000000 - 0000000000000000 B 82b35db0

0000000000000001 - 0000000000000001 B 82b35db0

0000000000000002 - 0000000000000002 B 82b35db0

0000000000000003 - 0000000000000003 B 82b35db0

0000000000000004 - 0000000000000004 B 82b35db0

0000000000000005 - 0000000000000005 B 82b35db0

0000000000000006 - 0000000000000006 B 82b35db0

0000000000000007 - 0000000000000007 B 82b35db0

0000000000000008 - 0000000000000008 B 82b35db0

0000000000000009 - 0000000000000009 B 82b35db0

000000000000000a - 000000000000000a B 82b35db0

000000000000000b - 000000000000000b B 82b35db0

000000000000000c - 000000000000000c B 82b35db0

000000000000000d - 000000000000000d B 82b35db0

000000000000000e - 000000000000000e B 82b35db0

000000000000000f - 000000000000000f B 82b35db0

0000000000000010 - 0000000000000010 B 82b35db0

0000000000000011 - 0000000000000011 B 82b35db0

0000000000000012 - 0000000000000012 B 82b35db0

0000000000000013 - 0000000000000013 B 82b35db0

0000000000000014 - 0000000000000014 B 82b35db0

0000000000000015 - 0000000000000015 B 82b35db0

0000000000000016 - 0000000000000016 B 82b35db0

0000000000000017 - 0000000000000017 B 82b35db0

0000000000000018 - 0000000000000018 B 82b35db0

0000000000000019 - 0000000000000019 B 82b35db0

000000000000001a - 000000000000001a B 82b35db0

000000000000001b - 000000000000001b B 82b35db0

000000000000001c - 000000000000001c B 82b35db0

000000000000001d - 000000000000001d B 82b35db0

000000000000001e - 000000000000001e B 82b35db0

000000000000001f - 000000000000001f B 82b35db0

0000000000000020 - 0000000000000020 B 82b35db0

0000000000000021 - 0000000000000021 B 82b35db0

0000000000000022 - 0000000000000022 B 82b35db0

0000000000000023 - 0000000000000023 B 82b35db0

0000000000000024 - 0000000000000024 B 82b35db0

0000000000000025 - 0000000000000025 B 82b35db0

0000000000000026 - 0000000000000026 B 82b35db0

0000000000000027 - 0000000000000027 B 82b35db0

0000000000000028 - 0000000000000028 B 82b35db0

0000000000000029 - 0000000000000029 B 82b35db0

000000000000002a - 000000000000002a B 82b35db0

000000000000002b - 000000000000002b B 82b35db0

000000000000002c - 000000000000002c B 82b35db0

000000000000002d - 000000000000002d B 82b35db0

000000000000002e - 000000000000002e B 82b35db0

000000000000002f - 000000000000002f B 82b35db0

0000000000000050 - 0000000000000050 82b3d3d0 (ACPI)

0000000000000051 - 0000000000000051 82b3d3d0 (ACPI)

0000000000000052 - 0000000000000052 82b3d3d0 (ACPI)

0000000000000053 - 0000000000000053 82b3d3d0 (ACPI)

0000000000000054 - 0000000000000054 82b3d3d0 (ACPI)

0000000000000055 - 0000000000000055 82b3d3d0 (ACPI)

0000000000000056 - 0000000000000056 82b3d3d0 (ACPI)

0000000000000057 - 0000000000000057 82b3d3d0 (ACPI)

0000000000000058 - 0000000000000058 82b3d3d0 (ACPI)

0000000000000059 - 0000000000000059 82b3d3d0 (ACPI)

000000000000005a - 000000000000005a 82b3d3d0 (ACPI)

000000000000005b - 000000000000005b 82b3d3d0 (ACPI)

000000000000005c - 000000000000005c 82b3d3d0 (ACPI)

000000000000005d - 000000000000005d 82b3d3d0 (ACPI)

000000000000005e - 000000000000005e 82b3d3d0 (ACPI)

000000000000005f - 000000000000005f 82b3d3d0 (ACPI)

0000000000000060 - 0000000000000060 82b3d3d0 (ACPI)

0000000000000061 - 0000000000000061 82b3d3d0 (ACPI)

0000000000000062 - 0000000000000062 82b3d3d0 (ACPI)

0000000000000063 - 0000000000000063 82b3d3d0 (ACPI)

0000000000000064 - 0000000000000064 82b3d3d0 (ACPI)

0000000000000065 - 0000000000000065 82b3d3d0 (ACPI)

0000000000000066 - 0000000000000066 82b3d3d0 (ACPI)

0000000000000067 - 0000000000000067 82b3d3d0 (ACPI)

0000000000000068 - 0000000000000068 82b3d3d0 (ACPI)

0000
From: aes on
If you need more information please let me know ASAP. We really would like
to have this issue cleared up and ready soon to help support our Windows
users.

Allan

"aes" wrote:

> Following is the entry in the 'inf' file regarding memory ranges and IRQ
> involved
>
>
>
> HKR,Child00,HardwareID,,CTIPORT
>
> HKR,Child00,ResourceMap,1,02
>
> HKR,Child00,VaryingResourceMap,1,00, 00,00,00,00, 00,02,00,00
>
> HKR,Child01,HardwareID,,CTIPORT
>
> HKR,Child01,ResourceMap,1,02
>
> HKR,Child01,VaryingResourceMap,1,00, 00,02,00,00, 00,02,00,00
>
>
>
> Port properties of 'Resources' from Device Manager
>
>
>
> Communications Port(COM3)
>
>
>
> Resource Settings:
>
>
>
> Resource type
> Setting
>
> IRQ (blue rectangle marked with red)
> 0x100000010(16)
>
> Memory Range (blue rectangle marked with red) DA000000 – DA0001FF
>
>
>
> Conflicting device list:
>
> Interrupt Request 0x100000010(16) not available.
>
> Memory Range (blue rectangle marked with red) DA000000 – DA0001FF not
> available.
>
>
>
> Port properties of 'Resources' from Device Manager
>
>
>
> Communications Port(COM4)
>
>
>
> Resource Settings:
>
>
>
> Resource type
> Setting
>
> IRQ (blue rectangle marked with red)
> 0x100000010(16)
>
> Memory Range (blue rectangle marked with red) DA000200 – DA0003FF
>
>
>
> Conflicting device list:
>
> Interrupt Request 0x100000010(16) not available.
>
> Memory Range (blue rectangle marked with red) DA000200 – DA0003FF not
> available.
>
>
>
> Following is the output of arbiter command, our device is
> PCI\VEN_13A8&DEV_0152&SUBSYS_033012C4&REV_01\4&13699180&0&3048. IRQ is shown
> as shared but memory resources are not marked as conflict, the information
> does not match with Device Manager.
>
>
>
> 0: kd> !arbiter 7
>
>
>
> DEVNODE 82b47230 (HTREE\ROOT\0)
>
> Interrupt Arbiter "RootIRQ" at 8192cd20
>
> Allocated ranges:
>
> 0000000000000000 - 0000000000000000 B 82b35db0
>
> 0000000000000001 - 0000000000000001 B 82b35db0
>
> 0000000000000002 - 0000000000000002 B 82b35db0
>
> 0000000000000003 - 0000000000000003 B 82b35db0
>
> 0000000000000004 - 0000000000000004 B 82b35db0
>
> 0000000000000005 - 0000000000000005 B 82b35db0
>
> 0000000000000006 - 0000000000000006 B 82b35db0
>
> 0000000000000007 - 0000000000000007 B 82b35db0
>
> 0000000000000008 - 0000000000000008 B 82b35db0
>
> 0000000000000009 - 0000000000000009 B 82b35db0
>
> 000000000000000a - 000000000000000a B 82b35db0
>
> 000000000000000b - 000000000000000b B 82b35db0
>
> 000000000000000c - 000000000000000c B 82b35db0
>
> 000000000000000d - 000000000000000d B 82b35db0
>
> 000000000000000e - 000000000000000e B 82b35db0
>
> 000000000000000f - 000000000000000f B 82b35db0
>
> 0000000000000010 - 0000000000000010 B 82b35db0
>
> 0000000000000011 - 0000000000000011 B 82b35db0
>
> 0000000000000012 - 0000000000000012 B 82b35db0
>
> 0000000000000013 - 0000000000000013 B 82b35db0
>
> 0000000000000014 - 0000000000000014 B 82b35db0
>
> 0000000000000015 - 0000000000000015 B 82b35db0
>
> 0000000000000016 - 0000000000000016 B 82b35db0
>
> 0000000000000017 - 0000000000000017 B 82b35db0
>
> 0000000000000018 - 0000000000000018 B 82b35db0
>
> 0000000000000019 - 0000000000000019 B 82b35db0
>
> 000000000000001a - 000000000000001a B 82b35db0
>
> 000000000000001b - 000000000000001b B 82b35db0
>
> 000000000000001c - 000000000000001c B 82b35db0
>
> 000000000000001d - 000000000000001d B 82b35db0
>
> 000000000000001e - 000000000000001e B 82b35db0
>
> 000000000000001f - 000000000000001f B 82b35db0
>
> 0000000000000020 - 0000000000000020 B 82b35db0
>
> 0000000000000021 - 0000000000000021 B 82b35db0
>
> 0000000000000022 - 0000000000000022 B 82b35db0
>
> 0000000000000023 - 0000000000000023 B 82b35db0
>
> 0000000000000024 - 0000000000000024 B 82b35db0
>
> 0000000000000025 - 0000000000000025 B 82b35db0
>
> 0000000000000026 - 0000000000000026 B 82b35db0
>
> 0000000000000027 - 0000000000000027 B 82b35db0
>
> 0000000000000028 - 0000000000000028 B 82b35db0
>
> 0000000000000029 - 0000000000000029 B 82b35db0
>
> 000000000000002a - 000000000000002a B 82b35db0
>
> 000000000000002b - 000000000000002b B 82b35db0
>
> 000000000000002c - 000000000000002c B 82b35db0
>
> 000000000000002d - 000000000000002d B 82b35db0
>
> 000000000000002e - 000000000000002e B 82b35db0
>
> 000000000000002f - 000000000000002f B 82b35db0
>
> 0000000000000050 - 0000000000000050 82b3d3d0 (ACPI)
>
> 0000000000000051 - 0000000000000051 82b3d3d0 (ACPI)
>
> 0000000000000052 - 0000000000000052 82b3d3d0 (ACPI)
>
> 0000000000000053 - 0000000000000053 82b3d3d0 (ACPI)
>
> 0000000000000054 - 0000000000000054 82b3d3d0 (ACPI)
>
> 0000000000000055 - 0000000000000055 82b3d3d0 (ACPI)
>
> 0000000000000056 - 0000000000000056 82b3d3d0 (ACPI)
>
> 0000000000000057 - 0000000000000057 82b3d3d0 (ACPI)
>
> 0000000000000058 - 0000000000000058 82b3d3d0 (ACPI)
>
> 0000000000000059 - 0000000000000059 82b3d3d0 (ACPI)
>
> 000000000000005a - 000000000000005a 82b3d3d0 (ACPI)
>
> 000000000000005b - 000000000000005b 82b3d3d0 (ACPI)
>
> 000000000000005c - 000000000000005c 82b3d3d0 (ACPI)
>
> 000000000000005d - 000000000000005d 82b3d3d0 (ACPI)
>
> 000000000000005e - 000000000000005e 82b3d3d0 (ACPI)
>
> 000000000000005f - 000000000000005f 82b3
From: aes on
In case it is any help. Here is some more info provided by msinfo32.exe,
this is an application by Microsoft provides resources information. It also
shows some differences with WinDBG.



************************************************************************************************************************************************

[Memory]



Resource Device Status

0xA0000-0xBFFFF PCI bus OK

0xA0000-0xBFFFF PCI standard PCI-to-PCI bridge OK

0xA0000-0xBFFFF RADEON X300/X550 Series (Microsoft Corporation -
WDDM) OK

0xC0000-0xDFFFF PCI bus OK

0x40000000-0xFEBFFFFF PCI bus OK

0xDA103000-0xDA103FFF Standard OpenHCD USB Host Controller OK

0xFEB00000-0xFEB000FF Standard Enhanced PCI to USB Host Controller
OK

0xDA102000-0xDA102FFF Standard Dual Channel PCI IDE Controller
OK

0xDA101000-0xDA101FFF Standard Dual Channel PCI IDE Controller
OK

0xDA000000-0xDA0FFFFF PCI standard PCI-to-PCI bridge OK

0xDA000000-0xDA0FFFFF OEM's 2-Port UART PCI Card OK

0xDA000000-0xDA0FFFFF OEM Communications Port (COM3) OK

0xDA000200-0xDA0003FF OEM Communications Port (COM4) OK

0xDA100000-0xDA100FFF NVIDIA nForce Networking Controller OK


0xD8000000-0xD9FFFFFF PCI standard PCI-to-PCI bridge OK

0xD0000000-0xD7FFFFFF PCI standard PCI-to-PCI bridge OK

0xD0000000-0xD7FFFFFF RADEON X300/X550 Series (Microsoft Corporation
- WDDM) OK

0xD9000000-0xD900FFFF RADEON X300/X550 Series (Microsoft
Corporation - WDDM) OK

0xD9FF0000-0xD9FFFFFF RADEON X300/X550 Series Sec (Microsoft
Corporation - WDDM) OK

0xE0000000-0xEFFFFFFF Motherboard resources OK

0xF0000-0xF3FFF System board OK

0xF4000-0xF7FFF System board OK

0xF8000-0xFBFFF System board OK

0xFC000-0xFFFFF System board OK

0x3FFF0000-0x3FFFFFFF System board OK

0xFFFF0000-0xFFFFFFFF System board OK

0x0000-0x9FFFF System board OK

0x100000-0x3FFEFFFF System board OK

0xFEC00000-0xFEC00FFF System board OK

0xFEE00000-0xFEEFFFFF System board OK

0xFEFFF000-0xFEFFFFFF System board OK

0xFFF80000-0xFFF80FFF System board OK

0xFFF90000-0xFFFBFFFF System board OK

0xFFFED000-0xFFFEFFFF System board OK



0xDA000000-0xDA0FFFFF OEM's 2-Port UART PCI Card OK

0xDA000000-0xDA0FFFFF OEM Communications Port (COM3) OK

0xDA000200-0xDA0003FF OEM Communications Port (COM4) OK

************************************************************************************************************************************************



The resource occupation is wrong both for OEM's 2-Port UART PCI Card and
OEM Communications Port (COM3). And resource 0xDA000000-0xDA0FFFFF for OEM's
2-Port UART PCI Card and COM3 is wrong. In XP msinfo32.exe reports resources
correctly.



Following is the PCI information regarding our board with the length in the
BAR register.



0: kd> !pci 100 5

PCI Bus 0x5

06:0 13a8:0152.01 Cmd[0000:......] Sts[0080:.....] XR Serial Controller
SubID:12c4:0330

Config Space: (Bus: 5 Device: 6 Func: 0)

00: VendorID 13a8 Exar Corp.

02: DeviceID 0152

04: Command 0000

06: Status 0080 FB2BCapable

08: RevisionID 01

09: ProgIF 02 16550 Compatible

0a: SubClass 00 Serial Controller

0b: BaseClass 07 Simple Communications Controller

0c: CacheLineSize 0000

0d: LatencyTimer 00

0e: HeaderType 00

0f: BIST 00

10: BAR0 da000000

14: BAR1 00000000

18: BAR2 00000000

1c: BAR3 00000000

20: BAR4 00000000

24: BAR5 00000000

28: CBCISPtr 00000000

2c: SubSysVenID 12c4

2e: SubSysID 0330

30: ROMBAR 00000000

34: CapPtr 00

3c: IntLine 10

3d: IntPin 01

3e: MinGnt 00

3f: MaxLat 00

Device Private:

40: 32b932b3 32c932c3 32d932d3 32f832f3

50: 331832fe 3323331d 3342333d 33583348

60: 3360335c 33683364 3370336c 33783374

70: 3380337c 33b033aa 33c633c1 33ee33cc

80: 33f933f3 341f341a 342f3425 343f3435

90: 344f3445 34693455 3474346e 3494348b

a0: 34a3349d 34bc34b7 34e734c2 34f234ec

b0: 351c3517 35363522 3541353b 355a3555

c0: 35743560 357f3579 359a3595 35b435a0

d0: 35bf35b9 35e535e0 35f535eb 360535fb

e0: 3615360b 362f361b 363a3634 36593653

f0: 3674366f 3693367a 369e3698 36bd36b8



0: kd> !ecd 5.6.0 10 ffffffff

0: kd> !pci 100 5

PCI Bus 0x5

06:0 13a8:0152.01 Cmd[0000:......] Sts[0080:.....] XR Serial Controller
SubID:12c4:0330

Config Space: (Bus: 5 Device: 6 Func: 0)

00: VendorID 13a8 Exar Corp.

02: DeviceID 0152

04: Command 0000

06: Status 0080 FB2BCapable

08: RevisionID 01

09: ProgIF 02 16550 Compatible

0a: SubClass 00 Serial Controller

0b: BaseClass 07 Simple Communications Controller

0c: CacheLineSize 0000

0d: LatencyTimer 00

0e: HeaderType 00

0f: BIST 00

10: BAR0 fffffc00

14: BAR1 00000000

18: BAR2 00000000

1c: BAR3 00000000

20: BAR4 00000000

24: BAR5 00000000

28: CBCISPtr 00000000

2c: SubSysVenID 12c4

2e: SubSysID 0330

30: ROMBAR 00000000

34: CapPtr 00

3c: IntLine 10

3d: IntPin 01

3e: MinGnt 00

3f: MaxLat 00

Device Private:

40: 32b932b3 32c932c3 32d932d3 32f832f3

50: 331832fe 3323331d 3342333d 33583348

60: 3360335c 33683364 3370336c 33783374

70: 3380337c 33b033aa 33c633c1 33ee33cc

8