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