STRUCT MPI3MR_IOC(9)
π NAME π
struct mpi3mr_ioc β the adapter anchor structure that lives in shost private data, bestie. That's the whole vibe. This is the Kernel API Manual entry for it (section 9, obviously π
), and honestly? She's a big girl. Grab a snack. π
β¨ SYNOPSIS β¨
okay so here's the entire struct, and I mean entire β no skipping, no "you get the idea", we're reading the whole thing together like a group chat at 2am π«Ά
struct mpi3mr_ioc {
struct list_head list;
struct pci_dev *pdev;
struct Scsi_Host *shost;
u8 id;
int cpu_count;
bool enable_segqueue;
u32 irqpoll_sleep;
char name[MPI3MR_NAME_LENGTH];
char driver_name[MPI3MR_NAME_LENGTH];
struct mpi3_sysif_registers __iomem *sysif_regs;
resource_size_t sysif_regs_phys;
int bars;
u64 dma_mask;
u16 msix_count;
u8 intr_enabled;
u16 num_admin_req;
u32 admin_req_q_sz;
u16 admin_req_pi;
u16 admin_req_ci;
void *admin_req_base;
dma_addr_t admin_req_dma;
spinlock_t admin_req_lock;
u16 num_admin_replies;
u32 admin_reply_q_sz;
u16 admin_reply_ci;
u8 admin_reply_ephase;
void *admin_reply_base;
dma_addr_t admin_reply_dma;
atomic_t admin_reply_q_in_use;
atomic_t admin_pend_isr;
u32 ready_timeout;
struct mpi3mr_intr_info *intr_info;
u16 intr_info_count;
bool is_intr_info_set;
u16 num_queues;
u16 num_op_req_q;
struct op_req_qinfo *req_qinfo;
u16 num_op_reply_q;
struct op_reply_qinfo *op_reply_qinfo;
struct mpi3mr_drv_cmd init_cmds;
struct mpi3mr_drv_cmd cfg_cmds;
struct mpi3mr_ioc_facts facts;
u16 op_reply_desc_sz;
u32 num_reply_bufs;
struct dma_pool *reply_buf_pool;
u8 *reply_buf;
dma_addr_t reply_buf_dma;
dma_addr_t reply_buf_dma_max_address;
u16 reply_free_qsz;
u16 reply_sz;
struct dma_pool *reply_free_q_pool;
__le64 *reply_free_q;
dma_addr_t reply_free_q_dma;
spinlock_t reply_free_queue_lock;
u32 reply_free_queue_host_index;
u32 num_sense_bufs;
struct dma_pool *sense_buf_pool;
u8 *sense_buf;
dma_addr_t sense_buf_dma;
u16 sense_buf_q_sz;
struct dma_pool *sense_buf_q_pool;
__le64 *sense_buf_q;
dma_addr_t sense_buf_q_dma;
spinlock_t sbq_lock;
u32 sbq_host_index;
u32 event_masks[MPI3_EVENT_NOTIFY_EVENTMASK_WORDS];
struct workqueue_struct *fwevt_worker_thread;
spinlock_t fwevt_lock;
struct list_head fwevt_list;
struct workqueue_struct *watchdog_work_q;
struct delayed_work watchdog_work;
spinlock_t watchdog_lock;
u8 is_driver_loading;
u8 scan_started;
u16 scan_failed;
u8 stop_drv_processing;
u8 device_refresh_on;
u16 max_host_ios;
spinlock_t tgtdev_lock;
struct list_head tgtdev_list;
u16 max_sgl_entries;
u32 chain_buf_count;
struct dma_pool *chain_buf_pool;
struct chain_element *chain_sgl_list;
unsigned long *chain_bitmap;
spinlock_t chain_buf_lock;
struct mpi3mr_drv_cmd bsg_cmds;
struct mpi3mr_drv_cmd host_tm_cmds;
struct mpi3mr_drv_cmd dev_rmhs_cmds[MPI3MR_NUM_DEVRMCMD];
struct mpi3mr_drv_cmd evtack_cmds[MPI3MR_NUM_EVTACKCMD];
unsigned long *devrem_bitmap;
u16 dev_handle_bitmap_bits;
unsigned long *removepend_bitmap;
struct list_head delayed_rmhs_list;
unsigned long *evtack_cmds_bitmap;
struct list_head delayed_evtack_cmds_list;
u16 ts_update_counter;
u16 ts_update_interval;
u8 reset_in_progress;
u8 unrecoverable;
u8 io_admin_reset_sync;
int prev_reset_result;
struct mutex reset_mutex;
wait_queue_head_t reset_waitq;
u8 prepare_for_reset;
u16 prepare_for_reset_timeout_counter;
void *prp_list_virt;
dma_addr_t prp_list_dma;
u32 prp_sz;
u16 diagsave_timeout;
int logging_level;
u16 flush_io_count;
struct mpi3mr_fwevt *current_event;
struct mpi3_driver_info_layout driver_info;
u16 change_count;
u8 pel_enabled;
u8 pel_abort_requested;
u8 pel_class;
u16 pel_locale;
struct mpi3mr_drv_cmd pel_cmds;
struct mpi3mr_drv_cmd pel_abort_cmd;
u32 pel_newest_seqnum;
void *pel_seqnum_virt;
dma_addr_t pel_seqnum_dma;
u32 pel_seqnum_sz;
u16 op_reply_q_offset;
u16 default_qcount;
u16 active_poll_qcount;
u16 requested_poll_qcount;
u8 fault_during_init;
u32 saved_fault_code;
u32 saved_fault_info[3];
u64 fwfault_counter;
struct device bsg_dev;
struct request_queue *bsg_queue;
u8 stop_bsgs;
u8 *logdata_buf;
u16 logdata_buf_idx;
u16 logdata_entry_sz;
spinlock_t adm_req_q_bar_writeq_lock;
spinlock_t adm_reply_q_bar_writeq_lock;
atomic_t pend_large_data_sz;
u32 io_throttle_data_length;
u32 io_throttle_high;
u32 io_throttle_low;
u16 num_io_throttle_group;
struct mpi3mr_throttle_group_info *throttle_groups;
u8 sas_transport_enabled;
u8 scsi_device_channel;
struct mpi3mr_drv_cmd transport_cmds;
struct mpi3mr_sas_node sas_hba;
struct list_head sas_expander_list;
spinlock_t sas_node_lock;
struct list_head hba_port_table_list;
struct list_head enclosure_list;
struct dma_pool *ioctl_dma_pool;
struct dma_memory_desc ioctl_sge[MPI3MR_NUM_IOCTL_SGE];
struct dma_memory_desc ioctl_chain_sge;
struct dma_memory_desc ioctl_resp_sge;
bool ioctl_sges_allocated;
bool reply_trigger_present;
bool event_trigger_present;
bool scsisense_trigger_present;
struct diag_buffer_desc diag_buffers[MPI3MR_MAX_NUM_HDB];
struct mpi3_driver_page2 *driver_pg2;
spinlock_t trigger_lock;
bool snapdump_trigger_active;
bool trace_release_trigger_active;
bool fw_release_trigger_active;
bool pci_err_recovery;
bool block_on_pci_err;
atomic_t reply_qfull_count;
bool prevent_reply_qfull;
bool seg_tb_support;
u32 num_tb_segs;
struct dma_pool *trace_buf_pool;
struct segments *trace_buf;
u8 invalid_io_comp;
};
likeβ¦ look at her. π She starts off so innocent with a lil struct list_head list; and then just keeps going β pdev, shost, id, cpu_count, enable_segqueue, irqpoll_sleep, then name[MPI3MR_NAME_LENGTH] and driver_name[MPI3MR_NAME_LENGTH], and that's literally just the first few lines, bestie, we haven't even gotten to the admin queues yet π
it's giving "main character energy" the way she's got an admin_req_* block and an admin_reply_* block, then req_qinfo, op_reply_qinfo, init_cmds, cfg_cmds, facts, and the whole reply_buf / sense_buf situation with their pools and dmAs β no cap, it's a lot π
the vibe check: this is one struct and it is long. Do not skim. Do not assume. Every field above is exactly as written, character for character, and we are not skipping a single one π«Ά
btw we're nowhere near done β there's more coming, so don't close the tab, iykyk πΈ
π Members π
okay bestie, buckle up β this is the full member list of struct mpi3mr_ioc, and it is long. every single field is here, no skips, no "etc." we don't do that here π
listβ List pointerpdevβ PCI device pointershostβScsi_Hostpointeridβ Controller IDcpu_countβ Number of online CPUsirqpoll_sleepβ usleep unit used in threaded isr irqpollnameβ Controller ASCII namedriver_nameβ Driver ASCII namesysif_regsβ System interface registers virtual addresssysif_regs_physβ System interface registers physical addressbarsβ PCI BARSdma_maskβ DMA maskmsix_countβ Number of MSIX vectors usedintr_enabledβ Is interrupts enablednum_admin_reqβ Number of admin requestsadmin_req_q_szβ Admin request queue sizeadmin_req_piβ Admin request queue producer indexadmin_req_ciβ Admin request queue consumer indexadmin_req_baseβ Admin request queue base virtual addressadmin_req_dmaβ Admin request queue base dma addressadmin_req_lockβ Admin queue access locknum_admin_repliesβ Number of admin repliesadmin_reply_q_szβ Admin reply queue sizeadmin_reply_ciβ Admin reply queue consumer indexadmin_reply_ephaseβ Admin reply queue expected phaseadmin_reply_baseβ Admin reply queue base virtual addressadmin_reply_dmaβ Admin reply queue base dma addressadmin_reply_q_in_useβ Queue is handled by poll/ISRadmin_pend_isrβ Count of unprocessed admin ISR/poll calls due to another thread processing repliesready_timeoutβ Controller ready timeoutintr_infoβ Interrupt cookie pointerintr_info_countβ Number of interrupt cookiesis_intr_info_setβ Flag to indicate intr info is setupnum_queuesβ Number of operational queuesnum_op_req_qβ Number of operational request queuesreq_qinfoβ Operational request queue info pointernum_op_reply_qβ Number of operational reply queuesop_reply_qinfoβ Operational reply queue info pointerinit_cmdsβ Command tracker for initialization commandscfg_cmdsβ Command tracker for configuration requestsfactsβ Cached IOC facts dataop_reply_desc_szβ Operational reply descriptor sizenum_reply_bufsβ Number of reply buffers allocatedreply_buf_poolβ Reply buffer poolreply_bufβ Reply buffer base virtual addressreply_buf_dmaβ Reply buffer DMA addressreply_buf_dma_max_addressβ Reply DMA address max limitreply_free_qszβ Reply free queue sizereply_free_q_poolβ Reply free queue poolreply_free_qβ Reply free queue base virtual addressreply_free_q_dmaβ Reply free queue base DMA addressreply_free_queue_lockβ Reply free queue lockreply_free_queue_host_indexβ Reply free queue host indexnum_sense_bufsβ Number of sense bufferssense_buf_poolβ Sense buffer poolsense_bufβ Sense buffer base virtual addresssense_buf_dmaβ Sense buffer base DMA addresssense_buf_q_szβ Sense buffer queue sizesense_buf_q_poolβ Sense buffer queue poolsense_buf_qβ Sense buffer queue virtual addresssense_buf_q_dmaβ Sense buffer queue DMA addresssbq_lockβ Sense buffer queue locksbq_host_indexβ Sense buffer queuehost indexevent_masksβ Event mask bitmapfwevt_worker_threadβ Firmware event worker threadfwevt_lockβ Firmware event lockfwevt_listβ Firmware event listwatchdog_work_qβ Fault watchdog worker threadwatchdog_workβ Fault watchdog workwatchdog_lockβ Fault watchdog lockis_driver_loadingβ Is driver still loadingscan_startedβ Async scan startedscan_failedβ Asycn scan failedstop_drv_processingβ Stop all command processingdevice_refresh_onβ Don't process the events until devices are refreshedmax_host_iosβ Maximum host I/O countmax_sgl_entriesβ Max SGL entries per I/Ochain_buf_countβ Chain buffer countchain_buf_poolβ Chain buffer poolchain_sgl_listβ Chain SGL listchain_bitmapβ Chain buffer allocator bitmapchain_buf_lockβ Chain buffer list lockbsg_cmdsβ Command tracker for BSG commandhost_tm_cmdsβ Command tracker for task management commandsdev_rmhs_cmdsβ Command tracker for device removal commandsevtack_cmdsβ Command tracker for event ack commandsdevrem_bitmapβ Device removal bitmapdev_handle_bitmap_bitsβ Number of bits in device handle bitmapremovepend_bitmapβ Remove pending bitmapdelayed_rmhs_listβ Delayed device removal listevtack_cmds_bitmapβ Event Ack bitmapdelayed_evtack_cmds_listβ Delayed event acknowledgment listts_update_counterβ Timestamp update counterts_update_intervalβ Timestamp update intervalreset_in_progressβ Reset in progress flagunrecoverableβ Controller unrecoverable flagio_admin_reset_syncβ Manage state of I/O ops during an admin reset processprev_reset_resultβ Result of previous resetreset_mutexβ Controller reset mutexreset_waitqβ Controller reset wait queueprepare_for_resetβ Prepare for reset event receivedprepare_for_reset_timeout_counterβ Prepare for reset timeoutprp_list_virtβ NVMe encapsulated PRP list virtual baseprp_list_dmaβ NVMe encapsulated PRP list DMAprp_szβ NVME encapsulated PRP list sizediagsave_timeoutβ Diagnostic information save timeoutlogging_levelβ Controller debug logging levelflush_io_countβ I/O count to flush after resetcurrent_eventβ Firmware event currently in processdriver_infoβ Driver, Kernel, OS information to firmwarechange_countβ Topology change countpel_enabledβ Persistent Event Log(PEL) enabled or notpel_abort_requestedβ PEL abort is requested or notpel_classβ PEL Class identifierpel_localeβ PEL Locale identifierpel_cmdsβ Command tracker for PEL wait commandpel_abort_cmdβ Command tracker for PEL abort commandpel_newest_seqnumβ Newest PEL sequenece numberpel_seqnum_virtβ PEL sequence number virtual addresspel_seqnum_dmaβ PEL sequence number DMA addresspel_seqnum_szβ PEL sequenece number sizeop_reply_q_offsetβ Operational reply queue offset with MSIxdefault_qcountβ Total Default queuesactive_poll_qcountβ Currently active poll queue countrequested_poll_qcountβ User requested poll queue countfault_during_initβ Indicates a firmware fault occurred during initializationsaved_fault_codeβ Firmware fault code captured at the time of failuresaved_fault_infoβ Additional firmware-provided fault informationfwfault_counterβ Count of firmware faults detected by the driverbsg_devβ BSG device structurebsg_queueβ Request queue for BSG devicestop_bsgsβ Stop BSG request flaglogdata_bufβ Circular buffer to store log data entrieslogdata_buf_idxβ Index of entry in buffer to storelogdata_entry_szβ log data entry sizeadm_req_q_bar_writeq_lockβ Admin request queue lockadm_reply_q_bar_writeq_lockβ Admin reply queue lockpend_large_data_szβ Counter to track pending large dataio_throttle_data_lengthβ I/O size to track in 512b blocksio_throttle_highβ I/O size to start throttle in 512b blocksio_throttle_lowβ I/O size to stop throttle in 512b blocksnum_io_throttle_groupβ Maximum number of throttle groupsthrottle_groupsβ Pointer to throttle group info structuressas_transport_enabledβ SAS transport enabled or notscsi_device_channelβ Channel ID for SCSI devicestransport_cmdsβ Command tracker for SAS transport commandssas_hbaβ SAS node for the controllersas_expander_listβ SAS node list of expanderssas_node_lockβ Lock to protect SAS node listhba_port_table_listβ List of HBA Portsenclosure_listβ List of Enclosure objectsioctl_dma_poolβ DMA pool for IOCTL data buffersioctl_sgeβ DMA buffer descriptors for IOCTL dataioctl_chain_sgeβ DMA buffer descriptor for IOCTL chainioctl_resp_sgeβ DMA buffer descriptor for Mgmt cmd responseioctl_sges_allocatedβ Flag for IOCTL SGEs allocated or notreply_trigger_presentβ Reply trigger present flagevent_trigger_presentβ Event trigger present flagscsisense_trigger_presentβ Scsi sense trigger present flagdiag_buffersβ Host diagnostic buffersdriver_pg2β Driver page 2 pointersnapdump_trigger_activeβ Snapdump trigger active flagtrace_release_trigger_activeβ Trace trigger active flagfw_release_trigger_activeβ Fw release trigger active flagpci_err_recoveryβ PCI error recovery in progressblock_on_pci_errβ Block IO during PCI error recoveryreply_qfull_countβ Occurences of reply queue full avoidance kicking-inprevent_reply_qfullβ Enable reply queue preventionseg_tb_supportβ Segmented trace buffer supportnum_tb_segsβ Number of Segments in Trace buffertrace_buf_poolβ DMA pool for Segmented trace buffer segmentstrace_bufβ Trace buffer segments memory descriptorinvalid_io_compβ Invalid IO completion
like, that's a lot of fields and every one of them matters, ok? π«Ά next up, more of the page β stay tuned bestie β¨
β¨ SEE ALSO β¨
okay bestie, you made it to the cross-refs β this is the little friend group of pages and kernel bits that live near struct mpi3mr_ioc(9) π«Ά
Kernel file ./drivers/scsi/mpi3mr/mpi3mr.h is right there in the mix too π
struct mpi3mr_nvme_pt_sge(9)struct mpi3mr_buf_map(9)struct mpi3mr_compimg_ver(9)struct segments(9)struct op_req_qinfo(9)struct op_reply_qinfo(9)struct mpi3mr_intr_info(9)struct mpi3mr_throttle_group_info(9)struct mpi3mr_hba_port(9)struct mpi3mr_sas_port(9)struct mpi3mr_sas_phy(9)struct mpi3mr_sas_node(9)struct mpi3mr_enclosure_node(9)struct tgt_dev_sas_sata(9)struct tgt_dev_pcie(9)struct tgt_dev_vd(9)union _form_spec_inf(9)struct mpi3mr_tgt_dev(9)mpi3mr_tgtdev_get(9)mpi3mr_free_tgtdev(9)mpi3mr_tgtdev_put(9)struct mpi3mr_stgt_priv_data(9)struct mpi3mr_drv_cmd(9)union mpi3mr_trigger_data(9)struct trigger_event_data(9)struct diag_buffer_desc(9)struct dma_memory_desc(9)struct chain_element(9)struct scmd_priv(9)struct mpi3mr_fwevt(9)struct delayed_dev_rmhs_node(9)struct delayed_evt_ack_node(9)
no cap, that's the whole list β go forth and read, icon behavior only β¨
this page came from ./drivers/scsi/mpi3mr, dated October 2026, and it's all about struct mpi3mr_ioc(9) ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms