drivers/infiniband/hw/ionic/ionic_fw.h
Source file repositories/reference/linux-study-clean/drivers/infiniband/hw/ionic/ionic_fw.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/infiniband/hw/ionic/ionic_fw.h- Extension
.h- Size
- 23274 bytes
- Lines
- 1030
- Domain
- Driver Families
- Bucket
- drivers/infiniband
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/kernel.hrdma/ib_verbs.h
Detected Declarations
struct ionic_sgestruct ionic_v1_cqestruct ionic_v1_base_hdrstruct ionic_v1_recv_bdystruct ionic_v1_common_bdystruct ionic_v1_atomic_bdystruct ionic_v1_reg_mr_bdystruct ionic_v1_bind_mw_bdystruct ionic_v1_wqestruct ionic_admin_stats_hdrstruct ionic_admin_create_ahstruct ionic_admin_destroy_ahstruct ionic_admin_query_ahstruct ionic_admin_create_mrstruct ionic_admin_destroy_mrstruct ionic_admin_create_cqstruct ionic_admin_destroy_cqstruct ionic_admin_create_qpstruct ionic_admin_destroy_qpstruct ionic_admin_mod_qpstruct ionic_admin_query_qpstruct ionic_v1_admin_wqestruct ionic_v1_admin_query_qp_sqstruct ionic_v1_admin_query_qp_rqstruct ionic_v1_eqestruct ionic_v1_statenum ionic_mrid_bitsenum ionic_mr_flagsenum ionic_qp_flagsenum ionic_statusenum ionic_qp_typeenum ionic_qp_stateenum ionic_v1_cqe_src_qpn_bitsenum ionic_v1_cqe_qtf_bitsenum ionic_v1_openum ionic_v2_openum ionic_v1_admin_openum ionic_v1_admin_statusenum ionic_v1_eqe_evt_bitsenum ionic_tfp_csum_profilesenum ionic_v1_stat_bitsfunction ionic_mridfunction ionic_mrid_indexfunction to_ionic_mr_flagsfunction from_ionic_qp_flagsfunction to_ionic_qp_flagsfunction ionic_to_ib_statusfunction to_ionic_qp_type
Annotated Snippet
struct ionic_sge {
__be64 va;
__be32 len;
__be32 lkey;
};
/* admin queue mr type */
enum ionic_mr_flags {
/* bits that determine mr access */
IONIC_MRF_LOCAL_WRITE = BIT(0),
IONIC_MRF_REMOTE_WRITE = BIT(1),
IONIC_MRF_REMOTE_READ = BIT(2),
IONIC_MRF_REMOTE_ATOMIC = BIT(3),
IONIC_MRF_MW_BIND = BIT(4),
IONIC_MRF_ZERO_BASED = BIT(5),
IONIC_MRF_ON_DEMAND = BIT(6),
IONIC_MRF_PB = BIT(7),
IONIC_MRF_ACCESS_MASK = BIT(12) - 1,
/* bits that determine mr type */
IONIC_MRF_UKEY_EN = BIT(13),
IONIC_MRF_IS_MW = BIT(14),
IONIC_MRF_INV_EN = BIT(15),
/* base flags combinations for mr types */
IONIC_MRF_USER_MR = 0,
IONIC_MRF_PHYS_MR = (IONIC_MRF_UKEY_EN |
IONIC_MRF_INV_EN),
IONIC_MRF_MW_1 = (IONIC_MRF_UKEY_EN |
IONIC_MRF_IS_MW),
IONIC_MRF_MW_2 = (IONIC_MRF_UKEY_EN |
IONIC_MRF_IS_MW |
IONIC_MRF_INV_EN),
};
static inline int to_ionic_mr_flags(int access)
{
int flags = 0;
if (access & IB_ACCESS_LOCAL_WRITE)
flags |= IONIC_MRF_LOCAL_WRITE;
if (access & IB_ACCESS_REMOTE_READ)
flags |= IONIC_MRF_REMOTE_READ;
if (access & IB_ACCESS_REMOTE_WRITE)
flags |= IONIC_MRF_REMOTE_WRITE;
if (access & IB_ACCESS_REMOTE_ATOMIC)
flags |= IONIC_MRF_REMOTE_ATOMIC;
if (access & IB_ACCESS_MW_BIND)
flags |= IONIC_MRF_MW_BIND;
if (access & IB_ZERO_BASED)
flags |= IONIC_MRF_ZERO_BASED;
return flags;
}
enum ionic_qp_flags {
/* bits that determine qp access */
IONIC_QPF_REMOTE_WRITE = BIT(0),
IONIC_QPF_REMOTE_READ = BIT(1),
IONIC_QPF_REMOTE_ATOMIC = BIT(2),
/* bits that determine other qp behavior */
IONIC_QPF_SQ_PB = BIT(6),
IONIC_QPF_RQ_PB = BIT(7),
IONIC_QPF_SQ_SPEC = BIT(8),
IONIC_QPF_RQ_SPEC = BIT(9),
IONIC_QPF_REMOTE_PRIVILEGED = BIT(10),
IONIC_QPF_SQ_DRAINING = BIT(11),
IONIC_QPF_SQD_NOTIFY = BIT(12),
IONIC_QPF_SQ_CMB = BIT(13),
IONIC_QPF_RQ_CMB = BIT(14),
IONIC_QPF_PRIVILEGED = BIT(15),
};
static inline int from_ionic_qp_flags(int flags)
{
int access_flags = 0;
if (flags & IONIC_QPF_REMOTE_WRITE)
access_flags |= IB_ACCESS_REMOTE_WRITE;
if (flags & IONIC_QPF_REMOTE_READ)
access_flags |= IB_ACCESS_REMOTE_READ;
if (flags & IONIC_QPF_REMOTE_ATOMIC)
Annotation
- Immediate include surface: `linux/kernel.h`, `rdma/ib_verbs.h`.
- Detected declarations: `struct ionic_sge`, `struct ionic_v1_cqe`, `struct ionic_v1_base_hdr`, `struct ionic_v1_recv_bdy`, `struct ionic_v1_common_bdy`, `struct ionic_v1_atomic_bdy`, `struct ionic_v1_reg_mr_bdy`, `struct ionic_v1_bind_mw_bdy`, `struct ionic_v1_wqe`, `struct ionic_admin_stats_hdr`.
- Atlas domain: Driver Families / drivers/infiniband.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.