/*************************************************************************/ /*! @Title Debug driver @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved @Description Debug Driver Interface @License Dual MIT/GPLv2 The contents of this file are subject to the MIT license as set out below. 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. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 ("GPL") in which case the provisions of GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of GPL, and not to allow others to use your version of this file under the terms of the MIT license, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by GPL as set out in the file called "GPL-COPYING" included in this distribution. If you do not delete the provisions above, a recipient may use your version of this file under the terms of either the MIT license or GPL. This License is also included in this distribution in the file called "MIT-COPYING". EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) 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; AND (B) 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. */ /**************************************************************************/ #ifndef _DBGDRVIF_ #define _DBGDRVIF_ #if defined(__linux__) #define FILE_DEVICE_UNKNOWN 0 #define METHOD_BUFFERED 0 #define FILE_ANY_ACCESS 0 #define CTL_CODE( DeviceType, Function, Method, Access ) (Function) #define MAKEIOCTLINDEX(i) ((i) & 0xFFF) #else #include "ioctldef.h" #endif /***************************************************************************** Stream mode stuff. *****************************************************************************/ #define DEBUG_CAPMODE_FRAMED 0x00000001UL #define DEBUG_CAPMODE_CONTINUOUS 0x00000002UL #define DEBUG_CAPMODE_HOTKEY 0x00000004UL #define DEBUG_OUTMODE_STANDARDDBG 0x00000001UL #define DEBUG_OUTMODE_MONO 0x00000002UL #define DEBUG_OUTMODE_STREAMENABLE 0x00000004UL #define DEBUG_OUTMODE_ASYNC 0x00000008UL #define DEBUG_OUTMODE_SGXVGA 0x00000010UL #define DEBUG_FLAGS_USE_NONPAGED_MEM 0x00000001UL #define DEBUG_FLAGS_NO_BUF_EXPANDSION 0x00000002UL #define DEBUG_FLAGS_ENABLESAMPLE 0x00000004UL #define DEBUG_FLAGS_READONLY 0x00000008UL #define DEBUG_FLAGS_WRITEONLY 0x00000010UL #define DEBUG_FLAGS_TEXTSTREAM 0x80000000UL /***************************************************************************** Debug level control. Only bothered with the first 12 levels, I suspect you get the idea... *****************************************************************************/ #define DEBUG_LEVEL_0 0x00000001UL #define DEBUG_LEVEL_1 0x00000003UL #define DEBUG_LEVEL_2 0x00000007UL #define DEBUG_LEVEL_3 0x0000000FUL #define DEBUG_LEVEL_4 0x0000001FUL #define DEBUG_LEVEL_5 0x0000003FUL #define DEBUG_LEVEL_6 0x0000007FUL #define DEBUG_LEVEL_7 0x000000FFUL #define DEBUG_LEVEL_8 0x000001FFUL #define DEBUG_LEVEL_9 0x000003FFUL #define DEBUG_LEVEL_10 0x000007FFUL #define DEBUG_LEVEL_11 0x00000FFFUL #define DEBUG_LEVEL_SEL0 0x00000001UL #define DEBUG_LEVEL_SEL1 0x00000002UL #define DEBUG_LEVEL_SEL2 0x00000004UL #define DEBUG_LEVEL_SEL3 0x00000008UL #define DEBUG_LEVEL_SEL4 0x00000010UL #define DEBUG_LEVEL_SEL5 0x00000020UL #define DEBUG_LEVEL_SEL6 0x00000040UL #define DEBUG_LEVEL_SEL7 0x00000080UL #define DEBUG_LEVEL_SEL8 0x00000100UL #define DEBUG_LEVEL_SEL9 0x00000200UL #define DEBUG_LEVEL_SEL10 0x00000400UL #define DEBUG_LEVEL_SEL11 0x00000800UL /***************************************************************************** IOCTL values. *****************************************************************************/ #define DEBUG_SERVICE_IOCTL_BASE 0x800UL #define DEBUG_SERVICE_CREATESTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_DESTROYSTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_GETSTREAM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x03, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITESTRING CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x04, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_READSTRING CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x05, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x06, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_READ CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x07, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETDEBUGMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETDEBUGOUTMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x09, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETDEBUGLEVEL CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0A, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0B, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_GETFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0C, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_OVERRIDEMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0D, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_DEFAULTMODE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0E, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_GETSERVICETABLE CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x0F, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITE2 CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x10, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITESTRINGCM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x11, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITECM CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETMARKER CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x13, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_GETMARKER CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_ISCAPTUREFRAME CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x15, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WRITELF CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x16, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_READLF CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x17, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_WAITFOREVENT CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x18, METHOD_BUFFERED, FILE_ANY_ACCESS) #define DEBUG_SERVICE_SETCONNNOTIFY CTL_CODE(FILE_DEVICE_UNKNOWN, DEBUG_SERVICE_IOCTL_BASE + 0x19, METHOD_BUFFERED, FILE_ANY_ACCESS) typedef enum _DBG_EVENT_ { DBG_EVENT_STREAM_DATA = 1 } DBG_EVENT; /***************************************************************************** In/Out Structures *****************************************************************************/ typedef struct _DBG_IN_CREATESTREAM_ { union { IMG_CHAR *pszName; IMG_UINT64 ui64Name; } u; IMG_UINT32 ui32Pages; IMG_UINT32 ui32CapMode; IMG_UINT32 ui32OutMode; }DBG_IN_CREATESTREAM, *PDBG_IN_CREATESTREAM; typedef struct _DBG_IN_FINDSTREAM_ { union { IMG_CHAR *pszName; IMG_UINT64 ui64Name; }u; IMG_BOOL bResetStream; }DBG_IN_FINDSTREAM, *PDBG_IN_FINDSTREAM; typedef struct _DBG_IN_WRITESTRING_ { union { IMG_CHAR *pszString; IMG_UINT64 ui64String; } u; IMG_SID hStream; IMG_UINT32 ui32Level; }DBG_IN_WRITESTRING, *PDBG_IN_WRITESTRING; typedef struct _DBG_IN_READSTRING_ { union { IMG_CHAR *pszString; IMG_UINT64 ui64String; } u; IMG_SID hStream; IMG_UINT32 ui32StringLen; } DBG_IN_READSTRING, *PDBG_IN_READSTRING; typedef struct _DBG_IN_SETDEBUGMODE_ { IMG_SID hStream; IMG_UINT32 ui32Mode; IMG_UINT32 ui32Start; IMG_UINT32 ui32End; IMG_UINT32 ui32SampleRate; } DBG_IN_SETDEBUGMODE, *PDBG_IN_SETDEBUGMODE; typedef struct _DBG_IN_SETDEBUGOUTMODE_ { IMG_SID hStream; IMG_UINT32 ui32Mode; } DBG_IN_SETDEBUGOUTMODE, *PDBG_IN_SETDEBUGOUTMODE; typedef struct _DBG_IN_SETDEBUGLEVEL_ { IMG_SID hStream; IMG_UINT32 ui32Level; } DBG_IN_SETDEBUGLEVEL, *PDBG_IN_SETDEBUGLEVEL; typedef struct _DBG_IN_SETFRAME_ { IMG_SID hStream; IMG_UINT32 ui32Frame; } DBG_IN_SETFRAME, *PDBG_IN_SETFRAME; typedef struct _DBG_IN_WRITE_ { union { IMG_UINT8 *pui8InBuffer; IMG_UINT64 ui64InBuffer; } u; IMG_SID hStream; IMG_UINT32 ui32Level; IMG_UINT32 ui32TransferSize; } DBG_IN_WRITE, *PDBG_IN_WRITE; typedef struct _DBG_IN_READ_ { union { IMG_UINT8 *pui8OutBuffer; IMG_UINT64 ui64OutBuffer; } u; IMG_SID hStream; IMG_BOOL bReadInitBuffer; IMG_UINT32 ui32OutBufferSize; } DBG_IN_READ, *PDBG_IN_READ; typedef struct _DBG_IN_OVERRIDEMODE_ { IMG_SID hStream; IMG_UINT32 ui32Mode; } DBG_IN_OVERRIDEMODE, *PDBG_IN_OVERRIDEMODE; typedef struct _DBG_IN_ISCAPTUREFRAME_ { IMG_SID hStream; IMG_BOOL bCheckPreviousFrame; } DBG_IN_ISCAPTUREFRAME, *PDBG_IN_ISCAPTUREFRAME; typedef struct _DBG_IN_SETMARKER_ { IMG_SID hStream; IMG_UINT32 ui32Marker; } DBG_IN_SETMARKER, *PDBG_IN_SETMARKER; typedef struct _DBG_IN_WRITE_LF_ { union { IMG_UINT8 *pui8InBuffer; IMG_UINT64 ui64InBuffer; } u; IMG_UINT32 ui32Flags; IMG_SID hStream; IMG_UINT32 ui32Level; IMG_UINT32 ui32BufferSize; } DBG_IN_WRITE_LF, *PDBG_IN_WRITE_LF; /* Flags for above struct */ #define WRITELF_FLAGS_RESETBUF 0x00000001UL /* Common control structure (don't duplicate control in main stream and init phase stream). */ typedef struct _DBG_STREAM_CONTROL_ { IMG_BOOL bInitPhaseComplete; /*!< init phase has finished */ IMG_UINT32 ui32Flags; /*!< flags (see DEBUG_FLAGS above) */ IMG_UINT32 ui32CapMode; /*!< capturing mode framed/hot key */ IMG_UINT32 ui32OutMode; /*!< output mode, e.g. files */ IMG_UINT32 ui32DebugLevel; IMG_UINT32 ui32DefaultMode; IMG_UINT32 ui32Start; /*!< first capture frame */ IMG_UINT32 ui32End; /*!< last frame */ IMG_UINT32 ui32Current; /*!< current frame */ IMG_UINT32 ui32SampleRate; /*!< capture frequency */ IMG_UINT32 ui32Reserved; } DBG_STREAM_CONTROL, *PDBG_STREAM_CONTROL; /* Per-buffer control structure. */ #define MAX_STREAM_NAME_LENGTH 30 typedef struct _DBG_STREAM_ { struct _DBG_STREAM_ *psNext; struct _DBG_STREAM_ *psInitStream; DBG_STREAM_CONTROL *psCtrl; IMG_BOOL bCircularAllowed; IMG_PVOID pvBase; IMG_UINT32 ui32Size; IMG_UINT32 ui32RPtr; IMG_UINT32 ui32WPtr; IMG_UINT32 ui32DataWritten; IMG_UINT32 ui32Marker; /*!< marker for file splitting */ IMG_UINT32 ui32InitPhaseWOff; /*!< snapshot offset for init phase end for follow-on pdump */ IMG_CHAR szName[MAX_STREAM_NAME_LENGTH]; /* Give this a size, some compilers don't like [] */ } DBG_STREAM,*PDBG_STREAM; /* * Allows dbgdrv to notify services when events happen, e.g. pdump.exe starts. * (better than resetting psDevInfo->psKernelCCBInfo->ui32CCBDumpWOff = 0 * in SGXGetClientInfoKM.) */ typedef struct _DBGKM_CONNECT_NOTIFIER_ { IMG_VOID (IMG_CALLCONV *pfnConnectNotifier) (IMG_VOID); } DBGKM_CONNECT_NOTIFIER, *PDBGKM_CONNECT_NOTIFIER; /***************************************************************************** Kernel mode service table *****************************************************************************/ typedef struct _DBGKM_SERVICE_TABLE_ { IMG_UINT32 ui32Size; IMG_VOID * (IMG_CALLCONV *pfnCreateStream) (IMG_CHAR * pszName,IMG_UINT32 ui32CapMode,IMG_UINT32 ui32OutMode,IMG_UINT32 ui32Flags,IMG_UINT32 ui32Pages); IMG_VOID (IMG_CALLCONV *pfnDestroyStream) (PDBG_STREAM psStream); IMG_VOID * (IMG_CALLCONV *pfnFindStream) (IMG_CHAR * pszName, IMG_BOOL bResetInitBuffer); IMG_UINT32 (IMG_CALLCONV *pfnWriteString) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); IMG_UINT32 (IMG_CALLCONV *pfnReadString) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit); IMG_UINT32 (IMG_CALLCONV *pfnWriteBIN) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); IMG_UINT32 (IMG_CALLCONV *pfnReadBIN) (PDBG_STREAM psStream,IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBufferSize,IMG_UINT8 *pui8OutBuf); IMG_VOID (IMG_CALLCONV *pfnSetCaptureMode) (PDBG_STREAM psStream,IMG_UINT32 ui32CapMode,IMG_UINT32 ui32Start,IMG_UINT32 ui32Stop,IMG_UINT32 ui32SampleRate); IMG_VOID (IMG_CALLCONV *pfnSetOutputMode) (PDBG_STREAM psStream,IMG_UINT32 ui32OutMode); IMG_VOID (IMG_CALLCONV *pfnSetDebugLevel) (PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel); IMG_VOID (IMG_CALLCONV *pfnSetFrame) (PDBG_STREAM psStream,IMG_UINT32 ui32Frame); IMG_UINT32 (IMG_CALLCONV *pfnGetFrame) (PDBG_STREAM psStream); IMG_VOID (IMG_CALLCONV *pfnOverrideMode) (PDBG_STREAM psStream,IMG_UINT32 ui32Mode); IMG_VOID (IMG_CALLCONV *pfnDefaultMode) (PDBG_STREAM psStream); IMG_UINT32 (IMG_CALLCONV *pfnDBGDrivWrite2) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); IMG_UINT32 (IMG_CALLCONV *pfnWriteStringCM) (PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level); IMG_UINT32 (IMG_CALLCONV *pfnWriteBINCM) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); IMG_VOID (IMG_CALLCONV *pfnSetMarker) (PDBG_STREAM psStream,IMG_UINT32 ui32Marker); IMG_UINT32 (IMG_CALLCONV *pfnGetMarker) (PDBG_STREAM psStream); IMG_VOID (IMG_CALLCONV *pfnStartInitPhase) (PDBG_STREAM psStream); IMG_VOID (IMG_CALLCONV *pfnStopInitPhase) (PDBG_STREAM psStream); IMG_BOOL (IMG_CALLCONV *pfnIsCaptureFrame) (PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame); IMG_UINT32 (IMG_CALLCONV *pfnWriteLF) (PDBG_STREAM psStream, IMG_UINT8 *pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags); IMG_UINT32 (IMG_CALLCONV *pfnReadLF) (PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 *pui8OutBuf); IMG_UINT32 (IMG_CALLCONV *pfnGetStreamOffset) (PDBG_STREAM psStream); IMG_VOID (IMG_CALLCONV *pfnSetStreamOffset) (PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset); IMG_BOOL (IMG_CALLCONV *pfnIsLastCaptureFrame) (PDBG_STREAM psStream); IMG_VOID (IMG_CALLCONV *pfnWaitForEvent) (DBG_EVENT eEvent); IMG_VOID (IMG_CALLCONV *pfnSetConnectNotifier) (DBGKM_CONNECT_NOTIFIER fn_notifier); IMG_UINT32 (IMG_CALLCONV *pfnWritePersist) (PDBG_STREAM psStream,IMG_UINT8 *pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level); } DBGKM_SERVICE_TABLE, *PDBGKM_SERVICE_TABLE; #if defined(__linux__) /***************************************************************************** Function to export service table from debug driver to the PDUMP component. *****************************************************************************/ IMG_VOID DBGDrvGetServiceTable(DBGKM_SERVICE_TABLE **fn_table); #endif #endif /***************************************************************************** End of file (DBGDRVIF.H) *****************************************************************************/