?? 1394.h
字號:
#define TCODE_READ_RESPONSE_BLOCK 7 // 0111b
#define TCODE_CYCLE_START 8 // 1000b
#define TCODE_LOCK_REQUEST 9 // 1001b
#define TCODE_ISOCH_DATA_BLOCK 10 // 1010b
#define TCODE_LOCK_RESPONSE 11 // 1011b
#define TCODE_RESERVED2 12
#define TCODE_RESERVED3 13
#define TCODE_SELFID 14
#define TCODE_RESERVED4 15
#define TCODE_REQUEST_BLOCK_MASK 1
#define TCODE_RESPONSE_MASK 2
//
// 1394 Extended Transaction codes
//
#define EXT_TCODE_RESERVED0 0
#define EXT_TCODE_MASK_SWAP 1
#define EXT_TCODE_COMPARE_SWAP 2
#define EXT_TCODE_FETCH_ADD 3
#define EXT_TCODE_LITTLE_ADD 4
#define EXT_TCODE_BOUNDED_ADD 5
#define EXT_TCODE_WRAP_ADD 6
//
// 1394 Acknowledgement codes
//
#define ACODE_RESERVED_0 0
#define ACODE_ACK_COMPLETE 1
#define ACODE_ACK_PENDING 2
#define ACODE_RESERVED_3 3
#define ACODE_ACK_BUSY_X 4
#define ACODE_ACK_BUSY_A 5
#define ACODE_ACK_BUSY_B 6
#define ACODE_RESERVED_7 7
#define ACODE_RESERVED_8 8
#define ACODE_RESERVED_9 9
#define ACODE_RESERVED_10 10
#define ACODE_RESERVED_11 11
#define ACODE_RESERVED_12 12
#define ACODE_ACK_DATA_ERROR 13
#define ACODE_ACK_TYPE_ERROR 14
#define ACODE_RESERVED_15 15
//
// 1394 Ack code to NT status mask (to be OR'd in when completing IRPs)
//
#define ACODE_STATUS_MASK ((NTSTATUS)0xC0120070L)
//
// 1394 Response codes
//
#define RCODE_RESPONSE_COMPLETE 0
#define RCODE_RESERVED1 1
#define RCODE_RESERVED2 2
#define RCODE_RESERVED3 3
#define RCODE_CONFLICT_ERROR 4
#define RCODE_DATA_ERROR 5
#define RCODE_TYPE_ERROR 6
#define RCODE_ADDRESS_ERROR 7
#define RCODE_TIMED_OUT 15
//
// 1394 Response code to NT status mask (to be OR'd in when completing IRPs)
//
#define RCODE_STATUS_MASK ((NTSTATUS)0xC0120080L)
#define STATUS_INVALID_GENERATION ((NTSTATUS)0xC0128090L)
//
// 1394 Speed codes
//
#define SCODE_100_RATE 0
#define SCODE_200_RATE 1
#define SCODE_400_RATE 2
#define SCODE_800_RATE 3
#define SCODE_1600_RATE 4
#define SCODE_3200_RATE 5
//
// 1394 Self ID definitions
//
#define SELF_ID_CONNECTED_TO_CHILD 3
#define SELF_ID_CONNECTED_TO_PARENT 2
#define SELF_ID_NOT_CONNECTED 1
#define SELF_ID_NOT_PRESENT 0
//
// 1394 Self ID Power Class definitions
//
#define POWER_CLASS_NOT_NEED_NOT_REPEAT 0
#define POWER_CLASS_SELF_POWER_PROVIDE_15W 1
#define POWER_CLASS_SELF_POWER_PROVIDE_30W 2
#define POWER_CLASS_SELF_POWER_PROVIDE_45W 3
#define POWER_CLASS_MAYBE_POWERED_UPTO_1W 4
#define POWER_CLASS_IS_POWERED_UPTO_1W_NEEDS_2W 5
#define POWER_CLASS_IS_POWERED_UPTO_1W_NEEDS_5W 6
#define POWER_CLASS_IS_POWERED_UPTO_1W_NEEDS_9W 7
//
// 1394 Phy Packet Ids
//
#define PHY_PACKET_ID_CONFIGURATION 0
#define PHY_PACKET_ID_LINK_ON 1
#define PHY_PACKET_ID_SELF_ID 2
//
// Various Interesting 1394 IEEE 1212 locations
//
#define INITIAL_REGISTER_SPACE_HI 0xffff
#define INITIAL_REGISTER_SPACE_LO 0xf0000000
#define STATE_CLEAR_LOCATION 0x000
#define STATE_SET_LOCATION 0x004
#define NODE_IDS_LOCATION 0x008
#define RESET_START_LOCATION 0x00C
#define SPLIT_TIMEOUT_HI_LOCATION 0x018
#define SPLIT_TIMEOUT_LO_LOCATION 0x01C
#define INTERRUPT_TARGET_LOCATION 0x050
#define INTERRUPT_MASK_LOCATION 0x054
#define CYCLE_TIME_LOCATION 0x200
#define BUS_TIME_LOCATION 0x204
#define POWER_FAIL_IMMINENT_LOCATION 0x208
#define POWER_SOURCE_LOCATION 0x20C
#define BUSY_TIMEOUT_LOCATION 0x210
#define BUS_MANAGER_ID_LOCATION 0x21C
#define BANDWIDTH_AVAILABLE_LOCATION 0x220
#define CHANNELS_AVAILABLE_LOCATION 0x224
#define NETWORK_CHANNELS_LOCATION 0x234
#define CONFIG_ROM_LOCATION 0x400
#define TOPOLOGY_MAP_LOCATION 0x1000
#define SPEED_MAP_LOCATION 0x2000
//
// 1394 Configuration key values and masks
//
#define CONFIG_ROM_KEY_MASK 0x000000ff
#define CONFIG_ROM_OFFSET_MASK 0xffffff00
#define MODULE_VENDOR_ID_KEY_SIGNATURE 0x03
#define NODE_CAPABILITIES_KEY_SIGNATURE 0x0c
#define SPEC_ID_KEY_SIGNATURE 0x12
#define SOFTWARE_VERSION_KEY_SIGNATURE 0x13
#define MODEL_ID_KEY_SIGNATURE 0x17
#define COMMAND_BASE_KEY_SIGNATURE 0x40
#define VENDOR_KEY_SIGNATURE 0x81
#define TEXTUAL_LEAF_INDIRECT_KEY_SIGNATURE 0x81
#define MODEL_KEY_SIGNATURE 0x82
#define UNIT_DIRECTORY_KEY_SIGNATURE 0xd1
#define UNIT_DEP_DIR_KEY_SIGNATURE 0xd4
//
// 1394 Async Data Payload Sizes
//
#define ASYNC_PAYLOAD_100_RATE 512
#define ASYNC_PAYLOAD_200_RATE 1024
#define ASYNC_PAYLOAD_400_RATE 2048
//
// 1394 Isoch Data Payload Sizes
//
#define ISOCH_PAYLOAD_50_RATE 512
#define ISOCH_PAYLOAD_100_RATE 1024
#define ISOCH_PAYLOAD_200_RATE 2048
#define ISOCH_PAYLOAD_400_RATE 4096
#define ISOCH_PAYLOAD_800_RATE 8192
#define ISOCH_PAYLOAD_1600_RATE 16384
//
// Various definitions
//
#define S100_BW_UNITS_PER_QUADLET 19 // Per quad per frame
#define S200_BW_UNITS_PER_QUADLET 9 // Per quad per frame
#define S400_BW_UNITS_PER_QUADLET 4 // Per quad per frame
#define S800_BW_UNITS_PER_QUADLET 2 // Per quad per frame
#define S1600_BW_UNITS_PER_QUADLET 1 // Per quad per frame
#define INITIAL_BANDWIDTH_UNITS 4915 // Initial bandwidth units
#define MAX_REC_100_RATE 0x08 // 1000b
#define MAX_REC_200_RATE 0x09 // 1001b
#define MAX_REC_400_RATE 0x0a // 1010b
#define LOCAL_BUS 0x3ff
#define MAX_LOCAL_NODES 64
#define SELFID_PACKET_SIGNITURE 2
#define NOMINAL_CYCLE_TIME 125 // Microseconds
#define NO_BUS_MANAGER 0x3f
#define SPEED_MAP_LENGTH 0x3f1
#define DEVICE_EXTENSION_TAG 0xdeadbeef
#define VIRTUAL_DEVICE_EXTENSION_TAG 0xdeafbeef
#define PORT_EXTENSION_TAG 0xdeafcafe
#define BUS_EXTENSION_TAG 0xabacadab
#define ISOCH_RESOURCE_TAG 0xbabeface
#define BANDWIDTH_ALLOCATE_TAG 0xfeedbead
#define CONFIG_ROM_SIGNATURE 0x31333934
//
// IRB function number definitions.
//
#define REQUEST_ASYNC_READ 0
#define REQUEST_ASYNC_WRITE 1
#define REQUEST_ASYNC_LOCK 2
#define REQUEST_ISOCH_ALLOCATE_BANDWIDTH 3
#define REQUEST_ISOCH_ALLOCATE_CHANNEL 4
#define REQUEST_ISOCH_ALLOCATE_RESOURCES 5
#define REQUEST_ISOCH_ATTACH_BUFFERS 6
#define REQUEST_ISOCH_DETACH_BUFFERS 7
#define REQUEST_ISOCH_FREE_BANDWIDTH 8
#define REQUEST_ISOCH_FREE_CHANNEL 9
#define REQUEST_ISOCH_FREE_RESOURCES 10
#define REQUEST_ISOCH_LISTEN 11
#define REQUEST_ISOCH_STOP 12
#define REQUEST_ISOCH_TALK 13
#define REQUEST_ISOCH_QUERY_CYCLE_TIME 14
#define REQUEST_ISOCH_QUERY_RESOURCES 15
#define REQUEST_ISOCH_SET_CHANNEL_BANDWIDTH 16
#define REQUEST_ALLOCATE_ADDRESS_RANGE 17
#define REQUEST_FREE_ADDRESS_RANGE 18
#define REQUEST_GET_LOCAL_HOST_INFO 19
#define REQUEST_GET_ADDR_FROM_DEVICE_OBJECT 20
#define REQUEST_CONTROL 21
#define REQUEST_GET_SPEED_BETWEEN_DEVICES 22
#define REQUEST_SET_DEVICE_XMIT_PROPERTIES 23
#define REQUEST_GET_CONFIGURATION_INFO 24
#define REQUEST_BUS_RESET 25
#define REQUEST_GET_GENERATION_COUNT 26
#define REQUEST_SEND_PHY_CONFIG_PACKET 27
#define REQUEST_GET_SPEED_TOPOLOGY_MAPS 28
#define REQUEST_BUS_RESET_NOTIFICATION 29
#define REQUEST_ASYNC_STREAM 30
#define REQUEST_SET_LOCAL_HOST_PROPERTIES 31
#define IRB_BUS_RESERVED_SZ 8
#define IRB_PORT_RESERVED_SZ 8
typedef
VOID
(*PBUS_NOTIFICATION_ROUTINE) ( // We will call this routine
IN PNOTIFICATION_INFO NotificationInfo // at DISPATCH_LEVEL
);
typedef
VOID
(*PBUS_ISOCH_DESCRIPTOR_ROUTINE) ( // We will call this routine
IN PVOID Context1, // at DISPATCH_LEVEL
IN PVOID Context2
);
typedef
VOID
(*PBUS_BUS_RESET_NOTIFICATION) ( // We will call this routine
IN PVOID Context // at DISPATCH_LEVEL
);
//
// Device Extension common to all nodes that the 1394 Bus driver
// created when it enumerated the bus and found a new unique node
//
typedef struct _NODE_DEVICE_EXTENSION {
//
// Holds Tag to determine if this is really a "Node" Device Extension
//
ULONG Tag;
//
// Holds the flag as to whether or not we've read the configuration
// information out of this device.
//
BOOLEAN bConfigurationInformationValid;
//
// Holds the Configuration Rom for this device. Multi-functional
// devices (i.e. many units) will share this same Config Rom
// structure, but they are represented as a different Device Object.
// This is not the entire Config Rom, but does contain the root directory
// as well as everything in front of it.
//
PCONFIG_ROM ConfigRom;
//
// Holds the length of the UnitDirectory pointer.
//
ULONG UnitDirectoryLength;
//
// Holds the Unit Directory for this device. Even on multi-functional
// devices (i.e. many units) this should be unique to each Device Object.
//
PVOID UnitDirectory;
//
// Holds the Unit Directory location for this device. Only the lower 48
// bits are valid in this IO_ADDRESS. Useful for computing offsets from
// within the UnitDirectory as all offsets are relative.
//
IO_ADDRESS UnitDirectoryLocation;
//
// Holds the length of the UnitDependentDirectory pointer.
//
ULONG UnitDependentDirectoryLength;
//
// Holds the Unit Dependent directory for this device.
//
PVOID UnitDependentDirectory;
//
// Holds the Unit Dependent Directory location for this device. Only the
// lower 48 bits are valid in this IO_ADDRESS. Useful for computing
// offsets from within the UnitDependentDirectory as offsets are relative.
//
IO_ADDRESS UnitDependentDirectoryLocation;
//
// Holds the length of the VendorLeaf pointer.
//
ULONG VendorLeafLength;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -