101e04c3fSmrg/* 201e04c3fSmrg * Copyright © 2010 Intel Corporation 301e04c3fSmrg * 401e04c3fSmrg * Permission is hereby granted, free of charge, to any person obtaining a 501e04c3fSmrg * copy of this software and associated documentation files (the "Software"), 601e04c3fSmrg * to deal in the Software without restriction, including without limitation 701e04c3fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 801e04c3fSmrg * and/or sell copies of the Software, and to permit persons to whom the 901e04c3fSmrg * Software is furnished to do so, subject to the following conditions: 1001e04c3fSmrg * 1101e04c3fSmrg * The above copyright notice and this permission notice (including the next 1201e04c3fSmrg * paragraph) shall be included in all copies or substantial portions of the 1301e04c3fSmrg * Software. 1401e04c3fSmrg * 1501e04c3fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1601e04c3fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1701e04c3fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1801e04c3fSmrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1901e04c3fSmrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2001e04c3fSmrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 2101e04c3fSmrg * IN THE SOFTWARE. 2201e04c3fSmrg * 2301e04c3fSmrg * Authors: 2401e04c3fSmrg * Eric Anholt <eric@anholt.net> 2501e04c3fSmrg * 2601e04c3fSmrg */ 2701e04c3fSmrg 2801e04c3fSmrg/** @file intel_aub.h 2901e04c3fSmrg * 3001e04c3fSmrg * The AUB file is a file format used by Intel's internal simulation 3101e04c3fSmrg * and other validation tools. It can be used at various levels by a 3201e04c3fSmrg * driver to input state to the simulated hardware or a replaying 3301e04c3fSmrg * debugger. 3401e04c3fSmrg * 3501e04c3fSmrg * We choose to dump AUB files using the trace block format for ease 3601e04c3fSmrg * of implementation -- dump out the blocks of memory as plain blobs 3701e04c3fSmrg * and insert ring commands to execute the batchbuffer blob. 3801e04c3fSmrg */ 3901e04c3fSmrg 4001e04c3fSmrg#ifndef _INTEL_AUB_H 4101e04c3fSmrg#define _INTEL_AUB_H 4201e04c3fSmrg 4301e04c3fSmrg#define AUB_MI_NOOP (0) 4401e04c3fSmrg#define AUB_MI_BATCH_BUFFER_START (0x31 << 23) 4501e04c3fSmrg#define AUB_PIPE_CONTROL (0x7a000002) 4601e04c3fSmrg 4701e04c3fSmrg/* DW0: instruction type. */ 4801e04c3fSmrg 4901e04c3fSmrg#define CMD_AUB (7 << 29) 5001e04c3fSmrg 5101e04c3fSmrg#define CMD_AUB_HEADER (CMD_AUB | (1 << 23) | (0x05 << 16)) 5201e04c3fSmrg 5301e04c3fSmrg#define CMD_MEM_TRACE_REGISTER_POLL (CMD_AUB | (0x2e << 23) | (0x02 << 16)) 5401e04c3fSmrg#define CMD_MEM_TRACE_REGISTER_WRITE (CMD_AUB | (0x2e << 23) | (0x03 << 16)) 5501e04c3fSmrg#define CMD_MEM_TRACE_MEMORY_WRITE (CMD_AUB | (0x2e << 23) | (0x06 << 16)) 5601e04c3fSmrg#define CMD_MEM_TRACE_VERSION (CMD_AUB | (0x2e << 23) | (0x0e << 16)) 5701e04c3fSmrg 5801e04c3fSmrg/* DW1 */ 5901e04c3fSmrg# define AUB_HEADER_MAJOR_SHIFT 24 6001e04c3fSmrg# define AUB_HEADER_MINOR_SHIFT 16 6101e04c3fSmrg 6201e04c3fSmrg#define CMD_AUB_TRACE_HEADER_BLOCK (CMD_AUB | (1 << 23) | (0x41 << 16)) 6301e04c3fSmrg#define CMD_AUB_DUMP_BMP (CMD_AUB | (1 << 23) | (0x9e << 16)) 6401e04c3fSmrg 6501e04c3fSmrg/* DW1 */ 6601e04c3fSmrg#define AUB_TRACE_OPERATION_MASK 0x000000ff 6701e04c3fSmrg#define AUB_TRACE_OP_COMMENT 0x00000000 6801e04c3fSmrg#define AUB_TRACE_OP_DATA_WRITE 0x00000001 6901e04c3fSmrg#define AUB_TRACE_OP_COMMAND_WRITE 0x00000002 7001e04c3fSmrg#define AUB_TRACE_OP_MMIO_WRITE 0x00000003 7101e04c3fSmrg// operation = TRACE_DATA_WRITE, Type 7201e04c3fSmrg#define AUB_TRACE_TYPE_MASK 0x0000ff00 7301e04c3fSmrg#define AUB_TRACE_TYPE_NOTYPE (0 << 8) 7401e04c3fSmrg#define AUB_TRACE_TYPE_BATCH (1 << 8) 7501e04c3fSmrg#define AUB_TRACE_TYPE_VERTEX_BUFFER (5 << 8) 7601e04c3fSmrg#define AUB_TRACE_TYPE_2D_MAP (6 << 8) 7701e04c3fSmrg#define AUB_TRACE_TYPE_CUBE_MAP (7 << 8) 7801e04c3fSmrg#define AUB_TRACE_TYPE_VOLUME_MAP (9 << 8) 7901e04c3fSmrg#define AUB_TRACE_TYPE_1D_MAP (10 << 8) 8001e04c3fSmrg#define AUB_TRACE_TYPE_CONSTANT_BUFFER (11 << 8) 8101e04c3fSmrg#define AUB_TRACE_TYPE_CONSTANT_URB (12 << 8) 8201e04c3fSmrg#define AUB_TRACE_TYPE_INDEX_BUFFER (13 << 8) 8301e04c3fSmrg#define AUB_TRACE_TYPE_GENERAL (14 << 8) 8401e04c3fSmrg#define AUB_TRACE_TYPE_SURFACE (15 << 8) 8501e04c3fSmrg 8601e04c3fSmrg 8701e04c3fSmrg// operation = TRACE_COMMAND_WRITE, Type = 8801e04c3fSmrg#define AUB_TRACE_TYPE_RING_HWB (1 << 8) 8901e04c3fSmrg#define AUB_TRACE_TYPE_RING_PRB0 (2 << 8) 9001e04c3fSmrg#define AUB_TRACE_TYPE_RING_PRB1 (3 << 8) 9101e04c3fSmrg#define AUB_TRACE_TYPE_RING_PRB2 (4 << 8) 9201e04c3fSmrg 9301e04c3fSmrg// Address space 9401e04c3fSmrg#define AUB_TRACE_ADDRESS_SPACE_MASK 0x00ff0000 9501e04c3fSmrg#define AUB_TRACE_MEMTYPE_GTT (0 << 16) 9601e04c3fSmrg#define AUB_TRACE_MEMTYPE_LOCAL (1 << 16) 9701e04c3fSmrg#define AUB_TRACE_MEMTYPE_NONLOCAL (2 << 16) 9801e04c3fSmrg#define AUB_TRACE_MEMTYPE_PCI (3 << 16) 9901e04c3fSmrg#define AUB_TRACE_MEMTYPE_GTT_ENTRY (4 << 16) 10001e04c3fSmrg 10101e04c3fSmrg#define AUB_MEM_TRACE_VERSION_FILE_VERSION 1 10201e04c3fSmrg 10301e04c3fSmrg/* DW2 */ 10401e04c3fSmrg 10501e04c3fSmrg#define AUB_MEM_TRACE_VERSION_DEVICE_MASK 0x0000ff00 10601e04c3fSmrg#define AUB_MEM_TRACE_VERSION_DEVICE_SHIFT 8 10701e04c3fSmrg 10801e04c3fSmrg#define AUB_MEM_TRACE_VERSION_METHOD_MASK 0x000c0000 10901e04c3fSmrg#define AUB_MEM_TRACE_VERSION_METHOD_PHY (1 << 18) 11001e04c3fSmrg 11101e04c3fSmrg#define AUB_MEM_TRACE_REGISTER_SIZE_MASK 0x000f0000 11201e04c3fSmrg#define AUB_MEM_TRACE_REGISTER_SIZE_DWORD (2 << 16) 11301e04c3fSmrg 11401e04c3fSmrg#define AUB_MEM_TRACE_REGISTER_SPACE_MASK 0xf0000000 11501e04c3fSmrg#define AUB_MEM_TRACE_REGISTER_SPACE_MMIO (0 << 28) 11601e04c3fSmrg 11701e04c3fSmrg/* DW3 */ 11801e04c3fSmrg 11901e04c3fSmrg#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_MASK 0xf0000000 12001e04c3fSmrg#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT (0 << 28) 12101e04c3fSmrg#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_PHYSICAL (2 << 28) 12201e04c3fSmrg#define AUB_MEM_TRACE_MEMORY_ADDRESS_SPACE_GGTT_ENTRY (4 << 28) 12301e04c3fSmrg 12401e04c3fSmrg/** 12501e04c3fSmrg * aub_state_struct_type enum values are encoded with the top 16 bits 12601e04c3fSmrg * representing the type to be delivered to the .aub file, and the bottom 16 12701e04c3fSmrg * bits representing the subtype. This macro performs the encoding. 12801e04c3fSmrg */ 12901e04c3fSmrg#define ENCODE_SS_TYPE(type, subtype) (((type) << 16) | (subtype)) 13001e04c3fSmrg 13101e04c3fSmrgenum aub_state_struct_type { 13201e04c3fSmrg AUB_TRACE_VS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 1), 13301e04c3fSmrg AUB_TRACE_GS_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 2), 13401e04c3fSmrg AUB_TRACE_CLIP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 3), 13501e04c3fSmrg AUB_TRACE_SF_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 4), 13601e04c3fSmrg AUB_TRACE_WM_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 5), 13701e04c3fSmrg AUB_TRACE_CC_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 6), 13801e04c3fSmrg AUB_TRACE_CLIP_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 7), 13901e04c3fSmrg AUB_TRACE_SF_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 8), 14001e04c3fSmrg AUB_TRACE_CC_VP_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x9), 14101e04c3fSmrg AUB_TRACE_SAMPLER_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xa), 14201e04c3fSmrg AUB_TRACE_KERNEL_INSTRUCTIONS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xb), 14301e04c3fSmrg AUB_TRACE_SCRATCH_SPACE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xc), 14401e04c3fSmrg AUB_TRACE_SAMPLER_DEFAULT_COLOR = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0xd), 14501e04c3fSmrg 14601e04c3fSmrg AUB_TRACE_SCISSOR_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x15), 14701e04c3fSmrg AUB_TRACE_BLEND_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x16), 14801e04c3fSmrg AUB_TRACE_DEPTH_STENCIL_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_GENERAL, 0x17), 14901e04c3fSmrg 15001e04c3fSmrg AUB_TRACE_VERTEX_BUFFER = ENCODE_SS_TYPE(AUB_TRACE_TYPE_VERTEX_BUFFER, 0), 15101e04c3fSmrg AUB_TRACE_BINDING_TABLE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x100), 15201e04c3fSmrg AUB_TRACE_SURFACE_STATE = ENCODE_SS_TYPE(AUB_TRACE_TYPE_SURFACE, 0x200), 15301e04c3fSmrg AUB_TRACE_VS_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 0), 15401e04c3fSmrg AUB_TRACE_WM_CONSTANTS = ENCODE_SS_TYPE(AUB_TRACE_TYPE_CONSTANT_BUFFER, 1), 15501e04c3fSmrg}; 15601e04c3fSmrg 15701e04c3fSmrg#undef ENCODE_SS_TYPE 15801e04c3fSmrg 15901e04c3fSmrg/** 16001e04c3fSmrg * Decode a aub_state_struct_type value to determine the type that should be 16101e04c3fSmrg * stored in the .aub file. 16201e04c3fSmrg */ 16301e04c3fSmrgstatic inline uint32_t AUB_TRACE_TYPE(enum aub_state_struct_type ss_type) 16401e04c3fSmrg{ 16501e04c3fSmrg return (ss_type & 0xFFFF0000) >> 16; 16601e04c3fSmrg} 16701e04c3fSmrg 16801e04c3fSmrg/** 16901e04c3fSmrg * Decode a state_struct_type value to determine the subtype that should be 17001e04c3fSmrg * stored in the .aub file. 17101e04c3fSmrg */ 17201e04c3fSmrgstatic inline uint32_t AUB_TRACE_SUBTYPE(enum aub_state_struct_type ss_type) 17301e04c3fSmrg{ 17401e04c3fSmrg return ss_type & 0xFFFF; 17501e04c3fSmrg} 17601e04c3fSmrg 17701e04c3fSmrg/* DW3: address */ 17801e04c3fSmrg/* DW4: len */ 17901e04c3fSmrg 18001e04c3fSmrg#endif /* _INTEL_AUB_H */ 181