10ddc1e07SMichal Wajdeczko /* SPDX-License-Identifier: MIT */ 20ddc1e07SMichal Wajdeczko /* 30ddc1e07SMichal Wajdeczko * Copyright © 2024 Intel Corporation 40ddc1e07SMichal Wajdeczko */ 50ddc1e07SMichal Wajdeczko 60ddc1e07SMichal Wajdeczko #ifndef _XE_GUC_KLV_HELPERS_H_ 70ddc1e07SMichal Wajdeczko #define _XE_GUC_KLV_HELPERS_H_ 80ddc1e07SMichal Wajdeczko 9*e6946ea8SMichal Wajdeczko #include <linux/args.h> 100ddc1e07SMichal Wajdeczko #include <linux/types.h> 110ddc1e07SMichal Wajdeczko 120ddc1e07SMichal Wajdeczko struct drm_printer; 130ddc1e07SMichal Wajdeczko 140ddc1e07SMichal Wajdeczko const char *xe_guc_klv_key_to_string(u16 key); 150ddc1e07SMichal Wajdeczko 160ddc1e07SMichal Wajdeczko void xe_guc_klv_print(const u32 *klvs, u32 num_dwords, struct drm_printer *p); 170ddc1e07SMichal Wajdeczko int xe_guc_klv_count(const u32 *klvs, u32 num_dwords); 180ddc1e07SMichal Wajdeczko 190ddc1e07SMichal Wajdeczko /** 200ddc1e07SMichal Wajdeczko * PREP_GUC_KLV - Prepare KLV header value based on provided key and len. 210ddc1e07SMichal Wajdeczko * @key: KLV key 220ddc1e07SMichal Wajdeczko * @len: KLV length 230ddc1e07SMichal Wajdeczko * 240ddc1e07SMichal Wajdeczko * Return: value of the KLV header (u32). 250ddc1e07SMichal Wajdeczko */ 260ddc1e07SMichal Wajdeczko #define PREP_GUC_KLV(key, len) \ 270ddc1e07SMichal Wajdeczko (FIELD_PREP(GUC_KLV_0_KEY, (key)) | \ 280ddc1e07SMichal Wajdeczko FIELD_PREP(GUC_KLV_0_LEN, (len))) 290ddc1e07SMichal Wajdeczko 300ddc1e07SMichal Wajdeczko /** 310ddc1e07SMichal Wajdeczko * PREP_GUC_KLV_CONST - Prepare KLV header value based on const key and len. 320ddc1e07SMichal Wajdeczko * @key: const KLV key 330ddc1e07SMichal Wajdeczko * @len: const KLV length 340ddc1e07SMichal Wajdeczko * 350ddc1e07SMichal Wajdeczko * Return: value of the KLV header (u32). 360ddc1e07SMichal Wajdeczko */ 370ddc1e07SMichal Wajdeczko #define PREP_GUC_KLV_CONST(key, len) \ 380ddc1e07SMichal Wajdeczko (FIELD_PREP_CONST(GUC_KLV_0_KEY, (key)) | \ 390ddc1e07SMichal Wajdeczko FIELD_PREP_CONST(GUC_KLV_0_LEN, (len))) 400ddc1e07SMichal Wajdeczko 410ddc1e07SMichal Wajdeczko /** 42*e6946ea8SMichal Wajdeczko * MAKE_GUC_KLV_KEY - Prepare KLV KEY name based on unique KLV definition tag. 43*e6946ea8SMichal Wajdeczko * @TAG: unique tag of the KLV definition 44*e6946ea8SMichal Wajdeczko */ 45*e6946ea8SMichal Wajdeczko #define MAKE_GUC_KLV_KEY(TAG) CONCATENATE(CONCATENATE(GUC_KLV_, TAG), _KEY) 46*e6946ea8SMichal Wajdeczko 47*e6946ea8SMichal Wajdeczko /** 48*e6946ea8SMichal Wajdeczko * MAKE_GUC_KLV_LEN - Prepare KLV LEN name based on unique KLV definition tag. 49*e6946ea8SMichal Wajdeczko * @TAG: unique tag of the KLV definition 50*e6946ea8SMichal Wajdeczko */ 51*e6946ea8SMichal Wajdeczko #define MAKE_GUC_KLV_LEN(TAG) CONCATENATE(CONCATENATE(GUC_KLV_, TAG), _LEN) 52*e6946ea8SMichal Wajdeczko 53*e6946ea8SMichal Wajdeczko /** 540ddc1e07SMichal Wajdeczko * PREP_GUC_KLV_TAG - Prepare KLV header value based on unique KLV definition tag. 550ddc1e07SMichal Wajdeczko * @TAG: unique tag of the KLV definition 560ddc1e07SMichal Wajdeczko * 570ddc1e07SMichal Wajdeczko * Combine separate KEY and LEN definitions of the KLV identified by the TAG. 580ddc1e07SMichal Wajdeczko * 590ddc1e07SMichal Wajdeczko * Return: value of the KLV header (u32). 600ddc1e07SMichal Wajdeczko */ 610ddc1e07SMichal Wajdeczko #define PREP_GUC_KLV_TAG(TAG) \ 62*e6946ea8SMichal Wajdeczko PREP_GUC_KLV_CONST(MAKE_GUC_KLV_KEY(TAG), MAKE_GUC_KLV_LEN(TAG)) 630ddc1e07SMichal Wajdeczko 640ddc1e07SMichal Wajdeczko #endif 65