drivers/firmware/arm_scmi/raw_mode.c
Source file repositories/reference/linux-study-clean/drivers/firmware/arm_scmi/raw_mode.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/firmware/arm_scmi/raw_mode.c- Extension
.c- Size
- 44060 bytes
- Lines
- 1515
- Domain
- Driver Families
- Bucket
- drivers/firmware
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern 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 an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- 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
linux/bitmap.hlinux/debugfs.hlinux/delay.hlinux/device.hlinux/export.hlinux/io.hlinux/kernel.hlinux/fs.hlinux/list.hlinux/module.hlinux/poll.hlinux/of.hlinux/slab.hlinux/xarray.hcommon.hraw_mode.htrace/events/scmi.h
Detected Declarations
struct scmi_raw_queuestruct scmi_raw_mode_infostruct scmi_xfer_raw_waiterstruct scmi_raw_bufferstruct scmi_dbg_raw_datafunction scmi_raw_queue_selectfunction scmi_raw_buffer_putfunction scmi_raw_buffer_enqueuefunction scmi_raw_buffer_dequeue_unlockedfunction scmi_raw_buffer_queue_flushfunction scmi_xfer_raw_waiter_getfunction scmi_xfer_raw_waiter_putfunction scmi_xfer_raw_waiter_enqueuefunction scmi_xfer_raw_waiter_dequeuefunction responsefunction scmi_xfer_raw_resetfunction scmi_xfer_raw_get_initfunction scmi_do_xfer_raw_startfunction scmi_raw_message_sendfunction scmi_raw_message_dequeuefunction scmi_raw_message_receivefunction scmi_dbg_raw_mode_common_readfunction scmi_dbg_raw_mode_common_writefunction scmi_test_dbg_raw_common_pollfunction scmi_dbg_raw_mode_message_readfunction scmi_dbg_raw_mode_message_writefunction scmi_dbg_raw_mode_message_pollfunction scmi_dbg_raw_mode_openfunction scmi_dbg_raw_mode_releasefunction scmi_dbg_raw_mode_reset_writefunction scmi_dbg_raw_mode_message_async_writefunction scmi_dbg_raw_mode_message_poll_writefunction scmi_dbg_raw_mode_message_poll_async_writefunction scmi_test_dbg_raw_mode_notif_readfunction scmi_test_dbg_raw_mode_notif_pollfunction scmi_test_dbg_raw_mode_errors_readfunction scmi_test_dbg_raw_mode_errors_pollfunction scmi_raw_queue_initfunction scmi_xfer_raw_worker_initfunction scmi_raw_mode_setupfunction scmi_raw_mode_cleanupfunction scmi_xfer_raw_collectfunction pacefunction scmi_xfer_raw_fillfunction scmi_raw_error_report
Annotated Snippet
static const struct file_operations scmi_dbg_raw_mode_reset_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.write = scmi_dbg_raw_mode_reset_write,
.owner = THIS_MODULE,
};
static const struct file_operations scmi_dbg_raw_mode_message_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_write,
.poll = scmi_dbg_raw_mode_message_poll,
.owner = THIS_MODULE,
};
static ssize_t scmi_dbg_raw_mode_message_async_write(struct file *filp,
const char __user *buf,
size_t count, loff_t *ppos)
{
return scmi_dbg_raw_mode_common_write(filp, buf, count, ppos,
true, false);
}
static const struct file_operations scmi_dbg_raw_mode_message_async_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_async_write,
.poll = scmi_dbg_raw_mode_message_poll,
.owner = THIS_MODULE,
};
static ssize_t scmi_dbg_raw_mode_message_poll_write(struct file *filp,
const char __user *buf,
size_t count, loff_t *ppos)
{
return scmi_dbg_raw_mode_common_write(filp, buf, count, ppos,
false, true);
}
static const struct file_operations scmi_dbg_raw_mode_message_poll_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_poll_write,
.poll = scmi_dbg_raw_mode_message_poll,
.owner = THIS_MODULE,
};
static ssize_t scmi_dbg_raw_mode_message_poll_async_write(struct file *filp,
const char __user *buf,
size_t count, loff_t *ppos)
{
return scmi_dbg_raw_mode_common_write(filp, buf, count, ppos,
true, true);
}
static const struct file_operations scmi_dbg_raw_mode_message_poll_async_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.read = scmi_dbg_raw_mode_message_read,
.write = scmi_dbg_raw_mode_message_poll_async_write,
.poll = scmi_dbg_raw_mode_message_poll,
.owner = THIS_MODULE,
};
static ssize_t scmi_test_dbg_raw_mode_notif_read(struct file *filp,
char __user *buf,
size_t count, loff_t *ppos)
{
return scmi_dbg_raw_mode_common_read(filp, buf, count, ppos,
SCMI_RAW_NOTIF_QUEUE);
}
static __poll_t
scmi_test_dbg_raw_mode_notif_poll(struct file *filp,
struct poll_table_struct *wait)
{
return scmi_test_dbg_raw_common_poll(filp, wait, SCMI_RAW_NOTIF_QUEUE);
}
static const struct file_operations scmi_dbg_raw_mode_notification_fops = {
.open = scmi_dbg_raw_mode_open,
.release = scmi_dbg_raw_mode_release,
.read = scmi_test_dbg_raw_mode_notif_read,
.poll = scmi_test_dbg_raw_mode_notif_poll,
.owner = THIS_MODULE,
};
Annotation
- Immediate include surface: `linux/bitmap.h`, `linux/debugfs.h`, `linux/delay.h`, `linux/device.h`, `linux/export.h`, `linux/io.h`, `linux/kernel.h`, `linux/fs.h`.
- Detected declarations: `struct scmi_raw_queue`, `struct scmi_raw_mode_info`, `struct scmi_xfer_raw_waiter`, `struct scmi_raw_buffer`, `struct scmi_dbg_raw_data`, `function scmi_raw_queue_select`, `function scmi_raw_buffer_put`, `function scmi_raw_buffer_enqueue`, `function scmi_raw_buffer_dequeue_unlocked`, `function scmi_raw_buffer_queue_flush`.
- Atlas domain: Driver Families / drivers/firmware.
- Implementation status: pattern implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.