| /*************************************************************************/ /*! |
| @File |
| @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved |
| @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 _SERVICES_PDUMP_H_ |
| #define _SERVICES_PDUMP_H_ |
| |
| #include "img_types.h" |
| #include "services_km.h" |
| |
| |
| /* A PDump out2.txt script is made up of 3 sections from three buffers: |
| * * |
| * - Init phase buffer - holds PDump data written during driver |
| * initialisation, non-volatile. |
| * - Main phase buffer - holds PDump data written after driver init, |
| * volatile. |
| * - Deinit phase buffer - holds PDump data needed to shutdown HW/play back, |
| * written only during driver initialisation using |
| * the DEINIT flag. |
| * |
| * Volatile in this sense means that the buffer is drained and cleared when |
| * the pdump capture application connects and transfers the data to file. |
| * |
| * The PDump sub-system uses the driver state (init/post-init), whether |
| * the pdump capture application is connected or not (capture range set/unset) |
| * and, if pdump connected whether the frame is in the range set, to decide |
| * which of the 3 buffers to write the PDump data. Hence there are several |
| * key time periods in the lifetime of the kernel driver that is enabled |
| * with PDUMP=1 (flag XX labels below time line): |
| * |
| * Events:load init pdump enter exit pdump |
| * driver done connects range range disconnects |
| * |__________________|____________|__________|______________|____________|______ . . . |
| * State: | init phase | no capture | <- capture client connected -> | no capture |
| * | | | | |
| * |__________________|____________|______________________________________|_____ . . . |
| * Flag: | CT,DI | NONE,CT,PR | NONE,CT,PR | See no |
| * | Never NONE or PR | Never DI | Never DI | capture |
| * |__________________|____________|______________________________________|_____ . . . |
| * Write | NONE -undef | -No write | -No write | -Main buf | -No write | See no |
| * buffer | CT -Init buf | -Main buf | -Main buf | -Main buf | -Main buf | capture |
| * | PR -undef | -Init buf | -undef | -Init & Main | -undef | |
| * | DI -Deinit buf | -undef | -undef | -undef | -undef | |
| * |__________________|____________|___________|______________|___________|_____ . . . |
| * |
| * Note: The time line could repeat if the pdump capture application is |
| * disconnected and reconnected without unloading the driver module. |
| * |
| * The DEINIT (DI) | CONTINUOUS (CT) | PERSISTENT (PR) flags must never |
| * be OR'd together and given to a PDump call since undefined behaviour may |
| * result and produce an invalid PDump which does not play back cleanly. |
| * |
| * The decision on which flag to use comes down to which time period the |
| * client or server driver makes the PDump write call AND the nature/purpose |
| * of the data. |
| * |
| * Note: This is a simplified time line, not all conditions represented. |
| * |
| */ |
| |
| typedef IMG_UINT32 PDUMP_FLAGS_T; |
| |
| #define PDUMP_FLAGS_NONE PDUMP_NONE /*<! Output this entry with no special treatment i.e. output |
| only if in frame range. */ |
| #define PDUMP_FLAGS_BLKDATA PDUMP_BLKDATA /*<! This flag indicates block-mode PDump data to be recorded |
| in Block script stream in addition to Main script stream, |
| if capture mode is set to BLOCKED */ |
| |
| #define PDUMP_FLAGS_DEINIT 0x20000000UL /*<! Output this entry to the de-initialisation section, must |
| only be used by the initialisation code in the Server. */ |
| |
| #define PDUMP_FLAGS_POWER 0x08000000UL /*<! Output this entry even when a power transition is ongoing, |
| as directed by other PDUMP flags. */ |
| |
| #define PDUMP_FLAGS_CONTINUOUS PDUMP_CONT /*<! Output this entry always regardless of framed capture range, |
| used by client applications being dumped. |
| During init phase of driver such data carrying this flag |
| will be recorded and present for all PDump client |
| connections. |
| Never combine with the PERSIST flag. */ |
| |
| #define PDUMP_FLAGS_PERSISTENT PDUMP_PERSIST /*<! Output this entry always regardless of app and range, |
| used by persistent resources created *after* driver |
| initialisation that must appear in all PDump captures |
| (i.e. current capture regardless of frame range (CONT) |
| and all future PDump captures) for that driver |
| instantiation/session. |
| Effectively this is data that is not forgotten |
| for the second and subsequent PDump client connections. |
| Never combine with the CONTINUOUS flag. */ |
| |
| #define PDUMP_FLAGS_DEBUG 0x00010000U /*<! For internal debugging use */ |
| |
| #define PDUMP_FLAGS_NOHW 0x00000001U /* For internal use: Skip sending instructions to the hardware |
| when NO_HARDWARE=0 AND PDUMP=1 */ |
| |
| #define PDUMP_FLAGS_FORCESPLIT 0x00000002U /* Forces Main and Block script streams to split - Internal |
| flag used in Block mode of PDump */ |
| |
| #define PDUMP_FLAGS_PDUMP_LOCK_HELD 0x00000004U /* This flags denotes that PDUMP_LOCK is held already so |
| further calls to PDUMP_LOCK with this flag set will not |
| try to take pdump lock. If PDUMP_LOCK is called without |
| this flag by some other thread then it will try to take |
| PDUMP_LOCK which would make that thread sleep. This flag |
| introduced to enforce the order of pdumping after bridge |
| lock removal */ |
| |
| #define PDUMP_FILEOFFSET_FMTSPEC "0x%08X" |
| typedef IMG_UINT32 PDUMP_FILEOFFSET_T; |
| |
| /* PDump stream macros*/ |
| |
| /* Parameter stream */ |
| #define PDUMP_PARAM_INIT_STREAM_NAME "paramInit" |
| #define PDUMP_PARAM_MAIN_STREAM_NAME "paramMain" |
| #define PDUMP_PARAM_DEINIT_STREAM_NAME "paramDeinit" |
| #define PDUMP_PARAM_BLOCK_STREAM_NAME "paramBlock" |
| |
| /*** Parameter stream sizes ***/ |
| |
| /* Parameter Init Stream */ |
| |
| /* The streams are made tunable in core.mk, wherein the size of these buffers can be specified. |
| * In case nothing specified in core.mk, then the default size is taken |
| */ |
| #if defined(PDUMP_PARAM_INIT_STREAM_SIZE) |
| #if (PDUMP_PARAM_INIT_STREAM_SIZE < (700 * 1024)) |
| #error PDUMP_PARAM_INIT_STREAM_SIZE must be at least 700 KB |
| #endif |
| #endif |
| |
| /* Parameter Main Stream */ |
| #if defined(PDUMP_PARAM_MAIN_STREAM_SIZE) |
| #if (PDUMP_PARAM_MAIN_STREAM_SIZE < (2 * 1024 * 1024)) |
| #error PDUMP_PARAM_MAIN_STREAM_SIZE must be at least 2 MB |
| #endif |
| #endif |
| |
| /* Parameter Deinit Stream */ |
| #if defined(PDUMP_PARAM_DEINIT_STREAM_SIZE) |
| #if (PDUMP_PARAM_DEINIT_STREAM_SIZE < (64 * 1024)) |
| #error PDUMP_PARAM_DEINIT_STREAM_SIZE must be at least 64 KB |
| #endif |
| #endif |
| |
| /* Parameter Block Stream */ |
| /* There is no separate parameter Block stream as the Block script stream is |
| * just a filtered Main script stream. Hence it will refer to the Main stream |
| * parameters themselves. |
| */ |
| |
| /*Script stream */ |
| #define PDUMP_SCRIPT_INIT_STREAM_NAME "scriptInit" |
| #define PDUMP_SCRIPT_MAIN_STREAM_NAME "scriptMain" |
| #define PDUMP_SCRIPT_DEINIT_STREAM_NAME "scriptDeinit" |
| #define PDUMP_SCRIPT_BLOCK_STREAM_NAME "scriptBlock" |
| |
| /*** Script stream sizes ***/ |
| |
| /* Script Init Stream */ |
| #if defined(PDUMP_SCRIPT_INIT_STREAM_SIZE) |
| #if (PDUMP_SCRIPT_INIT_STREAM_SIZE < (256 * 1024)) |
| #error PDUMP_SCRIPT_INIT_STREAM_SIZE must be at least 256 KB |
| #endif |
| #endif |
| |
| /* Script Main Stream */ |
| #if defined(PDUMP_SCRIPT_MAIN_STREAM_SIZE) |
| #if (PDUMP_SCRIPT_MAIN_STREAM_SIZE < (2 * 1024 * 1024)) |
| #error PDUMP_SCRIPT_MAIN_STREAM_SIZE must be at least 2 MB |
| #endif |
| #endif |
| |
| /* Script Deinit Stream */ |
| #if defined(PDUMP_SCRIPT_DEINIT_STREAM_SIZE) |
| #if (PDUMP_SCRIPT_DEINIT_STREAM_SIZE < (64 * 1024)) |
| #error PDUMP_SCRIPT_DEINIT_STREAM_SIZE must be at least 64 KB |
| #endif |
| #endif |
| |
| /* Script Block Stream */ |
| #if defined(PDUMP_SCRIPT_BLOCK_STREAM_SIZE) |
| #if (PDUMP_SCRIPT_BLOCK_STREAM_SIZE < (2 * 1024 * 1024)) |
| #error PDUMP_SCRIPT_BLOCK_STREAM_SIZE must be at least 2 MB |
| #endif |
| #endif |
| |
| |
| #define PDUMP_PARAM_0_FILE_NAME "%%0%%.prm" /*!< Initial Param filename used in PDump capture */ |
| #define PDUMP_PARAM_N_FILE_NAME "%%0%%_%02u.prm" /*!< Param filename used when PRM file split */ |
| #define PDUMP_PARAM_MAX_FILE_NAME 32 /*!< Max Size of parameter name used in out2.txt */ |
| |
| #define PDUMP_IS_CONTINUOUS(flags) ((flags & PDUMP_FLAGS_CONTINUOUS) != 0) |
| |
| #endif /* _SERVICES_PDUMP_H_ */ |