Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:01:50

0001 /*
0002  * Copyright © 2010 Intel Corporation
0003  *
0004  * Permission is hereby granted, free of charge, to any person obtaining a
0005  * copy of this software and associated documentation files (the "Software"),
0006  * to deal in the Software without restriction, including without limitation
0007  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
0008  * and/or sell copies of the Software, and to permit persons to whom the
0009  * Software is furnished to do so, subject to the following conditions:
0010  *
0011  * The above copyright notice and this permission notice (including the next
0012  * paragraph) shall be included in all copies or substantial portions of the
0013  * Software.
0014  *
0015  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0016  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0017  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
0018  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0019  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
0020  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
0021  * IN THE SOFTWARE.
0022  *
0023  * Authors:
0024  *    Eric Anholt <eric@anholt.net>
0025  *
0026  */
0027 
0028 /** @file intel_aub.h
0029  *
0030  * The AUB file is a file format used by Intel's internal simulation
0031  * and other validation tools.  It can be used at various levels by a
0032  * driver to input state to the simulated hardware or a replaying
0033  * debugger.
0034  *
0035  * We choose to dump AUB files using the trace block format for ease
0036  * of implementation -- dump out the blocks of memory as plain blobs
0037  * and insert ring commands to execute the batchbuffer blob.
0038  */
0039 
0040 #ifndef _INTEL_AUB_H
0041 #define _INTEL_AUB_H
0042 
0043 #define AUB_MI_NOOP         (0)
0044 #define AUB_MI_BATCH_BUFFER_START   (0x31 << 23)
0045 #define AUB_PIPE_CONTROL        (0x7a000002)
0046 
0047 /* DW0: instruction type. */
0048 
0049 #define CMD_AUB         (7 << 29)
0050 
0051 #define CMD_AUB_HEADER      (CMD_AUB | (1 << 23) | (0x05 << 16))
0052 /* DW1 */
0053 # define AUB_HEADER_MAJOR_SHIFT     24
0054 # define AUB_HEADER_MINOR_SHIFT     16
0055 
0056 #define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16))
0057 #define CMD_AUB_DUMP_BMP           (CMD_AUB | (1 << 23) | (0x9e << 16))
0058 
0059 /* DW1 */
0060 #define AUB_TRACE_OPERATION_MASK    0x000000ff
0061 #define AUB_TRACE_OP_COMMENT        0x00000000
0062 #define AUB_TRACE_OP_DATA_WRITE     0x00000001
0063 #define AUB_TRACE_OP_COMMAND_WRITE  0x00000002
0064 #define AUB_TRACE_OP_MMIO_WRITE     0x00000003
0065 // operation = TRACE_DATA_WRITE, Type
0066 #define AUB_TRACE_TYPE_MASK     0x0000ff00
0067 #define AUB_TRACE_TYPE_NOTYPE       (0 << 8)
0068 #define AUB_TRACE_TYPE_BATCH        (1 << 8)
0069 #define AUB_TRACE_TYPE_VERTEX_BUFFER    (5 << 8)
0070 #define AUB_TRACE_TYPE_2D_MAP       (6 << 8)
0071 #define AUB_TRACE_TYPE_CUBE_MAP     (7 << 8)
0072 #define AUB_TRACE_TYPE_VOLUME_MAP   (9 << 8)
0073 #define AUB_TRACE_TYPE_1D_MAP       (10 << 8)
0074 #define AUB_TRACE_TYPE_CONSTANT_BUFFER  (11 << 8)
0075 #define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8)
0076 #define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8)
0077 #define AUB_TRACE_TYPE_GENERAL      (14 << 8)
0078 #define AUB_TRACE_TYPE_SURFACE      (15 << 8)
0079 
0080 
0081 // operation = TRACE_COMMAND_WRITE, Type =
0082 #define AUB_TRACE_TYPE_RING_HWB     (1 << 8)
0083 #define AUB_TRACE_TYPE_RING_PRB0    (2 << 8)
0084 #define AUB_TRACE_TYPE_RING_PRB1    (3 << 8)
0085 #define AUB_TRACE_TYPE_RING_PRB2    (4 << 8)
0086 
0087 // Address space
0088 #define AUB_TRACE_ADDRESS_SPACE_MASK    0x00ff0000
0089 #define AUB_TRACE_MEMTYPE_GTT       (0 << 16)
0090 #define AUB_TRACE_MEMTYPE_LOCAL     (1 << 16)
0091 #define AUB_TRACE_MEMTYPE_NONLOCAL  (2 << 16)
0092 #define AUB_TRACE_MEMTYPE_PCI       (3 << 16)
0093 #define AUB_TRACE_MEMTYPE_GTT_ENTRY     (4 << 16)
0094 
0095 /* DW2 */
0096 
0097 /**
0098  * aub_state_struct_type enum values are encoded with the top 16 bits
0099  * representing the type to be delivered to the .aub file, and the bottom 16
0100  * bits representing the subtype.  This macro performs the encoding.
0101  */
0102 #define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype))
0103 
0104 enum aub_state_struct_type {
0105    AUB_TRACE_VS_STATE =         ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1),
0106    AUB_TRACE_GS_STATE =         ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2),
0107    AUB_TRACE_CLIP_STATE =       ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3),
0108    AUB_TRACE_SF_STATE =         ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4),
0109    AUB_TRACE_WM_STATE =         ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5),
0110    AUB_TRACE_CC_STATE =         ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6),
0111    AUB_TRACE_CLIP_VP_STATE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7),
0112    AUB_TRACE_SF_VP_STATE =      ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8),
0113    AUB_TRACE_CC_VP_STATE =      ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9),
0114    AUB_TRACE_SAMPLER_STATE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa),
0115    AUB_TRACE_KERNEL_INSTRUCTIONS =  ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb),
0116    AUB_TRACE_SCRATCH_SPACE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc),
0117    AUB_TRACE_SAMPLER_DEFAULT_COLOR =    ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd),
0118 
0119    AUB_TRACE_SCISSOR_STATE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15),
0120    AUB_TRACE_BLEND_STATE =      ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16),
0121    AUB_TRACE_DEPTH_STENCIL_STATE =  ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17),
0122 
0123    AUB_TRACE_VERTEX_BUFFER =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0),
0124    AUB_TRACE_BINDING_TABLE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100),
0125    AUB_TRACE_SURFACE_STATE =        ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200),
0126    AUB_TRACE_VS_CONSTANTS =     ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0),
0127    AUB_TRACE_WM_CONSTANTS =     ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1),
0128 };
0129 
0130 #undef ENCODE_SS_TYPE
0131 
0132 /**
0133  * Decode a aub_state_struct_type value to determine the type that should be
0134  * stored in the .aub file.
0135  */
0136 static inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type)
0137 {
0138    return (ss_type & 0xFFFF0000) >> 16;
0139 }
0140 
0141 /**
0142  * Decode a state_struct_type value to determine the subtype that should be
0143  * stored in the .aub file.
0144  */
0145 static inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type)
0146 {
0147    return ss_type & 0xFFFF;
0148 }
0149 
0150 /* DW3: address */
0151 /* DW4: len */
0152 
0153 #endif /* _INTEL_AUB_H */