/*
 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * 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.
 *     * Neither the name of The Linux Foundation 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 "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER 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 __PUBLIC_H
#define __PUBLIC_H

#ifdef _WINDOWS
#include <initguid.h>
#define INITGUID


#define FSCTL_FILTER_BASE      FILE_DEVICE_UNKNOWN

#define _FILTER_CTL_CODE(_Function, _Method, _Access)  \
						CTL_CODE(FSCTL_FILTER_BASE, _Function, _Method, _Access)

#define WCLT_SAMPLING_TO_FILE_IS_SUPPORTED
#else
typedef unsigned long ULONG;
#define _FILTER_CTL_CODE(_Function, _Method, _Access) (_Function)

typedef struct
{
  DWORD deviceUID;
  DWORD commandID;
  DWORD dataSize; /* inBufSize + outBufSize */
  DWORD inBufOffset;
  DWORD inBufSize;
  DWORD outBufOffset;
  DWORD outBufSize;
} wlct_ioctl_hdr_t;

static __INLINE BYTE *
wlct_ioctl_data_in(wlct_ioctl_hdr_t *h)
{
  return ((BYTE*)&h[1]) + h->inBufOffset;
}

static __INLINE BYTE *
wlct_ioctl_data_out(wlct_ioctl_hdr_t *h)
{
  return ((BYTE*)&h[1]) + h->outBufOffset;
}
#endif

#ifdef _WINDOWS
// Main Driver GUID
DEFINE_GUID (GUID_DEVINTERFACE_wDrvEp, 0x23d1c0df,0x48f9,0x4c38,0x97,0xa2,0x4a,0xba,0x44,0x97,0x36,0xd1);
// {23D1C0DF-48F9-4C38-97A2-4ABA449736D1}
#endif

