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