/*++

Copyright (c) Microsoft Corporation. All rights reserved.

Module Name:

    sbp2api.h

Abstract:

    Definitions for the 1394 Sbp2 transport/protocol driver api

Author:

    George Chrysanthakopoulos (georgioc) 2/12/99

Environment:

    Kernel mode only

Revision History:


--*/

#ifndef _NTDDSBP2_H_
#define _NTDDSBP2_H_

#if (_MSC_VER >= 1020)
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

//
// Various definitions
//
#define IOCTL_SBP2_REQUEST                      CTL_CODE( \
                                                FILE_DEVICE_UNKNOWN, \
                                                0x200, \
                                                METHOD_IN_DIRECT, \
                                                FILE_ANY_ACCESS \
                                                )

//
// IEEE 1394 Sbp2 Request packet.  It is how other
// device drivers communicate with the 1sbp2 trasnport.
//

typedef struct _SBP2_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 {

        //
        // Fields necessary in order for the 1394 stack to carry out an
        // ParseTextLeaf request.
        //

        struct {
            ULONG           fulFlags;
            ULONG           Key;        // quadlet direct value to search for
            ULONG           ulLength;
            PVOID           Buffer;        // mdl to store the retrieved text leaf
        } RetrieveTextLeaf;

        struct {
            ULONG           fulFlags;
            ULONG           Parameter;   
            ULONG           Value;    
        } AccessTransportSettings;

        struct {
            ULONG           fulFlags;
        } SetPassword;
    } u;

} SBP2_REQUEST, *PSBP2_REQUEST;

#define SBP2REQ_FLAG_RETRIEVE_VALUE         0x1
#define SBP2REQ_FLAG_MODIFY_VALUE           0x2

//
// sbp2 requests
//

#define SBP2_REQUEST_RETRIEVE_TEXT_LEAFS        1
#define SBP2_REQUEST_ACCESS_TRANSPORT_SETTINGS  2
#define SBP2_REQUEST_SET_PASSWORD               3

//
// values required for the SBP2_REQUEST_RETRIEVE_TEXT_LEAFS call
//

#define SBP2REQ_RETRIEVE_TEXT_LEAF_DIRECT           0x00000001
#define SBP2REQ_RETRIEVE_TEXT_LEAF_INDIRECT         0x00000002
#define SBP2REQ_RETRIEVE_TEXT_LEAF_FROM_UNIT_DIR    0x00000004
#define SBP2REQ_RETRIEVE_TEXT_LEAF_FROM_LU_DIR      0x00000008

//
// values required for the parameter in SBP2_REQUEST_ACCESS_TRANSPORT_SETTINGS call
//

#define SBP2REQ_ACCESS_SETTINGS_QUEUE_SIZE      0x00000001

//
// values required for SBP2_REQUEST_SET_PASSWORD
//

#define SBP2REQ_SET_PASSWORD_CLEAR              0x00000001
#define SBP2REQ_SET_PASSWORD_EXCLUSIVE          0x00000002

#ifdef __cplusplus
}
#endif

#endif      // _NTDDSBP2_H_