STRUCT XE_GSC(9)
π struct xe_gsc β GSC
okay so bestie, welcome to struct xe_gsc from the kernel API manual β this is the GSC struct and it's honestly kind of a big deal. it's got firmware management, a whole workqueue situation, and a proxy sub-struct that is very much doing the most. let's get into it π«Ά
β¨ SYNOPSIS β¨
here's the whole vibe, character for character, no cap:
struct xe_gsc {
struct xe_uc_fw fw;
u32 security_version;
struct xe_bo *private;
struct xe_exec_queue *q;
struct workqueue_struct *wq;
struct work_struct work;
spinlock_t lock;
u32 work_actions;
#define GSC_ACTION_FW_LOAD BIT(0);
#define GSC_ACTION_SW_PROXY BIT(1);
#define GSC_ACTION_ER_COMPLETE BIT(2);
struct {
struct i915_gsc_proxy_component *component;
struct mutex mutex;
bool component_added;
bool started;
struct xe_bo *bo;
struct iosys_map to_gsc;
struct iosys_map from_gsc;
void *to_csme;
void *from_csme;
} proxy;
};
like, look at her. three #defined actions living right inside the struct body. iconic behavior honestly π
πΈ Members πΈ
okay so now the member-by-member tour, and yes we're doing all of them, every single one, because they all matter:
fwβ the generic uC firmware management. your girl's whole firmware situation lives here β¨security_versionβ the SVN found in the fetched blob. that's the security version number, straight out of the blob πprivateβ private data for use by the GSC FW. not for you. for the firmware. respect the privacy πqβ the default queue used for submissions to GSC FW π₯wqβ the workqueue that handles jobs for delayed load and proxy handling. busy busy πworkβ the delayed load and proxy handling work itselflockβ protects access to thework_actionsmask. do NOT touchwork_actionswithout her, fr fr πwork_actionsβ a mask of the actions to be performed in the work. lowkey the to-do listproxyβ the sub-structure containing all the SW proxy-related variables. she has her own little world going on in there π¦proxy.componentβ struct for communication with the mei componentproxy.mutexβ protects the component binding and usageproxy.component_addedβ whether the component has been addedproxy.startedβ whether the proxy has been startedproxy.boβ object to store messages to and from the GSCproxy.to_gscβ map of the memory used to send messages to the GSCproxy.from_gscβ map of the memory used to recv messages from the GSCproxy.to_csmeβ pointer to the memory used to send messages to CSMEproxy.from_csmeβ pointer to the memory used to recv messages from CSME
and yes, to_gsc / from_gsc are the maps while to_csme / from_csme are the pointers β they are different things and we do not conflate them, bestie π
heads up:work_actionsis guarded bylock, andproxy's stuff is guarded byproxy.mutex. two locks, two jobs, don't mix 'em up π«Ά
π SEE ALSO π
- Kernel file
./drivers/gpu/drm/xe/xe_gsc_types.hβ go read the source, iykyk
and that's the whole page, periodt π this was struct xe_gsc(9) from the Kernel API Manual, living in ./drivers/gpu/drm/xe, dated October 2026. slay, go read your headers, ily, bye ππ
π¦ 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