STRUCT PVR_FW_MEM(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ NAME πŸ‘‘

struct pvr_fw_mem β€” the FW memory allocation situation, and bestie, it's a whole vibe ✨

So like, this is the struct that holds all the firmware memory allocations. Every pointer, every size, every object β€” it's all living in here. Periodt. πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

struct pvr_fw_mem {
    struct pvr_fw_object *code_obj;
    struct pvr_fw_object *data_obj;
    struct pvr_fw_object *core_code_obj;
    struct pvr_fw_object *core_data_obj;
    u8 *code;
    u8 *data;
    u8 *core_code;
    u8 *core_data;
    u32 code_alloc_size;
    u32 data_alloc_size;
    u32 core_code_alloc_size;
    u32 core_data_alloc_size;
    struct pvr_fw_object *fwif_connection_ctl_obj;
    struct pvr_fw_object *osinit_obj;
    struct pvr_fw_object *sysinit_obj;
    struct pvr_fw_object *osdata_obj;
    struct pvr_fw_object *hwrinfobuf_obj;
    struct pvr_fw_object *sysdata_obj;
    struct pvr_fw_object *power_sync_obj;
    struct pvr_fw_object *fault_page_obj;
    struct pvr_fw_object *gpu_util_fwcb_obj;
    struct pvr_fw_object *runtime_cfg_obj;
    struct pvr_fw_object *mmucache_sync_obj;
};

Like, look at her. She's got range. 🌈


πŸŽ€ Members πŸŽ€

Okay so let's go through the whole cast, main-character by main-character πŸ’–

🌸 The firmware sections (code & data) 🌸

  • code_obj β€” the object that represents firmware code, fr fr.
  • data_obj β€” the object that represents firmware data, no cap.
  • core_code_obj β€” object representing firmware core code. Lowkey might be NULL if the firmware doesn't contain this section πŸ‘€
  • core_data_obj β€” object representing firmware core data. Also may be NULL if the firmware doesn't contain this section. Not every firmware comes with the full set, iykyk 🫢
  • code β€” the driver-side copy of firmware code. Like, the driver keeps its own lil duplicate πŸ’…
  • data β€” driver-side copy of firmware data.
  • core_code β€” driver-side copy of firmware core code. May be NULL if the firmware doesn't contain this section πŸ™ˆ
  • core_data β€” driver-side copy of firmware core data. May be NULL if the firmware doesn't contain this section πŸ™ˆ

✨ The allocation sizes ✨

  • code_alloc_size β€” the allocation size of the firmware code section. Numbers, bestie πŸ”’
  • data_alloc_size β€” allocation size of the firmware data section.
  • core_code_alloc_size β€” allocation size of the firmware core code section.
  • core_data_alloc_size β€” allocation size of the firmware core data section.

🧚 The FWIF / FW structure objects 🧚

  • fwif_connection_ctl_obj β€” object representing the FWIF connection control structure. That's a lot of words but it ate πŸ’…
  • osinit_obj β€” object representing the FW OSINIT structure.
  • sysinit_obj β€” object representing the FW SYSINIT structure.
  • osdata_obj β€” object representing the FW OSDATA structure.
  • hwrinfobuf_obj β€” object representing the FW hwrinfobuf structure.
  • sysdata_obj β€” object representing the FW SYSDATA structure.

πŸ”₯ The rest of the cast πŸ”₯

  • power_sync_obj β€” object representing power sync state. Keeping the power in sync, iconic behaviour ⚑
  • fault_page_obj β€” object representing the FW fault page. If something goes wrong, this is where it's at 😭
  • gpu_util_fwcb_obj β€” object representing the FW GPU utilisation control structure. Utilisation! Control! Structure! πŸ‘‘
  • runtime_cfg_obj β€” object representing the FW runtime config structure.
  • mmucache_sync_obj β€” object used as the sync parameter in an MMU cache operation. Very specific, very niche, we love her for it πŸ“

⭐ SEE ALSO ⭐

Go read these next, bestie, they're literally linked in the kernel file ./drivers/gpu/drm/imagination/pvr_fw.h πŸ₯°


Ngl the whole thing lives in ./drivers/gpu/drm/imagination/pvr_fw.h β€” that's the kernel file, the source of truth, the moment πŸ’―

Okay that's the whole page, you're welcome, now go read some kernel source 🫢

Kernel API Manual ✨ struct pvr_fw_mem(9) ✨ from ./drivers/gpu/drm/imagination ✨ October 2026 ✨ mwah, slay, bye! πŸ’…πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from