|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | /* | 
|  | * Arm Statistical Profiling Extensions (SPE) support | 
|  | * Copyright (c) 2017-2018, Arm Ltd. | 
|  | */ | 
|  |  | 
|  | #ifndef INCLUDE__ARM_SPE_PKT_DECODER_H__ | 
|  | #define INCLUDE__ARM_SPE_PKT_DECODER_H__ | 
|  |  | 
|  | #include <stddef.h> | 
|  | #include <stdint.h> | 
|  |  | 
|  | #define ARM_SPE_PKT_DESC_MAX		256 | 
|  |  | 
|  | #define ARM_SPE_NEED_MORE_BYTES		-1 | 
|  | #define ARM_SPE_BAD_PACKET		-2 | 
|  |  | 
|  | enum arm_spe_pkt_type { | 
|  | ARM_SPE_BAD, | 
|  | ARM_SPE_PAD, | 
|  | ARM_SPE_END, | 
|  | ARM_SPE_TIMESTAMP, | 
|  | ARM_SPE_ADDRESS, | 
|  | ARM_SPE_COUNTER, | 
|  | ARM_SPE_CONTEXT, | 
|  | ARM_SPE_OP_TYPE, | 
|  | ARM_SPE_EVENTS, | 
|  | ARM_SPE_DATA_SOURCE, | 
|  | }; | 
|  |  | 
|  | struct arm_spe_pkt { | 
|  | enum arm_spe_pkt_type	type; | 
|  | unsigned char		index; | 
|  | uint64_t		payload; | 
|  | }; | 
|  |  | 
|  | const char *arm_spe_pkt_name(enum arm_spe_pkt_type); | 
|  |  | 
|  | int arm_spe_get_packet(const unsigned char *buf, size_t len, | 
|  | struct arm_spe_pkt *packet); | 
|  |  | 
|  | int arm_spe_pkt_desc(const struct arm_spe_pkt *packet, char *buf, size_t len); | 
|  | #endif |