/*
 *  Copyright (c) 2016, The OpenThread Authors.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *  3. Neither the name of the copyright holder nor the
 *     names of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *  POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _IOCONTROL_H
#define _IOCONTROL_H

//
// Function prototype for general Io Control functions
//

typedef 
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_IOCTL_FUNC(
    _In_reads_bytes_(InBufferLength)
            PVOID           InBuffer,
    _In_    ULONG           InBufferLength,
    _Out_writes_bytes_(*OutBufferLength)
            PVOID           OutBuffer,
    _Inout_ PULONG          OutBufferLength
    );

//
// General Io Control Functions
//

// Handles queries for the current list of Thread interfaces
OTLWF_IOCTL_FUNC otLwfIoCtlEnumerateInterfaces;

// Handles queries for the details of a specific Thread interface
OTLWF_IOCTL_FUNC otLwfIoCtlQueryInterface;

// Handles IOTCLs for OpenThread control
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
otLwfIoCtlOpenThreadControl(
    _In_ PIRP Irp
    );

// Handles Irp for IOTCLs for OpenThread control on the OpenThread thread
_IRQL_requires_max_(PASSIVE_LEVEL)
VOID
otLwfCompleteOpenThreadIrp(
    _In_ PMS_FILTER     pFilter,
    _In_ PIRP           Irp
    );

// Helper for converting IoCtl to string
const char*
IoCtlString(
    ULONG IoControlCode
    );

//
// Function prototype for OpenThread Io Control functions
//

typedef 
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_OT_IOCTL_FUNC(
    _In_ PMS_FILTER         pFilter,
    _In_reads_bytes_(InBufferLength)
            PUCHAR          InBuffer,
    _In_    ULONG           InBufferLength,
    _Out_writes_bytes_(*OutBufferLength)
            PVOID           OutBuffer,
    _Inout_ PULONG          OutBufferLength
    );

typedef 
_IRQL_requires_max_(PASSIVE_LEVEL)
NTSTATUS
OTLWF_TUN_IOCTL_FUNC(
    _In_ PMS_FILTER         pFilter,
    _In_ PIRP               Irp,
    _In_reads_bytes_(InBufferLength)
            PUCHAR          InBuffer,
    _In_    ULONG           InBufferLength,
    _In_    ULONG           OutBufferLength
    );

typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
NTSTATUS
(SPINEL_IRP_CMD_HANDLER)(
    _In_ spinel_prop_key_t Key,
    _In_reads_bytes_(DataLength) const uint8_t* Data,
    _In_ spinel_size_t DataLength,
    _Out_writes_bytes_(*OutBufferLength)
            PVOID OutBuffer,
    _Inout_ PULONG OutBufferLength
    );

#define DECL_IOCTL_FUNC(X) \
    OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X

#define DECL_IOCTL_FUNC_WITH_TUN(X) \
    OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X; \
    OTLWF_TUN_IOCTL_FUNC otLwfTunIoCtl_##X

#define DECL_IOCTL_FUNC_WITH_TUN2(X) \
    OTLWF_OT_IOCTL_FUNC otLwfIoCtl_##X; \
    OTLWF_TUN_IOCTL_FUNC otLwfTunIoCtl_##X; \
    SPINEL_IRP_CMD_HANDLER otLwfTunIoCtl_##X##_Handler

#define REF_IOCTL_FUNC(X) otLwfIoCtl_##X , NULL

#define REF_IOCTL_FUNC_WITH_TUN(X) otLwfIoCtl_##X , otLwfTunIoCtl_##X

DECL_IOCTL_FUNC_WITH_TUN2(otInterface);
DECL_IOCTL_FUNC_WITH_TUN2(otThread);
DECL_IOCTL_FUNC_WITH_TUN2(otActiveScan);
DECL_IOCTL_FUNC(otDiscover);
DECL_IOCTL_FUNC_WITH_TUN2(otChannel);
DECL_IOCTL_FUNC_WITH_TUN2(otChildTimeout);
DECL_IOCTL_FUNC_WITH_TUN2(otExtendedAddress);
DECL_IOCTL_FUNC_WITH_TUN2(otExtendedPanId);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderRloc);
DECL_IOCTL_FUNC_WITH_TUN2(otLinkMode);
DECL_IOCTL_FUNC_WITH_TUN2(otMasterKey);
DECL_IOCTL_FUNC_WITH_TUN2(otMeshLocalEid);
DECL_IOCTL_FUNC_WITH_TUN2(otMeshLocalPrefix);
//DECL_IOCTL_FUNC(otNetworkDataLeader);
//DECL_IOCTL_FUNC(otNetworkDataLocal);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkName);
DECL_IOCTL_FUNC_WITH_TUN2(otPanId);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterRollEnabled);
DECL_IOCTL_FUNC_WITH_TUN2(otShortAddress);
DECL_IOCTL_FUNC(otActiveDataset);
DECL_IOCTL_FUNC(otPendingDataset);
DECL_IOCTL_FUNC_WITH_TUN2(otLocalLeaderWeight);
DECL_IOCTL_FUNC_WITH_TUN(otAddBorderRouter);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveBorderRouter);
DECL_IOCTL_FUNC_WITH_TUN(otAddExternalRoute);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveExternalRoute);
DECL_IOCTL_FUNC(otSendServerData);
DECL_IOCTL_FUNC_WITH_TUN2(otContextIdReuseDelay);
DECL_IOCTL_FUNC_WITH_TUN2(otKeySequenceCounter);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkIdTimeout);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterUpgradeThreshold);
DECL_IOCTL_FUNC_WITH_TUN(otReleaseRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otMacWhitelistEnabled);
DECL_IOCTL_FUNC_WITH_TUN(otAddMacWhitelist);
DECL_IOCTL_FUNC_WITH_TUN(otRemoveMacWhitelist);
DECL_IOCTL_FUNC(otMacWhitelistEntry);
DECL_IOCTL_FUNC_WITH_TUN(otClearMacWhitelist);
DECL_IOCTL_FUNC_WITH_TUN2(otDeviceRole);
DECL_IOCTL_FUNC(otChildInfoById);
DECL_IOCTL_FUNC(otChildInfoByIndex);
DECL_IOCTL_FUNC(otEidCacheEntry);
DECL_IOCTL_FUNC(otLeaderData);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otLeaderWeight);
DECL_IOCTL_FUNC_WITH_TUN2(otNetworkDataVersion);
DECL_IOCTL_FUNC_WITH_TUN2(otPartitionId);
DECL_IOCTL_FUNC_WITH_TUN2(otRloc16);
DECL_IOCTL_FUNC(otRouterIdSequence);
DECL_IOCTL_FUNC(otRouterInfo);
DECL_IOCTL_FUNC_WITH_TUN2(otStableNetworkDataVersion);
DECL_IOCTL_FUNC(otMacBlacklistEnabled);
DECL_IOCTL_FUNC(otAddMacBlacklist);
DECL_IOCTL_FUNC(otRemoveMacBlacklist);
DECL_IOCTL_FUNC(otMacBlacklistEntry);
DECL_IOCTL_FUNC(otClearMacBlacklist);
DECL_IOCTL_FUNC(otMaxTransmitPower);
DECL_IOCTL_FUNC(otNextOnMeshPrefix);
DECL_IOCTL_FUNC(otPollPeriod);
DECL_IOCTL_FUNC(otLocalLeaderPartitionId);
DECL_IOCTL_FUNC(otAssignLinkQuality);
DECL_IOCTL_FUNC_WITH_TUN(otPlatformReset);
DECL_IOCTL_FUNC_WITH_TUN2(otParentInfo);
DECL_IOCTL_FUNC(otSingleton);
DECL_IOCTL_FUNC(otMacCounters);
DECL_IOCTL_FUNC_WITH_TUN2(otMaxChildren);
DECL_IOCTL_FUNC(otCommissionerStart);
DECL_IOCTL_FUNC(otCommissionerStop);
DECL_IOCTL_FUNC(otJoinerStart);
DECL_IOCTL_FUNC(otJoinerStop);
DECL_IOCTL_FUNC(otFactoryAssignedIeeeEui64);
DECL_IOCTL_FUNC(otHashMacAddress);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterDowngradeThreshold);
DECL_IOCTL_FUNC(otCommissionerPanIdQuery);
DECL_IOCTL_FUNC(otCommissionerEnergyScan);
DECL_IOCTL_FUNC_WITH_TUN2(otRouterSelectionJitter);
DECL_IOCTL_FUNC(otJoinerUdpPort);
DECL_IOCTL_FUNC(otSendDiagnosticGet);
DECL_IOCTL_FUNC(otSendDiagnosticReset);
DECL_IOCTL_FUNC(otCommissionerAddJoiner);
DECL_IOCTL_FUNC(otCommissionerRemoveJoiner);
DECL_IOCTL_FUNC(otCommissionerProvisioningUrl);
DECL_IOCTL_FUNC(otCommissionerAnnounceBegin);
DECL_IOCTL_FUNC_WITH_TUN2(otEnergyScan);
DECL_IOCTL_FUNC(otSendActiveGet);
DECL_IOCTL_FUNC(otSendActiveSet);
DECL_IOCTL_FUNC(otSendPendingGet);
DECL_IOCTL_FUNC(otSendPendingSet);
DECL_IOCTL_FUNC(otSendMgmtCommissionerGet);
DECL_IOCTL_FUNC(otSendMgmtCommissionerSet);
DECL_IOCTL_FUNC_WITH_TUN2(otKeySwitchGuardtime);
DECL_IOCTL_FUNC(otFactoryReset);
DECL_IOCTL_FUNC(otThreadAutoStart);
DECL_IOCTL_FUNC(otThreadPreferredRouterId);
DECL_IOCTL_FUNC_WITH_TUN2(otPSKc);
DECL_IOCTL_FUNC(otParentPriority);

#endif // _IOCONTROL_H
