drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/qcom/iris/iris_hfi_gen1_command.c- Extension
.c- Size
- 34389 bytes
- Lines
- 1161
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
iris_hfi_gen1.hiris_hfi_gen1_defines.hiris_instance.hiris_vpu_buffer.h
Detected Declarations
function Copyrightfunction iris_hfi_gen1_sys_initfunction iris_hfi_gen1_sys_image_versionfunction iris_hfi_gen1_sys_interframe_powercollapsefunction iris_hfi_gen1_sys_pc_prepfunction iris_hfi_gen1_session_openfunction iris_hfi_gen1_packet_session_cmdfunction iris_hfi_gen1_session_closefunction iris_hfi_gen1_session_startfunction iris_hfi_gen1_session_stopfunction iris_hfi_gen1_session_continuefunction iris_hfi_gen1_queue_input_bufferfunction iris_hfi_gen1_queue_output_bufferfunction iris_hfi_gen1_queue_internal_bufferfunction iris_hfi_gen1_session_queue_bufferfunction iris_hfi_gen1_session_unset_buffersfunction iris_hfi_gen1_session_drainfunction iris_hfi_gen1_packet_session_set_propertyfunction hfi_gen1_set_propertyfunction iris_hfi_gen1_session_set_propertyfunction iris_hfi_gen1_set_resolutionfunction iris_hfi_gen1_decide_corefunction iris_hfi_gen1_set_raw_formatfunction iris_hfi_gen1_set_format_constraintsfunction iris_hfi_gen1_set_num_bufsfunction iris_hfi_gen1_set_multistreamfunction iris_hfi_gen1_set_bufsizefunction iris_hfi_gen1_set_frame_ratefunction iris_hfi_gen1_set_stridefunction iris_hfi_gen1_session_set_config_paramsfunction iris_hfi_gen1_sys_ops_init
Annotated Snippet
if (inst->state == IRIS_INST_STREAMING) {
if (V4L2_TYPE_IS_OUTPUT(plane))
flush_type = HFI_FLUSH_ALL;
else if (V4L2_TYPE_IS_CAPTURE(plane))
flush_type = HFI_FLUSH_OUTPUT;
reinit_completion(&inst->flush_completion);
flush_pkt.shdr.hdr.size = sizeof(struct hfi_session_flush_pkt);
flush_pkt.shdr.hdr.pkt_type = HFI_CMD_SESSION_FLUSH;
flush_pkt.shdr.session_id = inst->session_id;
flush_pkt.flush_type = flush_type;
ret = iris_hfi_queue_cmd_write(core, &flush_pkt, flush_pkt.shdr.hdr.size);
if (!ret) {
inst->flush_responses_pending++;
ret = iris_wait_for_session_response(inst, true);
}
} else if (inst->sub_state & IRIS_INST_SUB_LOAD_RESOURCES) {
reinit_completion(&inst->completion);
iris_hfi_gen1_packet_session_cmd(inst, &pkt, HFI_CMD_SESSION_STOP);
ret = iris_hfi_queue_cmd_write(core, &pkt, pkt.shdr.hdr.size);
if (!ret)
ret = iris_wait_for_session_response(inst, false);
reinit_completion(&inst->completion);
iris_hfi_gen1_packet_session_cmd(inst, &pkt,
HFI_CMD_SESSION_RELEASE_RESOURCES);
ret = iris_hfi_queue_cmd_write(core, &pkt, pkt.shdr.hdr.size);
if (!ret)
ret = iris_wait_for_session_response(inst, false);
iris_inst_change_sub_state(inst, IRIS_INST_SUB_LOAD_RESOURCES, 0);
iris_helper_buffers_done(inst, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
VB2_BUF_STATE_ERROR);
iris_helper_buffers_done(inst, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
VB2_BUF_STATE_ERROR);
}
} else {
if (inst->state == IRIS_INST_STREAMING ||
inst->state == IRIS_INST_INPUT_STREAMING ||
inst->state == IRIS_INST_ERROR) {
reinit_completion(&inst->completion);
iris_hfi_gen1_packet_session_cmd(inst, &pkt, HFI_CMD_SESSION_STOP);
ret = iris_hfi_queue_cmd_write(core, &pkt, pkt.shdr.hdr.size);
if (!ret)
ret = iris_wait_for_session_response(inst, false);
reinit_completion(&inst->completion);
iris_hfi_gen1_packet_session_cmd(inst, &pkt,
HFI_CMD_SESSION_RELEASE_RESOURCES);
ret = iris_hfi_queue_cmd_write(core, &pkt, pkt.shdr.hdr.size);
if (!ret)
ret = iris_wait_for_session_response(inst, false);
iris_inst_change_sub_state(inst, IRIS_INST_SUB_LOAD_RESOURCES, 0);
}
iris_helper_buffers_done(inst, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
VB2_BUF_STATE_ERROR);
iris_helper_buffers_done(inst, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
VB2_BUF_STATE_ERROR);
}
return ret;
}
static int iris_hfi_gen1_session_continue(struct iris_inst *inst, u32 plane)
{
struct hfi_session_pkt packet;
iris_hfi_gen1_packet_session_cmd(inst, &packet, HFI_CMD_SESSION_CONTINUE);
return iris_hfi_queue_cmd_write(inst->core, &packet, packet.shdr.hdr.size);
}
static int iris_hfi_gen1_queue_input_buffer(struct iris_inst *inst, struct iris_buffer *buf)
{
struct hfi_session_empty_buffer_compressed_pkt com_ip_pkt;
struct hfi_session_empty_buffer_uncompressed_pkt uncom_ip_pkt;
if (inst->domain == DECODER) {
com_ip_pkt.shdr.hdr.size = sizeof(struct hfi_session_empty_buffer_compressed_pkt);
com_ip_pkt.shdr.hdr.pkt_type = HFI_CMD_SESSION_EMPTY_BUFFER;
com_ip_pkt.shdr.session_id = inst->session_id;
com_ip_pkt.time_stamp_hi = upper_32_bits(buf->timestamp);
com_ip_pkt.time_stamp_lo = lower_32_bits(buf->timestamp);
com_ip_pkt.flags = 0;
com_ip_pkt.mark_target = 0;
Annotation
- Immediate include surface: `iris_hfi_gen1.h`, `iris_hfi_gen1_defines.h`, `iris_instance.h`, `iris_vpu_buffer.h`.
- Detected declarations: `function Copyright`, `function iris_hfi_gen1_sys_init`, `function iris_hfi_gen1_sys_image_version`, `function iris_hfi_gen1_sys_interframe_powercollapse`, `function iris_hfi_gen1_sys_pc_prep`, `function iris_hfi_gen1_session_open`, `function iris_hfi_gen1_packet_session_cmd`, `function iris_hfi_gen1_session_close`, `function iris_hfi_gen1_session_start`, `function iris_hfi_gen1_session_stop`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.