1f5fbb83fSMauro Carvalho Chehab /* SPDX-License-Identifier: GPL-2.0 */ 29d4fa1a1SMauro Carvalho Chehab /* 39d4fa1a1SMauro Carvalho Chehab * Support for Intel Camera Imaging ISP subsystem. 49d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2015, Intel Corporation. 59d4fa1a1SMauro Carvalho Chehab * 69d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify it 79d4fa1a1SMauro Carvalho Chehab * under the terms and conditions of the GNU General Public License, 89d4fa1a1SMauro Carvalho Chehab * version 2, as published by the Free Software Foundation. 99d4fa1a1SMauro Carvalho Chehab * 109d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope it will be useful, but WITHOUT 119d4fa1a1SMauro Carvalho Chehab * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 129d4fa1a1SMauro Carvalho Chehab * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 139d4fa1a1SMauro Carvalho Chehab * more details. 149d4fa1a1SMauro Carvalho Chehab */ 159d4fa1a1SMauro Carvalho Chehab 169d4fa1a1SMauro Carvalho Chehab #ifndef __CSS_TRACE_H_ 179d4fa1a1SMauro Carvalho Chehab #define __CSS_TRACE_H_ 189d4fa1a1SMauro Carvalho Chehab 199d4fa1a1SMauro Carvalho Chehab #include <type_support.h> 209d4fa1a1SMauro Carvalho Chehab #include "sh_css_internal.h" /* for SH_CSS_MAX_SP_THREADS */ 219d4fa1a1SMauro Carvalho Chehab 229d4fa1a1SMauro Carvalho Chehab /* 239d4fa1a1SMauro Carvalho Chehab structs and constants for tracing 249d4fa1a1SMauro Carvalho Chehab */ 259d4fa1a1SMauro Carvalho Chehab 269d4fa1a1SMauro Carvalho Chehab /* one tracer item: major, minor and counter. The counter value can be used for GP data */ 279d4fa1a1SMauro Carvalho Chehab struct trace_item_t { 289d4fa1a1SMauro Carvalho Chehab u8 major; 299d4fa1a1SMauro Carvalho Chehab u8 minor; 309d4fa1a1SMauro Carvalho Chehab u16 counter; 319d4fa1a1SMauro Carvalho Chehab }; 329d4fa1a1SMauro Carvalho Chehab 339d4fa1a1SMauro Carvalho Chehab #define MAX_SCRATCH_DATA 4 349d4fa1a1SMauro Carvalho Chehab #define MAX_CMD_DATA 2 359d4fa1a1SMauro Carvalho Chehab 369d4fa1a1SMauro Carvalho Chehab /* trace header: holds the version and the topology of the tracer. */ 379d4fa1a1SMauro Carvalho Chehab struct trace_header_t { 389d4fa1a1SMauro Carvalho Chehab /* 1st dword: descriptor */ 399d4fa1a1SMauro Carvalho Chehab u8 version; 409d4fa1a1SMauro Carvalho Chehab u8 max_threads; 419d4fa1a1SMauro Carvalho Chehab u16 max_tracer_points; 429d4fa1a1SMauro Carvalho Chehab /* 2nd field: command + data */ 439d4fa1a1SMauro Carvalho Chehab /* 2nd dword */ 449d4fa1a1SMauro Carvalho Chehab u32 command; 459d4fa1a1SMauro Carvalho Chehab /* 3rd & 4th dword */ 469d4fa1a1SMauro Carvalho Chehab u32 data[MAX_CMD_DATA]; 479d4fa1a1SMauro Carvalho Chehab /* 3rd field: debug pointer */ 489d4fa1a1SMauro Carvalho Chehab /* 5th & 6th dword: debug pointer mechanism */ 499d4fa1a1SMauro Carvalho Chehab u32 debug_ptr_signature; 509d4fa1a1SMauro Carvalho Chehab u32 debug_ptr_value; 519d4fa1a1SMauro Carvalho Chehab /* Rest of the header: status & scratch data */ 529d4fa1a1SMauro Carvalho Chehab u8 thr_status_byte[SH_CSS_MAX_SP_THREADS]; 539d4fa1a1SMauro Carvalho Chehab u16 thr_status_word[SH_CSS_MAX_SP_THREADS]; 549d4fa1a1SMauro Carvalho Chehab u32 thr_status_dword[SH_CSS_MAX_SP_THREADS]; 559d4fa1a1SMauro Carvalho Chehab u32 scratch_debug[MAX_SCRATCH_DATA]; 569d4fa1a1SMauro Carvalho Chehab }; 579d4fa1a1SMauro Carvalho Chehab 589d4fa1a1SMauro Carvalho Chehab /* offsets for master_port read/write */ 599d4fa1a1SMauro Carvalho Chehab #define HDR_HDR_OFFSET 0 /* offset of the header */ 609d4fa1a1SMauro Carvalho Chehab #define HDR_COMMAND_OFFSET offsetof(struct trace_header_t, command) 619d4fa1a1SMauro Carvalho Chehab #define HDR_DATA_OFFSET offsetof(struct trace_header_t, data) 629d4fa1a1SMauro Carvalho Chehab #define HDR_DEBUG_SIGNATURE_OFFSET offsetof(struct trace_header_t, debug_ptr_signature) 639d4fa1a1SMauro Carvalho Chehab #define HDR_DEBUG_POINTER_OFFSET offsetof(struct trace_header_t, debug_ptr_value) 649d4fa1a1SMauro Carvalho Chehab #define HDR_STATUS_OFFSET offsetof(struct trace_header_t, thr_status_byte) 659d4fa1a1SMauro Carvalho Chehab #define HDR_STATUS_OFFSET_BYTE offsetof(struct trace_header_t, thr_status_byte) 669d4fa1a1SMauro Carvalho Chehab #define HDR_STATUS_OFFSET_WORD offsetof(struct trace_header_t, thr_status_word) 679d4fa1a1SMauro Carvalho Chehab #define HDR_STATUS_OFFSET_DWORD offsetof(struct trace_header_t, thr_status_dword) 689d4fa1a1SMauro Carvalho Chehab #define HDR_STATUS_OFFSET_SCRATCH offsetof(struct trace_header_t, scratch_debug) 699d4fa1a1SMauro Carvalho Chehab 709d4fa1a1SMauro Carvalho Chehab /* 719d4fa1a1SMauro Carvalho Chehab Trace version history: 729d4fa1a1SMauro Carvalho Chehab 1: initial version, hdr = descr, command & ptr. 739d4fa1a1SMauro Carvalho Chehab 2: added ISP + 24-bit fields. 749d4fa1a1SMauro Carvalho Chehab 3: added thread ID. 759d4fa1a1SMauro Carvalho Chehab 4: added status in header. 769d4fa1a1SMauro Carvalho Chehab */ 779d4fa1a1SMauro Carvalho Chehab #define TRACER_VER 4 789d4fa1a1SMauro Carvalho Chehab 799d4fa1a1SMauro Carvalho Chehab #define TRACE_BUFF_ADDR 0xA000 809d4fa1a1SMauro Carvalho Chehab #define TRACE_BUFF_SIZE 0x1000 /* 4K allocated */ 819d4fa1a1SMauro Carvalho Chehab 829d4fa1a1SMauro Carvalho Chehab #define TRACE_ENABLE_SP0 0 839d4fa1a1SMauro Carvalho Chehab #define TRACE_ENABLE_SP1 0 849d4fa1a1SMauro Carvalho Chehab #define TRACE_ENABLE_ISP 0 859d4fa1a1SMauro Carvalho Chehab 869d4fa1a1SMauro Carvalho Chehab enum TRACE_CORE_ID { 879d4fa1a1SMauro Carvalho Chehab TRACE_SP0_ID, 889d4fa1a1SMauro Carvalho Chehab TRACE_SP1_ID, 899d4fa1a1SMauro Carvalho Chehab TRACE_ISP_ID 909d4fa1a1SMauro Carvalho Chehab }; 919d4fa1a1SMauro Carvalho Chehab 929d4fa1a1SMauro Carvalho Chehab /* TODO: add timing format? */ 939d4fa1a1SMauro Carvalho Chehab enum TRACE_DUMP_FORMAT { 949d4fa1a1SMauro Carvalho Chehab TRACE_DUMP_FORMAT_POINT_NO_TID, 959d4fa1a1SMauro Carvalho Chehab TRACE_DUMP_FORMAT_VALUE24, 969d4fa1a1SMauro Carvalho Chehab TRACE_DUMP_FORMAT_VALUE24_TIMING, 979d4fa1a1SMauro Carvalho Chehab TRACE_DUMP_FORMAT_VALUE24_TIMING_DELTA, 989d4fa1a1SMauro Carvalho Chehab TRACE_DUMP_FORMAT_POINT 999d4fa1a1SMauro Carvalho Chehab }; 1009d4fa1a1SMauro Carvalho Chehab 1019d4fa1a1SMauro Carvalho Chehab /* currently divided as follows:*/ 1029d4fa1a1SMauro Carvalho Chehab #if (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 3) 1039d4fa1a1SMauro Carvalho Chehab /* can be divided as needed */ 1049d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 4) 1059d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 4) 1069d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2) 1079d4fa1a1SMauro Carvalho Chehab #elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 2) 1089d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_SP0 1099d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (TRACE_BUFF_SIZE / 2) 1109d4fa1a1SMauro Carvalho Chehab #else 1119d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (0) 1129d4fa1a1SMauro Carvalho Chehab #endif 1139d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_SP1 1149d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (TRACE_BUFF_SIZE / 2) 1159d4fa1a1SMauro Carvalho Chehab #else 1169d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (0) 1179d4fa1a1SMauro Carvalho Chehab #endif 1189d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_ISP 1199d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (TRACE_BUFF_SIZE / 2) 1209d4fa1a1SMauro Carvalho Chehab #else 1219d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (0) 1229d4fa1a1SMauro Carvalho Chehab #endif 1239d4fa1a1SMauro Carvalho Chehab #elif (TRACE_ENABLE_SP0 + TRACE_ENABLE_SP1 + TRACE_ENABLE_ISP == 1) 1249d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_SP0 1259d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (TRACE_BUFF_SIZE) 1269d4fa1a1SMauro Carvalho Chehab #else 1279d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (0) 1289d4fa1a1SMauro Carvalho Chehab #endif 1299d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_SP1 1309d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (TRACE_BUFF_SIZE) 1319d4fa1a1SMauro Carvalho Chehab #else 1329d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (0) 1339d4fa1a1SMauro Carvalho Chehab #endif 1349d4fa1a1SMauro Carvalho Chehab #if TRACE_ENABLE_ISP 1359d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (TRACE_BUFF_SIZE) 1369d4fa1a1SMauro Carvalho Chehab #else 1379d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (0) 1389d4fa1a1SMauro Carvalho Chehab #endif 1399d4fa1a1SMauro Carvalho Chehab #else 1409d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_SIZE (0) 1419d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_SIZE (0) 1429d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_SIZE (0) 1439d4fa1a1SMauro Carvalho Chehab #endif 1449d4fa1a1SMauro Carvalho Chehab 1459d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_ADDR (TRACE_BUFF_ADDR) 1469d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_ADDR (TRACE_SP0_ADDR + TRACE_SP0_SIZE) 1479d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_ADDR (TRACE_SP1_ADDR + TRACE_SP1_SIZE) 1489d4fa1a1SMauro Carvalho Chehab 1499d4fa1a1SMauro Carvalho Chehab /* check if it's a legal division */ 1509d4fa1a1SMauro Carvalho Chehab #if (TRACE_BUFF_SIZE < TRACE_SP0_SIZE + TRACE_SP1_SIZE + TRACE_ISP_SIZE) 1519d4fa1a1SMauro Carvalho Chehab #error trace sizes are not divided correctly and are above limit 1529d4fa1a1SMauro Carvalho Chehab #endif 1539d4fa1a1SMauro Carvalho Chehab 1549d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_HEADER_ADDR (TRACE_SP0_ADDR) 1559d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_HEADER_SIZE (sizeof(struct trace_header_t)) 1569d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_ITEM_SIZE (sizeof(struct trace_item_t)) 1579d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_DATA_ADDR (TRACE_SP0_HEADER_ADDR + TRACE_SP0_HEADER_SIZE) 1589d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_DATA_SIZE (TRACE_SP0_SIZE - TRACE_SP0_HEADER_SIZE) 1599d4fa1a1SMauro Carvalho Chehab #define TRACE_SP0_MAX_POINTS (TRACE_SP0_DATA_SIZE / TRACE_SP0_ITEM_SIZE) 1609d4fa1a1SMauro Carvalho Chehab 1619d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_HEADER_ADDR (TRACE_SP1_ADDR) 1629d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_HEADER_SIZE (sizeof(struct trace_header_t)) 1639d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_ITEM_SIZE (sizeof(struct trace_item_t)) 1649d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_DATA_ADDR (TRACE_SP1_HEADER_ADDR + TRACE_SP1_HEADER_SIZE) 1659d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_DATA_SIZE (TRACE_SP1_SIZE - TRACE_SP1_HEADER_SIZE) 1669d4fa1a1SMauro Carvalho Chehab #define TRACE_SP1_MAX_POINTS (TRACE_SP1_DATA_SIZE / TRACE_SP1_ITEM_SIZE) 1679d4fa1a1SMauro Carvalho Chehab 1689d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_HEADER_ADDR (TRACE_ISP_ADDR) 1699d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_HEADER_SIZE (sizeof(struct trace_header_t)) 1709d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_ITEM_SIZE (sizeof(struct trace_item_t)) 1719d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_DATA_ADDR (TRACE_ISP_HEADER_ADDR + TRACE_ISP_HEADER_SIZE) 1729d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_DATA_SIZE (TRACE_ISP_SIZE - TRACE_ISP_HEADER_SIZE) 1739d4fa1a1SMauro Carvalho Chehab #define TRACE_ISP_MAX_POINTS (TRACE_ISP_DATA_SIZE / TRACE_ISP_ITEM_SIZE) 1749d4fa1a1SMauro Carvalho Chehab 1759d4fa1a1SMauro Carvalho Chehab /* common majors */ 1769d4fa1a1SMauro Carvalho Chehab /* SP0 */ 1779d4fa1a1SMauro Carvalho Chehab #define MAJOR_MAIN 1 1789d4fa1a1SMauro Carvalho Chehab #define MAJOR_ISP_STAGE_ENTRY 2 1799d4fa1a1SMauro Carvalho Chehab #define MAJOR_DMA_PRXY 3 1809d4fa1a1SMauro Carvalho Chehab #define MAJOR_START_ISP 4 1819d4fa1a1SMauro Carvalho Chehab /* SP1 */ 1829d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_ISP0_EVENT 21 1839d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_OUTPUT_FORM_EVENT 22 1849d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_OUTPUT_SCAL_EVENT 23 1859d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_IF_ACK 24 1869d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_SP0_EVENT 25 1879d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_SP_TERMINATE_EVENT 26 1889d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_DMA_ACK 27 1899d4fa1a1SMauro Carvalho Chehab #define MAJOR_OBSERVER_ACC_ACK 28 1909d4fa1a1SMauro Carvalho Chehab 1919d4fa1a1SMauro Carvalho Chehab #define DEBUG_PTR_SIGNATURE 0xABCD /* signature for the debug parameter pointer */ 1929d4fa1a1SMauro Carvalho Chehab 1939d4fa1a1SMauro Carvalho Chehab /* command codes (1st byte) */ 1949d4fa1a1SMauro Carvalho Chehab typedef enum { 1959d4fa1a1SMauro Carvalho Chehab CMD_SET_ONE_MAJOR = 1, /* mask in one major. 2nd byte in the command is the major code */ 1969d4fa1a1SMauro Carvalho Chehab CMD_UNSET_ONE_MAJOR = 2, /* mask out one major. 2nd byte in the command is the major code */ 1979d4fa1a1SMauro Carvalho Chehab CMD_SET_ALL_MAJORS = 3, /* set the major print mask. the full mask is in the data DWORD */ 1989d4fa1a1SMauro Carvalho Chehab CMD_SET_VERBOSITY = 4 /* set verbosity level */ 1999d4fa1a1SMauro Carvalho Chehab } DBG_commands; 2009d4fa1a1SMauro Carvalho Chehab 2019d4fa1a1SMauro Carvalho Chehab /* command signature */ 2029d4fa1a1SMauro Carvalho Chehab #define CMD_SIGNATURE 0xAABBCC00 2039d4fa1a1SMauro Carvalho Chehab 2049d4fa1a1SMauro Carvalho Chehab /* shared macros in traces infrastructure */ 2059d4fa1a1SMauro Carvalho Chehab /* increment the pointer cyclicly */ 2069d4fa1a1SMauro Carvalho Chehab #define DBG_NEXT_ITEM(x, max_items) (((x + 1) >= max_items) ? 0 : x + 1) 2079d4fa1a1SMauro Carvalho Chehab #define DBG_PREV_ITEM(x, max_items) ((x) ? x - 1 : max_items - 1) 2089d4fa1a1SMauro Carvalho Chehab 2099d4fa1a1SMauro Carvalho Chehab #define FIELD_MASK(width) (((1 << (width)) - 1)) 2109d4fa1a1SMauro Carvalho Chehab #define FIELD_PACK(value, mask, offset) (((value) & (mask)) << (offset)) 2119d4fa1a1SMauro Carvalho Chehab #define FIELD_UNPACK(value, mask, offset) (((value) >> (offset)) & (mask)) 2129d4fa1a1SMauro Carvalho Chehab 2139d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_OFFSET (0) 2149d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_WIDTH (16) 2159d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_MASK FIELD_MASK(FIELD_VALUE_WIDTH) 2169d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_PACK(f) FIELD_PACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET) 2179d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_MASK, FIELD_VALUE_OFFSET) 2189d4fa1a1SMauro Carvalho Chehab 2199d4fa1a1SMauro Carvalho Chehab #define FIELD_MINOR_OFFSET (FIELD_VALUE_OFFSET + FIELD_VALUE_WIDTH) 2209d4fa1a1SMauro Carvalho Chehab #define FIELD_MINOR_WIDTH (8) 2219d4fa1a1SMauro Carvalho Chehab #define FIELD_MINOR_MASK FIELD_MASK(FIELD_MINOR_WIDTH) 2229d4fa1a1SMauro Carvalho Chehab #define FIELD_MINOR_PACK(f) FIELD_PACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET) 2239d4fa1a1SMauro Carvalho Chehab #define FIELD_MINOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MINOR_MASK, FIELD_MINOR_OFFSET) 2249d4fa1a1SMauro Carvalho Chehab 2259d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_OFFSET (FIELD_MINOR_OFFSET + FIELD_MINOR_WIDTH) 2269d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_WIDTH (5) 2279d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_MASK FIELD_MASK(FIELD_MAJOR_WIDTH) 2289d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_PACK(f) FIELD_PACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET) 2299d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_MASK, FIELD_MAJOR_OFFSET) 2309d4fa1a1SMauro Carvalho Chehab 2319d4fa1a1SMauro Carvalho Chehab /* for quick traces - only insertion, compatible with the regular point */ 2329d4fa1a1SMauro Carvalho Chehab #define FIELD_FULL_MAJOR_WIDTH (8) 2339d4fa1a1SMauro Carvalho Chehab #define FIELD_FULL_MAJOR_MASK FIELD_MASK(FIELD_FULL_MAJOR_WIDTH) 2349d4fa1a1SMauro Carvalho Chehab #define FIELD_FULL_MAJOR_PACK(f) FIELD_PACK(f, FIELD_FULL_MAJOR_MASK, FIELD_MAJOR_OFFSET) 2359d4fa1a1SMauro Carvalho Chehab 2369d4fa1a1SMauro Carvalho Chehab /* The following 2 fields are used only when FIELD_TID value is 111b. 2379d4fa1a1SMauro Carvalho Chehab * it means we don't want to use thread id, but format. In this case, 2389d4fa1a1SMauro Carvalho Chehab * the last 2 MSB bits of the major field will indicates the format 2399d4fa1a1SMauro Carvalho Chehab */ 2409d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_W_FMT_OFFSET FIELD_MAJOR_OFFSET 2419d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_W_FMT_WIDTH (3) 2429d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_W_FMT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH) 2439d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_W_FMT_PACK(f) FIELD_PACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET) 2449d4fa1a1SMauro Carvalho Chehab #define FIELD_MAJOR_W_FMT_UNPACK(f) FIELD_UNPACK(f, FIELD_MAJOR_W_FMT_MASK, FIELD_MAJOR_W_FMT_OFFSET) 2459d4fa1a1SMauro Carvalho Chehab 2469d4fa1a1SMauro Carvalho Chehab #define FIELD_FORMAT_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_W_FMT_WIDTH) 2479d4fa1a1SMauro Carvalho Chehab #define FIELD_FORMAT_WIDTH (2) 2489d4fa1a1SMauro Carvalho Chehab #define FIELD_FORMAT_MASK FIELD_MASK(FIELD_MAJOR_W_FMT_WIDTH) 2499d4fa1a1SMauro Carvalho Chehab #define FIELD_FORMAT_PACK(f) FIELD_PACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET) 2509d4fa1a1SMauro Carvalho Chehab #define FIELD_FORMAT_UNPACK(f) FIELD_UNPACK(f, FIELD_FORMAT_MASK, FIELD_FORMAT_OFFSET) 2519d4fa1a1SMauro Carvalho Chehab 2529d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_SEL_FORMAT_PAT (7) 2539d4fa1a1SMauro Carvalho Chehab 2549d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_OFFSET (FIELD_MAJOR_OFFSET + FIELD_MAJOR_WIDTH) 2559d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_WIDTH (3) 2569d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_MASK FIELD_MASK(FIELD_TID_WIDTH) 2579d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_PACK(f) FIELD_PACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET) 2589d4fa1a1SMauro Carvalho Chehab #define FIELD_TID_UNPACK(f) FIELD_UNPACK(f, FIELD_TID_MASK, FIELD_TID_OFFSET) 2599d4fa1a1SMauro Carvalho Chehab 2609d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_24_OFFSET (0) 2619d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_24_WIDTH (24) 2629d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_24_MASK FIELD_MASK(FIELD_VALUE_24_WIDTH) 2639d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_24_PACK(f) FIELD_PACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET) 2649d4fa1a1SMauro Carvalho Chehab #define FIELD_VALUE_24_UNPACK(f) FIELD_UNPACK(f, FIELD_VALUE_24_MASK, FIELD_VALUE_24_OFFSET) 2659d4fa1a1SMauro Carvalho Chehab 2669d4fa1a1SMauro Carvalho Chehab #define PACK_TRACEPOINT(tid, major, minor, value) \ 2679d4fa1a1SMauro Carvalho Chehab (FIELD_TID_PACK(tid) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value)) 2689d4fa1a1SMauro Carvalho Chehab 2699d4fa1a1SMauro Carvalho Chehab #define PACK_QUICK_TRACEPOINT(major, minor) \ 2709d4fa1a1SMauro Carvalho Chehab (FIELD_FULL_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor)) 2719d4fa1a1SMauro Carvalho Chehab 2729d4fa1a1SMauro Carvalho Chehab #define PACK_FORMATTED_TRACEPOINT(format, major, minor, value) \ 2739d4fa1a1SMauro Carvalho Chehab (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_FORMAT_PACK(format) | FIELD_MAJOR_PACK(major) | FIELD_MINOR_PACK(minor) | FIELD_VALUE_PACK(value)) 2749d4fa1a1SMauro Carvalho Chehab 2759d4fa1a1SMauro Carvalho Chehab #define PACK_TRACE_VALUE24(major, value) \ 2769d4fa1a1SMauro Carvalho Chehab (FIELD_TID_PACK(FIELD_TID_SEL_FORMAT_PAT) | FIELD_MAJOR_PACK(major) | FIELD_VALUE_24_PACK(value)) 2779d4fa1a1SMauro Carvalho Chehab 2789d4fa1a1SMauro Carvalho Chehab #endif /* __CSS_TRACE_H_ */ 279