📄 1394.h
字号:
ULONG fulFlags; // Flags
ULONG nChannel; // Channel to be used
ULONG nMaxBytesPerFrame; // Expected size of Isoch frame
ULONG nNumberOfBuffers; // Number of buffer(s) that will be attached
ULONG nMaxBufferSize; // Max size of buffer(s)
ULONG nQuadletsToStrip; // Number striped from start of every packet
HANDLE hResource; // handle to Resource
} IsochAllocateResources;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochAttachBuffers request
// Note that pIsochDescriptor->UlLength must be an integer product of
// pIsochDescriptor->nBytesMaxPerFrame
//
struct {
HANDLE hResource; // Resource handle
ULONG nNumberOfDescriptors; // Number to attach
PISOCH_DESCRIPTOR pIsochDescriptor; // Pointer to start of Isoch descriptors
} IsochAttachBuffers;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochDetachBuffers request
//
struct {
HANDLE hResource; // Resource handle
ULONG nNumberOfDescriptors; // Number to detach
PISOCH_DESCRIPTOR pIsochDescriptor; // Pointer to Isoch descriptors
} IsochDetachBuffers;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochFreeBandwidth request
//
struct {
HANDLE hBandwidth; // Bandwidth handle to release
ULONG nMaxBytesPerFrameRequested; // Bytes per Isoch frame
ULONG fulSpeed; // Speed flags
ULONG BytesPerFrameAvailable; // Available bytes per frame
ULONG SpeedSelected; // Speed to be used
ULONG nBandwidthUnitsRequired; // pre-calculated value
} IsochFreeBandwidth;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochFreeChannel request
//
struct {
ULONG nChannel; // Channel to release
} IsochFreeChannel;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochFreeResources request
//
struct {
HANDLE hResource; // Resource handle
} IsochFreeResources;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochListen request.
//
struct {
HANDLE hResource; // Resource handle to listen on
ULONG fulFlags; // Flags
CYCLE_TIME StartTime; // Cycle time to start
} IsochListen;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochQueryCurrentCycleTime request.
//
struct {
CYCLE_TIME CycleTime; // Current cycle time returned
} IsochQueryCurrentCycleTime;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochQueryResources request.
//
struct {
ULONG fulSpeed; // Speed flags
ULONG BytesPerFrameAvailable; // Per Isoch Frame
LARGE_INTEGER ChannelsAvailable; // Available channels
} IsochQueryResources;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochSetChannelBandwidth request.
//
struct {
HANDLE hBandwidth; // Bandwidth handle
ULONG nMaxBytesPerFrame; // bytes per Isoch frame
ULONG nBandwidthUnitsRequired; // pre-calculated value
} IsochSetChannelBandwidth;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochStop request.
//
struct {
HANDLE hResource; // Resource handle to stop on
ULONG fulFlags; // Flags
} IsochStop;
//
// Fields necessary in order for the Bus driver to carry out a
// IsochTalk request.
//
struct {
HANDLE hResource; // Resource handle to talk on
ULONG fulFlags; // Flags
CYCLE_TIME StartTime; // Cycle time to start
} IsochTalk;
//
// Fields necessary in order for the 1394 stack to carry out an
// AllocateAddressRange request.
// Note:
// if the allocation is specified with no notification options and no RequiredOffset
// the returned address will ALWAYS be a physical address (on ohci).
// As a result these rules apply:
// Allocation - If Callback and Context is specified, since no notification is used
// the callback will be used to notify the caller that the allocation is complete.
// This way the issuer of the alloc doe snot have have to block but instead his callback
// routine will be called asynchronously when this is complete
// The caller must create this irb as usual but instead use the physical mapping routine
// provided by the por driver, in order to usee this request. If it uses IoCallDriver
// the caller cannot specif Context/Callback for a physical address, and he/she has to block
//
struct {
PMDL Mdl; // Address to map to 1394 space
ULONG fulFlags; // Flags for this operation
ULONG nLength; // Length of 1394 space desired
ULONG MaxSegmentSize; // Maximum segment size for a single address element
ULONG fulAccessType; // Desired access: R, W, L
ULONG fulNotificationOptions; // Notify options on Async access
PVOID Callback; // Pointer to callback routine
PVOID Context; // Pointer to driver supplied data
ADDRESS_OFFSET Required1394Offset; // Offset that must be returned
PSLIST_HEADER FifoSListHead; // Pointer to SList FIFO head
PKSPIN_LOCK FifoSpinLock; // Pointer to SList Spin Lock
ULONG AddressesReturned; // Number of addresses returned
PADDRESS_RANGE p1394AddressRange; // Pointer to returned 1394 Address Ranges
HANDLE hAddressRange; // Handle to address range
PVOID DeviceExtension; // Device Extension who created this mapping
} AllocateAddressRange;
//
// Fields necessary in order for the 1394 stack to carry out a
// FreeAddressRange request.
//
struct {
ULONG nAddressesToFree; // Number of Addresses to free
PADDRESS_RANGE p1394AddressRange; // Array of 1394 Address Ranges to Free
PHANDLE pAddressRange; // Array of Handles to address range
PVOID DeviceExtension; // Device Extension who created this mapping
} FreeAddressRange;
//
// Fields necessary in order for the Bus driver to carry out a
// GetLocalHostInformation request.
// All levels ans structures are descrived below
//
struct {
ULONG nLevel; // level of info requested
PVOID Information; // returned information
} GetLocalHostInformation;
//
// Fields necessary in order for the Bus driver to carry out a
// Get1394AddressFromDeviceObject request.
//
struct {
ULONG fulFlags; // Flags
NODE_ADDRESS NodeAddress; // Returned Node address
} Get1394AddressFromDeviceObject;
//
// Fields necessary in order for the Bus driver to carry out a
// Control request.
//
struct {
ULONG ulIoControlCode; // Control code
PMDL pInBuffer; // Input buffer
ULONG ulInBufferLength; // Input buffer length
PMDL pOutBuffer; // Output buffer
ULONG ulOutBufferLength; // Output buffer length
ULONG BytesReturned; // Bytes returned
} Control;
//
// Fields necessary in order for the Bus driver to carry out a
// GetMaxSpeedBetweenDevices request.
//
struct {
ULONG fulFlags; // Flags
ULONG ulNumberOfDestinations; // Number of destinations
PDEVICE_OBJECT hDestinationDeviceObjects[64]; // Destinations
ULONG fulSpeed; // Max speed returned
} GetMaxSpeedBetweenDevices;
//
// Fields necessary in order for the Bus driver to carry out a
// SetDeviceXmitProperties request.
//
struct {
ULONG fulSpeed; // Speed
ULONG fulPriority; // Priority
} SetDeviceXmitProperties;
//
// Fields necessary in order for the Bus driver to carry out a
// SetPortProperties request.
//
struct {
ULONG nLevel;
PVOID Information;
} SetLocalHostProperties;
//
// Fields necessary in order for the Bus driver to carry out a
// GetConfigurationInformation request.
//
struct {
PCONFIG_ROM ConfigRom; // Pointer to config rom
ULONG UnitDirectoryBufferSize;
PVOID UnitDirectory; // Pointer to unit directory
IO_ADDRESS UnitDirectoryLocation; // Starting Location of Unit Directory
ULONG UnitDependentDirectoryBufferSize;
PVOID UnitDependentDirectory;
IO_ADDRESS UnitDependentDirectoryLocation;
ULONG VendorLeafBufferSize; // Size available to get vendor leafs
PTEXTUAL_LEAF VendorLeaf; // Pointer to vendor leafs
ULONG ModelLeafBufferSize; // Size available to get model leafs
PTEXTUAL_LEAF ModelLeaf; // Pointer to model leafs
} GetConfigurationInformation;
//
// Fields necessary in order for the Bus driver to carry out a
// BusReset request
//
struct {
ULONG fulFlags; // Flags for Bus Reset
} BusReset;
//
// Fields necessary in order for the Bus driver to carry out a
// GetGenerationCount request.
//
struct {
ULONG GenerationCount; // generation count
} GetGenerationCount;
//
// Fields necessary in order for the Bus driver to carry out a
// SendPhyConfigurationPacket request.
//
struct {
PHY_CONFIGURATION_PACKET PhyConfigurationPacket; // Phy packet
} SendPhyConfigurationPacket;
//
// Fields necessary in order for the Bus driver to carry out a
// GetSpeedTopologyMaps request.
// The topology map and speed map are in big endian
//
struct {
PSPEED_MAP SpeedMap;
PTOPOLOGY_MAP TopologyMap;
} GetSpeedTopologyMaps;
//
// Fields necessary in order for the Bus driver to carry out a
// BusResetNotification request.
// This is the suggested method for a client driver on top of 1394bus, to get notified
// about 1394 bus resets. The client register by using this IRB, in its START_DEVICE
// routine and de-registers using the same IRB (but different flags) in its REMOVE routine
// This notification will ONLY be issued if after th ebus reset, the target device is
// STILL present on the bus. This way the caller does not have to verify its existence
//
struct {
ULONG fulFlags;
PBUS_BUS_RESET_NOTIFICATION ResetRoutine;
PVOID ResetContext;
} BusResetNotification;
//
// Fields necessary in order for the Bus driver to carry out a
// AsyncStream request.
//
struct {
ULONG nNumberOfBytesToStream; // Bytes to stream
ULONG fulFlags; // Flags pertinent to stream
PMDL Mdl; // Source buffer
ULONG ulTag; // Tag
ULONG nChannel; // Channel
ULONG ulSynch; // Sy
ULONG Reserved; // Reserved for future use
UCHAR nSpeed;
} AsyncStream;
} u;
} IRB, *PIRB;
#define IRB_FLAG_USE_PRE_CALCULATED_VALUE 1
#define IRB_FLAG_ALLOW_REMOTE_FREE 2
//
// Definition of minidriver capability bits
//
//
// Specifies port driver has no special capabilities.
//
#define PORT_SUPPORTS_NOTHING 0
//
// Specifies port driver implements the core 1394 CSRs internally. These
// may be implemented in software/hardware. When this bit is ON, all
// local read/write requests to the core CSRs are passed down to the
// port driver, and the 1394 Bus driver does not issue "listens" for
// the virtual CSR locations. If this bit is OFF, the 1394 Bus driver
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -