text: /*++
  Copyright (c) 1998-2001  Microsoft Corporation
  
  Module Name:
  
      ntkd1394.h
  
  Abstract:
  
      Header file for 1394 Debugging
  
  Author:
  
      George Chrysanthakopoulos (georgioc) 31-October-1999
  
  Revision   History:
  Date       Who       What
  ---------- --------- ------------------------------------------------------------
  06/19/2001 pbinder   cleanup
  --*/
  
  // {66f250d6-7801-4a64-b139-eea80a450b24}
  DEFINE_GUID(GUID_1394DBG, 0x66f250d6, 0x7801, 0x4a64, 0xb1, 0x39, 0xee, 0xa8, 0x0a, 0x45, 0x0b, 0x24);
  
  #define DEBUG_1394_MAJOR_VERSION            0x1
  #define DEBUG_1394_MINOR_VERSION            0x0
  
  #define DEBUG_1394_CONFIG_TAG               0xBABABABA
  
  #define INSTANCE_DEVICE_SYMLINK_NAME        L"\\DosDevices\\DBG1394_INSTANCE"
  #define INSTANCE_DEVICE_NAME                L"\\Device\\Dbg1394_Instance"
  
  #define DEBUG_BUS1394_MAX_PACKET_SIZE       4000
  
  typedef struct _DEBUG_1394_SEND_PACKET {
  
      ULONG               TransferStatus;
      ULONG               PacketHeader[4];
      ULONG               Length;
      UCHAR               Packet[DEBUG_BUS1394_MAX_PACKET_SIZE];
  
  } DEBUG_1394_SEND_PACKET, *PDEBUG_1394_SEND_PACKET;
  
  typedef struct _DEBUG_1394_RECEIVE_PACKET {
  
      ULONG               TransferStatus;
      ULONG               Length;
      UCHAR               Packet[DEBUG_BUS1394_MAX_PACKET_SIZE];
  
  } DEBUG_1394_RECEIVE_PACKET, *PDEBUG_1394_RECEIVE_PACKET;
  
  // exists on target. client uses to match for id.
  typedef struct _DEBUG_1394_CONFIG {
  
      ULONG               Tag;
      USHORT              MajorVersion;
      USHORT              MinorVersion;
      ULONG               Id;
      ULONG               BusPresent;    
      PHYSICAL_ADDRESS    SendPacket;
      PHYSICAL_ADDRESS    ReceivePacket;
  
  } DEBUG_1394_CONFIG, *PDEBUG_1394_CONFIG;
  
  //
  // Various definitions
  //
  #define IOCTL_V1394DBG_API_REQUEST          CTL_CODE( FILE_DEVICE_UNKNOWN, \
                                                        0x200,               \
                                                        METHOD_BUFFERED,     \
                                                        FILE_ANY_ACCESS)
  
  
  //
  // Debug 1394 Request Packets
  //
  typedef struct _VDBG1394_API_CONFIGURATION {
  
      ULONG           OperationMode;
      ULONG           fulFlags;
      ULARGE_INTEGER  HostControllerInstanceId;
      ULONG           PhySpeed;
  
  } VDBG1394_API_CONFIGURATION, *PVDBG1394_API_CONFIGURATION;
  
  typedef struct _VDBG1394_API_IO_PARAMETERS {
  
      ULONG               fulFlags;
      PHYSICAL_ADDRESS    StartingMemoryOffset;
  
  } VDBG1394_API_IO_PARAMETERS, *PVDBG1394_IO_PARAMETERS;
  
  #ifndef _1394_H_
  
  //
  // 1394 Node Address format
  //
  typedef struct _NODE_ADDRESS {
      USHORT              NA_Node_Number:6;       // Bits 10-15
      USHORT              NA_Bus_Number:10;       // Bits 0-9
  } NODE_ADDRESS, *PNODE_ADDRESS;
  
  //
  // 1394 Address Offset format (48 bit addressing)
  //
  typedef struct _ADDRESS_OFFSET {
      USHORT              Off_High;
      ULONG               Off_Low;
  } ADDRESS_OFFSET, *PADDRESS_OFFSET;
  
  //
  // 1394 I/O Address format
  //
  typedef struct _IO_ADDRESS {
      NODE_ADDRESS        IA_Destination_ID;
      ADDRESS_OFFSET      IA_Destination_Offset;
  } IO_ADDRESS, *PIO_ADDRESS;
  
  #endif
  
  typedef struct _V1394DBG_API_ASYNC_READ {
  
      IO_ADDRESS      DestinationAddress;
      ULONG           DataLength;
      UCHAR           Data[1];
  
  } VDBG1394_API_ASYNC_READ, *PVDBG1394_API_ASYNC_READ;
  
  typedef struct _V1394DBG_API_REQUEST {
  
      //
      // Holds the zero based Function number that corresponds to the request
      // that device drivers are asking the sbp2 port driver to carry out.
      //
  
      ULONG RequestNumber;
  
      //
      // Holds Flags that may be unique to this particular operation
      //
  
      ULONG Flags;
  
      //
      // Holds the structures used in performing the various 1394 APIs
      //
  
      union {
  
          VDBG1394_API_CONFIGURATION SetConfiguration;
          VDBG1394_API_CONFIGURATION GetConfiguration;
          VDBG1394_API_IO_PARAMETERS SetIoParameters;
          VDBG1394_API_IO_PARAMETERS GetIoParameters;
  
          VDBG1394_API_ASYNC_READ    AsyncRead;
      } u;
  
  } V1394DBG_API_REQUEST, *PV1394DBG_API_REQUEST;
  
  //
  // Request Number
  //
  #define V1394DBG_API_SET_CONFIGURATION                      0x00000001
  #define V1394DBG_API_GET_CONFIGURATION                      0x00000002
  #define V1394DBG_API_SET_IO_PARAMETERS                      0x00000003
  #define V1394DBG_API_GET_IO_PARAMETERS                      0x00000004
  #define V1394DBG_API_SET_DEBUG_MODE                         0x00000005
  #define V1394DBG_API_ASYNC_READ                             0x00000006
  
  #define V1394DBG_API_CONFIGURATION_MODE_DEBUG               0x00000000
  #define V1394DBG_API_CONFIGURATION_MODE_RAW_MEMORY_ACCESS   0x00000001
  
  #define V1394DBG_API_FLAG_WRITE_IO                          0x00000001
  #define V1394DBG_API_FLAG_READ_IO                           0x00000002
  
  // 3 different debug modes flags
  #define V1394DBG_API_MODE_KD_CLIENT                         0x00000001
  #define V1394DBG_API_MODE_USER_CLIENT                       0x00000002
  #define V1394DBG_API_MODE_USER_SERVER                       0x00000003
  
  