STRUCT CDNSP_OP_REGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

struct cdnsp_op_regs β€” Device Controller Operational Registers. This is the struct cdnsp_op_regs(9) page from the Kernel API Manual, and bestie, we are about to give these operational regs a full vibe check. No cap: every field matters. πŸ’…


✨ SYNOPSIS ✨

Okay so here’s the whole struct layout, and yes, keep it exactly like this:

struct cdnsp_op_regs {
    __le32 command;
    __le32 status;
    __le32 page_size;
    __le32 reserved1;
    __le32 reserved2;
    __le32 dnctrl;
    __le64 cmd_ring;
    __le32 reserved3[4];
    __le64 dcbaa_ptr;
    __le32 config_reg;
    __le32 reserved4[241];
    __le32 port_reg_base;
 };

The reserved slots are literally in the layout too: reserved1, reserved2, reserved3[4], and reserved4[241]. They’re not in the member tea below, but they are in the struct, so don’t ghost them. 🫢


πŸŽ€ Members πŸŽ€

  • command β€” USBCMD, the Controller command register. Iconic little command slot. πŸ‘‘
  • status β€” USBSTS, the Controller status register. The way it holds the status is giving main character energy. ✨
  • page_size β€” This indicates the page size that the device controller supports. If bit n is set, the controller supports a page size of 2^(n+12), up to a 128MB page size. 4K is the minimum page size. Slay, math. 🧚
  • dnctrl β€” DNCTRL, the Device notification control register. Notifications stay booked and busy. πŸŽ€
  • cmd_ring β€” CRP, the 64-bit Command Ring Pointer. Sixty-four bits of command-ring realness. πŸ’…
  • dcbaa_ptr β€” DCBAAP, the 64-bit Device Context Base Address Array Pointer. That name is a mouthful and honestly it ate. 🌟
  • config_reg β€” CONFIG, the Configure Register. Simple, clean, config-register behavior. πŸ’œ
  • port_reg_base β€” PORTSCn, the base address for Port Status and Control. Each port has a Port Status and Control register, followed by a Port Power Management Status and Control register, a Port Link Info register, and a reserved register. The whole port friend group is here, fr fr. 🌈

🌈 SEE ALSO 🌈

Kernel file ./drivers/usb/cdns3/cdnsp-gadget.h is where the whole friend group lives. Go say hi to:

  • struct cdnsp_cap_regs(9)
  • struct cdnsp_port_regs(9)
  • struct cdnsp_intr_reg(9)
  • struct cdnsp_run_regs(9)
  • struct cdnsp_rev_cap(9)
  • struct cdnsp_doorbell_array(9)
  • struct cdnsp_container_ctx(9)
  • struct cdnsp_slot_ctx(9)
  • struct cdnsp_ep_ctx(9)
  • struct cdnsp_stream_info(9)
  • struct cdnsp_ep(9)
  • struct cdnsp_device_context_array(9)
  • struct cdnsp_transfer_event(9)
  • struct cdnsp_link_trb(9)
  • struct cdnsp_event_cmd(9)
  • struct cdnsp_segment(9)
  • struct cdnsp_td(9)
  • struct cdnsp_dequeue_state(9)
  • struct cdnsp_ring(9)
  • struct cdnsp_erst_entry(9)
  • struct cdnsp_erst(9)
  • struct cdnsp_request(9)
  • struct cdnsp_port(9)
  • struct cdnsp_device(9)
  • next_request(9)

Cute sign-off time: this page’s source/version is ./drivers/usb/cdns3, the date is October 2026, and the footer still points back to struct cdnsp_op_regs(9). Bye bestie β€” go be iconic with those operational regs πŸ’–πŸ¦‹πŸ”₯

πŸ“¦ where this page comes from