UNION BMO_CTL2(9)
π union bmo_ctl2(9) β BMO Control2 Register
okay so this is a page from the Kernel API Manual, and it's about a union called bmo_ctl2 β literally the BMO Control2 Register, no cap. It's a tiny little union that lets you peek at a whole 64-bit register either as one big number or as a bunch of named bitfields, and honestly? iconic design. π
β¨ NAME β¨
union bmo_ctl2 β the BMO Control2 Register, bestie. That's it, that's the name. π¦
πΈ SYNOPSIS πΈ
here's the whole shape of it, verbatim, don't touch a single character:
union bmo_ctl2 {
u64 value;
struct {
#if (defined(__BIG_ENDIAN_BITFIELD));
u64 arb_sel : 1;
u64 raz_32_62 : 31;
u64 ilk_buf_thrsh : 8;
u64 nps_slc_buf_thrsh : 8;
u64 nps_uns_buf_thrsh : 8;
u64 totl_buf_thrsh : 8;
#else;
u64 totl_buf_thrsh : 8;
u64 nps_uns_buf_thrsh : 8;
u64 nps_slc_buf_thrsh : 8;
u64 ilk_buf_thrsh : 8;
u64 raz_32_62 : 31;
u64 arb_sel : 1;
#endif;
} s;
};
so the way this works π β the first member is value, one plain u64 for when you just want the raw register. then there's an anonymous-ish struct named s that breaks the same 64 bits into named slices: arb_sel is 1 bit, raz_32_62 is 31 bits, and then ilk_buf_thrsh, nps_slc_buf_thrsh, nps_uns_buf_thrsh and totl_buf_thrsh are 8 bits each. π
and yes, there's a #if (defined(__BIG_ENDIAN_BITFIELD)); situation going on β the two branches list the exact same fields in reverse order, so which way the fields land depends on that endianness macro. #else; branch flips it. that's the whole vibe check. π
π§ Members π§
bestie. the section is literally just the heading "Members" and thenβ¦ nothing. no entries, no descriptions, zero. π it's giving "the docs said 'figure it out'." so like, the members you see are the ones in the synopsis above, and that's all we've got. β¨
π SEE ALSO π
the kernel file lives at ./drivers/crypto/cavium/nitrox/nitrox_csr.h β and it's got so many sibling unions, all of them icons, all of them in the family:
union ucd_core_eid_ucode_block_num(9)union aqm_grp_execmsk_lo(9)union aqm_grp_execmsk_hi(9)union aqmq_drbl(9)union aqmq_qsz(9)union aqmq_cmp_thr(9)union aqmq_cmp_cnt(9)union aqmq_en(9)union aqmq_activity_stat(9)union emu_fuse_map(9)union emu_se_enable(9)union emu_ae_enable(9)union emu_wd_int_ena_w1s(9)union emu_ge_int_ena_w1s(9)union nps_pkt_slc_ctl(9)union nps_pkt_slc_cnts(9)union nps_pkt_slc_int_levels(9)union nps_pkt_in_done_cnts(9)union nps_pkt_in_instr_ctl(9)union nps_pkt_in_instr_rsize(9)union nps_pkt_in_instr_baoff_dbell(9)union nps_core_int_ena_w1s(9)union nps_core_gbl_vfcfg(9)union nps_core_int_active(9)union efl_core_int(9)union efl_core_int_ena_w1s(9)union efl_rnm_ctl_status(9)union bmi_ctl(9)union bmi_int_ena_w1s(9)union pom_int_ena_w1s(9)union lbc_inval_ctl(9)union lbc_int_ena_w1s(9)union lbc_int(9)union lbc_inval_status(9)union rst_boot(9)union fus_dat1(9)
all of them. every single one. i counted, don't worry. π«Ά
ngl these are all (9) pages, so they're kernel-API docs β go read the lot if you're being thorough, bestie, i'm not stopping you. π
okay and for the sign-off π β this whole thing lives in ./drivers/crypto/cavium/nitrox, it's dated October 2026, and it's the union bmo_ctl2(9) page exactly as it appears in the manual. go forth and bitfield responsibly. mwah. πβ¨
π¦ 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