180 likes | 297 Views
IEEE-1394. Kashif Hasan Test Developer, NT Base Test Team. Agenda . IEEE-1394 Core Driver Stack Test Cases How To Report Bugs Debugging and Triage Tips Q & A. etc. Scanning. MSDV.SYS. Printing. IP1394. Storage. Driver. AVC.SYS. Stack. 61883.SYS. SBP2PORT.SYS.
E N D
IEEE-1394 Kashif Hasan Test Developer, NT Base Test Team
Agenda • IEEE-1394 Core Driver Stack • Test Cases • How To Report Bugs • Debugging and Triage Tips • Q & A
etc. Scanning MSDV.SYS Printing IP1394 Storage Driver AVC.SYS Stack 61883.SYS SBP2PORT.SYS IRP-Based Interface 1394BUS.SYS IRP-Based Interface OHCI1394.SYS IEEE-1394 Core Stack Core Stack: 1394BUS.SYS, OHCI1394.SYS Client Drivers: 61883.SYS, AVC.SYS, SBP2PORT.SYS, Other 3rd-party Drivers, etc.
1394 Support in Windows • Inbox support for: • 61883 Devices (AVC command set and Tape and Camera Subunits) • SBP-2 Devices (using SCSI Command Set) • 1394 DCam (conferencing cameras) • IP (v4) over 1394
Test Cases • Plug and Play • Hot-Plug / Hot-Unplug / Surprise Remove • Disable / Enable • Remove / Refresh • Power Management • S1, S3 and S4 System Power States • D0 and D3 System Power States • Data transfer while transition
Test Cases (cont.) • 1394 Tests • Transmitting while generating bus resets • Enumerate and work with in-box class drivers • Verify Gap Counts optimizations • Interoperability • Multiple devices, Multiple PCs • Different tree topologies • Force various Root and Bus Manager node
How To Report Bugs • Clear repro steps • What hardware is used, bus topology info • Version info (OS, hardware revision, firmware, etc.) • Expected behavior • How often does this repro? • Exact behavior which causes the issue • Identify which devices(s) cause this
How To Report Bugs • Please Repro with Checked Binaries with debug spew and Driver Verifier Enabled • Regression / Repro Information • Is this new? (Regression Steps) • Did this happen in previous build, beta, OS ver? • Does this happen with other devices? • Other devices of same or other classes • Different Host Controller / Device Topology • How do we get the device?
Debug and Triage Tips • Enabling debug spew • CHK drivers and matching symbols are required • ed ohci1394!ohcidebuglevel 2 • ed 1394bus!busdebuglevel 2 • Can use any level between 0 and 6 • Higher values result in more debug spew
Sample Start Isochronous Listen Debug Spew Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x3 Ohci1394: BusMgmtCSRs: after op data=xffffffff, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=xfffffffe, sts=x0 Ohci1394: BusMgmtCSRs: cmp=xfffffffe, data=x7ffffffe, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=xfffffffe, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x7ffffffe, data=x7ffffffe, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=x7ffffffe, sts=x0 Ohci1394: IsoAllocCh: SUCCESS, ch=x0 Ohci1394: IsoAllocBw: speed used for calc 2 Ohci1394: IsoAllocBw: bw req=x5a0 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x1 Ohci1394: BusMgmtCSRs: after op data=x1333, sts=x0 Ohci1394: IsoAllocBw: bw req=x5a0, avail=x1333 Ohci1394: BusMgmtCSRs: cmp=x1333, data=xd93, regIndex=x1 Ohci1394: BusMgmtCSRs: after op data=x1333, sts=x0 Ohci1394: IsoAllocBw: SUCCESS, bw struct=xFF872518 Ohci1394: IOCtl: Got ISOCH_ALLOCATE_RESOURCES Ohci1394: IOCtl: alloc isoch res.DmaIndex=x7, heapLen=x1684 Ohci1394: IOCtl: alloc isoch res.MaxBufSize=x25800, numBufs=x9 Ohci1394: IOCtl: commonBufAddr=x80D2E000 Ohci1394: StartIo: irp=xFF985828, err=xc000009a Ohci1394: StartIo: got ISOCH_LISTEN for Dma 7
Sample Stop Isochronous Listen Debug Spew Ohci1394: StartIo: ISOCH_STOP for dma=7 Ohci1394: HandleIsochInt: not streaming res=xFF8B2CF8 Ohci1394: StartIo: ISOCH_STOP for dma=7 Ohci1394: IOCtl: ISOCH_FREE_RESOURCE, res=xFF8B2CF8 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x3 Ohci1394: BusMgmtCSRs: after op data=xffffffff, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=x7ffffffe, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x7ffffffe, data=xfffffffe, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=x7ffffffe, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x1 Ohci1394: BusMgmtCSRs: after op data=xd93, sts=x0 Ohci1394: BusMgmtCSRs: cmp=xd93, data=x1333, regIndex=x1 Ohci1394: BusMgmtCSRs: after op data=xd93, sts=x0
Sample Asychronous Access Debug Spew Ohci1394: IOCtl: Irp ff88e650, Irb ff87abc0 Ohci1394: AsyncStartIo: db=fc2a7500, node=x1, tLabel=x3b Ohci1394: Dpc: Int mask at start of DPC=20 Ohci1394: HandleAsyncRsp: recvd rsp tLabel=x3b, sts=x8451, rCode=x0 Ohci1394: HandleAsyncRsp: stale rsp rcvd - xmit list EMPTY Ohci1394: Dpc: Int mask at start of DPC=10 Ohci1394: HandleAsyncReq: indication for unified, tlabel=x2 Ohci1394: IOCtl: Irp ff88e650, Irb ff87abc0 Ohci1394: AsyncStartIo: db=fc2a7380, node=x1, tLabel=x3c Ohci1394: Dpc: Int mask at start of DPC=20 Ohci1394: HandleAsyncRsp: recvd rsp tLabel=x3c, sts=x8451, rCode=x0 Ohci1394: HandleAsyncRsp: stale rsp rcvd - xmit list EMPTY Ohci1394: Dpc: Int mask at start of DPC=10 Ohci1394: HandleAsyncReq: indication for unified, tlabel=x0
Sample Debug Spew while Hot-Plugging a device 1394Bus : OptimizeTopo: gap count method=2 1394Bus : OptimizeTopo: selfIdCnt=3, delay=1155, gap=x9 1394Bus : OptimizeTopo: WinME/Win2K gap count would've been x9 1394Bus : OptimizeTopo: sending pkt, gapcnt=x9 Ohci1394: AsyncStartIo: raw pkt=xFC2A6110 1394Bus : HandleDevRels: bid=x80E87008, hiNodeId=x2, hiBmc=x0 1394Bus : HandleDevRels: ... hiCMC=x0, ourNodeId=x0 1394Bus : HandleDevRels: bid=x80E87008, send phyPkt & busRst to be IRM Ohci1394: AsyncStartIo: raw pkt=xFC2A6090 1394Bus : ForceRootCompl: phy pkt sent, now causing BUS RESET Ohci1394: BusReset: initiating bus reset.. Ohci1394: BusReset: gapCount=9 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, vdo=x80E85E18 1394Bus : Pnp: <x13> QUERY_ID, pdo=xFF88ACC0 1394Bus : FindDev: (bid=x80E87008) found b8a000500000 (pdo=FF88ACC0) 1394Bus : Pnp: <x87> ??, pdo=xFF88ACC0 1394Bus : Pnp: query DeviceId 1394Bus : Pnp: <x09> QUERY_CAPABILITIES, pdo=xFF88ACC0 1394Bus : Pnp: <x0c> QUERY_DEV_TEXT, pdo=xFF88ACC0 1394Bus : Pnp: <x13> QUERY_ID, pdo=xFF88ACC0 1394Bus : Pnp: query HardwareIds 1394Bus : Pnp: <x13> QUERY_ID, pdo=xFF88ACC0 1394Bus : Pnp: query CompatibleIds 1394Bus : Pnp: <x0b> QUERY_RESOURCE_REQS, pdo=xFF88ACC0 1394Bus : Pnp: <x15> QUERY_BUS_INFO, pdo=xFF88ACC0 1394Bus : Pnp: <x0a> QUERY_RESOURCES, pdo=xFF88ACC0 1394Bus : Pnp: <x18> QUERY_LEG_BUS_INFO, pdo=xFF88ACC0 1394Bus : Pnp: <x0b> QUERY_RESOURCE_REQS, pdo=xFF88ACC0 1394Bus : Pnp: <x0d> FILTER_RESOURCE_REQS, pdo=xFF88ACC0 1394Bus : Pnp: <x00> START_DEV, pdo=xFF88ACC0 1394Bus : WmiReg: devObj=xFF88ACC0, action=1, status=x0 1394Bus : Pnp: <x09> QUERY_CAPABILITIES, pdo=xFF88ACC0 1394Bus : Pnp: <x14> QUERY_PNP_DEV_STATE, pdo=xFF88ACC0 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, pdo=xFF88ACC0
Sample Debug Spew while Hot-Unplugging a device Ohci1394: HandleBusReset: phy reset has started... Ohci1394: HandleBusReset: calling bus drv reset func 1394Bus : BusReset: (80e87008) START, curr generation=xc Ohci1394: FormTopoMap: selfIdCount=xc000c, idSize=3 Ohci1394: FormTopoMap: selfId = 568b4980 Ohci1394: FormTopoMap: found OWN selfId=x568b4980 Ohci1394: FormTopoMap: two or more devs rmvd at once, p 3, c 1!! Ohci1394: BusMgmtCSRs: cmp=x3f, data=x0, regIndex=x0 Ohci1394: BusMgmtCSRs: after op data=x3f, sts=x0 Ohci1394: FormTopoMap: done, busResetInfo=x80534910, map=x80E32008 1394Bus : ResetNotify: calling vdo=x80E85E18 1394Bus : BusReset: no nodes to enum, set dev rel inval timer Ohci1394: HandleAsyncReq: bus rst pkt found, cnt=x1 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x3 Ohci1394: BusMgmtCSRs: after op data=xffffffff, sts=x0 Ohci1394: BusMgmtCSRs: cmp=x0, data=x0, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=xffffffff, sts=x0 Ohci1394: BusMgmtCSRs: cmp=xffffffff, data=xfffffffe, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=xffffffff, sts=x0 Ohci1394: BusMgmtCSRs: cmp=xfffffffe, data=xfffffffe, regIndex=x2 Ohci1394: BusMgmtCSRs: after op data=xfffffffe, sts=x0 Ohci1394: IsoAllocCh: SUCCESS, req ch=x1f, avail=xffffffff 1394Bus : DefInvalTimeoutDpc: bid=x80E87008 invalidate dev rels 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, port_do=x80E2D028 1394Bus : DisableNonEnumDevs: (bid=x80E87008) disable pdo=x80E3B188 1394Bus : DisableNonEnumDevs: ...fl=x2, gen=xb, eui=b8a000500000 1394Bus : HandleDevRels: vdo=x80E2D028, relCount=x1 Ohci1394: PnP: unhandled irp ff883d10 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, pdo=x80E3B188 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, pdo=x80E3B188 1394Bus : FreeAddrRange: call port driver 1394Bus : Pnp: <x17> SURPRISE_REMOVAL, pdo=x80E3B188 1394Bus : WmiReg: devObj=x80E3B188, action=2, status=x0 1394Bus : Pnp: <x02> REMOVE_DEV, pdo=x80E3B188 1394Bus : Pnp: <x07> QUERY_DEV_RELATIONS, vdo=x80E85E18
Accessing OHCI1394 Device Extension kd> !devnode 0 1 ohci1394 Dumping IopRootDeviceNode (= 0x80e53940) DevNode 0x80e99008 for PDO 0x80e963d0 InstancePath is "PCI\VEN_1106&DEV_3044&SUBSYS_30441106&REV_40\3&61aaa01&0&50" ServiceName is "ohci1394" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) DevNode 0x80e30268 for PDO 0x80e85e18 InstancePath is "V1394\NIC1394\5345a00f40630a" ServiceName is "NIC1394" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) DevNode 0xff8c52f8 for PDO 0xff88acc0 InstancePath is "1394\LSI&DISK\500000B8A000" ServiceName is "sbp2port" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) DevNode 0xff894728 for PDO 0x80de13e0 InstancePath is "SBP2\LSI&DISK&LUN0\00a0b80000005000" ServiceName is "disk" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) kd> !devstack 0x80e963d0 !DevObj !DrvObj !DevExt ObjectName 80e2d028 \Driver\ohci1394 80e2d0e0 1394BUS0 > 80e963d0 \Driver\PCI 80e96488 NTPNP_PCI0005 !DevNode 80e99008 : DeviceInst is "PCI\VEN_1106&DEV_3044&SUBSYS_30441106&REV_40\3&61aaa01&0&50" ServiceName is "ohci1394"
Accessing fields within the OHCI1394 Device Extension kd> dd 80e2d0e0 80e2d0e0 deafcafe kd> dd 80e2d0e0+0x11c 80e2d1fc 0000001f kd> dd 80e2d0e0+0x0e0 80e2d1c0 01010000 kd> dd 80e2d0e0+0x0e8 80e2d1c8 03ff0002 kd> dd 80e2d0e0+0x0ec 80e2d1cc 0000000e kd> dd 80e2d0e0+0x0f0 80e2d1d0 00000003 kd> dd 80e2d0e0+0x160 80e2d240 fc2a8800 kd> dd 0xfc2a8800 fc2a8800 000ee5c2 80498094 7fb67f6b 8109849c fc2a8810 7ef67b63 82498bd6 7db67429 83498bd6 fc2a8820 7cb67429 00000000 00000000 00000000 kd> dd 80e2d0e0+0x108 80e2d1e8 00000008 kd> dd 80e2d0e0+0x10c 80e2d1ec 00000008 kd> dd 80e2d0e0+0x168 80e2d248 000000a0 kd> dd 80e2d0e0+0x164 80e2d244 fc2a9000 kd> dd fc2a9000 fc2a9000 64a80404 34393331 0c9000f0 0a634000 OHCI Tag tLabel OHCI Version Register BusID and NodeID Current Generation Node Count Self-ID Buffer Contents of Self-ID Buffer Max Isoch Tx DMA Contexts Max Isoch Rx DMA Contexts Config ROM Length Config ROM Buffer Config ROM Contents
Call To Action • Send questions about 1394 to 1394@microsoft.com • More information at http://www.microsoft.com/hwdev/1394 • 1394 Trade Association http://www.1394ta.org • Participate in Plugfests