xref: /linux/drivers/gpu/drm/xe/xe_sriov.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
113e5c32cSMichal Wajdeczko /* SPDX-License-Identifier: MIT */
213e5c32cSMichal Wajdeczko /*
313e5c32cSMichal Wajdeczko  * Copyright © 2023 Intel Corporation
413e5c32cSMichal Wajdeczko  */
513e5c32cSMichal Wajdeczko 
613e5c32cSMichal Wajdeczko #ifndef _XE_SRIOV_H_
713e5c32cSMichal Wajdeczko #define _XE_SRIOV_H_
813e5c32cSMichal Wajdeczko 
913e5c32cSMichal Wajdeczko #include "xe_assert.h"
1013e5c32cSMichal Wajdeczko #include "xe_device_types.h"
1113e5c32cSMichal Wajdeczko #include "xe_sriov_types.h"
1213e5c32cSMichal Wajdeczko 
133df49b2eSMichal Wajdeczko struct drm_printer;
143df49b2eSMichal Wajdeczko 
1513e5c32cSMichal Wajdeczko const char *xe_sriov_mode_to_string(enum xe_sriov_mode mode);
16c7201728SMichal Wajdeczko const char *xe_sriov_function_name(unsigned int n, char *buf, size_t len);
1713e5c32cSMichal Wajdeczko 
18d79c88c4SMichal Wajdeczko void xe_sriov_probe_early(struct xe_device *xe);
193df49b2eSMichal Wajdeczko void xe_sriov_print_info(struct xe_device *xe, struct drm_printer *p);
200cfb7caeSMichal Wajdeczko int xe_sriov_init(struct xe_device *xe);
2113e5c32cSMichal Wajdeczko 
xe_device_sriov_mode(const struct xe_device * xe)22*0e6745deSMichal Wajdeczko static inline enum xe_sriov_mode xe_device_sriov_mode(const struct xe_device *xe)
2313e5c32cSMichal Wajdeczko {
2413e5c32cSMichal Wajdeczko 	xe_assert(xe, xe->sriov.__mode);
2513e5c32cSMichal Wajdeczko 	return xe->sriov.__mode;
2613e5c32cSMichal Wajdeczko }
2713e5c32cSMichal Wajdeczko 
xe_device_is_sriov_pf(const struct xe_device * xe)28*0e6745deSMichal Wajdeczko static inline bool xe_device_is_sriov_pf(const struct xe_device *xe)
2913e5c32cSMichal Wajdeczko {
3013e5c32cSMichal Wajdeczko 	return xe_device_sriov_mode(xe) == XE_SRIOV_MODE_PF;
3113e5c32cSMichal Wajdeczko }
3213e5c32cSMichal Wajdeczko 
xe_device_is_sriov_vf(const struct xe_device * xe)33*0e6745deSMichal Wajdeczko static inline bool xe_device_is_sriov_vf(const struct xe_device *xe)
3413e5c32cSMichal Wajdeczko {
3513e5c32cSMichal Wajdeczko 	return xe_device_sriov_mode(xe) == XE_SRIOV_MODE_VF;
3613e5c32cSMichal Wajdeczko }
3713e5c32cSMichal Wajdeczko 
3813e5c32cSMichal Wajdeczko #ifdef CONFIG_PCI_IOV
3913e5c32cSMichal Wajdeczko #define IS_SRIOV_PF(xe) xe_device_is_sriov_pf(xe)
4013e5c32cSMichal Wajdeczko #else
4113e5c32cSMichal Wajdeczko #define IS_SRIOV_PF(xe) (typecheck(struct xe_device *, (xe)) && false)
4213e5c32cSMichal Wajdeczko #endif
4313e5c32cSMichal Wajdeczko #define IS_SRIOV_VF(xe) xe_device_is_sriov_vf(xe)
4413e5c32cSMichal Wajdeczko 
4513e5c32cSMichal Wajdeczko #define IS_SRIOV(xe) (IS_SRIOV_PF(xe) || IS_SRIOV_VF(xe))
4613e5c32cSMichal Wajdeczko 
4713e5c32cSMichal Wajdeczko #endif
48