/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
 */

#ifndef _SDE_HW_RC_H
#define _SDE_HW_RC_H

#include "sde_hw_mdss.h"


/**
 * sde_hw_rc_init -  Initialize RC internal state object and ops
 * @hw_dspp: DSPP instance.
 * Return: 0 on success, non-zero otherwise.
 */
int sde_hw_rc_init(struct sde_hw_dspp *hw_dspp);

/**
 * sde_hw_rc_check_mask -  Validate RC mask configuration
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success, non-zero otherwise.
 */
int sde_hw_rc_check_mask(struct sde_hw_dspp *hw_dspp, void *cfg);

/**
 * sde_hw_rc_setup_mask -  Setup RC mask configuration
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success, non-zero otherwise.
 */
int sde_hw_rc_setup_mask(struct sde_hw_dspp *hw_dspp, void *cfg);

/**
 * sde_hw_rc_check_pu_roi -  Validate RC partial update region of interest
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success.
 *         > 0 on early return.
 *         < 0 on error.
 */
int sde_hw_rc_check_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg);

/**
 * sde_hw_rc_setup_pu_roi -  Setup RC partial update region of interest
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success.
 *         > 0 on early return.
 *         < 0 on error.
 */
int sde_hw_rc_setup_pu_roi(struct sde_hw_dspp *hw_dspp, void *cfg);

/**
 * sde_hw_rc_setup_data_ahb - Program mask data with AHB
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success, non-zero otherwise.
 */
int sde_hw_rc_setup_data_ahb(struct sde_hw_dspp *hw_dspp, void *cfg);

/**
 * sde_hw_rc_setup_data_dma - Program mask data with DMA
 * @hw_dspp: DSPP instance.
 * @cfg: Pointer to configuration blob.
 * Return: 0 on success, non-zero otherwise.
 */
int sde_hw_rc_setup_data_dma(struct sde_hw_dspp *hw_dspp, void *cfg);

#endif
