STRUCT MPT3_PASSTHRU_COMMAND(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… NAME (yes bestie, that's the name)

struct mpt3_passthru_command β€” the generic mpt firmware passthru command, aka the little struct that lets your app slide a raw MPI request straight through the driver 🫢

It's the payload wrapper for passthru stuff, and every single one of its fields is a member β€” they're all spelled out under Members below, no cap, all of them, go look πŸ‘€

✨ SYNOPSIS ✨

struct mpt3_passthru_command {
    u8 dev_index;
    uint32_t timeout;
    void *reply_frame_buf_ptr;
    void *data_in_buf_ptr;
    void *data_out_buf_ptr;
    uint32_t max_reply_bytes;
    uint32_t data_in_size;
    uint32_t data_out_size;
    Mpi26MctpPassthroughRequest_t *mpi_request;
 };

That's the whole shape of it. Nine fields, zero drama, like genuinely iconic formatting ngl πŸ’–

πŸŽ€ Members πŸŽ€

okay so this is the part where we meet the cast. each member has main character energy in its own way:

  • dev_index (u8) β€” the device index. literally just which device, bestie πŸ”’
  • timeout (uint32_t) β€” command timeout in seconds. and if it's zero? the driver's default value steps in, no questions asked ⏰
  • reply_frame_buf_ptr (void *) β€” where the MPI reply lands. the reply frame's home address πŸ’Œ
  • data_in_buf_ptr (void *) β€” the destination for a read. data comes in here πŸ“₯
  • data_out_buf_ptr (void *) β€” the data source for a write. data goes out from here πŸ“€
  • max_reply_bytes (uint32_t) β€” maximum number of reply bytes to be sent to app. the cap, the limit, the "that's enough" βœ‹
  • data_in_size (uint32_t) β€” number bytes for data transfer in (read). yes it really says "number bytes", we're keeping it πŸ“
  • data_out_size (uint32_t) β€” number bytes for data transfer out (write). same vibe, other direction πŸ”
  • mpi_request (Mpi26MctpPassthroughRequest_t *) β€” the request frame itself. the actual star of the show ⭐
ngl the fields are the whole personality of this struct β€” no hidden extras, no secret defaults beyond that timeout zero case. what you see is what you get πŸ’…

🌈 SEE ALSO 🌈

kernel file ./drivers/scsi/mpt3sas/mpt3sas_ctl.h β€” that's where this whole situation lives, go read it iykyk πŸ“‚

and the whole friend group of sibling structs, in the order the manpage lists them, not me skipping a single one:

  • struct mpt3_ioctl_header(9)
  • struct mpt3_ioctl_diag_reset(9)
  • struct mpt3_ioctl_pci_info(9)
  • struct mpt3_ioctl_iocinfo(9)
  • struct mpt3_ioctl_eventquery(9)
  • struct mpt3_ioctl_eventenable(9)
  • struct MPT3_IOCTL_EVENTS(9)
  • struct mpt3_ioctl_eventreport(9)
  • struct mpt3_ioctl_command(9)
  • struct mpt3_ioctl_btdh_mapping(9)
  • struct mpt3_diag_register(9)
  • struct mpt3_diag_unregister(9)
  • struct mpt3_diag_query(9)
  • struct mpt3_diag_release(9)
  • struct mpt3_diag_read_buffer(9)
  • struct mpt3_addnl_diag_query(9)
  • struct mpt3_enable_diag_sbr_reload(9)

and that's the page bestie πŸŽ€ you read the whole thing, so proud of you fr fr. this little gem lives in the Kernel API Manual, it's from ./drivers/scsi/mpt3sas, and it's dated October 2026 β€” shoutout to that source dir for the lore, and to struct mpt3_...thru_command(9) for being the header title we all know and love πŸ’œβœ¨

πŸ“¦ where this page comes from