drivers/scsi/bfa/bfa_fcpim.c
Source file repositories/reference/linux-study-clean/drivers/scsi/bfa/bfa_fcpim.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/scsi/bfa/bfa_fcpim.c- Extension
.c- Size
- 94201 bytes
- Lines
- 3838
- Domain
- Driver Families
- Bucket
- drivers/scsi
- 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
bfad_drv.hbfa_modules.h
Detected Declarations
enum bfa_ioim_lm_ua_statusfunction FCPfunction bfa_fcpim_attachfunction bfa_fcpim_iocdisablefunction list_for_each_safefunction bfa_fcpim_path_tov_setfunction bfa_fcpim_path_tov_getfunction bfa_fcpim_add_statsfunction bfa_fcpim_port_iostatsfunction bfa_ioim_profile_compfunction bfa_ioim_profile_startfunction bfa_fcpim_profile_onfunction bfa_fcpim_profile_offfunction bfa_fcpim_qdepth_getfunction bfa_itnim_sm_uninitfunction bfa_itnim_sm_createdfunction bfa_itnim_sm_fwcreatefunction bfa_itnim_sm_fwcreate_qfullfunction bfa_itnim_sm_delete_pendingfunction bfa_itnim_sm_onlinefunction bfa_itnim_sm_slerfunction bfa_itnim_sm_cleanup_offlinefunction bfa_itnim_sm_cleanup_deletefunction bfa_itnim_sm_fwdeletefunction bfa_itnim_sm_fwdelete_qfullfunction bfa_itnim_sm_offlinefunction bfa_itnim_sm_iocdisablefunction bfa_itnim_sm_deletingfunction bfa_itnim_sm_deleting_qfullfunction bfa_itnim_iocdisable_cleanupfunction list_for_each_safefunction list_for_each_safefunction list_for_each_safefunction bfa_itnim_cleanp_compfunction bfa_itnim_cleanupfunction list_for_each_safefunction list_for_each_safefunction __bfa_cb_itnim_onlinefunction __bfa_cb_itnim_offlinefunction __bfa_cb_itnim_slerfunction bfa_itnim_qresumefunction bfa_itnim_iodonefunction bfa_itnim_tskdonefunction bfa_itnim_meminfofunction bfa_itnim_attachfunction bfa_itnim_iocdisablefunction bfa_itnim_send_fwcreatefunction bfa_itnim_send_fwdelete
Annotated Snippet
if (!bfa_itnim_is_online(ioim->itnim)) {
if (!bfa_itnim_hold_io(ioim->itnim)) {
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
list_del(&ioim->qe);
list_add_tail(&ioim->qe,
&ioim->fcpim->ioim_comp_q);
bfa_cb_queue(ioim->bfa, &ioim->hcb_qe,
__bfa_cb_ioim_pathtov, ioim);
} else {
list_del(&ioim->qe);
list_add_tail(&ioim->qe,
&ioim->itnim->pending_q);
}
break;
}
if (ioim->nsges > BFI_SGE_INLINE) {
if (!bfa_ioim_sgpg_alloc(ioim)) {
bfa_sm_set_state(ioim, bfa_ioim_sm_sgalloc);
return;
}
}
if (!bfa_ioim_send_ioreq(ioim)) {
bfa_sm_set_state(ioim, bfa_ioim_sm_qfull);
break;
}
bfa_sm_set_state(ioim, bfa_ioim_sm_active);
break;
case BFA_IOIM_SM_IOTOV:
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
bfa_ioim_move_to_comp_q(ioim);
bfa_cb_queue(ioim->bfa, &ioim->hcb_qe,
__bfa_cb_ioim_pathtov, ioim);
break;
case BFA_IOIM_SM_ABORT:
/*
* IO in pending queue can get abort requests. Complete abort
* requests immediately.
*/
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
WARN_ON(!bfa_q_is_on_q(&ioim->itnim->pending_q, ioim));
bfa_cb_queue(ioim->bfa, &ioim->hcb_qe,
__bfa_cb_ioim_abort, ioim);
break;
default:
bfa_sm_fault(ioim->bfa, event);
}
}
/*
* IO is waiting for SG pages.
*/
static void
bfa_ioim_sm_sgalloc(struct bfa_ioim_s *ioim, enum bfa_ioim_event event)
{
bfa_trc(ioim->bfa, ioim->iotag);
bfa_trc(ioim->bfa, event);
switch (event) {
case BFA_IOIM_SM_SGALLOCED:
if (!bfa_ioim_send_ioreq(ioim)) {
bfa_sm_set_state(ioim, bfa_ioim_sm_qfull);
break;
}
bfa_sm_set_state(ioim, bfa_ioim_sm_active);
break;
case BFA_IOIM_SM_CLEANUP:
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
bfa_sgpg_wcancel(ioim->bfa, &ioim->iosp->sgpg_wqe);
bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed,
ioim);
bfa_ioim_notify_cleanup(ioim);
break;
case BFA_IOIM_SM_ABORT:
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
bfa_sgpg_wcancel(ioim->bfa, &ioim->iosp->sgpg_wqe);
bfa_ioim_move_to_comp_q(ioim);
bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort,
ioim);
break;
case BFA_IOIM_SM_HWFAIL:
bfa_sm_set_state(ioim, bfa_ioim_sm_hcb);
Annotation
- Immediate include surface: `bfad_drv.h`, `bfa_modules.h`.
- Detected declarations: `enum bfa_ioim_lm_ua_status`, `function FCP`, `function bfa_fcpim_attach`, `function bfa_fcpim_iocdisable`, `function list_for_each_safe`, `function bfa_fcpim_path_tov_set`, `function bfa_fcpim_path_tov_get`, `function bfa_fcpim_add_stats`, `function bfa_fcpim_port_iostats`, `function bfa_ioim_profile_comp`.
- Atlas domain: Driver Families / drivers/scsi.
- 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.