drivers/scsi/bfa/bfa_ioc.c
Source file repositories/reference/linux-study-clean/drivers/scsi/bfa/bfa_ioc.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/scsi/bfa/bfa_ioc.c- Extension
.c- Size
- 162515 bytes
- Lines
- 6999
- 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.
- Touches IRQ or DMA behavior; this matters for the representative real-device path.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
bfad_drv.hbfad_im.hbfa_ioc.hbfi_reg.hbfa_defs.hbfa_defs_svc.hbfi.h
Detected Declarations
struct bfa_ioc_sm_tablestruct bfa_iocpf_sm_tableenum bfa_iocpf_stateenum bfa_flash_cmdenum bfa_flash_errfunction bfa_ioc_sm_to_statefunction bfa_iocpf_sm_to_statefunction bfa_ioc_sm_uninit_entryfunction bfa_ioc_sm_reset_entryfunction bfa_ioc_sm_resetfunction bfa_ioc_sm_enabling_entryfunction bfa_ioc_sm_enablingfunction bfa_ioc_sm_getattr_entryfunction bfa_ioc_sm_getattrfunction bfa_ioc_sm_op_entryfunction bfa_ioc_sm_opfunction bfa_ioc_sm_disabling_entryfunction bfa_ioc_sm_disablingfunction bfa_ioc_sm_disabled_entryfunction bfa_ioc_sm_disabledfunction bfa_ioc_sm_fail_retry_entryfunction bfa_ioc_sm_fail_retryfunction bfa_ioc_sm_fail_entryfunction bfa_ioc_sm_failfunction bfa_ioc_sm_hwfail_entryfunction bfa_ioc_sm_hwfailfunction bfa_iocpf_sm_reset_entryfunction bfa_iocpf_sm_resetfunction bfa_iocpf_sm_fwcheck_entryfunction bfa_iocpf_sm_fwcheckfunction bfa_iocpf_sm_mismatch_entryfunction bfa_iocpf_sm_mismatchfunction bfa_iocpf_sm_semwait_entryfunction bfa_iocpf_sm_semwaitfunction bfa_iocpf_sm_hwinit_entryfunction bfa_iocpf_sm_hwinitfunction bfa_iocpf_sm_enabling_entryfunction bfa_iocpf_sm_enablingfunction bfa_iocpf_sm_ready_entryfunction bfa_iocpf_sm_readyfunction bfa_iocpf_sm_disabling_entryfunction bfa_iocpf_sm_disablingfunction bfa_iocpf_sm_disabling_sync_entryfunction bfa_iocpf_sm_disabling_syncfunction bfa_iocpf_sm_disabled_entryfunction bfa_iocpf_sm_disabledfunction bfa_iocpf_sm_initfail_sync_entryfunction bfa_iocpf_sm_initfail_sync
Annotated Snippet
struct bfa_ioc_sm_table {
bfa_ioc_sm_t sm; /* state machine function */
enum bfa_ioc_state state; /* state machine encoding */
char *name; /* state name for display */
};
static struct bfa_ioc_sm_table ioc_sm_table[] = {
{BFA_SM(bfa_ioc_sm_uninit), BFA_IOC_UNINIT},
{BFA_SM(bfa_ioc_sm_reset), BFA_IOC_RESET},
{BFA_SM(bfa_ioc_sm_enabling), BFA_IOC_ENABLING},
{BFA_SM(bfa_ioc_sm_getattr), BFA_IOC_GETATTR},
{BFA_SM(bfa_ioc_sm_op), BFA_IOC_OPERATIONAL},
{BFA_SM(bfa_ioc_sm_fail_retry), BFA_IOC_INITFAIL},
{BFA_SM(bfa_ioc_sm_fail), BFA_IOC_FAIL},
{BFA_SM(bfa_ioc_sm_disabling), BFA_IOC_DISABLING},
{BFA_SM(bfa_ioc_sm_disabled), BFA_IOC_DISABLED},
{BFA_SM(bfa_ioc_sm_hwfail), BFA_IOC_HWFAIL},
};
static inline enum bfa_ioc_state
bfa_ioc_sm_to_state(struct bfa_ioc_sm_table *smt, bfa_ioc_sm_t sm)
{
int i = 0;
while (smt[i].sm && smt[i].sm != sm)
i++;
return smt[i].state;
}
/*
* IOCPF state machine definitions/declarations
*/
#define bfa_iocpf_timer_start(__ioc) \
bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->ioc_timer, \
bfa_iocpf_timeout, (__ioc), BFA_IOC_TOV)
#define bfa_iocpf_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->ioc_timer)
#define bfa_iocpf_poll_timer_start(__ioc) \
bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->ioc_timer, \
bfa_iocpf_poll_timeout, (__ioc), BFA_IOC_POLL_TOV)
#define bfa_sem_timer_start(__ioc) \
bfa_timer_begin((__ioc)->timer_mod, &(__ioc)->sem_timer, \
bfa_iocpf_sem_timeout, (__ioc), BFA_IOC_HWSEM_TOV)
#define bfa_sem_timer_stop(__ioc) bfa_timer_stop(&(__ioc)->sem_timer)
/*
* Forward declareations for iocpf state machine
*/
static void bfa_iocpf_timeout(void *ioc_arg);
static void bfa_iocpf_sem_timeout(void *ioc_arg);
static void bfa_iocpf_poll_timeout(void *ioc_arg);
/*
* IOCPF states
*/
enum bfa_iocpf_state {
BFA_IOCPF_RESET = 1, /* IOC is in reset state */
BFA_IOCPF_SEMWAIT = 2, /* Waiting for IOC h/w semaphore */
BFA_IOCPF_HWINIT = 3, /* IOC h/w is being initialized */
BFA_IOCPF_READY = 4, /* IOCPF is initialized */
BFA_IOCPF_INITFAIL = 5, /* IOCPF failed */
BFA_IOCPF_FAIL = 6, /* IOCPF failed */
BFA_IOCPF_DISABLING = 7, /* IOCPF is being disabled */
BFA_IOCPF_DISABLED = 8, /* IOCPF is disabled */
BFA_IOCPF_FWMISMATCH = 9, /* IOC f/w different from drivers */
};
bfa_fsm_state_decl(bfa_iocpf, reset, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, fwcheck, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, mismatch, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, semwait, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, hwinit, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, enabling, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, ready, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, initfail_sync, struct bfa_iocpf_s,
enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, initfail, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, fail_sync, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, fail, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, disabling, struct bfa_iocpf_s, enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, disabling_sync, struct bfa_iocpf_s,
enum iocpf_event);
bfa_fsm_state_decl(bfa_iocpf, disabled, struct bfa_iocpf_s, enum iocpf_event);
struct bfa_iocpf_sm_table {
bfa_iocpf_sm_t sm; /* state machine function */
enum bfa_iocpf_state state; /* state machine encoding */
char *name; /* state name for display */
Annotation
- Immediate include surface: `bfad_drv.h`, `bfad_im.h`, `bfa_ioc.h`, `bfi_reg.h`, `bfa_defs.h`, `bfa_defs_svc.h`, `bfi.h`.
- Detected declarations: `struct bfa_ioc_sm_table`, `struct bfa_iocpf_sm_table`, `enum bfa_iocpf_state`, `enum bfa_flash_cmd`, `enum bfa_flash_err`, `function bfa_ioc_sm_to_state`, `function bfa_iocpf_sm_to_state`, `function bfa_ioc_sm_uninit_entry`, `function bfa_ioc_sm_reset_entry`, `function bfa_ioc_sm_reset`.
- Atlas domain: Driver Families / drivers/scsi.
- Implementation status: source implementation candidate.
- IRQ or DMA behavior appears here, which is relevant to the selected PCIe/NVMe device path.
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.