cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

komeda_format_caps.h (3056B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * (C) COPYRIGHT 2018 ARM Limited. All rights reserved.
      4 * Author: James.Qian.Wang <james.qian.wang@arm.com>
      5 *
      6 */
      7
      8#ifndef _KOMEDA_FORMAT_CAPS_H_
      9#define _KOMEDA_FORMAT_CAPS_H_
     10
     11#include <linux/types.h>
     12#include <uapi/drm/drm_fourcc.h>
     13#include <drm/drm_fourcc.h>
     14
     15#define AFBC(x)		DRM_FORMAT_MOD_ARM_AFBC(x)
     16
     17/* afbc layerout */
     18#define AFBC_16x16(x)	AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_16x16 | (x))
     19#define AFBC_32x8(x)	AFBC(AFBC_FORMAT_MOD_BLOCK_SIZE_32x8 | (x))
     20
     21/* afbc features */
     22#define _YTR		AFBC_FORMAT_MOD_YTR
     23#define _SPLIT		AFBC_FORMAT_MOD_SPLIT
     24#define _SPARSE		AFBC_FORMAT_MOD_SPARSE
     25#define _CBR		AFBC_FORMAT_MOD_CBR
     26#define _TILED		AFBC_FORMAT_MOD_TILED
     27#define _SC		AFBC_FORMAT_MOD_SC
     28
     29/* layer_type */
     30#define KOMEDA_FMT_RICH_LAYER		BIT(0)
     31#define KOMEDA_FMT_SIMPLE_LAYER		BIT(1)
     32#define KOMEDA_FMT_WB_LAYER		BIT(2)
     33
     34#define AFBC_TH_LAYOUT_ALIGNMENT	8
     35#define AFBC_HEADER_SIZE		16
     36#define AFBC_SUPERBLK_ALIGNMENT		128
     37#define AFBC_SUPERBLK_PIXELS		256
     38#define AFBC_BODY_START_ALIGNMENT	1024
     39#define AFBC_TH_BODY_START_ALIGNMENT	4096
     40
     41/**
     42 * struct komeda_format_caps
     43 *
     44 * komeda_format_caps is for describing ARM display specific features and
     45 * limitations for a specific format, and format_caps will be linked into
     46 * &komeda_framebuffer like a extension of &drm_format_info.
     47 *
     48 * NOTE: one fourcc may has two different format_caps items for fourcc and
     49 * fourcc+modifier
     50 *
     51 * @hw_id: hw format id, hw specific value.
     52 * @fourcc: drm fourcc format.
     53 * @supported_layer_types: indicate which layer supports this format
     54 * @supported_rots: allowed rotations for this format
     55 * @supported_afbc_layouts: supported afbc layerout
     56 * @supported_afbc_features: supported afbc features
     57 */
     58struct komeda_format_caps {
     59	u32 hw_id;
     60	u32 fourcc;
     61	u32 supported_layer_types;
     62	u32 supported_rots;
     63	u32 supported_afbc_layouts;
     64	u64 supported_afbc_features;
     65};
     66
     67/**
     68 * struct komeda_format_caps_table - format_caps mananger
     69 *
     70 * @n_formats: the size of format_caps list.
     71 * @format_caps: format_caps list.
     72 * @format_mod_supported: Optional. Some HW may have special requirements or
     73 * limitations which can not be described by format_caps, this func supply HW
     74 * the ability to do the further HW specific check.
     75 */
     76struct komeda_format_caps_table {
     77	u32 n_formats;
     78	const struct komeda_format_caps *format_caps;
     79	bool (*format_mod_supported)(const struct komeda_format_caps *caps,
     80				     u32 layer_type, u64 modifier, u32 rot);
     81};
     82
     83extern u64 komeda_supported_modifiers[];
     84
     85const struct komeda_format_caps *
     86komeda_get_format_caps(struct komeda_format_caps_table *table,
     87		       u32 fourcc, u64 modifier);
     88
     89u32 komeda_get_afbc_format_bpp(const struct drm_format_info *info,
     90			       u64 modifier);
     91
     92u32 *komeda_get_layer_fourcc_list(struct komeda_format_caps_table *table,
     93				  u32 layer_type, u32 *n_fmts);
     94
     95void komeda_put_fourcc_list(u32 *fourcc_list);
     96
     97bool komeda_format_mod_supported(struct komeda_format_caps_table *table,
     98				 u32 layer_type, u32 fourcc, u64 modifier,
     99				 u32 rot);
    100
    101#endif