/** * DOC: GuC Doorbells * * The GFX doorbell solution provides a mechanism for submission of workload * to the graphics hardware by a ring3 application without the penalty of * ring transition for each workload submission. * * In SR-IOV mode, the doorbells are treated as shared resource and PF must * be able to provision exclusive range of IDs across VFs, which may want to * use this feature.
*/
/** * xe_guc_db_mgr_init() - Initialize GuC Doorbells Manager. * @dbm: the &xe_guc_db_mgr to initialize * @count: number of doorbells to manage * * The bare-metal or PF driver can pass ~0 as &count to indicate that all * doorbells supported by the hardware are available for use. * * Only VF's drivers will have to provide explicit number of doorbells IDs * that they can use. * * Return: 0 on success or a negative error code on failure.
*/ int xe_guc_db_mgr_init(struct xe_guc_db_mgr *dbm, unsignedint count)
{ int ret;
if (IS_ENABLED(CONFIG_DRM_XE_DEBUG)) { unsignedint n;
for (n = 0; n < count; n++)
dbm_assert(dbm, test_bit(start + n, dbm->bitmap));
}
bitmap_clear(dbm->bitmap, start, count);
}
/** * xe_guc_db_mgr_reserve_id_locked() - Reserve a single GuC Doorbell ID. * @dbm: the &xe_guc_db_mgr * * This function expects that submission lock is already taken. * * Return: ID of the allocated GuC doorbell or a negative error code on failure.
*/ int xe_guc_db_mgr_reserve_id_locked(struct xe_guc_db_mgr *dbm)
{ return dbm_reserve_chunk_locked(dbm, 1, 0);
}
/** * xe_guc_db_mgr_release_id_locked() - Release a single GuC Doorbell ID. * @dbm: the &xe_guc_db_mgr * @id: the GuC Doorbell ID to release * * This function expects that submission lock is already taken.
*/ void xe_guc_db_mgr_release_id_locked(struct xe_guc_db_mgr *dbm, unsignedint id)
{ return dbm_release_chunk_locked(dbm, id, 1);
}
/** * xe_guc_db_mgr_reserve_range() - Reserve a range of GuC Doorbell IDs. * @dbm: the &xe_guc_db_mgr * @count: number of GuC doorbell IDs to reserve * @spare: number of GuC doorbell IDs to keep available * * This function is dedicated for the for use by the PF which expects that * allocated range for the VF will be contiguous and that there will be at * least &spare IDs still available for the PF use after this reservation. * * Return: starting ID of the allocated GuC doorbell ID range or * a negative error code on failure.
*/ int xe_guc_db_mgr_reserve_range(struct xe_guc_db_mgr *dbm, unsignedint count, unsignedint spare)
{ int ret;
mutex_lock(dbm_mutex(dbm));
ret = dbm_reserve_chunk_locked(dbm, count, spare);
mutex_unlock(dbm_mutex(dbm));
return ret;
}
/** * xe_guc_db_mgr_release_range() - Release a range of Doorbell IDs. * @dbm: the &xe_guc_db_mgr * @start: the starting ID of GuC doorbell ID range to release * @count: number of GuC doorbell IDs to release
*/ void xe_guc_db_mgr_release_range(struct xe_guc_db_mgr *dbm, unsignedint start, unsignedint count)
{
mutex_lock(dbm_mutex(dbm));
dbm_release_chunk_locked(dbm, start, count);
mutex_unlock(dbm_mutex(dbm));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.