drivers/scsi/bfa/bfa_fcs_fcpim.c
Source file repositories/reference/linux-study-clean/drivers/scsi/bfa/bfa_fcs_fcpim.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/scsi/bfa/bfa_fcs_fcpim.c- Extension
.c- Size
- 22165 bytes
- Lines
- 851
- 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_fcs.hbfa_fcbuild.hbfad_im.hbfa_fcpim.h
Detected Declarations
struct bfa_fcs_itnim_sm_table_sfunction bfa_fcs_itnim_sm_to_statefunction bfa_fcs_itnim_sm_offlinefunction bfa_fcs_itnim_sm_prli_sendfunction bfa_fcs_itnim_sm_prlifunction bfa_fcs_itnim_sm_hal_rport_onlinefunction bfa_fcs_itnim_sm_prli_retryfunction bfa_fcs_itnim_sm_hcb_onlinefunction bfa_fcs_itnim_sm_onlinefunction bfa_fcs_itnim_sm_hcb_offlinefunction bfa_fcs_itnim_sm_initiatorfunction bfa_fcs_itnim_aen_postfunction bfa_fcs_itnim_send_prlifunction bfa_fcs_itnim_prli_responsefunction bfa_fcs_itnim_timeoutfunction bfa_fcs_itnim_freefunction bfa_fcs_itnim_createfunction bfa_fcs_itnim_deletefunction bfa_fcs_itnim_brp_onlinefunction bfa_fcs_itnim_rport_offlinefunction bfa_fcs_itnim_is_initiatorfunction bfa_fcs_itnim_get_online_statefunction bfa_itnim_onlinefunction bfa_itnim_offlinefunction bfa_cb_itnim_tov_beginfunction bfa_cb_itnim_tovfunction bfa_cb_itnim_slerfunction bfa_fcs_itnim_lookupfunction bfa_fcs_itnim_attr_getfunction bfa_fcs_itnim_stats_getfunction bfa_fcs_itnim_stats_clearfunction bfa_fcs_fcpim_uf_recv
Annotated Snippet
struct bfa_fcs_itnim_sm_table_s {
bfa_fcs_itnim_sm_t sm; /* state machine function */
enum bfa_itnim_state state; /* state machine encoding */
char *name; /* state name for display */
};
static inline enum bfa_itnim_state
bfa_fcs_itnim_sm_to_state(struct bfa_fcs_itnim_sm_table_s *smt, bfa_fcs_itnim_sm_t sm)
{
int i = 0;
while (smt[i].sm && smt[i].sm != sm)
i++;
return smt[i].state;
}
static struct bfa_fcs_itnim_sm_table_s itnim_sm_table[] = {
{BFA_SM(bfa_fcs_itnim_sm_offline), BFA_ITNIM_OFFLINE},
{BFA_SM(bfa_fcs_itnim_sm_prli_send), BFA_ITNIM_PRLI_SEND},
{BFA_SM(bfa_fcs_itnim_sm_prli), BFA_ITNIM_PRLI_SENT},
{BFA_SM(bfa_fcs_itnim_sm_prli_retry), BFA_ITNIM_PRLI_RETRY},
{BFA_SM(bfa_fcs_itnim_sm_hcb_online), BFA_ITNIM_HCB_ONLINE},
{BFA_SM(bfa_fcs_itnim_sm_online), BFA_ITNIM_ONLINE},
{BFA_SM(bfa_fcs_itnim_sm_hcb_offline), BFA_ITNIM_HCB_OFFLINE},
{BFA_SM(bfa_fcs_itnim_sm_initiator), BFA_ITNIM_INITIATIOR},
};
/*
* fcs_itnim_sm FCS itnim state machine
*/
static void
bfa_fcs_itnim_sm_offline(struct bfa_fcs_itnim_s *itnim,
enum bfa_fcs_itnim_event event)
{
bfa_trc(itnim->fcs, itnim->rport->pwwn);
bfa_trc(itnim->fcs, event);
switch (event) {
case BFA_FCS_ITNIM_SM_FCS_ONLINE:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli_send);
itnim->prli_retries = 0;
bfa_fcs_itnim_send_prli(itnim, NULL);
break;
case BFA_FCS_ITNIM_SM_OFFLINE:
bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
break;
case BFA_FCS_ITNIM_SM_INITIATOR:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
break;
case BFA_FCS_ITNIM_SM_DELETE:
bfa_fcs_itnim_free(itnim);
break;
default:
bfa_sm_fault(itnim->fcs, event);
}
}
static void
bfa_fcs_itnim_sm_prli_send(struct bfa_fcs_itnim_s *itnim,
enum bfa_fcs_itnim_event event)
{
bfa_trc(itnim->fcs, itnim->rport->pwwn);
bfa_trc(itnim->fcs, event);
switch (event) {
case BFA_FCS_ITNIM_SM_FRMSENT:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_prli);
break;
case BFA_FCS_ITNIM_SM_INITIATOR:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_initiator);
bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_FCS_ONLINE);
break;
case BFA_FCS_ITNIM_SM_OFFLINE:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
bfa_sm_send_event(itnim->rport, RPSM_EVENT_FC4_OFFLINE);
break;
case BFA_FCS_ITNIM_SM_DELETE:
bfa_sm_set_state(itnim, bfa_fcs_itnim_sm_offline);
bfa_fcxp_walloc_cancel(itnim->fcs->bfa, &itnim->fcxp_wqe);
Annotation
- Immediate include surface: `bfad_drv.h`, `bfa_fcs.h`, `bfa_fcbuild.h`, `bfad_im.h`, `bfa_fcpim.h`.
- Detected declarations: `struct bfa_fcs_itnim_sm_table_s`, `function bfa_fcs_itnim_sm_to_state`, `function bfa_fcs_itnim_sm_offline`, `function bfa_fcs_itnim_sm_prli_send`, `function bfa_fcs_itnim_sm_prli`, `function bfa_fcs_itnim_sm_hal_rport_online`, `function bfa_fcs_itnim_sm_prli_retry`, `function bfa_fcs_itnim_sm_hcb_online`, `function bfa_fcs_itnim_sm_online`, `function bfa_fcs_itnim_sm_hcb_offline`.
- 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.