723 lines
23 KiB
C
723 lines
23 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
nic1394.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module defines the structures, macros, and manifests available
|
||
|
to IEE1394-aware network components.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
09/14/1998 JosephJ Created.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _NIC1394_H_
|
||
|
#define _NIC1394_H_
|
||
|
|
||
|
//
|
||
|
// Define USER_MODE in your user-mode app before including this file.
|
||
|
//
|
||
|
#if USER_MODE
|
||
|
typedef USHORT NODE_ADDRESS;
|
||
|
#endif // USER_MODE
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// ADDRESS FAMILY VERSION INFORMATION
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// The current major and minor version, respectively, of the NIC1394 address family.
|
||
|
//
|
||
|
#define NIC1394_AF_CURRENT_MAJOR_VERSION 5
|
||
|
#define NIC1394_AF_CURRENT_MINOR_VERSION 0
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// MEDIA PARAMETERS //
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// 1394 FIFO Address, consisting of the 64-bit UniqueID and the
|
||
|
// 48-bit address offset.
|
||
|
//
|
||
|
typedef struct _NIC1394_FIFO_ADDRESS
|
||
|
{
|
||
|
UINT64 UniqueID;
|
||
|
ULONG Off_Low;
|
||
|
USHORT Off_High;
|
||
|
|
||
|
} NIC1394_FIFO_ADDRESS, *PNIC1394_FIFO_ADDRESS;
|
||
|
|
||
|
|
||
|
// enum to identify which of the two modes of transmission on a 1394 is to be used
|
||
|
//
|
||
|
//
|
||
|
|
||
|
typedef enum _NIC1394_ADDRESS_TYPE
|
||
|
{
|
||
|
NIC1394AddressType_Channel, // Indicates this is a channel address
|
||
|
NIC1394AddressType_FIFO, // Indicates this is a FIFO address
|
||
|
NIC1394AddressType_MultiChannel, // Indicates this is multiple-channel address
|
||
|
NIC1394AddressType_Ethernet, // Indicates this is the ethernet emulation VC
|
||
|
|
||
|
} NIC1394_ADDRESS_TYPE, *PNIC1394_ADDRESS_TYPE;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// General form of a 1394 destination, which can specify either a 1394 channel or
|
||
|
// a FIFO address. This structure forms part of the 1394 media-specific
|
||
|
// parameters.
|
||
|
//
|
||
|
typedef struct _NIC1394_DESTINATION
|
||
|
{
|
||
|
union
|
||
|
{
|
||
|
UINT Channel; // IEEE1394 channel number.
|
||
|
NIC1394_FIFO_ADDRESS FifoAddress; // IEEE1394 NodeID and address offset.
|
||
|
ULARGE_INTEGER ChannnelMap; // Identifies multiple channels.
|
||
|
};
|
||
|
|
||
|
|
||
|
NIC1394_ADDRESS_TYPE AddressType; // Address- asynch or isoch
|
||
|
|
||
|
} NIC1394_DESTINATION, *PNIC1394_DESTINATION;
|
||
|
|
||
|
//
|
||
|
// Special channels values
|
||
|
//
|
||
|
#define NIC1394_ANY_CHANNEL ((UINT)-1) // miniport should pick channel.
|
||
|
#define NIC1394_BROADCAST_CHANNEL ((UINT)-2) // special broadcast channel.
|
||
|
|
||
|
//
|
||
|
// This is the value of the ParamType field in the CO_SPECIFIC_PARAMETERS structure
|
||
|
// when the Parameters[] field contains IEEE1394 media specific values in the
|
||
|
// structure NIC1394_MEDIA_PARAMETERS.
|
||
|
//
|
||
|
#define NIC1394_MEDIA_SPECIFIC 0x13940000
|
||
|
|
||
|
|
||
|
//
|
||
|
// NOTES:
|
||
|
// The CO_MEDIA_PARAMETERS.Flags field for FIFO vcs must specify either TRANSMIT_VC
|
||
|
// or RECEIVE_VC, not both. If RECEIVE_VC is specified for a FIFO vc, this vc is
|
||
|
// used to receive on a local FIFO. In this case, the Destination.RecvFIFO field
|
||
|
// must be set to all-0s when creating the vc. On activation of the vc,
|
||
|
// this field of the updated media parameters will contain the local nodes unique ID
|
||
|
// and the allocated FIFO address.
|
||
|
//
|
||
|
// Multi-channel VC MUST specify RECEIVE_VC and not TRANSMIT_VC.
|
||
|
// Only one multi-channel VC is supported per adapter.
|
||
|
//
|
||
|
//
|
||
|
// Ethernet VC MUST specify BOTH RECEIVE_VC and TRANSMIT_VC.
|
||
|
// Only one Ethernet VC is supported per adapter.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Notes on the Ethernet VC.
|
||
|
// Packets sent and received on this VC are ethernet-style (802.3) packets.
|
||
|
// The nic indicates packets it gets on it's connectionless SEND handler up
|
||
|
// on this VC. The nic indicates packets SENT on this VC up on it's connectionless
|
||
|
// receive handler.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// 1394 Specific Media parameters - this is the Media specific structure for 1394
|
||
|
// that goes into MediaParameters->MediaSpecific.Parameters.
|
||
|
//
|
||
|
typedef struct _NIC1394_MEDIA_PARAMETERS
|
||
|
{
|
||
|
//
|
||
|
// Identifies destination type (channel or FIFO) and type-specific address.
|
||
|
//
|
||
|
NIC1394_DESTINATION Destination;
|
||
|
|
||
|
//
|
||
|
// Bitmap encoding characteristics of the vc. One or more NIC1394_VCFLAG_*
|
||
|
// values.
|
||
|
//
|
||
|
ULONG Flags;
|
||
|
|
||
|
//
|
||
|
// Maximum size, in bytes, of blocks to be sent on this vc. Must be set to 0
|
||
|
// if this is a recv-only VCs. The miniport will choose a block size that is a
|
||
|
// minimum of this value and the value dictated by the bus speed map.
|
||
|
// Special value (ULONG -1) indicates "maximum possible block size."
|
||
|
UINT MaxSendBlockSize;
|
||
|
|
||
|
//
|
||
|
// One of the SCODE_* constants defined in 1394.h. Indicates
|
||
|
// the maximum speed to be used for blocks sent on this vc. Must be set to 0
|
||
|
// if this is a recv-only VC. The miniport will choose a speed that is a minimum
|
||
|
// of this value and the value dicated by the bus speed map.
|
||
|
// Special value (ULONG -1) indicates "maximum possible speed."
|
||
|
//
|
||
|
// TODO: change to ... MaxSendSpeedCode;
|
||
|
//
|
||
|
UINT MaxSendSpeed;
|
||
|
|
||
|
//
|
||
|
// Size, in bytes, of the largest packet that will be sent or received on
|
||
|
// this VC. The miniport may use this information to set up internal buffers
|
||
|
// for link-layer fragmentation and reassembly. The miniport will
|
||
|
// fail attempts to send packets and will discard received packets if the
|
||
|
// size of these packets is larger than the MTU.
|
||
|
//
|
||
|
UINT MTU;
|
||
|
//
|
||
|
// Amount of bandwidth to reserve, in units of bytes per isochronous frame.
|
||
|
// Applies only for isochronous transmission, and must be set to 0 for
|
||
|
// asynchronous transmission (i.e., if the NIC1394_VCFLAG_ISOCHRONOUS bit is 0).
|
||
|
//
|
||
|
UINT Bandwidth;
|
||
|
|
||
|
//
|
||
|
// One or more NIC1394_FRAMETYPE_* values. The miniport will attempt to send up
|
||
|
// only pkts with these protocols. However it may send other pkts.
|
||
|
// The client should be able to deal with this. Must be set to 0 if
|
||
|
// no framing is used (i.e., if the NIC1394_VCFLAG_FRAMED bit is 0).
|
||
|
//
|
||
|
ULONG RecvFrameTypes;
|
||
|
|
||
|
} NIC1394_MEDIA_PARAMETERS, *PNIC1394_MEDIA_PARAMETERS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// NIC1394_MEDIA_PARAMETERS.Flags bitfield values
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Indicates VC will be used for isochronous transmission.
|
||
|
//
|
||
|
#define NIC1394_VCFLAG_ISOCHRONOUS (0x1 << 1)
|
||
|
|
||
|
//
|
||
|
// Indicates that the vc is used for framed data. If set, the miniport will
|
||
|
// implement link-level fragmentation and reassembly. If clear, the miniport
|
||
|
// will treat data sent and received on this vc as raw data.
|
||
|
//
|
||
|
#define NIC1394_VCFLAG_FRAMED (0x1 << 2)
|
||
|
|
||
|
//
|
||
|
// Indicates the miniport should allocate the necessary bus resources.
|
||
|
// Currently this only applies for non-broadcast channels, in which case
|
||
|
// the bus resources consist of the network channel number and (for isochronous
|
||
|
// vc's) the bandwidth specified in Bandwidth field.
|
||
|
// This bit does not apply (and should be 0) when creating the broadcast channel
|
||
|
// and either transmit or receive FIFO vcs.
|
||
|
//
|
||
|
#define NIC1394_VCFLAG_ALLOCATE (0x1 << 3)
|
||
|
|
||
|
//
|
||
|
// End of NIC1394_MEDIA_PARAMETERS.Flags bitfield values.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// NIC1394_MEDIA_PARAMETERS.FrameType bitfield values
|
||
|
//
|
||
|
#define NIC1394_FRAMETYPE_ARP (0x1<<0) // Ethertype 0x806
|
||
|
#define NIC1394_FRAMETYPE_IPV4 (0x1<<1) // Ethertype 0x800
|
||
|
#define NIC1394_FRAMETYPE_IPV4MCAP (0x1<<2) // Ethertype 0x8861
|
||
|
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// INFORMATIONAL OIDs //
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
//
|
||
|
// the structure for returning basic information about the miniport
|
||
|
// returned in response to OID_NIC1394_LOCAL_NODE_INFO. Associated with
|
||
|
// the address family handle.
|
||
|
//
|
||
|
typedef struct _NIC1394_LOCAL_NODE_INFO
|
||
|
{
|
||
|
UINT64 UniqueID; // This node's 64-bit Unique ID.
|
||
|
ULONG BusGeneration; // 1394 Bus generation ID.
|
||
|
NODE_ADDRESS NodeAddress; // Local nodeID for the current bus
|
||
|
// generation.
|
||
|
USHORT Reserved; // Padding.
|
||
|
UINT MaxRecvBlockSize; // Maximum size, in bytes, of blocks
|
||
|
// that can be read.
|
||
|
UINT MaxRecvSpeed; // Max speed which can be accepted
|
||
|
// -- minimum
|
||
|
// of the max local link speed and
|
||
|
// the max local PHY speed.
|
||
|
// UNITS: SCODE_XXX_RATE
|
||
|
|
||
|
} NIC1394_LOCAL_NODE_INFO, *PNIC1394_LOCAL_NODE_INFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// The structure for returning basic information about the specified vc
|
||
|
// returned in response to OID_NIC1394_VC_INFO. Associated with
|
||
|
// a vc handle
|
||
|
//
|
||
|
typedef struct _NIC1394_VC_INFO
|
||
|
{
|
||
|
//
|
||
|
// Channel or (unique-ID,offset). In the case of a recv (local) FIFO vc,
|
||
|
// this will be set to the local node's unique ID and address offset.
|
||
|
//
|
||
|
NIC1394_DESTINATION Destination;
|
||
|
|
||
|
} NIC1394_VC_INFO, *PNIC1394_VC_INFO;
|
||
|
|
||
|
//
|
||
|
// The structure for dynamically changing channel characteristics.
|
||
|
//
|
||
|
typedef struct _NIC1394_CHANNEL_CHARACTERISTICS
|
||
|
{
|
||
|
ULARGE_INTEGER ChannelMap; // Must be zero unless specifying a Multi-channel VC.
|
||
|
ULONG Speed; // Same units as NIC1394_MEDIA_PARAMETERS.MaxSendSpeed.
|
||
|
// Special value -1 means "no change in speed."
|
||
|
|
||
|
} NIC1394_CHANNEL_CHARACTERISTICS, *PNIC1394_CHANNEL_CHARACTERISTICS;
|
||
|
|
||
|
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// INDICATIONS //
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// Bus Reset
|
||
|
// Params: NIC1394_LOCAL_NODE_INFO
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
// PACKET FORMATS //
|
||
|
///////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
//
|
||
|
// GASP Header, which prefixes all ip/1394 pkts sent over channels.
|
||
|
// TODO: move this withing NIC1394, because it is not exposed to protocols.
|
||
|
//
|
||
|
typedef struct _NIC1394_GASP_HEADER
|
||
|
{
|
||
|
USHORT source_ID;
|
||
|
USHORT specifier_ID_hi;
|
||
|
UCHAR specifier_ID_lo;
|
||
|
UCHAR version[3];
|
||
|
|
||
|
} NIC1394_GASP_HEADER;
|
||
|
|
||
|
//
|
||
|
// Unfragmented encapsulation header.
|
||
|
//
|
||
|
typedef struct _NIC1394_ENCAPSULATION_HEADER
|
||
|
{
|
||
|
// Set to the 16-bit Node ID of the sending node, in machine-byte order.
|
||
|
// Set to zero if the Node ID of the sender is not known.
|
||
|
//
|
||
|
//
|
||
|
USHORT NodeId;
|
||
|
|
||
|
// The EtherType field is set to the byte-swapped version of one of the
|
||
|
// constants defined immediately below.
|
||
|
//
|
||
|
USHORT EtherType;
|
||
|
|
||
|
// Ethertypes in machine byte order. These values need to be byteswapped
|
||
|
// before they are sent on the wire.
|
||
|
//
|
||
|
#define NIC1394_ETHERTYPE_IP 0x800
|
||
|
#define NIC1394_ETHERTYPE_ARP 0x806
|
||
|
#define NIC1394_ETHERTYPE_MCAP 0x8861
|
||
|
|
||
|
} NIC1394_ENCAPSULATION_HEADER, *PNIC1394_ENCAPSULATION_HEADER;
|
||
|
|
||
|
//
|
||
|
// TODO: get rid of NIC1394_ENCAPSULATION_HEADER
|
||
|
//
|
||
|
typedef
|
||
|
NIC1394_ENCAPSULATION_HEADER
|
||
|
NIC1394_UNFRAGMENTED_HEADER, *PNIC1394_UNFRAGMENTED_HEADER;
|
||
|
|
||
|
|
||
|
//
|
||
|
// FRAGMENTED PACKET FORMATS
|
||
|
//
|
||
|
// TODO: move these to inside NIC1394, because they are only
|
||
|
// used within NIC1394.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Fragmented Encapsulation header: first fragment
|
||
|
//
|
||
|
typedef struct _NIC1394_FIRST_FRAGMENT_HEADER
|
||
|
{
|
||
|
// Contains the 2-bit "lf" field and the 12-bit "buffer_size" field.
|
||
|
// Use the macros immediately below to extract the above fields from
|
||
|
// the lfbufsz. This field needs to be byteswapped before it is sent out
|
||
|
// on the wire.
|
||
|
//
|
||
|
USHORT lfbufsz;
|
||
|
|
||
|
#define NIC1394_LF_FROM_LFBUFSZ(_lfbufsz) \
|
||
|
((_lfbufz) >> 14)
|
||
|
|
||
|
#define NIC1394_BUFFER_SIZE_FROM_LFBUFSZ(_lfbufsz) \
|
||
|
((_lfbufz) & 0xfff)
|
||
|
|
||
|
#define NIC1394_MAX_FRAGMENT_BUFFER_SIZE 0xfff
|
||
|
|
||
|
//
|
||
|
// specifies what the packet is - an IPV4, ARP, or MCAP packet
|
||
|
//
|
||
|
USHORT EtherType;
|
||
|
|
||
|
|
||
|
// Opaque datagram label. There is no need to byteswap this field before it
|
||
|
// is sent out on the wire.
|
||
|
//
|
||
|
USHORT dgl;
|
||
|
|
||
|
// Must be set to 0
|
||
|
//
|
||
|
USHORT reserved;
|
||
|
|
||
|
} NIC1394_FIRST_FRAGMENT_HEADER, *PNIC1394_FIRST_FRAGMENT_HEADER;
|
||
|
|
||
|
//
|
||
|
// Fragmented Encapsulation header: second and subsequent fragments
|
||
|
//
|
||
|
typedef struct _NIC1394_FRAGMENT_HEADER
|
||
|
{
|
||
|
#if OBSOLETE
|
||
|
ULONG lf:2; // Bits 0-1
|
||
|
ULONG rsv0:2; // Bits 2-3
|
||
|
ULONG buffer_size:12; // Bits 4-15
|
||
|
|
||
|
ULONG rsv1:4; // Bits 16-19
|
||
|
ULONG fragment_offset:12; // Bits 20-31
|
||
|
|
||
|
ULONG dgl:16; // Bits 0-15
|
||
|
|
||
|
ULONG reserved:16; // Bits 16-32
|
||
|
#endif // OBSOLETE
|
||
|
|
||
|
// Contains the 2-bit "lf" field and the 12-bit "buffer_size" field.
|
||
|
// The format is the same as NIC1394_FIRST_FRAGMENT_HEADER.lfbufsz.
|
||
|
//
|
||
|
USHORT lfbufsz;
|
||
|
|
||
|
// Opaque datagram label. There is no need to byteswap this field before it
|
||
|
// is setn out on the wire.
|
||
|
//
|
||
|
USHORT dgl;
|
||
|
|
||
|
// Fragment offset. Must be less than or equal to NIC1394_MAX_FRAGMENT_OFFSET.
|
||
|
// This field needs to be byteswapped before it is sent out on the wire.
|
||
|
//
|
||
|
USHORT fragment_offset;
|
||
|
|
||
|
#define NIC1394_MAX_FRAGMENT_OFFSET 0xfff
|
||
|
|
||
|
} NIC1394_FRAGMENT_HEADER, *PNIC1394_FRAGMENT_HEADER;
|
||
|
|
||
|
|
||
|
// NIC1394_PACKET_STATS maintains information about either send or receive
|
||
|
// packet transmission.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT TotNdisPackets; // Total number of NDIS packets sent/indicated
|
||
|
UINT NdisPacketsFailures;// Number of NDIS packets failed/discarded
|
||
|
UINT TotBusPackets; // Total number of BUS-level reads/writes
|
||
|
UINT BusPacketFailures; // Number of BUS-level failures(sends)/discards(recv)
|
||
|
|
||
|
} NIC1394_PACKET_STATS;
|
||
|
|
||
|
// Types of structres used in OID OID_1394_NICINFO
|
||
|
//
|
||
|
typedef enum
|
||
|
{
|
||
|
NIC1394_NICINFO_OP_BUSINFO,
|
||
|
NIC1394_NICINFO_OP_REMOTENODEINFO,
|
||
|
NIC1394_NICINFO_OP_CHANNELINFO,
|
||
|
NIC1394_NICINFO_OP_RESETSTATS,
|
||
|
|
||
|
} NIC1394_NICINFO_OP;
|
||
|
|
||
|
#define NIC1394_NICINFO_VERSION 2
|
||
|
#define NIC1394_MAX_NICINFO_NODES 64
|
||
|
#define NIC1394_MAX_NICINFO_CHANNELS 64
|
||
|
|
||
|
//
|
||
|
// The buffer used in OID OID_1394_NICINFO has the following common header.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
UINT Version; // Set to NIC1394_NICINFO_VERSION
|
||
|
NIC1394_NICINFO_OP Op; // One of NIC1394_NICINFO_OP_*
|
||
|
|
||
|
} NIC1394_NICINFO_HEADER, *PNIC1394_NICINFO_HEADER;
|
||
|
|
||
|
|
||
|
// NIC1394_BUSINFO is the structure corresponding to NIC1394_NICINFO_OP_BUSINFO.
|
||
|
// It provides a summary of bus-wide information.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
NIC1394_NICINFO_HEADER Hdr; // Hdr.Op == *OP_BUSINFO
|
||
|
|
||
|
//
|
||
|
// General information
|
||
|
//
|
||
|
UINT NumBusResets;
|
||
|
UINT SecondsSinceBusReset;
|
||
|
UINT NumOutstandingIrps;
|
||
|
|
||
|
UINT Flags; // One or more NIC1394_BUSINFO_*
|
||
|
|
||
|
#define NIC1394_BUSINFO_LOCAL_IS_IRM 0x1 // Local node is the IRM
|
||
|
|
||
|
// Local node caps
|
||
|
//
|
||
|
NIC1394_LOCAL_NODE_INFO LocalNodeInfo;
|
||
|
|
||
|
//
|
||
|
// CHANNEL RELATED INFORMATION
|
||
|
//
|
||
|
struct
|
||
|
{
|
||
|
|
||
|
// The bus channel map register
|
||
|
//
|
||
|
UINT64 BusMap; // LSB bit == channel 0
|
||
|
|
||
|
// Bitmap of locally active channels.
|
||
|
// More information about each of these channels may be queried
|
||
|
// using NIC1394_NICINFO_OP_CHANNELINFO.
|
||
|
//
|
||
|
UINT64 ActiveChannelMap;
|
||
|
|
||
|
// BROADCAST CHANNEL
|
||
|
//
|
||
|
UINT Bcr; // Broadcast channels register.
|
||
|
NIC1394_PACKET_STATS BcSendPktStats; // Send stats
|
||
|
NIC1394_PACKET_STATS BcRecvPktStats; // Recv stats
|
||
|
|
||
|
// Aggregated Channel stats
|
||
|
//
|
||
|
NIC1394_PACKET_STATS SendPktStats; // Send stats
|
||
|
NIC1394_PACKET_STATS RecvPktStats; // Recv stats
|
||
|
|
||
|
} Channel;
|
||
|
|
||
|
//
|
||
|
// FIFO RELATED INFORMATION.
|
||
|
//
|
||
|
struct
|
||
|
{
|
||
|
// Address offset of the receive fifo.
|
||
|
//
|
||
|
ULONG Recv_Off_Low;
|
||
|
USHORT Recv_Off_High;
|
||
|
|
||
|
// Aggregated stats across all fifos
|
||
|
//
|
||
|
NIC1394_PACKET_STATS RecvPktStats;
|
||
|
NIC1394_PACKET_STATS SendPktStats;
|
||
|
|
||
|
// Current number and min number of available (free) receive buffers.
|
||
|
//
|
||
|
UINT NumFreeRecvBuffers;
|
||
|
UINT MinFreeRecvBuffers;
|
||
|
|
||
|
// Number of outstanding reassemblies (receive side)
|
||
|
//
|
||
|
UINT NumOutstandingReassemblies;
|
||
|
UINT MaxOutstandingReassemblies;
|
||
|
UINT NumAbortedReassemblies;
|
||
|
|
||
|
} Fifo;
|
||
|
|
||
|
struct
|
||
|
{
|
||
|
//
|
||
|
// To display private information, place format strings in FormatA and
|
||
|
// Format B. The display program will do the following:
|
||
|
// if (FormatA[0]) printf(FormatA, A0, A1, A2, A3);
|
||
|
// if (FormatB[0]) printf(FormatB, B0, B1, B2, B3);
|
||
|
//
|
||
|
|
||
|
#define NIC1394_MAX_PRIVATE_FORMAT_SIZE 80
|
||
|
char FormatA[NIC1394_MAX_PRIVATE_FORMAT_SIZE+1];
|
||
|
char FormatB[NIC1394_MAX_PRIVATE_FORMAT_SIZE+1];
|
||
|
UINT A0;
|
||
|
UINT A1;
|
||
|
UINT A2;
|
||
|
UINT A3;
|
||
|
UINT B0;
|
||
|
UINT B1;
|
||
|
UINT B2;
|
||
|
UINT B3;
|
||
|
|
||
|
} Private;
|
||
|
|
||
|
//
|
||
|
// Information about remote nodes. More information about each of these nodes
|
||
|
// may be queried using *OP_REMOTE_NODEINFO
|
||
|
//
|
||
|
UINT NumRemoteNodes;
|
||
|
UINT64 RemoteNodeUniqueIDS[NIC1394_MAX_NICINFO_NODES];
|
||
|
|
||
|
} NIC1394_BUSINFO, *PNIC1394_BUSINFO;
|
||
|
|
||
|
|
||
|
//
|
||
|
// NIC1394_REMOTENODEINFO is structure corresponding to
|
||
|
// NIC1394_NICINFO_OP_REMOTENODEINFO.
|
||
|
// The structure contains basic information about a specific remote node.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
NIC1394_NICINFO_HEADER Hdr; // Hdr.Op == *OP_REMOTENODEINFO
|
||
|
|
||
|
UINT64 UniqueID; // This node's 64-bit Unique ID.
|
||
|
// THIS IS AN IN PARAM
|
||
|
|
||
|
|
||
|
USHORT NodeAddress; // Local nodeID for the current bus
|
||
|
// generation.
|
||
|
USHORT Reserved; // Padding.
|
||
|
UINT MaxRec; // Remote node's MaxRec value.
|
||
|
UINT EffectiveMaxBlockSize;// Max block size, in bytes,
|
||
|
// used when writing to this node.
|
||
|
// It is based on the minimum
|
||
|
// of the max speed between devices
|
||
|
// and the local and remote maxrecs.
|
||
|
UINT MaxSpeedBetweenNodes;// Max speed which can be accepted
|
||
|
// in units of SCODE_XXX_RATE.
|
||
|
|
||
|
UINT Flags; // One or more NIC1394_REMOTEINFO* consts
|
||
|
#define NIC1394_REMOTEINFO_ACTIVE (0x1<<0)
|
||
|
#define NIC1394_REMOTEINFO_LOADING (0x1<<1)
|
||
|
#define NIC1394_REMOTEINFO_UNLOADING (0x1<<2)
|
||
|
|
||
|
NIC1394_PACKET_STATS SendFifoPktStats; // Fifo Sends to this node
|
||
|
NIC1394_PACKET_STATS RecvFifoPktStats; // Fifo Recvs from this node
|
||
|
NIC1394_PACKET_STATS RecvChannelPktStats;// Channel receives from this node
|
||
|
|
||
|
} NIC1394_REMOTENODEINFO, *PNIC1394_REMOTENODEINFO;
|
||
|
|
||
|
|
||
|
// NIC1394_CHANNELINFO is structure corresponding to
|
||
|
// NIC1394_NICINFO_OP_CHANNELINFO.
|
||
|
// The structure contains basic information about a specific channel.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
|
||
|
NIC1394_NICINFO_HEADER Hdr; // Hdr.Op == *OP_CHANNELINFO
|
||
|
|
||
|
UINT Channel; // Channel number (IN PARAM)
|
||
|
UINT SendAge; // Age in seconds since it's been activated for sends.
|
||
|
UINT RecvAge; // Age in seconds since it's been activated for recvs.
|
||
|
UINT Flags; // One or more NIC1394_CHANNELINFO_* defines below
|
||
|
|
||
|
#define NIC1394_CHANNELINFO_RECEIVE_ENABLED 0x1 // Enabled for receive
|
||
|
#define NIC1394_CHANNELINFO_SEND_ENABLED 0x2 // Enabled for send
|
||
|
#define NIC1394_CHANNELINFO_OWNER 0x4 // This node is the owner
|
||
|
|
||
|
|
||
|
NIC1394_PACKET_STATS SendPktStats; // Send stats
|
||
|
NIC1394_PACKET_STATS RecvPktStats; // Recv stats
|
||
|
|
||
|
} NIC1394_CHANNELINFO, *PNIC1394_CHANNELINFO;
|
||
|
|
||
|
// NIC1394_RESETSTATS is structure corresponding to
|
||
|
// NIC1394_NICINFO_OP_RESETSTATS.
|
||
|
// The structure doesn't contain anything useful -- this OP is used to
|
||
|
// reset NIC statistics.
|
||
|
//
|
||
|
typedef struct
|
||
|
{
|
||
|
NIC1394_NICINFO_HEADER Hdr; // Hdr.Op == *OP_RESETSTATS
|
||
|
|
||
|
} NIC1394_RESETSTATS, *PNIC1394_RESETSTATS;
|
||
|
|
||
|
|
||
|
//
|
||
|
// NIC1394_NICINFO is a union of all the structures that are used with
|
||
|
// OID_1394_NICINFO.
|
||
|
//
|
||
|
typedef union
|
||
|
{
|
||
|
NIC1394_NICINFO_HEADER Hdr;
|
||
|
NIC1394_BUSINFO BusInfo;
|
||
|
NIC1394_REMOTENODEINFO RemoteNodeInfo;
|
||
|
NIC1394_CHANNELINFO ChannelInfo;
|
||
|
NIC1394_RESETSTATS ResetStats;
|
||
|
|
||
|
} NIC1394_NICINFO, *PNIC1394_NICINFO;
|
||
|
|
||
|
|
||
|
// Issues a 1394 bus reset. Used to test the BCM algorithm
|
||
|
#define OID_1394_ISSUE_BUS_RESET 0xFF00C910
|
||
|
|
||
|
// UnUsed - could be used to change channel characteristics
|
||
|
#define OID_1394_CHANGE_CHANNEL_CHARACTERISTICS 0xFF00C911
|
||
|
|
||
|
// used to query statistics and other information from the nic
|
||
|
#define OID_1394_NICINFO 0xFF00C912
|
||
|
|
||
|
// Used by arp1394 to ask the nic if it knows of any ip1394 nodes on the net
|
||
|
#define OID_1394_IP1394_CONNECT_STATUS 0xFF00C913
|
||
|
|
||
|
//Used by the bridge to state that the bridge has opened an adapter
|
||
|
#define OID_1394_ENTER_BRIDGE_MODE 0xFF00C914
|
||
|
|
||
|
// Used by the bridge to state that the bridge is closing an adapter
|
||
|
#define OID_1394_EXIT_BRIDGE_MODE 0xFF00C915
|
||
|
|
||
|
// Used by arp1394 to query the Euid, Source, Mac Map - used in the bridge
|
||
|
#define OID_1394_QUERY_EUID_NODE_MAP 0xFF00C916
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
NIC1394_EVENT_BUS_RESET
|
||
|
|
||
|
} NIC1394_EVENT_CODE;
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// This is a struct the miniport uses to indicate an event to the protocols (Arp1394)
|
||
|
// It is used to
|
||
|
// 1. Tell the Arp module that the bus has been reset
|
||
|
// and informs it of the new local node address.
|
||
|
//
|
||
|
typedef struct _NIC1394_STATUS_BUFFER
|
||
|
{
|
||
|
UINT Signature; // == NIC1394_MEDIA_SPECIFIC
|
||
|
|
||
|
NIC1394_EVENT_CODE Event;
|
||
|
|
||
|
|
||
|
union
|
||
|
{
|
||
|
struct
|
||
|
{
|
||
|
NODE_ADDRESS LocalNode;
|
||
|
|
||
|
UINT ulGeneration;
|
||
|
|
||
|
}BusReset;
|
||
|
|
||
|
};
|
||
|
|
||
|
} NIC1394_STATUS_BUFFER, *PNIC1394_STATUS_BUFFER;
|
||
|
|
||
|
|
||
|
|
||
|
#endif // _NIC1394_H_
|
||
|
|