STRUCT XE_UC_FW(9)
β¨ struct xe_uc_fw β Xe micro controller firmware β¨
okay so bestie, we're looking at the struct xe_uc_fw manpage from the Kernel API Manual. it's giving "firmware glow-up" energy and honestly? we're obsessed. this struct is literally the blueprint for how the Xe driver keeps track of micro controller firmware, and i'm gonna walk you through every single member like we're studying together at 2am. no cap, every detail stays. π
πΈ SYNOPSIS πΈ
here's the whole struct, exactly as it lives in the kernel. don't touch, just vibe:
struct xe_uc_fw {
enum xe_uc_fw_type type;
union {
const enum xe_uc_fw_status status;
enum xe_uc_fw_status __status;
};
const char *path;
bool user_overridden;
bool full_ver_required;
size_t size;
struct xe_bo *bo;
bool has_gsc_headers;
struct {
struct xe_uc_fw_version wanted;
enum xe_uc_fw_version_types wanted_type;
struct xe_uc_fw_version found[XE_UC_FW_VER_TYPE_COUNT];
} versions;
u32 rsa_size;
u32 ucode_size;
u32 css_offset;
u32 private_data_size;
u32 build_type;
};
π Members π
okay this is the part where we go member by member, and i promise it's gonna slay:
typeβ the type of uC firmware. literally what kind of micro controller firmware we're dealing with. π¦{unnamed_union}β an anonymous union, bestie. it's giving "mystery wrapper" but it's just holding the two status fields below. πstatusβ the firmware load status. this is the public-facing mood ring of your firmware. β¨__statusβ the private firmware load status. and listen, this one is only to be used by firmware loading code. no cap, don't touch it unless you're literally the loader. πpathβ path to the uC firmware. where your firmware blob lives, iykyk. πuser_overriddenβ user provided path to uC firmware viamodparam. so if you went in and overrode it yourself, this flag is like "yep, that was me." πfull_ver_requiredβ this one's important: the driver is still under development and not ready for backward-compatible firmware. to be used only for new platforms, i.e. still underrequire_force_probeprotection and not supported byi915. fr fr, respect the boundary. π§sizeβ size of the uC firmware including the CSS header. the whole package, not just the vibe. πboβ the Xe BO (buffer object) for the uC firmware. it's the actual memory home for your firmware. πhas_gsc_headersβ whether the FW image starts with GSC headers. true/false, iconic either way. π―versionsβ FW versions wanted and found. the whole "what we asked for vs what we got" situation. and it's got sub-members, so let's go:versions.wantedβ the firmware version wanted by the platform. the dream. πversions.wanted_typeβ the type of firmware version wanted (release vs compatibility). because sometimes you want the stable one and sometimes you want the chill one. πversions.foundβ the FW versions found in the firmware blob. the reality check. it's an array ofXE_UC_FW_VER_TYPE_COUNTelements, so there's room for all the types. π₯
rsa_sizeβ RSA size. numbers don't lie. π’ucode_sizeβ micro kernel size. the little kernel that could. π§css_offsetβ the offset within the blob at which the CSS is located. basically the treasure map coordinate for your CSS. πΊοΈprivate_data_sizeβ size of private data found in the uC CSS header. it's giving "personal info" but it's just bytes. πbuild_typeβ the Firmware build type. seeCSS_UKERNEL_INFO_BUILDTYPEfor definitions. that's where the lore lives. π
π SEE ALSO π
- Kernel file
./drivers/gpu/drm/xe/xe_uc_fw_types.hstructxe_uc_fw_version(9)
like, go read those if you wanna go deeper. i believe in you. π«Ά
and that's the whole page, bestie! this was pulled from ./drivers/gpu/drm/xe and dated October 2026. the manual name is struct xe_uc_fw(9), in case you forgot already (no judgment). now go forth and firmware responsibly. mwah! ππβ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms