drivers/staging/media/atomisp/pci/runtime/isp_param/src/isp_param.c
Source file repositories/reference/linux-study-clean/drivers/staging/media/atomisp/pci/runtime/isp_param/src/isp_param.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/media/atomisp/pci/runtime/isp_param/src/isp_param.c- Extension
.c- Size
- 5964 bytes
- Lines
- 207
- Domain
- Driver Families
- Bucket
- drivers/staging
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
hmm.hia_css_pipeline.hia_css_isp_param.h
Detected Declarations
function Copyrightfunction ia_css_isp_param_set_css_mem_initfunction ia_css_isp_param_set_isp_mem_initfunction ia_css_isp_param_get_mem_initfunction ia_css_isp_param_get_css_mem_initfunction ia_css_isp_param_get_isp_mem_initfunction ia_css_init_memory_interfacefunction ia_css_isp_param_allocate_isp_parametersfunction ia_css_isp_param_destroy_isp_parametersfunction ia_css_isp_param_load_fw_paramsfunction ia_css_isp_param_copy_isp_mem_if_to_ddrfunction ia_css_isp_param_enable_pipeline
Annotated Snippet
if (size) {
mem_params->params[pclass][mem].address = kvcalloc(1,
size,
GFP_KERNEL);
if (!mem_params->params[pclass][mem].address) {
err = -ENOMEM;
goto cleanup;
}
if (pclass != IA_CSS_PARAM_CLASS_PARAM) {
css_params->params[pclass][mem].address = hmm_alloc(size);
if (!css_params->params[pclass][mem].address) {
err = -ENOMEM;
goto cleanup;
}
}
}
}
}
return err;
cleanup:
ia_css_isp_param_destroy_isp_parameters(mem_params, css_params);
return err;
}
void
ia_css_isp_param_destroy_isp_parameters(
struct ia_css_isp_param_host_segments *mem_params,
struct ia_css_isp_param_css_segments *css_params)
{
unsigned int mem, pclass;
for (mem = 0; mem < IA_CSS_NUM_MEMORIES; mem++) {
for (pclass = 0; pclass < IA_CSS_NUM_PARAM_CLASSES; pclass++) {
kvfree(mem_params->params[pclass][mem].address);
if (css_params->params[pclass][mem].address)
hmm_free(css_params->params[pclass][mem].address);
mem_params->params[pclass][mem].address = NULL;
css_params->params[pclass][mem].address = 0x0;
}
}
}
void
ia_css_isp_param_load_fw_params(
const char *fw,
union ia_css_all_memory_offsets *mem_offsets,
const struct ia_css_isp_param_memory_offsets *memory_offsets,
bool init)
{
unsigned int pclass;
for (pclass = 0; pclass < IA_CSS_NUM_PARAM_CLASSES; pclass++) {
mem_offsets->array[pclass].ptr = NULL;
if (init)
mem_offsets->array[pclass].ptr = (void *)(fw + memory_offsets->offsets[pclass]);
}
}
int ia_css_isp_param_copy_isp_mem_if_to_ddr(struct ia_css_isp_param_css_segments *ddr,
const struct ia_css_isp_param_host_segments *host,
enum ia_css_param_class pclass)
{
unsigned int mem;
for (mem = 0; mem < N_IA_CSS_ISP_MEMORIES; mem++) {
size_t size = host->params[pclass][mem].size;
ia_css_ptr ddr_mem_ptr = ddr->params[pclass][mem].address;
char *host_mem_ptr = host->params[pclass][mem].address;
if (size != ddr->params[pclass][mem].size)
return -EINVAL;
if (!size)
continue;
hmm_store(ddr_mem_ptr, host_mem_ptr, size);
}
return 0;
}
void
ia_css_isp_param_enable_pipeline(
const struct ia_css_isp_param_host_segments *mem_params)
{
/* By protocol b0 of the mandatory uint32_t first field of the
input parameter is a disable bit*/
short dmem_offset = 0;
if (mem_params->params[IA_CSS_PARAM_CLASS_PARAM][IA_CSS_ISP_DMEM0].size == 0)
return;
*(uint32_t *)
Annotation
- Immediate include surface: `hmm.h`, `ia_css_pipeline.h`, `ia_css_isp_param.h`.
- Detected declarations: `function Copyright`, `function ia_css_isp_param_set_css_mem_init`, `function ia_css_isp_param_set_isp_mem_init`, `function ia_css_isp_param_get_mem_init`, `function ia_css_isp_param_get_css_mem_init`, `function ia_css_isp_param_get_isp_mem_init`, `function ia_css_init_memory_interface`, `function ia_css_isp_param_allocate_isp_parameters`, `function ia_css_isp_param_destroy_isp_parameters`, `function ia_css_isp_param_load_fw_params`.
- Atlas domain: Driver Families / drivers/staging.
- 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.