/*==============================================================================
Copyright(c) 2017 Intel Corporation

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files(the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and / or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
============================================================================*/

#pragma once

#if (_DEBUG || _RELEASE_INTERNAL) && !__GMM_KMD__
    // Not doing #if__cplusplus >= 201103L check because partial C++11 support may
    // work for this. We also want to catch C++11 unavailability due to not setting
    // compiler options.
    #if (_MSC_VER >= 1800) // VS 2013+
        #define GMM_LOG_AVAILABLE 1
    #elif((__clang_major__ > 3) || ((__clang_major__ == 3) && (__clang_minor__ >= 5))) // clang 3.5+
        #define GMM_LOG_AVAILABLE 1
    #elif((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))) // g++ 4.8+
        #define GMM_LOG_AVAILABLE 1
    #else
        #define GMM_LOG_AVAILABLE 0
        // Print out messages if GmmLog was disabled due to compiler issues
        #define STRING2(x) #x
        #define STRING(x) STRING2(x)

        #if (defined __GNUC__)
            #pragma message "Detected g++ " STRING(__GNUC__) "." STRING(__GNUC_MINOR__) ". Minimum compiler version required for GmmLog is GCC 4.8.1. Disabling GmmLog."
        #elif (defined __clang__)
            #pragma message "Detected clang " STRING(__clang_major__) "." STRING(__clang_minor__) ". Minimum compiler version required for GmmLog is clang 3.5. Disabling GmmLog."
        #elif (defined _MSC_VER)
            #pragma message("Detected MSVC++ version " STRING(_MSC_VER) ". Minimum compiler version required for GmmLog is MSVC++ 1800. Disabling GmmLog")
        #else
            #pragma message "Unknown compiler. Disabling GmmLog."
        #endif

        #undef STRING2
        #undef STRING
    #endif
#elif (_DEBUG || _RELEASE_INTERNAL) && __GMM_KMD__ && _WIN32
#define GMM_KMD_LOG_AVAILABLE 1

/////////////////////////////////////////////////////////////////////////////////////
/// GMM_KMD_LOG
/// Gmm logging macro to log a message in KMD mode. Exmaple:
///     GMM_KMD_LOG("Math Addition: %d + %d = %d \r\n", 1, 1, 2);
/////////////////////////////////////////////////////////////////////////////////////
#define GMM_KMD_LOG(message, ...)                                                                   \
        {                                                                                           \
            DWORD CurrentProcessId = (DWORD) (ULONG_PTR)PsGetCurrentProcessId();                    \
            const WCHAR *format = L"%s%d.txt";                                                      \
            WCHAR FileName[] = L"C:\\Intel\\IGfx\\GmmKmd_Proc_";                                    \
            WCHAR FullFileName[KM_FILENAME_LENGTH];                                                 \
                                                                                                    \
            KmGenerateLogFileName(&FullFileName[0], format, FileName, CurrentProcessId);            \
                                                                                                    \
            KM_FILE_IO_OBJ *pGmmKmdLog = KmFileOpen(pHwDevExt, FullFileName, false, false, true);   \
            if (pGmmKmdLog != NULL)                                                                 \
            {                                                                                       \
                KmFilePrintf(pGmmKmdLog, message, __VA_ARGS__);                                     \
                KmFileClose(pGmmKmdLog, false);                                                     \
            }                                                                                       \
        }                                                                                           \

#else // else if Release driver || KMD
    #define GMM_LOG_AVAILABLE 0
#endif

#if GMM_LOG_AVAILABLE

typedef enum GmmLogLevel
{
    Off = 0,
    Trace,
    Info,
    Error, // default
}GmmLogLevel;

#ifdef __cplusplus

#include <iostream>

#define GMM_LOG_FILE_SIZE         1024 * 1024 * 5   // Once log reaches this size, it will start in new file
#define GMM_ROTATE_FILE_NUMBER    3                 // Once log is full, it'll save old log with .1/.2/.3 in name, and then start with .1
#define GMM_LOG_MASSAGE_MAX_SIZE  1024
#define GMM_LOGGER_NAME           "gmm_logger"
#define GMM_LOG_FILENAME          "./gmm_log"
#define GMM_LOG_TAG               "GmmLib"
#define GMM_UNKNOWN_PROCESS       "Unknown_Proc"
#define GMM_PREFIX_STR            "INTC GMM: "

#if _WIN32
    #define GMM_LOG_REG_KEY_SUB_PATH  "SOFTWARE\\Intel\\IGFX\\GMMLOG\\"
    #define GMM_LOG_TO_FILE           "LogToFile"
    #define GMM_LOG_LEVEL_REGKEY      "LogLevel" // GmmLogLevel
#endif //#if _WIN32

extern "C" void GmmLibLogging(GmmLogLevel Level, const char* str, ...);

#define GMM_LOG_TRACE(message, ...) GmmLibLogging(Trace, message, ##__VA_ARGS__)
#define GMM_LOG_TRACE_IF(expression, message, ...)  if(expression) { GmmLibLogging(Trace, message, ##__VA_ARGS__);}

#define GMM_LOG_INFO(message, ...) GmmLibLogging(Info, message, ##__VA_ARGS__)
#define GMM_LOG_INFO_IF(expression, message, ...)  if(expression) { GmmLibLogging(Info, message, ##__VA_ARGS__);}

#define GMM_LOG_ERROR(message, ...) GmmLibLogging(Error, message, ##__VA_ARGS__)
#define GMM_LOG_ERROR_IF(expression, message, ...)  if(expression) { GmmLibLogging(Error, message, ##__VA_ARGS__);}

#else // else C

// Fwd Declarations of C-wrapper functions used for Logging
void GmmLibLogging(GmmLogLevel Level, const char* str, ...);

#define GMM_LOG_TRACE(message, ...) GmmLibLogging(Trace, message, ##__VA_ARGS__)
#define GMM_LOG_TRACE_IF(expression, message, ...)  if(expression) { GmmLibLogging(Trace, message, ##__VA_ARGS__);}

#define GMM_LOG_INFO(message, ...) GmmLibLogging(Info, message, ##__VA_ARGS__)
#define GMM_LOG_INFO_IF(expression, message, ...)  if(expression) { GmmLibLogging(Info, message, ##__VA_ARGS__);}

#define GMM_LOG_ERROR(message, ...) GmmLibLogging(Error, message, ##__VA_ARGS__)
#define GMM_LOG_ERROR_IF(expression, message, ...)  if(expression) { GmmLibLogging(Error, message, ##__VA_ARGS__);}

#endif //#ifdef __cplusplus

#else // else Gmm Log not available

#define GMM_LOG_TRACE(message, ...)
#define GMM_LOG_TRACE_IF(expression, message, ...)

#define GMM_LOG_INFO(message, ...)
#define GMM_LOG_INFO_IF(expression, message, ...)

#define GMM_LOG_ERROR(message, ...)
#define GMM_LOG_ERROR_IF(expression, message, ...)

#endif //#if _WIN32

#if GMM_KMD_LOG_AVAILABLE
#else

#define GMM_KMD_LOG(message, ...)

#endif
