xref: /freebsd/contrib/processor-trace/libipt/internal/include/pt_opcodes.h (revision 85f87cf491bec6f90948a85b10f5523ea24db9e3)
174fe6c29SRuslan Bukin /*
2*85f87cf4SRuslan Bukin  * Copyright (c) 2013-2019, Intel Corporation
374fe6c29SRuslan Bukin  *
474fe6c29SRuslan Bukin  * Redistribution and use in source and binary forms, with or without
574fe6c29SRuslan Bukin  * modification, are permitted provided that the following conditions are met:
674fe6c29SRuslan Bukin  *
774fe6c29SRuslan Bukin  *  * Redistributions of source code must retain the above copyright notice,
874fe6c29SRuslan Bukin  *    this list of conditions and the following disclaimer.
974fe6c29SRuslan Bukin  *  * Redistributions in binary form must reproduce the above copyright notice,
1074fe6c29SRuslan Bukin  *    this list of conditions and the following disclaimer in the documentation
1174fe6c29SRuslan Bukin  *    and/or other materials provided with the distribution.
1274fe6c29SRuslan Bukin  *  * Neither the name of Intel Corporation nor the names of its contributors
1374fe6c29SRuslan Bukin  *    may be used to endorse or promote products derived from this software
1474fe6c29SRuslan Bukin  *    without specific prior written permission.
1574fe6c29SRuslan Bukin  *
1674fe6c29SRuslan Bukin  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1774fe6c29SRuslan Bukin  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1874fe6c29SRuslan Bukin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1974fe6c29SRuslan Bukin  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
2074fe6c29SRuslan Bukin  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2174fe6c29SRuslan Bukin  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2274fe6c29SRuslan Bukin  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2374fe6c29SRuslan Bukin  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2474fe6c29SRuslan Bukin  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2574fe6c29SRuslan Bukin  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2674fe6c29SRuslan Bukin  * POSSIBILITY OF SUCH DAMAGE.
2774fe6c29SRuslan Bukin  */
2874fe6c29SRuslan Bukin 
2974fe6c29SRuslan Bukin #ifndef PT_OPCODES_H
3074fe6c29SRuslan Bukin #define PT_OPCODES_H
3174fe6c29SRuslan Bukin 
3274fe6c29SRuslan Bukin 
3374fe6c29SRuslan Bukin /* A one byte opcode. */
3474fe6c29SRuslan Bukin enum pt_opcode {
3574fe6c29SRuslan Bukin 	pt_opc_pad		= 0x00,
3674fe6c29SRuslan Bukin 	pt_opc_ext		= 0x02,
3774fe6c29SRuslan Bukin 	pt_opc_psb		= pt_opc_ext,
3874fe6c29SRuslan Bukin 	pt_opc_tip		= 0x0d,
3974fe6c29SRuslan Bukin 	pt_opc_tnt_8		= 0x00,
4074fe6c29SRuslan Bukin 	pt_opc_tip_pge		= 0x11,
4174fe6c29SRuslan Bukin 	pt_opc_tip_pgd		= 0x01,
4274fe6c29SRuslan Bukin 	pt_opc_fup		= 0x1d,
4374fe6c29SRuslan Bukin 	pt_opc_mode		= 0x99,
4474fe6c29SRuslan Bukin 	pt_opc_tsc		= 0x19,
4574fe6c29SRuslan Bukin 	pt_opc_mtc		= 0x59,
4674fe6c29SRuslan Bukin 	pt_opc_cyc		= 0x03,
4774fe6c29SRuslan Bukin 
4874fe6c29SRuslan Bukin 	/* A free opcode to trigger a decode fault. */
4974fe6c29SRuslan Bukin 	pt_opc_bad		= 0xd9
5074fe6c29SRuslan Bukin };
5174fe6c29SRuslan Bukin 
5274fe6c29SRuslan Bukin /* A one byte extension code for ext opcodes. */
5374fe6c29SRuslan Bukin enum pt_ext_code {
5474fe6c29SRuslan Bukin 	pt_ext_psb		= 0x82,
5574fe6c29SRuslan Bukin 	pt_ext_tnt_64		= 0xa3,
5674fe6c29SRuslan Bukin 	pt_ext_pip		= 0x43,
5774fe6c29SRuslan Bukin 	pt_ext_ovf		= 0xf3,
5874fe6c29SRuslan Bukin 	pt_ext_psbend		= 0x23,
5974fe6c29SRuslan Bukin 	pt_ext_cbr		= 0x03,
6074fe6c29SRuslan Bukin 	pt_ext_tma		= 0x73,
6174fe6c29SRuslan Bukin 	pt_ext_stop		= 0x83,
6274fe6c29SRuslan Bukin 	pt_ext_vmcs		= 0xc8,
6374fe6c29SRuslan Bukin 	pt_ext_ext2		= 0xc3,
6474fe6c29SRuslan Bukin 	pt_ext_exstop		= 0x62,
6574fe6c29SRuslan Bukin 	pt_ext_exstop_ip	= 0xe2,
6674fe6c29SRuslan Bukin 	pt_ext_mwait		= 0xc2,
6774fe6c29SRuslan Bukin 	pt_ext_pwre		= 0x22,
6874fe6c29SRuslan Bukin 	pt_ext_pwrx		= 0xa2,
6974fe6c29SRuslan Bukin 	pt_ext_ptw		= 0x12,
7074fe6c29SRuslan Bukin 
7174fe6c29SRuslan Bukin 	pt_ext_bad		= 0x04
7274fe6c29SRuslan Bukin };
7374fe6c29SRuslan Bukin 
7474fe6c29SRuslan Bukin /* A one byte extension 2 code for ext2 extension opcodes. */
7574fe6c29SRuslan Bukin enum pt_ext2_code {
7674fe6c29SRuslan Bukin 	pt_ext2_mnt		= 0x88,
7774fe6c29SRuslan Bukin 
7874fe6c29SRuslan Bukin 	pt_ext2_bad		= 0x00
7974fe6c29SRuslan Bukin };
8074fe6c29SRuslan Bukin 
8174fe6c29SRuslan Bukin /* A one byte opcode mask. */
8274fe6c29SRuslan Bukin enum pt_opcode_mask {
8374fe6c29SRuslan Bukin 	pt_opm_tip		= 0x1f,
8474fe6c29SRuslan Bukin 	pt_opm_tnt_8		= 0x01,
8574fe6c29SRuslan Bukin 	pt_opm_tnt_8_shr	= 1,
8674fe6c29SRuslan Bukin 	pt_opm_fup		= pt_opm_tip,
8774fe6c29SRuslan Bukin 
8874fe6c29SRuslan Bukin 	/* The bit mask for the compression bits in the opcode. */
8974fe6c29SRuslan Bukin 	pt_opm_ipc		= 0xe0,
9074fe6c29SRuslan Bukin 
9174fe6c29SRuslan Bukin 	/* The shift right value for ipc bits. */
9274fe6c29SRuslan Bukin 	pt_opm_ipc_shr		= 5,
9374fe6c29SRuslan Bukin 
9474fe6c29SRuslan Bukin 	/* The bit mask for the compression bits after shifting. */
9574fe6c29SRuslan Bukin 	pt_opm_ipc_shr_mask	= 0x7,
9674fe6c29SRuslan Bukin 
9774fe6c29SRuslan Bukin 	/* Shift counts and masks for decoding the cyc packet. */
9874fe6c29SRuslan Bukin 	pt_opm_cyc              = 0x03,
9974fe6c29SRuslan Bukin 	pt_opm_cyc_ext          = 0x04,
10074fe6c29SRuslan Bukin 	pt_opm_cyc_bits         = 0xf8,
10174fe6c29SRuslan Bukin 	pt_opm_cyc_shr          = 3,
10274fe6c29SRuslan Bukin 	pt_opm_cycx_ext         = 0x01,
10374fe6c29SRuslan Bukin 	pt_opm_cycx_shr         = 1,
10474fe6c29SRuslan Bukin 
10574fe6c29SRuslan Bukin 	/* The bit mask for the IP bit in the exstop packet. */
10674fe6c29SRuslan Bukin 	pt_opm_exstop_ip	= 0x80,
10774fe6c29SRuslan Bukin 
10874fe6c29SRuslan Bukin 	/* The PTW opcode. */
10974fe6c29SRuslan Bukin 	pt_opm_ptw		= 0x1f,
11074fe6c29SRuslan Bukin 
11174fe6c29SRuslan Bukin 	/* The bit mask for the IP bit in the ptw packet. */
11274fe6c29SRuslan Bukin 	pt_opm_ptw_ip		= 0x80,
11374fe6c29SRuslan Bukin 
11474fe6c29SRuslan Bukin 	/* The bit mask and shr value for the payload bytes field in ptw. */
11574fe6c29SRuslan Bukin 	pt_opm_ptw_pb		= 0x60,
11674fe6c29SRuslan Bukin 	pt_opm_ptw_pb_shr	= 5,
11774fe6c29SRuslan Bukin 
11874fe6c29SRuslan Bukin 	/* The bit mask for the payload bytes field in ptw after shifting. */
11974fe6c29SRuslan Bukin 	pt_opm_ptw_pb_shr_mask	= 0x3
12074fe6c29SRuslan Bukin };
12174fe6c29SRuslan Bukin 
12274fe6c29SRuslan Bukin /* The size of the various opcodes in bytes. */
12374fe6c29SRuslan Bukin enum pt_opcode_size {
12474fe6c29SRuslan Bukin 	pt_opcs_pad		= 1,
12574fe6c29SRuslan Bukin 	pt_opcs_tip		= 1,
12674fe6c29SRuslan Bukin 	pt_opcs_tip_pge		= 1,
12774fe6c29SRuslan Bukin 	pt_opcs_tip_pgd		= 1,
12874fe6c29SRuslan Bukin 	pt_opcs_fup		= 1,
12974fe6c29SRuslan Bukin 	pt_opcs_tnt_8		= 1,
13074fe6c29SRuslan Bukin 	pt_opcs_mode		= 1,
13174fe6c29SRuslan Bukin 	pt_opcs_tsc		= 1,
13274fe6c29SRuslan Bukin 	pt_opcs_mtc		= 1,
13374fe6c29SRuslan Bukin 	pt_opcs_cyc		= 1,
13474fe6c29SRuslan Bukin 	pt_opcs_psb		= 2,
13574fe6c29SRuslan Bukin 	pt_opcs_psbend		= 2,
13674fe6c29SRuslan Bukin 	pt_opcs_ovf		= 2,
13774fe6c29SRuslan Bukin 	pt_opcs_pip		= 2,
13874fe6c29SRuslan Bukin 	pt_opcs_tnt_64		= 2,
13974fe6c29SRuslan Bukin 	pt_opcs_cbr		= 2,
14074fe6c29SRuslan Bukin 	pt_opcs_tma		= 2,
14174fe6c29SRuslan Bukin 	pt_opcs_stop		= 2,
14274fe6c29SRuslan Bukin 	pt_opcs_vmcs		= 2,
14374fe6c29SRuslan Bukin 	pt_opcs_mnt		= 3,
14474fe6c29SRuslan Bukin 	pt_opcs_exstop		= 2,
14574fe6c29SRuslan Bukin 	pt_opcs_mwait		= 2,
14674fe6c29SRuslan Bukin 	pt_opcs_pwre		= 2,
14774fe6c29SRuslan Bukin 	pt_opcs_pwrx		= 2,
14874fe6c29SRuslan Bukin 	pt_opcs_ptw		= 2
14974fe6c29SRuslan Bukin };
15074fe6c29SRuslan Bukin 
15174fe6c29SRuslan Bukin /* The psb magic payload.
15274fe6c29SRuslan Bukin  *
15374fe6c29SRuslan Bukin  * The payload is a repeating 2-byte pattern.
15474fe6c29SRuslan Bukin  */
15574fe6c29SRuslan Bukin enum pt_psb_pattern {
15674fe6c29SRuslan Bukin 	/* The high and low bytes in the pattern. */
15774fe6c29SRuslan Bukin 	pt_psb_hi		= pt_opc_psb,
15874fe6c29SRuslan Bukin 	pt_psb_lo		= pt_ext_psb,
15974fe6c29SRuslan Bukin 
16074fe6c29SRuslan Bukin 	/* Various combinations of the above parts. */
16174fe6c29SRuslan Bukin 	pt_psb_lohi		= pt_psb_lo | pt_psb_hi << 8,
16274fe6c29SRuslan Bukin 	pt_psb_hilo		= pt_psb_hi | pt_psb_lo << 8,
16374fe6c29SRuslan Bukin 
16474fe6c29SRuslan Bukin 	/* The repeat count of the payload, not including opc and ext. */
16574fe6c29SRuslan Bukin 	pt_psb_repeat_count	= 7,
16674fe6c29SRuslan Bukin 
16774fe6c29SRuslan Bukin 	/* The size of the repeated pattern in bytes. */
16874fe6c29SRuslan Bukin 	pt_psb_repeat_size	= 2
16974fe6c29SRuslan Bukin };
17074fe6c29SRuslan Bukin 
17174fe6c29SRuslan Bukin /* The payload details. */
17274fe6c29SRuslan Bukin enum pt_payload {
17374fe6c29SRuslan Bukin 	/* The shift counts for post-processing the PIP payload. */
17474fe6c29SRuslan Bukin 	pt_pl_pip_shr		= 1,
17574fe6c29SRuslan Bukin 	pt_pl_pip_shl		= 5,
17674fe6c29SRuslan Bukin 
17774fe6c29SRuslan Bukin 	/* The size of a PIP payload in bytes. */
17874fe6c29SRuslan Bukin 	pt_pl_pip_size		= 6,
17974fe6c29SRuslan Bukin 
18074fe6c29SRuslan Bukin 	/* The non-root bit in the first byte of the PIP payload. */
18174fe6c29SRuslan Bukin 	pt_pl_pip_nr            = 0x01,
18274fe6c29SRuslan Bukin 
18374fe6c29SRuslan Bukin 	/* The size of a 8bit TNT packet's payload in bits. */
18474fe6c29SRuslan Bukin 	pt_pl_tnt_8_bits	= 8 - pt_opm_tnt_8_shr,
18574fe6c29SRuslan Bukin 
18674fe6c29SRuslan Bukin 	/* The size of a 64bit TNT packet's payload in bytes. */
18774fe6c29SRuslan Bukin 	pt_pl_tnt_64_size	= 6,
18874fe6c29SRuslan Bukin 
18974fe6c29SRuslan Bukin 	/* The size of a 64bit TNT packet's payload in bits. */
19074fe6c29SRuslan Bukin 	pt_pl_tnt_64_bits	= 48,
19174fe6c29SRuslan Bukin 
19274fe6c29SRuslan Bukin 	/* The size of a TSC packet's payload in bytes and in bits. */
19374fe6c29SRuslan Bukin 	pt_pl_tsc_size		= 7,
19474fe6c29SRuslan Bukin 	pt_pl_tsc_bit_size	= pt_pl_tsc_size * 8,
19574fe6c29SRuslan Bukin 
19674fe6c29SRuslan Bukin 	/* The size of a CBR packet's payload in bytes. */
19774fe6c29SRuslan Bukin 	pt_pl_cbr_size		= 2,
19874fe6c29SRuslan Bukin 
19974fe6c29SRuslan Bukin 	/* The size of a PSB packet's payload in bytes. */
20074fe6c29SRuslan Bukin 	pt_pl_psb_size		= pt_psb_repeat_count * pt_psb_repeat_size,
20174fe6c29SRuslan Bukin 
20274fe6c29SRuslan Bukin 	/* The size of a MODE packet's payload in bytes. */
20374fe6c29SRuslan Bukin 	pt_pl_mode_size		= 1,
20474fe6c29SRuslan Bukin 
20574fe6c29SRuslan Bukin 	/* The size of an IP packet's payload with update-16 compression. */
20674fe6c29SRuslan Bukin 	pt_pl_ip_upd16_size	= 2,
20774fe6c29SRuslan Bukin 
20874fe6c29SRuslan Bukin 	/* The size of an IP packet's payload with update-32 compression. */
20974fe6c29SRuslan Bukin 	pt_pl_ip_upd32_size	= 4,
21074fe6c29SRuslan Bukin 
21174fe6c29SRuslan Bukin 	/* The size of an IP packet's payload with update-48 compression. */
21274fe6c29SRuslan Bukin 	pt_pl_ip_upd48_size	= 6,
21374fe6c29SRuslan Bukin 
21474fe6c29SRuslan Bukin 	/* The size of an IP packet's payload with sext-48 compression. */
21574fe6c29SRuslan Bukin 	pt_pl_ip_sext48_size	= 6,
21674fe6c29SRuslan Bukin 
21774fe6c29SRuslan Bukin 	/* The size of an IP packet's payload with full-ip compression. */
21874fe6c29SRuslan Bukin 	pt_pl_ip_full_size	= 8,
21974fe6c29SRuslan Bukin 
22074fe6c29SRuslan Bukin 	/* Byte locations, sizes, and masks for processing TMA packets. */
22174fe6c29SRuslan Bukin 	pt_pl_tma_size		= 5,
22274fe6c29SRuslan Bukin 	pt_pl_tma_ctc_size	= 2,
22374fe6c29SRuslan Bukin 	pt_pl_tma_ctc_bit_size	= pt_pl_tma_ctc_size * 8,
22474fe6c29SRuslan Bukin 	pt_pl_tma_ctc_0		= 2,
22574fe6c29SRuslan Bukin 	pt_pl_tma_ctc_1		= 3,
22674fe6c29SRuslan Bukin 	pt_pl_tma_ctc_mask	= (1 << pt_pl_tma_ctc_bit_size) - 1,
22774fe6c29SRuslan Bukin 	pt_pl_tma_fc_size	= 2,
22874fe6c29SRuslan Bukin 	pt_pl_tma_fc_bit_size	= 9,
22974fe6c29SRuslan Bukin 	pt_pl_tma_fc_0		= 5,
23074fe6c29SRuslan Bukin 	pt_pl_tma_fc_1		= 6,
23174fe6c29SRuslan Bukin 	pt_pl_tma_fc_mask	= (1 << pt_pl_tma_fc_bit_size) - 1,
23274fe6c29SRuslan Bukin 
23374fe6c29SRuslan Bukin 	/* The size of a MTC packet's payload in bytes and in bits. */
23474fe6c29SRuslan Bukin 	pt_pl_mtc_size		= 1,
23574fe6c29SRuslan Bukin 	pt_pl_mtc_bit_size	= pt_pl_mtc_size * 8,
23674fe6c29SRuslan Bukin 
23774fe6c29SRuslan Bukin 	/* A mask for the MTC payload bits. */
23874fe6c29SRuslan Bukin 	pt_pl_mtc_mask		= (1 << pt_pl_mtc_bit_size) - 1,
23974fe6c29SRuslan Bukin 
24074fe6c29SRuslan Bukin 	/* The maximal payload size in bytes of a CYC packet. */
24174fe6c29SRuslan Bukin 	pt_pl_cyc_max_size	= 15,
24274fe6c29SRuslan Bukin 
24374fe6c29SRuslan Bukin 	/* The size of a VMCS packet's payload in bytes. */
24474fe6c29SRuslan Bukin 	pt_pl_vmcs_size		= 5,
24574fe6c29SRuslan Bukin 
24674fe6c29SRuslan Bukin 	/* The shift counts for post-processing the VMCS payload. */
24774fe6c29SRuslan Bukin 	pt_pl_vmcs_shl		= 12,
24874fe6c29SRuslan Bukin 
24974fe6c29SRuslan Bukin 	/* The size of a MNT packet's payload in bytes. */
25074fe6c29SRuslan Bukin 	pt_pl_mnt_size		= 8,
25174fe6c29SRuslan Bukin 
25274fe6c29SRuslan Bukin 	/* The bit-mask for the IP bit in the EXSTOP opcode extension. */
25374fe6c29SRuslan Bukin 	pt_pl_exstop_ip_mask	= 0x80,
25474fe6c29SRuslan Bukin 
25574fe6c29SRuslan Bukin 	/* The size of the hints field in the MWAIT payload in bytes. */
25674fe6c29SRuslan Bukin 	pt_pl_mwait_hints_size	= 4,
25774fe6c29SRuslan Bukin 
25874fe6c29SRuslan Bukin 	/* The size of the extensions field in the MWAIT payload in bytes. */
25974fe6c29SRuslan Bukin 	pt_pl_mwait_ext_size	= 4,
26074fe6c29SRuslan Bukin 
26174fe6c29SRuslan Bukin 	/* The size of the MWAIT payload in bytes. */
26274fe6c29SRuslan Bukin 	pt_pl_mwait_size	= pt_pl_mwait_hints_size + pt_pl_mwait_ext_size,
26374fe6c29SRuslan Bukin 
26474fe6c29SRuslan Bukin 	/* The size of the PWRE payload in bytes. */
26574fe6c29SRuslan Bukin 	pt_pl_pwre_size		= 2,
26674fe6c29SRuslan Bukin 
26774fe6c29SRuslan Bukin 	/* The bit-mask for the h/w bit in the PWRE payload. */
26874fe6c29SRuslan Bukin 	pt_pl_pwre_hw_mask	= 0x8,
26974fe6c29SRuslan Bukin 
27074fe6c29SRuslan Bukin 	/* The bit-mask for the resolved thread sub C-state in the PWRE
27174fe6c29SRuslan Bukin 	 * payload.
27274fe6c29SRuslan Bukin 	 */
27374fe6c29SRuslan Bukin 	pt_pl_pwre_sub_state_mask	= 0xf00,
27474fe6c29SRuslan Bukin 
27574fe6c29SRuslan Bukin 	/* The shift right value for the resolved thread sub C-state in the
27674fe6c29SRuslan Bukin 	 * PWRE payload.
27774fe6c29SRuslan Bukin 	 */
27874fe6c29SRuslan Bukin 	pt_pl_pwre_sub_state_shr	= 8,
27974fe6c29SRuslan Bukin 
28074fe6c29SRuslan Bukin 	/* The bit-mask for the resolved thread C-state in the PWRE payload. */
28174fe6c29SRuslan Bukin 	pt_pl_pwre_state_mask	= 0xf000,
28274fe6c29SRuslan Bukin 
28374fe6c29SRuslan Bukin 	/* The shift right value for the resolved thread C-state in the
28474fe6c29SRuslan Bukin 	 * PWRE payload.
28574fe6c29SRuslan Bukin 	 */
28674fe6c29SRuslan Bukin 	pt_pl_pwre_state_shr	= 12,
28774fe6c29SRuslan Bukin 
28874fe6c29SRuslan Bukin 	/* The size of the PWRX payload in bytes. */
28974fe6c29SRuslan Bukin 	pt_pl_pwrx_size		= 5,
29074fe6c29SRuslan Bukin 
29174fe6c29SRuslan Bukin 	/* The bit-mask for the deepest core C-state in the PWRX payload. */
29274fe6c29SRuslan Bukin 	pt_pl_pwrx_deepest_mask	= 0xf,
29374fe6c29SRuslan Bukin 
29474fe6c29SRuslan Bukin 	/* The shift right value for the deepest core C-state in the PWRX
29574fe6c29SRuslan Bukin 	 * payload.
29674fe6c29SRuslan Bukin 	 */
29774fe6c29SRuslan Bukin 	pt_pl_pwrx_deepest_shr	= 0,
29874fe6c29SRuslan Bukin 
29974fe6c29SRuslan Bukin 	/* The bit-mask for the last core C-state in the PWRX payload. */
30074fe6c29SRuslan Bukin 	pt_pl_pwrx_last_mask	= 0xf0,
30174fe6c29SRuslan Bukin 
30274fe6c29SRuslan Bukin 	/* The shift right value for the last core C-state in the PWRX
30374fe6c29SRuslan Bukin 	 * payload.
30474fe6c29SRuslan Bukin 	 */
30574fe6c29SRuslan Bukin 	pt_pl_pwrx_last_shr	= 4,
30674fe6c29SRuslan Bukin 
30774fe6c29SRuslan Bukin 	/* The bit-mask for the wake reason in the PWRX payload. */
30874fe6c29SRuslan Bukin 	pt_pl_pwrx_wr_mask	= 0xf00,
30974fe6c29SRuslan Bukin 
31074fe6c29SRuslan Bukin 	/* The shift right value for the wake reason in the PWRX payload. */
31174fe6c29SRuslan Bukin 	pt_pl_pwrx_wr_shr	= 8,
31274fe6c29SRuslan Bukin 
31374fe6c29SRuslan Bukin 	/* The bit-mask for the interrupt wake reason in the PWRX payload. */
31474fe6c29SRuslan Bukin 	pt_pl_pwrx_wr_int	= 0x100,
31574fe6c29SRuslan Bukin 
31674fe6c29SRuslan Bukin 	/* The bit-mask for the store wake reason in the PWRX payload. */
31774fe6c29SRuslan Bukin 	pt_pl_pwrx_wr_store	= 0x400,
31874fe6c29SRuslan Bukin 
31974fe6c29SRuslan Bukin 	/* The bit-mask for the autonomous wake reason in the PWRX payload. */
32074fe6c29SRuslan Bukin 	pt_pl_pwrx_wr_hw	= 0x800
32174fe6c29SRuslan Bukin };
32274fe6c29SRuslan Bukin 
32374fe6c29SRuslan Bukin /* Mode packet masks. */
32474fe6c29SRuslan Bukin enum pt_mode_mask {
32574fe6c29SRuslan Bukin 	pt_mom_leaf		= 0xe0,
32674fe6c29SRuslan Bukin 	pt_mom_leaf_shr		= 5,
32774fe6c29SRuslan Bukin 	pt_mom_bits		= 0x1f
32874fe6c29SRuslan Bukin };
32974fe6c29SRuslan Bukin 
33074fe6c29SRuslan Bukin /* Mode packet bits. */
33174fe6c29SRuslan Bukin enum pt_mode_bit {
33274fe6c29SRuslan Bukin 	/* mode.exec */
33374fe6c29SRuslan Bukin 	pt_mob_exec_csl		= 0x01,
33474fe6c29SRuslan Bukin 	pt_mob_exec_csd		= 0x02,
33574fe6c29SRuslan Bukin 
33674fe6c29SRuslan Bukin 	/* mode.tsx */
33774fe6c29SRuslan Bukin 	pt_mob_tsx_intx		= 0x01,
33874fe6c29SRuslan Bukin 	pt_mob_tsx_abrt		= 0x02
33974fe6c29SRuslan Bukin };
34074fe6c29SRuslan Bukin 
34174fe6c29SRuslan Bukin /* The size of the various packets in bytes. */
34274fe6c29SRuslan Bukin enum pt_packet_size {
34374fe6c29SRuslan Bukin 	ptps_pad		= pt_opcs_pad,
34474fe6c29SRuslan Bukin 	ptps_tnt_8		= pt_opcs_tnt_8,
34574fe6c29SRuslan Bukin 	ptps_mode		= pt_opcs_mode + pt_pl_mode_size,
34674fe6c29SRuslan Bukin 	ptps_tsc		= pt_opcs_tsc + pt_pl_tsc_size,
34774fe6c29SRuslan Bukin 	ptps_mtc		= pt_opcs_mtc + pt_pl_mtc_size,
34874fe6c29SRuslan Bukin 	ptps_psb		= pt_opcs_psb + pt_pl_psb_size,
34974fe6c29SRuslan Bukin 	ptps_psbend		= pt_opcs_psbend,
35074fe6c29SRuslan Bukin 	ptps_ovf		= pt_opcs_ovf,
35174fe6c29SRuslan Bukin 	ptps_pip		= pt_opcs_pip + pt_pl_pip_size,
35274fe6c29SRuslan Bukin 	ptps_tnt_64		= pt_opcs_tnt_64 + pt_pl_tnt_64_size,
35374fe6c29SRuslan Bukin 	ptps_cbr		= pt_opcs_cbr + pt_pl_cbr_size,
35474fe6c29SRuslan Bukin 	ptps_tip_supp		= pt_opcs_tip,
35574fe6c29SRuslan Bukin 	ptps_tip_upd16		= pt_opcs_tip + pt_pl_ip_upd16_size,
35674fe6c29SRuslan Bukin 	ptps_tip_upd32		= pt_opcs_tip + pt_pl_ip_upd32_size,
35774fe6c29SRuslan Bukin 	ptps_tip_upd48		= pt_opcs_tip + pt_pl_ip_upd48_size,
35874fe6c29SRuslan Bukin 	ptps_tip_sext48		= pt_opcs_tip + pt_pl_ip_sext48_size,
35974fe6c29SRuslan Bukin 	ptps_tip_full		= pt_opcs_tip + pt_pl_ip_full_size,
36074fe6c29SRuslan Bukin 	ptps_tip_pge_supp	= pt_opcs_tip_pge,
36174fe6c29SRuslan Bukin 	ptps_tip_pge_upd16	= pt_opcs_tip_pge + pt_pl_ip_upd16_size,
36274fe6c29SRuslan Bukin 	ptps_tip_pge_upd32	= pt_opcs_tip_pge + pt_pl_ip_upd32_size,
36374fe6c29SRuslan Bukin 	ptps_tip_pge_upd48	= pt_opcs_tip_pge + pt_pl_ip_upd48_size,
36474fe6c29SRuslan Bukin 	ptps_tip_pge_sext48	= pt_opcs_tip_pge + pt_pl_ip_sext48_size,
36574fe6c29SRuslan Bukin 	ptps_tip_pge_full	= pt_opcs_tip_pge + pt_pl_ip_full_size,
36674fe6c29SRuslan Bukin 	ptps_tip_pgd_supp	= pt_opcs_tip_pgd,
36774fe6c29SRuslan Bukin 	ptps_tip_pgd_upd16	= pt_opcs_tip_pgd + pt_pl_ip_upd16_size,
36874fe6c29SRuslan Bukin 	ptps_tip_pgd_upd32	= pt_opcs_tip_pgd + pt_pl_ip_upd32_size,
36974fe6c29SRuslan Bukin 	ptps_tip_pgd_upd48	= pt_opcs_tip_pgd + pt_pl_ip_upd48_size,
37074fe6c29SRuslan Bukin 	ptps_tip_pgd_sext48	= pt_opcs_tip_pgd + pt_pl_ip_sext48_size,
37174fe6c29SRuslan Bukin 	ptps_tip_pgd_full	= pt_opcs_tip_pgd + pt_pl_ip_full_size,
37274fe6c29SRuslan Bukin 	ptps_fup_supp		= pt_opcs_fup,
37374fe6c29SRuslan Bukin 	ptps_fup_upd16		= pt_opcs_fup + pt_pl_ip_upd16_size,
37474fe6c29SRuslan Bukin 	ptps_fup_upd32		= pt_opcs_fup + pt_pl_ip_upd32_size,
37574fe6c29SRuslan Bukin 	ptps_fup_upd48		= pt_opcs_fup + pt_pl_ip_upd48_size,
37674fe6c29SRuslan Bukin 	ptps_fup_sext48		= pt_opcs_fup + pt_pl_ip_sext48_size,
37774fe6c29SRuslan Bukin 	ptps_fup_full		= pt_opcs_fup + pt_pl_ip_full_size,
37874fe6c29SRuslan Bukin 	ptps_tma		= pt_opcs_tma + pt_pl_tma_size,
37974fe6c29SRuslan Bukin 	ptps_stop		= pt_opcs_stop,
38074fe6c29SRuslan Bukin 	ptps_vmcs		= pt_opcs_vmcs + pt_pl_vmcs_size,
38174fe6c29SRuslan Bukin 	ptps_mnt		= pt_opcs_mnt + pt_pl_mnt_size,
38274fe6c29SRuslan Bukin 	ptps_exstop		= pt_opcs_exstop,
38374fe6c29SRuslan Bukin 	ptps_mwait		= pt_opcs_mwait + pt_pl_mwait_size,
38474fe6c29SRuslan Bukin 	ptps_pwre		= pt_opcs_pwre + pt_pl_pwre_size,
38574fe6c29SRuslan Bukin 	ptps_pwrx		= pt_opcs_pwrx + pt_pl_pwrx_size,
38674fe6c29SRuslan Bukin 	ptps_ptw_32		= pt_opcs_ptw + 4,
38774fe6c29SRuslan Bukin 	ptps_ptw_64		= pt_opcs_ptw + 8
38874fe6c29SRuslan Bukin };
38974fe6c29SRuslan Bukin 
39074fe6c29SRuslan Bukin /* Supported address range configurations. */
39174fe6c29SRuslan Bukin enum pt_addr_cfg {
39274fe6c29SRuslan Bukin 	pt_addr_cfg_disabled	= 0,
39374fe6c29SRuslan Bukin 	pt_addr_cfg_filter	= 1,
39474fe6c29SRuslan Bukin 	pt_addr_cfg_stop	= 2
39574fe6c29SRuslan Bukin };
39674fe6c29SRuslan Bukin 
39774fe6c29SRuslan Bukin #endif /* PT_OPCODES_H */
398