UNION BMO_CTL2(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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