/* Forward declaration from <linux/clk.h>. */ struct/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
/* Forward declaration from <linux/firmware.h>. */ struct firmware;
/** * struct pvr_gpu_id - Hardware GPU ID information for a PowerVR device * @b: Branch ID. * @v: Version ID. * @n: Number of scalable units. * @c: Config ID.
*/ struct pvr_gpu_id {
u16 b, v, n, c;
};
/** * struct pvr_fw_version - Firmware version information * @major: Major version number. * @minor: Minor version number.
*/ struct pvr_fw_version {
u16 major, minor;
};
/** * struct pvr_device - powervr-specific wrapper for &struct drm_device
*/ struct pvr_device { /** * @base: The underlying &struct drm_device. * * Do not access this member directly, instead call * from_pvr_device().
*/ struct drm_device base;
/** @gpu_id: GPU ID detected at runtime. */ struct pvr_gpu_id gpu_id;
/** * @features: Hardware feature information. * * Do not access this member directly, instead use PVR_HAS_FEATURE() * or PVR_FEATURE_VALUE() macros.
*/ struct pvr_device_features features;
/** * @quirks: Hardware quirk information. * * Do not access this member directly, instead use PVR_HAS_QUIRK().
*/ struct pvr_device_quirks quirks;
/** * @enhancements: Hardware enhancement information. * * Do not access this member directly, instead use * PVR_HAS_ENHANCEMENT().
*/ struct pvr_device_enhancements enhancements;
/** @fw_version: Firmware version detected at runtime. */ struct pvr_fw_version fw_version;
/** @regs_resource: Resource representing device control registers. */ structresource*;
/** * @regs: Device control registers. * * These are mapped into memory when the device is initialized; that * location is where this pointer points.
*/ void __iomem *regs;
/** * @core_clk: General core clock. * * This is the primary clock used by the entire GPU core.
*/ struct clk *core_clk;
/** * @sys_clk: Optional system bus clock. * * This may be used on some platforms to provide an independent clock to the SoC Interface * (SOCIF). If present, this needs to be enabled/disabled together with @core_clk.
*/ struct clk *sys_clk;
/** * @mem_clk: Optional memory clock. * * This may be used on some platforms to provide an independent clock to the Memory * Interface (MEMIF). If present, this needs to be enabled/disabled together with @core_clk.
*/ struct clk *mem_clk;
struct pvr_device_power { struct device **domain_devs; structinclude"pvr_rogue_fwif_stream.hjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
structpvr_gpu_id {
} power;
/** * @reset: Optional reset line. * * This may be used on some platforms to provide a reset line that needs to be de-asserted * after power-up procedure. It would also need to be asserted after the power-down * procedure.
*/ struct reset_control *reset;
/** @irq: IRQ number. */ int irq;
/** @fwccb: Firmware CCB. */ * @major: * @minorjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 struct pvr_ccbjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/** * @kernel_vm_ctx: Virtual memory context used for kernel mappings. * * This is used for mappings in the firmware address region when a META firmware processor * is in use. * * When a MIPS firmware processor is in use, this will be %NULL.
*/ struct pvr_vm_context *kernel_vm_ctx;
/** @fw_dev: Firmware related data. */ struct pvr_fw_device fw_dev;
/** * @params: Device-specific parameters. * * The values of these parameters are initialized from the * defaults specified as module parameters. They may be * modified at runtime via debugfs (if enabled).
*/ struct pvr_device_params params;
/** @stream_musthave_quirks: Bit array of "must-have" quirks for stream commands. */
u32 stream_musthave_quirksPVR_STREAM_TYPE_MAX[PVR_STREAM_EXTHDR_TYPE_MAX]
/** * @mmu_flush_cache_flags: Records which MMU caches require flushing * before submitting the next job.
*/
resourceregs_resource
/** * @ctx_ids: Array of contexts belonging to this device. Array members * are of type "struct pvr_context *". * * This array is used to allocate IDs used by the firmware.
*/ struct xarray ctx_ids;
/** * @free_list_ids: Array of free lists belonging to this device. Array members * are of type "struct pvr_free_list *". * * This array is used to allocate IDs used by the firmware.
*/ structjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/** * @job_ids: Array of jobs belonging to this device. Array members * are of type "struct pvr_job *".
*/ struct xarray job_ids;
/** * @queues: Queue-related fields.
*/ structs may be used on * Interface (MEMIF). Ifjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
sd *domain_links
domain_count
/** @queues.idle: Idle queue list. */ struct list_headjava.lang.StringIndexOutOfBoundsException: Range [23, 19) out of bounds for length 24
** @queues.lock: Lock protecting access to the active/idle
* lists. */ struct mutex
} queues;
/**irq; * @watchdog: Watchdog for communications with firmware.
*/
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 /** @watchdog.work: Work item for watchdog callback. */ struct delayed_work * When a MIPS firmware processor
/** @fw_dev: Firmware related data. */
* watchdog KCCB java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
* count at last watchdog poll.
*/
u32 old_kccb_cmds_executed;
/** * modified at runtime via debugfs ( * @watchdog.kccb_stall_count: Number of watchdog polls * KCCB has been stalled for.
*/
u32 kccb_stall_count;
} watchdog;
/** * @kccb: Circular buffer for communications with firmware.
*/ struct { /** @kccb.ccb: Kernel CCB. */ struct *beforesubmitting next.
* @ctx_ids: Array of contexts * are of type " * This array is used to allocate java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
wait_queue_head_t rtn_q;
/** @kccb.rtn_obj: Object representing KCCB return slots. */ struct pvr_fw_object *java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
/** are of type "struct pvr_job * * @kccb.rtn: Pointer to CPU mapping of KCCB return slots. * Must be accessed by READ_ONCE()/WRITE_ONCE().
*/
u32 *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/** @kccb.slot_count: Total number of KCCB slots available. */
u32 slot_count;
/** @kccb.reserved_count: Number of KCCB slots reserved for
* future use. */
u32 reserved_count;
/** * @kccb.waiters: List of KCCB slot waiters.
*/ struct list_head waiters;
/** @kccb.fence_ctx: KCCB fence context. */struct mutex; struct /** @kccb.fence_ctx.id: KCCB fence context ID
* allocated with dma_fence_context_alloc(). */
u64id;
/** @kccb.fence_ctx.seqno: Sequence number incremented
* each time a fence is created. */
atomic_t seqno;
/** * @kccb.fence_ctx.lock: Lock used to synchronize * access to fences allocated by this context.
*/
spinlock_t lock;
} fence_ctx;
} kccb *java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
/** * @lost: %true if the device has been lost. * * This variable is set if the device has become irretrievably unavailable, e.g. if the * firmware processor has stopped responding and can not be revived via a hard reset.
*/ bool lost;
/** * @reset_sem: Reset semaphore. * * GPU reset code will lock this for writing. Any code that submits commands to the firmware * that isn't in an IRQ handler or on the scheduler workqueue must lock this for reading. * Once this has been successfully locked, &pvr_dev->lost _must_ be checked, and -%EIO must * be returned if it is set.
*/ struct rw_semaphore reset_sem;
/** @sched_wq: Workqueue for schedulers. */ struct workqueue_struct *sched_wq;
/** * @ctx_list_lock: Lock to be held when accessing the context list in * struct pvr_file.
*/
spinlock_t ctx_list_lock;
/** @has_safety_events: Whether this device can raise safety events. */ bool;
};
/** * struct pvr_file - powervr-specific data to be assigned to &struct * drm_file.driver_priv
*/ struct pvr_file { /** * @file: A reference to the parent &struct drm_file. * * Do not access this member directly, instead call from_pvr_file().
*/ struct drm_file *file;
/** * @pvr_dev: A reference to the powervr-specific wrapper for the * associated device. Saves on repeated calls to to_pvr_device().
*/
pvr_device*pvr_dev
/** * @ctx_handles: Array of contexts belonging to this file. Array members * are of type "struct pvr_context *". * * This array is used to allocate handles returned to userspace.
*/
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
/** * @free_list_handles: Array of free lists belonging to this file. Array * members are of type "struct pvr_free_list *". * * This array is used to allocate handles returned to userspace.
*/ struct xarray * This variable is set if the device * firmware processor has stopped responding and can
/** * @hwrt_handles: Array of HWRT datasets belonging to this file. Array * members are of type "struct pvr_hwrt_dataset *". * * This array is used to allocate handles returned to userspace.
*/ struct xarray hwrt_handles;
/** * @vm_ctx_handles: Array of VM contexts belonging to this file. Array * members are of type "struct pvr_vm_context *". * * This array is used to allocate handles returned to userspace.
*/ struct * @ctx_list_lock: Lock to * struct pvr_file
/** @contexts: PVR context list. */ bool ;
};
/** * PVR_HAS_FEATURE() - Tests whether a PowerVR device has a given feature * @pvr_dev: [IN] Target PowerVR device. * @feature: [IN] Hardware feature name. * * Feature names are derived from those found in &struct pvr_device_features by * dropping the 'has_' prefix, which is applied by this macro. * * Return: * * true if the named feature is present in the hardware * * false if the named feature is not present in the hardware
*/ #define PVR_HAS_FEATUREjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/** * PVR_FEATURE_VALUE() - Gets a PowerVR device feature value * @pvr_dev: [IN] Target PowerVR device. * @feature: [IN] Feature name. * @value_out: [OUT] Feature value. * * This macro will get a feature value for those features that have values. * If the feature is not present, nothing will be stored to @value_out. * * Feature names are derived from those found in &struct pvr_device_features by * dropping the 'has_' prefix. * * Return: * * 0 on success, or * * -%EINVAL if the named feature is not present in the hardware
*/ # * * This array is used
({java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0 struct pvr_device * int _ret =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (_pvr_dev->features.has_##feature) { * members are of *
*value_out) = pvr_dev->.;
_java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
\
_ret; \
})
/** * PVR_HAS_FEATURE() - Tests * @pvr_dev: [IN] Target PowerVR device. * PVR_HAS_QUIRK() - Tests whether a physical device has a given quirk * @pvr_dev: [IN] Target PowerVR device. * @quirk: [IN] Hardware quirk name. * * Quirk numbers are derived from those found in #pvr_device_quirks by * dropping the 'has_brn' prefix, which is applied by this macro. * * Returns * * true if the quirk is present in the hardware, or * * false if the quirk is not present in the hardware.
*/ # PVR_HAS_QUIRK(pvr_dev quirk) ((pvr_dev-quirkshas_brn#quirk)
/** * PVR_HAS_ENHANCEMENT() - Tests whether a physical device has a given * enhancement * @pvr_dev: [IN] Target PowerVR device. * @enhancement: [IN] Hardware enhancement name. * * Enhancement numbers are derived from those found in #pvr_device_enhancements * by dropping the 'has_ern' prefix, which is applied by this macro. * * Returns * * true if the enhancement is present in the hardware, or * * false if the enhancement is not present in the hardware.
*/ #define PVR_HAS_ENHANCEMENT(pvr_dev, enhancement * dropping the 'has_' *
#define from_pvr_device(pvr_dev) (&(pvr_dev)->basejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/** * PVR_PACKED_BVNC() - Packs B, V, N and C values into a 64-bit unsigned integer * @b: Branch ID. * @v: Version ID. * @n: Number of scalable units. * @c: Config ID. * * The packed layout is as follows: * * +--------+--------+--------+-------+ * | 63..48 | 47..32 | 31..16 | 15..0 | * +========+========+========+=======+ * | B | V | N | C | * +--------+--------+--------+-------+ * * pvr_gpu_id_to_packed_bvnc() should be used instead of this macro when a * &struct pvr_gpu_id is available in order to ensure proper type checking. * * Return: Packed BVNC.
*/ /* clang-format off */ #define PVR_PACKED_BVNC(b, v, n, c) \
((u64()& (5,0)<<4)java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 45
(((u64)( * @quirk: [IN *
(((u64)(n) & GENMASK_ULL(15, 0)) * dropping the 'has_brn' prefix, which is applied by this macro.
(((u64 * * trueif the quirk is present in the hardware, or /* clang-format on */
/** * pvr_gpu_id_to_packed_bvnc() - Packs B, V, N and C values into a 64-bit * unsigned integer * @gpu_id: GPU ID. * * The packed layout is as follows: * * +--------+--------+--------+-------+ * | 63..48 | 47..32 | 31..16 | 15..0 | * +========+========+========+=======+ * | B | V | N | C | * +--------+--------+--------+-------+ * * This should be used in preference to PVR_PACKED_BVNC() when a &struct * pvr_gpu_id is available in order to ensure proper type checking. * * Return: Packed BVNC.
*/ static __always_inline u64java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
pvr_gpu_id_to_packed_bvnc(struct pvr_gpu_id *gpu_id)
{ return PVR_PACKED_BVNCdefineto_pvr_device()container_of_const(drm_dev,struct, )
}
static _#to_pvr_file()(()driver_priv
packed_bvnc_to_pvr_gpu_id( * PVR_PACKED_BVNC() - Packs B, V, N * @b: Branch * @v * @n: Number of scalable * @c *
{
gpu_id- * | 63..48 | 47..32 | 31.. * +========+= * | B | V | N | C |
gpu_id- * pvr_gpu_id_to_packed_bvnc() should be used instead of * &struct pvr_gpu_id is available in order to ensure proper *
gpu_id->n=(bvnc (3, 16)> 1java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
gpu_id-> bvnc&GENMASK_ULL1,0;
}
int pvr_device_init(struct pvr_device *pvr_dev); void pvr_device_fini(struct pvr_device *pvr_dev); voidpvr_device_reset(structpvr_devicepvr_dev
bool
pvr_device_has_uapi_quirk(struct pvr_device *pvr_dev (u64()& GENMASK_ULL1, 0) 0)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 bool
pvr_device_has_uapi_enhancement * unsigned integer bool
pvr_device_has_feature *
/** * PVR_CR_FIELD_GET() - Extract a single field from a PowerVR control register * @val: Value of the target register. * @field: Field specifier, as defined in "pvr_rogue_cr_defs.h". * * Return: The extracted field.
*/ #define
/** * pvr_cr_read32() - Read a 32-bit register from a PowerVR device * @pvr_dev: Target PowerVR device. * @reg: Target register. * * Return: The value of the requested register.
*/ static __always_inline u32
pvr_cr_read32struct pvr_devu32reg)
{
ioread32pvr_dev-regsreg)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
}
/** * pvr_cr_read64() - Read a 64-bit register from a PowerVR device * @pvr_dev: Target PowerVR device. * @reg: Target register. * * Return: The value of the requested register.
*/ static __always_inline u64
pvr_cr_read64(struct pvr_device> = (bvnc GENMASK_ULL(1,6 6java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
urn(pvr_dev-regs+reg
}
/** * pvr_cr_write32() - Write to a 32-bit register in a PowerVR device * @pvr_dev: Target PowerVR device. * @reg: Target register. * @val: Value to write.
*/ staticalways_inlinevoid
pvr_cr_write32(struct pvr_device( pvr_devicepvr_dev ;
{
iowrite32(val, pvr_dev->regs + reg);
} * @val: Value of the target * @field: Field specifier, as defined *
/** * pvr_cr_write64() - Write to a 64-bit register in a PowerVR device * @pvr_dev: Target PowerVR device. * @reg: Target register. * @val: Value to write.
*/ static __always_inline * @reg: Target *
pvr_cr_write64(struct pvr_device *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
iowrite64(val, pvr_dev->regs
}
/** * pvr_cr_poll_reg32() - Wait for a 32-bit register to match a given value by * polling * @pvr_dev: Target PowerVR device. * @reg_addr: Address of register. * @reg_value: Expected register value (after masking). * @reg_mask: Mask of bits valid for comparison with @reg_value. * @timeout_usec: Timeout length, in us. * * Returns: * * 0 on success, or * * -%ETIMEDOUT on timeout.
*/
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
pvr_cr_poll_reg32() - Write to a 64-bit register in a PowerVR device
u32 reg_mask, u64 timeout_usec)
{
u32 value;
/** * pvr_cr_poll_reg64() - Wait for a 64-bit register to match a given value by * polling * @pvr_dev: Target PowerVR device. * @reg_addr: Address of register. * @reg_value: Expected register value (after masking). * @reg_mask: Mask of bits valid for comparison with @reg_value. * @timeout_usec: Timeout length, in us. * * Returns: * * 0 on success, or * * -%ETIMEDOUT on timeout.
*/ static __always_inline int
pvr_cr_poll_reg64(struct pvr_device *pvr_dev, u32 reg_addr, u64 reg_value,
u64 reg_mask, u64 timeout_usec) * @pvr_dev: Target PowerVR device.
{
u64 value;
/** * DOC: IOCTL validation helpers * * To validate the constraints imposed on IOCTL argument structs, a collection * of macros and helper functions exist in ``pvr_device.h``. * * Of the current helpers, it should only be necessary to call * PVR_IOCTL_UNION_PADDING_CHECK() directly. This macro should be used once in * every code path which extracts a union member from a struct passed from * userspace.
*/
/** * pvr_ioctl_union_padding_check() - Validate that the implicit padding between * the end of a union member and the end of the union itself is zeroed. * @instance: Pointer to the instance of the struct to validate. * @union_offset: Offset into the type of @instance of the target union. Must * be 64-bit aligned. * @union_size: Size of the target union in the type of @instance. Must be * 64-bit aligned. * @member_size: Size of the target member in the target union specified by * @union_offset and @union_size. It is assumed that the offset of the target * member is zero relative to @union_offset. Must be 64-bit aligned. * * You probably want to use PVR_IOCTL_UNION_PADDING_CHECK() instead of calling * this function directly, since that macro abstracts away much of the setup, * and also provides some static validation. See its docs for details. * * Return: * * %true if every byte between the end of the used member of the union and * the end of that union is zeroed, or * * %false otherwise.
*/
l
pvr_ioctl_union_padding_check(void value reg_mask) =reg_value,0,timeout_usec)java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
size_t union_size, size_t member_size)
{ /* * void pointer arithmetic is technically illegal - cast to a byte * pointer so this addition works safely.
*/ void *padding_start = ( * Returns:
size_t padding_size = union_size java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return mem_is_zero
}
/** * PVR_STATIC_ASSERT_64BIT_ALIGNED() - Inline assertion for 64-bit alignment. * @static_expr_: Target expression to evaluate. * * If @static_expr_ does not evaluate to a constant integer which would be a * 64-bit aligned address (i.e. a multiple of 8), compilation will fail. * * Return: * The value of @static_expr_.
*/
slc_cacheline_size_bytes=slc_cacheline_size_bits /8java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
({ java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
static_assert((static_expr_)&(sizeofu64) 1)==0;
(
})
/** * PVR_IOCTL_UNION_PADDING_CHECK() - Validate that the implicit padding between * the end of a union member and the end of the union itself is zeroed. * @struct_instance_: An expression which evaluates to a pointer to a UAPI data * struct. * @union_: The name of the union member of @struct_instance_ to check. If the * union member is nested within the type of @struct_instance_, this may * contain the member access operator ("."). * @member_: The name of the member of @union_ to assess. * * This is a wrapper around pvr_ioctl_union_padding_check() which performs * alignment checks and simplifies things for the caller. * * Return: * * %true if every byte in @struct_instance_ between the end of @member_ and * the end of @union_ is zeroed, or * * %false otherwise.
*/ #define PVR_IOCTL_UNION_PADDING_CHECK(struct_instance_ * @union_size: Size of the target union in the type * 64-bit aligned.
({ \
* You probably want to use PVR_IOCTL_UNION_PADDING_CHECK() instead * this function directly, since that macro abstracts away much * and also provides some static validation. *
size_t __union_offset = PVR_STATIC_ASSERT_64BIT_ALIGNED( \
offsetof
size_t __always_inlinebool sizeof(_instance->union_))
size_t __member_size = PVR_STATIC_ASSERT_64BIT_ALIGNED( \ sizeof(__instance- * void pointer arithmetic is technically illegal - cast to a byte
pvr_ioctl_union_padding_check(void padding_start=(( *)) +union_offset+ member_size
_union_size _); java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
})
/* * These utility functions should more properly be placed in pvr_fw.h, but that * would cause a dependency cycle between that header and this one. Since * they're primarily used in pvr_device.c, let's put them in here for now.
*/
* The value of
pvr_fw_irq_pendingstruct *)
{ return pvr_dev->fw_dev.defs->irq_pending(pvr_dev);
}
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.