IEEE 1394 Configuration ROM Decoder by William F. Alexander Listing One Raw Data Dump of the Configuration ROM from device number 1 (id=00A0B800) 1394 Addr Off Data ------------- -------- -------- -------- -------- FFFF:F0000400 042E19A8 31333934 00FF5000 00A0B800 FFFF:F0000410 00005000 00067A52 0C0083C0 0300A0B8 FFFF:F0000420 8100000F 0400500A 81000015 D1000001 FFFF:F0000430 00067752 1200609E 13010483 5400C000 FFFF:F0000440 3A401E08 14000000 D4000001 000329A2 FFFF:F0000450 0400500A 8100000A 8200000E 0007BD5D FFFF:F0000460 00000000 00000000 53594D42 494F5320 FFFF:F0000470 4C4F4749 432C2049 4E432E00 00044469 FFFF:F0000480 00000000 00000000 53594D42 494F5300 FFFF:F0000490 000AE09E 00000000 00000000 53594D31 FFFF:F00004A0 33465735 30302D44 49534B20 44524956 FFFF:F00004B0 45000000 00000000 00000000 Decode of the Configuration ROM from device number 1 (id=00A0B800) 1394 Addr Off Quadlet Meaning ------------- -------- -------------------------------------------------- Confiruation ROM Header FFFF:F0000400 042E19A8 info_length=04, crc_length=2E, rom_crc_value=19A8 Bus_Info_Block FFFF:F0000404 31333934 bus_name=31333934 ("1394") FFFF:F0000408 00FF5000 irmc=0, cmc=0, isc=0, bmc=0, cyc_clk_acc=FF, max_rec=5 FFFF:F000040C 00A0B800 node_vendor_id=00A0B8, chip_id_hi=00 FFFF:F0000410 00005000 chip_id_lo=00005000 Root_Directory FFFF:F0000414 00067A52 length=0006, crc=7A52 FFFF:F0000418 0C0083C0 Node_Capabilities spt 64 fix lst drg FFFF:F000041C 0300A0B8 Module_Vendor_Id 00A0B8 FFFF:F0000420 8100000F Textual_Descriptor leaf ind_off=00000F (FFFF:F000045C) FFFF:F0000424 0400500A Module_Hw_Version 00500A FFFF:F0000428 81000015 Textual_Descriptor leaf ind_off=000015 (FFFF:F000047C) FFFF:F000042C D1000001 Unit_Directory directory ind_off=000001 (FFFF:F0000430) Unit_Directory directory referenced from FFFF:F000042C FFFF:F0000430 00067752 length=0006, crc=7752 FFFF:F0000434 1200609E Unit_Spec_Id 00609E FFFF:F0000438 13010483 Unit_Sw_Version 010483 FFFF:F000043C 5400C000 Management_Agent crc_offset=00C000 (FFFF:F0030000) FFFF:F0000440 3A401E08 Unit_Characteristics 401E08 FFFF:F0000444 14000000 Logical_Unit_Number o=0, device_type=00, lun=0000 FFFF:F0000448 D4000001 Logical_Unit_Directory directory ind_off=000001 (FFFF:F000044C) Logical_Unit_Directory directory referenced from FFFF:F0000448 FFFF:F000044C 000329A2 length=0003, crc=29A2 FFFF:F0000450 0400500A Module_Hw_Version 00500A FFFF:F0000454 8100000A Textual_Descriptor leaf ind_off=00000A (FFFF:F000047C) FFFF:F0000458 8200000E Bus_Dependent_Info leaf ind_off=00000E (FFFF:F0000490) Textual_Descriptor leaf referenced from FFFF:F0000420 FFFF:F000045C 0007BD5D length=0007, crc=BD5D FFFF:F0000460 00000000 .... FFFF:F0000464 00000000 .... FFFF:F0000468 53594D42 SYMB FFFF:F000046C 494F5320 IOS FFFF:F0000470 4C4F4749 LOGI FFFF:F0000474 432C2049 C, I FFFF:F0000478 4E432E00 NC.. Textual_Descriptor leaf referenced from FFFF:F0000454 FFFF:F000047C 00044469 length=0004, crc=4469 FFFF:F0000480 00000000 .... FFFF:F0000484 00000000 .... FFFF:F0000488 53594D42 SYMB FFFF:F000048C 494F5300 IOS. Bus_Dependent_Info leaf referenced from FFFF:F0000458 FFFF:F0000490 000AE09E length=000A, crc=E09E FFFF:F0000494 00000000 .... FFFF:F0000498 00000000 .... FFFF:F000049C 53594D31 SYM1 FFFF:F00004A0 33465735 3FW5 FFFF:F00004A4 30302D44 00-D FFFF:F00004A8 49534B20 ISK FFFF:F00004AC 44524956 DRIV FFFF:F00004B0 45000000 E... FFFF:F00004B4 00000000 .... FFFF:F00004B8 00000000 .... Listing Two BOOL ReadQuadlet(cls1394HANDLE hDev, LARGE_INTEGER liAddress, QUADLET *qValue) { clsAsyncRead aw; BOOL rc; // Setup request structure aw.DestinationAddress = &liAddress; aw.nNumberOfBytesToRead = sizeof(QUADLET); aw.nBlockSize = 0; aw.fulFlags = 0; aw.lpBuffer = qValue; // Call driver rc = lpfnCls1394DeviceIoControl(hDev,CLS_REQUEST_ASYNC_READ, &aw,sizeof(clsAsyncRead),0,0,0,0); return (rc); } Listing Three // Block Types #define BT_NONE 0 #define BT_DIRECTORY 1 #define BT_LEAF 2 // Block Information Structuretypedef struct BlockInfoStruct { DWORD BlockType; // NONE, DIRECTORY or LEAF DirEntryT ReferringDirEntry; // Copy of the directory entry quadlet DWORD ReferringDirEntryIdx; //Quadlet offset from 0xFFFF:F0000400 } BlockInfoT, *PBlockInfoT; 3