STRUCT ISCI_PORT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ struct isci_port(9) β€” the isci direct attached sas port object, bestie

okay so this is a page straight out of the Kernel API Manual (that's the manual name, iykyk) and it's all about struct isci_port β€” the isci direct attached SAS port object. it's giving "low-level driver internals" and honestly? iconic. let's get into it πŸ’…


✨ SYNOPSIS ✨

here's the whole struct, character for character, no cap:

struct isci_port {
    struct isci_host *isci_host;
    struct list_head remote_dev_list;
  #define IPORT_RESET_PENDING 0;
    unsigned long state;
    enum sci_status hard_reset_status;
    struct sci_base_state_machine sm;
    bool ready_exit;
    u8 logical_port_index;
    u8 physical_port_index;
    u8 active_phy_mask;
    u8 enabled_phy_mask;
    u8 last_active_phy;
    u16 reserved_rni;
    u16 reserved_tag;
    u32 started_request_count;
    u32 assigned_device_count;
    u32 hang_detect_users;
    u32 not_ready_reason;
    struct isci_phy *phy_table[SCI_MAX_PHYS];
    struct isci_host *owning_controller;
    struct sci_timer timer;
    struct scu_port_task_scheduler_registers __iomem
*port_task_scheduler_registers;
    u32 __iomem *port_pe_configuration_register;
    struct scu_viit_entry __iomem *viit_registers;
 };

like, look at her. she's got everything. 🫢

πŸŽ€ the little #define sneaking around in there

  • #define IPORT_RESET_PENDING 0; β€” yeah it's literally chillin' inside the struct body, that's just how it is, don't @ me

πŸ’– Members πŸ’–

okay so here's the member-by-member tea, and I'm keeping every single drop:

  • ready_exit β€” several states constitute 'ready'. when we're exiting ready we need to take extra port-teardown actions that get skipped when you're exiting to another 'ready' state. so basically not all exits are equal, bestie 🌸
  • logical_port_index β€” the software port index
  • physical_port_index β€” the hardware port index
  • active_phy_mask β€” identifies phy members
  • enabled_phy_mask β€” the phy mask for the port that are already part of the port
  • reserved_rni β€” reserver for port task scheduler workaround (yes, "reserver" β€” that's the original spelling, I'm not touching it πŸ™ˆ)
  • reserved_tag β€” no description given, she's mysterious, she's main character energy, we respect her privacy πŸ’€
  • started_request_count β€” reference count for outstanding commands
  • not_ready_reason β€” set during state transitions and notified
  • timer β€” timeout start/stop operations ⏰

πŸ¦‹ SEE ALSO πŸ¦‹

  • Kernel file ./drivers/scsi/isci/port.h β€” go read it, it's right there, iykyk πŸ“–

ngl if you're poking at this struct you're already deep in the isci driver, so like... hydrate, take a break, and remember the phy masks are masks, not vibes. 🧚

and that's the whole page, periodt. this came from ./drivers/scsi/isci and it's dated October 2026 β€” so yeah, future-dated kernel docs, we love to see it. slay πŸ’œβœ¨

πŸ“¦ where this page comes from