/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright ( c ) 2022 - 2024 Qualcomm Innovation Center , Inc . All rights reserved .
*/
#ifndef __IRIS_STATE_H__
#define __IRIS_STATE_H__
struct iris_inst;
/**
* enum iris_core_state
*
* @ IRIS_CORE_DEINIT : default state .
* @ IRIS_CORE_INIT : core state with core initialized . FW loaded and
* HW brought out of reset , shared queues established
* between host driver and firmware .
* @ IRIS_CORE_ERROR : error state .
*
* - - - - - - - - - - -
* |
* V
* - - - - - - - - - - -
* + - - - > | DEINIT | < - - - +
* | - - - - - - - - - - - |
* | | |
* | v |
* | - - - - - - - - - - - |
* | / \ |
* | / \ |
* | / \ |
* | v v v
* - - - - - - - - - - - - - - - - - - - - - -
* | INIT | - - - > | ERROR |
* - - - - - - - - - - - - - - - - - - - - - -
*/
enum iris_core_state {
IRIS_CORE_DEINIT,
IRIS_CORE_INIT,
IRIS_CORE_ERROR,
};
/**
* enum iris_inst_state
*
* @ IRIS_INST_INIT : video instance is opened .
* @ IRIS_INST_INPUT_STREAMING : stream on is completed on output plane .
* @ IRIS_INST_OUTPUT_STREAMING : stream on is completed on capture plane .
* @ IRIS_INST_STREAMING : stream on is completed on both output and capture planes .
* @ IRIS_INST_DEINIT : video instance is closed .
* @ IRIS_INST_ERROR : error state .
* |
* V
* - - - - - - - - - - - - -
* + - - - - - - - - | INIT | - - - - - - - - - - +
* | - - - - - - - - - - - - - |
* | ^ ^ |
* | / \ |
* | / \ |
* | v v |
* | - - - - - - - - - - - - - - - - - - - - - - |
* | | INPUT OUTPUT | |
* | - - - | STREAMING STREAMING | - - - |
* | - - - - - - - - - - - - - - - - - - - - - - |
* | ^ ^ |
* | \ / |
* | \ / |
* | v v |
* | - - - - - - - - - - - - - |
* | - - - - - - - - | STREAMING | - - - - - - - - - - - |
* | - - - - - - - - - - - - - |
* | | |
* | | |
* | v |
* | - - - - - - - - - - - |
* + - - - - - - - - > | DEINIT | < - - - - - - - - - - +
* | - - - - - - - - - - - |
* | | |
* | | |
* | v |
* | - - - - - - - - - - |
* + - - - - - - - - > | ERROR | < - - - - - - - - - - - - +
* - - - - - - - - - -
*/
enum iris_inst_state {
IRIS_INST_DEINIT,
IRIS_INST_INIT,
IRIS_INST_INPUT_STREAMING,
IRIS_INST_OUTPUT_STREAMING,
IRIS_INST_STREAMING,
IRIS_INST_ERROR,
};
#define IRIS_INST_SUB_STATES 8
#define IRIS_INST_MAX_SUB_STATE_VALUE ((1 << IRIS_INST_SUB_STATES) - 1 )
/**
* enum iris_inst_sub_state
*
* @ IRIS_INST_SUB_FIRST_IPSC : indicates source change is received from firmware
* when output port is not yet streaming .
* @ IRIS_INST_SUB_DRC : indicates source change is received from firmware
* when output port is streaming and source change event is
* sent to client .
* @ IRIS_INST_SUB_DRC_LAST : indicates last buffer is received from firmware
* as part of source change .
* @ IRIS_INST_SUB_DRAIN : indicates drain is in progress .
* @ IRIS_INST_SUB_DRAIN_LAST : indicates last buffer is received from firmware
* as part of drain sequence .
* @ IRIS_INST_SUB_INPUT_PAUSE : source change is received form firmware . This
* indicates that firmware is paused to process
* any further input frames .
* @ IRIS_INST_SUB_OUTPUT_PAUSE : last buffer is received form firmware as part
* of drc sequence . This indicates that
* firmware is paused to process any further output frames .
* @ IRIS_INST_SUB_LOAD_RESOURCES : indicates all the resources have been loaded by the
* firmware and it is ready for processing .
*/
enum iris_inst_sub_state {
IRIS_INST_SUB_FIRST_IPSC = BIT(0 ),
IRIS_INST_SUB_DRC = BIT(1 ),
IRIS_INST_SUB_DRC_LAST = BIT(2 ),
IRIS_INST_SUB_DRAIN = BIT(3 ),
IRIS_INST_SUB_DRAIN_LAST = BIT(4 ),
IRIS_INST_SUB_INPUT_PAUSE = BIT(5 ),
IRIS_INST_SUB_OUTPUT_PAUSE = BIT(6 ),
IRIS_INST_SUB_LOAD_RESOURCES = BIT(7 ),
};
int iris_inst_change_state(struct iris_inst *inst,
enum iris_inst_state request_state);
int iris_inst_change_sub_state(struct iris_inst *inst,
enum iris_inst_sub_state clear_sub_state,
enum iris_inst_sub_state set_sub_state);
int iris_inst_state_change_streamon(struct iris_inst *inst, u32 plane);
int iris_inst_state_change_streamoff(struct iris_inst *inst, u32 plane);
int iris_inst_sub_state_change_drc(struct iris_inst *inst);
int iris_inst_sub_state_change_drain_last(struct iris_inst *inst);
int iris_inst_sub_state_change_drc_last(struct iris_inst *inst);
int iris_inst_sub_state_change_pause(struct iris_inst *inst, u32 plane);
bool iris_allow_cmd(struct iris_inst *inst, u32 cmd);
bool iris_drc_pending(struct iris_inst *inst);
bool iris_drain_pending(struct iris_inst *inst);
#endif
Messung V0.5 in Prozent C=89 H=96 G=92
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-10-12)
¤
*© Formatika GbR, Deutschland