//-----------------------------------------------------------------------------------
// Old IOCTLS
//-----------------------------------------------------------------------------------
#define IOCTL_FILTER_GET_CFG   \
			_FILTER_CTL_CODE(0x202, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_SET_CFG   \
			_FILTER_CTL_CODE(0x203, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_CLOSE_LOCAL_DEVICE   \
	_FILTER_CTL_CODE(0x204, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_CLOSE_REMOTE_DEVICE   \
	_FILTER_CTL_CODE(0x205, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_OPEN_LOCAL_DEVICE   \
	_FILTER_CTL_CODE(0x206, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_OPEN_REMOTE_DEVICE   \
	_FILTER_CTL_CODE(0x207, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_OPEN_USER_MODE_EVENT   \
	_FILTER_CTL_CODE(0x208, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_CLOSE_USER_MODE_EVENT   \
	_FILTER_CTL_CODE(0x209, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_GET_INTERRUPT_MODE   \
	_FILTER_CTL_CODE(0x20A, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_FILTER_SET_INTERRUPT_MODE   \
	_FILTER_CTL_CODE(0x20B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_INDIRECT_READ_OLD \
	_FILTER_CTL_CODE(0x210, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_INDIRECT_WRITE_OLD \
	_FILTER_CTL_CODE(0x211, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_INDIRECT_READ_BLOCK \
	_FILTER_CTL_CODE(0x212, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_INDIRECT_READ_REPEAT \
	_FILTER_CTL_CODE(0x213, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)

#define IOCTL_INDIRECT_WRITE_BLOCK \
	_FILTER_CTL_CODE(0x214, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)


//-----------------------------------------------------------------------------------
// New IOCTLS
//-----------------------------------------------------------------------------------
#ifdef _WINDOWS
#define WILOCITY_DEVICE_TYPE				FILE_DEVICE_UNKNOWN
#define WILOCITY_IOCTL(_code_)				CTL_CODE (WILOCITY_DEVICE_TYPE, _code_, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#else
#define WILOCITY_IOCTL(_code_)                          _FILTER_CTL_CODE (_code_, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define ERROR_SUCCESS                                   0L
#endif


/* send WMI command to device.
   The content of pBuf is the WMI message itself. It doesn't include WMI header
   and Marlon MBOX header. */
#define WILOCITY_IOCTL_SEND_WMI					WILOCITY_IOCTL (0x800)

/* receive WMI command from device.
   upon return, pBuf contains the WMI message itself. It doesn't include WMI header
   and Marlon MBOX header.
   This IOCTL should return with error code if there is no pending Rx command */
#define WILOCITY_IOCTL_RECEIVE_WMI				WILOCITY_IOCTL (0x801)

/* registration for indication of incoming WMI command.
   Following that, client will use IOCTL_RECEIVE_WMI to get the incoming WMI command */
#define WILOCITY_IOCTL_REGISTER_WMI_RX_EVENT	WILOCITY_IOCTL (0x803)

/* registration for user mode evnts from Driver. all events besides WMI RX Events */
#define WILOCITY_IOCTL_REGISTER_DEVICE_EVENT	WILOCITY_IOCTL (0x804)
#define WILOCITY_IOCTL_GET_DEVICE_EVENT			WILOCITY_IOCTL (0x805)
#define WILOCITY_IOCTL_REGISTER_EVENT			WILOCITY_IOCTL (0x850)

/* Special IOCTLS */
#define WILOCITY_IOCTL_DEVICE_SW_RESET			WILOCITY_IOCTL (0x807)

/* MiniPort driver only */
#define WILOCITY_IOCTL_DRIVER_LOG_LEVELS_CFG	WILOCITY_IOCTL(0x900)



//-----------------------------------------------------------------------------------
// Other Definitions
//-----------------------------------------------------------------------------------

#define BASE_ADDRESS	0x880000

// used to transfer address to the driver (input parameter)
// or value from the driver (output parameter)
// for example read register
typedef struct _FILTER_1_ULONG_PARAM
{
	DWORD			param;

} FILTER_1_ULONG_PARAM, *PFILTER_1_ULONG_PARAM;

// used to transfer address and value to the driver (input parameter)
// for example write register
typedef struct _FILTER_2_ULONG_PARAMS
{
	DWORD			param1;
	DWORD			param2;

} FILTER_2_ULONG_PARAM, *PFILTER_2_ULONG_PARAM;

#ifdef _WINDOWS
#pragma warning( disable : 4200 ) //suppress warning
#endif
typedef struct _FILTER_WRITE_BLOCK
{
	DWORD			address;
	DWORD			size;	// of 32 bits
	DWORD			buffer[0];

} FILTER_WRITE_BLOCK, *PFILTER_WRITE_BLOCK;

typedef struct _FILTER_INTERRUPT_MODE
{
	BYTE			interruptMode; // 0 - Interrupt, 1 - MSI enable

} FILTER_INTERRUPT_MODE, *PFILTER_INTERRUPT_MODE;


//
//  Structure to go with IOCTL_FILTE_OPEN_DEVICE.
//
typedef struct _FILTER_MAP_DEVICE
{
	BYTE			*userCRSAddress;
	size_t			userCRSSize;

} FILTER_MAP_DEVICE, *PFILTER_MAP_DEVICE;


typedef struct _FILTER_GET_CFG
{
	DWORD			offset;
	DWORD			value;

} FILTER_GET_CFG, *PFILTER_GET_CFG;


typedef struct _FILTER_SET_CFG
{
	DWORD			offset;
	DWORD			value;

} FILTER_SET_CFG, *PFILTER_SET_CFG;


typedef struct _FILTER_OPEN_DEVICE
{

	DWORD 			reserved;
} FILTER_OPEN_DEVICE, *PFILTER_OPEN_DEVICE;

enum{
	PCI,
	CONF
};



/**
* WILOCITY_IOCTL_DRIVER_LOG_LEVELS_CFG
**/
enum {WILO_DRV_NUM_LOG_COMPS = 32};

typedef struct _DRIVER_LOGS_CFG
{
	ULONG logModulesEnableMsk;
	ULONG logModuleLevelsMsk[WILO_DRV_NUM_LOG_COMPS];
} DRIVER_LOGS_CFG, *P_DRIVER_LOGS_CFG;

#ifdef _WINDOWS
typedef struct _EVENT_HANDLE_64BIT
{
	ULONG	DeviceId;
	int    EventId;
	INT_PTR hEvent_l;
	INT_PTR hEvent_h;

} EVENT_HANDLE_64BIT, *PEVENT_HANDLE_64BIT;

typedef struct _EVENT_HANDLE_32BIT
{
	ULONG	DeviceId;
	int    EventId;
	INT_PTR hEvent;
} EVENT_HANDLE_32BIT, *PEVENT_HANDLE_32BIT;
#endif //_WINDOWS

#endif

