STRUCT IOSM_IMEM(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌈 struct iosm_imem(9) β€” Kernel API Manual 🌈

okay bestie, welcome to the manual page for struct iosm_imem(9) β€” literally the current state of the IPC shared memory. no cap, this struct is the main character of the IPC shared-memory situation πŸ’…βœ¨

🌸 NAME 🌸

struct iosm_imem β€” current state of the IPC shared memory. 🫢

✨ SYNOPSIS ✨

       struct iosm_imem {
           struct iosm_mmio *mmio;
           struct iosm_protocol *ipc_protocol;
           struct ipc_task *ipc_task;
           struct iosm_wwan *wwan;
           struct iosm_mux *mux;
           struct iosm_cdev *ipc_port[IPC_MEM_MAX_CHANNELS];
           struct iosm_pcie *pcie;
         #ifdef CONFIG_WWAN_DEBUGFS;
           struct iosm_trace *trace;
         #endif;
           struct device *dev;
           enum ipc_mem_device_ipc_state ipc_requested_state;
           struct ipc_mem_channel channels[IPC_MEM_MAX_CHANNELS];
           struct iosm_devlink *ipc_devlink;
           u32 ipc_status;
           u32 nr_of_channels;
           struct hrtimer startup_timer;
           ktime_t hrtimer_period;
           struct hrtimer tdupdate_timer;
           struct hrtimer fast_update_timer;
           struct hrtimer td_alloc_timer;
           struct hrtimer adb_timer;
           enum rom_exit_code rom_exit_code;
           u32 enter_runtime;
           struct completion ul_pend_sem;
           u32 app_notify_ul_pend;
           struct completion dl_pend_sem;
           u32 app_notify_dl_pend;
           enum ipc_phase phase;
           u16 pci_device_id;
           int cp_version;
           int device_sleep;
           struct work_struct run_state_worker;
           u8 ev_irq_pending[IPC_IRQ_VECTORS];
           unsigned long flag;
           u8 td_update_timer_suspended:1, ev_mux_net_transmit_pending:1,
       reset_det_n:1, pcie_wake_n:1;
         #ifdef CONFIG_WWAN_DEBUGFS;
           struct dentry *debugfs_wwan_dir;
           struct dentry *debugfs_dir;
         #endif;
        };

quick vibe check: trace, debugfs_wwan_dir, and debugfs_dir are tucked behind #ifdef CONFIG_WWAN_DEBUGFS; in there β€” iykyk πŸ§šβ€β™€οΈ

🧩 Members 🧩

  • mmio β€” the mmio instance used to access the CP MMIO area / doorbell scratchpad. πŸŽ›οΈ
  • ipc_protocol β€” the IPC Protocol instance. 🧠
  • ipc_task β€” the task for entry into the ipc task queue. 🎟️
  • wwan β€” the WWAN device pointer. πŸ“‘
  • mux β€” the IP Data multiplexing state. 🧬
  • ipc_port β€” a pointer to the IPC PORT data structure. πŸšͺ
  • pcie β€” the IPC PCIe. πŸš€
  • trace β€” a pointer to the IPC trace data structure. πŸ”
  • dev β€” a pointer to the device structure. 🏠
  • ipc_requested_state β€” the expected IPC state on CP. πŸ“Œ
  • channels β€” the channel list with UL/DL pipe pairs. 🧡
  • ipc_devlink β€” a pointer to the IPC Devlink data structure. 🧷
  • ipc_status β€” the local ipc_status. πŸ“Š
  • nr_of_channels β€” the number of configured channels. πŸ”’
  • startup_timer β€” the startup timer for NAND support. ⏰
  • hrtimer_period β€” the Hr timer period. πŸ•°οΈ
  • tdupdate_timer β€” delays the TD update doorbell. πŸ””
  • fast_update_timer β€” the forced head pointer update delay timer. ⚑
  • td_alloc_timer β€” the timer for DL pipe TD allocation retry. πŸ”
  • adb_timer β€” the timer for finishing the ADB. ⏳
  • rom_exit_code β€” the mapped boot rom exit code. 🧾
  • enter_runtime β€” 1 means the transition to runtime phase was executed. πŸƒβ€β™€οΈ
  • ul_pend_sem β€” the semaphore to wait/complete of UL TDs before closing pipe. 🚦
  • app_notify_ul_pend β€” signals the app if a UL TD is pending. πŸ“£
  • dl_pend_sem β€” the semaphore to wait/complete of DL TDs before closing pipe. 🚧
  • app_notify_dl_pend β€” signals the app if a DL TD is pending. πŸ“’
  • phase β€” the operating phase, like runtime. πŸŒ™
  • pci_device_id β€” the device ID. πŸ†”
  • cp_version β€” the CP version. 🏷️
  • device_sleep β€” the device sleep state. 😴
  • run_state_worker β€” a pointer to the worker component for device setup operations to be called when the modem reaches RUN state. πŸ› οΈ
  • ev_irq_pending β€” 0 means inform the IPC tasklet to process the irq actions. πŸ“¨
  • flag β€” a flag to monitor the state of the driver. 🚩
  • td_update_timer_suspended β€” if true, then the td update timer is suspended. ⏸️
  • ev_mux_net_transmit_pending β€” 0 means inform the IPC tasklet to pass. πŸ“¬
  • reset_det_n β€” the reset detect flag. πŸ”„
  • pcie_wake_n β€” the PCIe wake flag. β˜€οΈ
  • debugfs_wwan_dir β€” the WWAN Debug FS directory entry. πŸ“
  • debugfs_dir β€” the Debug FS directory for driver-specific entries. πŸ“‚

πŸ‘€ SEE ALSO πŸ‘€

Kernel file ./drivers/net/wwan/iosm/iosm_ipc_imem.h, plus enum ipc_ctype(9), struct ipc_pipe(9), struct ipc_mem_channel(9), enum ipc_phase(9), ipc_imem_init(9), ipc_imem_pm_s2idle_sleep(9), ipc_imem_pm_suspend(9), ipc_imem_pm_resume(9), ipc_imem_cleanup(9), ipc_imem_irq_process(9), imem_get_device_sleep_state(9), ipc_imem_td_update_timer_suspend(9), ipc_imem_channel_close(9), ipc_imem_channel_alloc(9), ipc_imem_channel_open(9), ipc_imem_td_update_timer_start(9), ipc_imem_ul_write_td(9), ipc_imem_ul_send(9), ipc_imem_channel_update(9), ipc_imem_channel_free(9), ipc_imem_hrtimer_stop(9), ipc_imem_pipe_cleanup(9), ipc_imem_pipe_close(9), ipc_imem_phase_update(9), ipc_imem_phase_get_string(9), ipc_imem_msg_send_feature_set(9), ipc_imem_ipc_init_check(9), ipc_imem_channel_init(9), and ipc_imem_devlink_trigger_chip_info(9) πŸ¦‹

mwah πŸ’‹ this cutie came from ./drivers/net/wwan/iosm, dated October 2026, and it's the struct iosm_imem(9) manual page. byeee πŸ«ΆπŸŽ€

πŸ“¦ where this page comes from