mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
DRM Rust fixes for v6.19-rc4
MAINTAINERS:
- Fix Nova GPU driver git links.
- Fix typo in TYR driver entry preventing correct behavior of
scripts/get_maintainer.pl.
- Exclude TYR driver from DRM MISC.
Nova Core:
- Correctly select RUST_FW_LOADER_ABSTRACTIONS to prevent build
errors.
- Regenerate nova-core bindgen bindings with '--explicit-padding' to
avoid uninitialized bytes.
- Fix length of received GSP messages, due to miscalculated message
payload size.
- Regenerate bindings to derive MaybeZeroable.
- Use a bindings alias to derive the firmware version.
-----BEGIN PGP SIGNATURE-----
iHUEABYKAB0WIQS2q/xV6QjXAdC7k+1FlHeO1qrKLgUCaVKmRwAKCRBFlHeO1qrK
LoMTAQDYwgJKxyoKkxY6cRXdWkxDNCueEhu4JUuaCZ4x3DAdZQD6AzrPdaQ08cTn
FUpyXS4aM7AtbOSHzM6wMm7kH6pGqgc=
=us3l
-----END PGP SIGNATURE-----
Merge tag 'drm-rust-fixes-2025-12-29' of https://gitlab.freedesktop.org/drm/rust/kernel into drm-fixes
DRM Rust fixes for v6.19-rc4
MAINTAINERS:
- Fix Nova GPU driver git links.
- Fix typo in TYR driver entry preventing correct behavior of
scripts/get_maintainer.pl.
- Exclude TYR driver from DRM MISC.
Nova Core:
- Correctly select RUST_FW_LOADER_ABSTRACTIONS to prevent build
errors.
- Regenerate nova-core bindgen bindings with '--explicit-padding' to
avoid uninitialized bytes.
- Fix length of received GSP messages, due to miscalculated message
payload size.
- Regenerate bindings to derive MaybeZeroable.
- Use a bindings alias to derive the firmware version.
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: "Danilo Krummrich" <dakr@kernel.org>
Link: https://patch.msgid.link/DFATYVSQRQ4W.1R030NZ34XUZK@kernel.org
This commit is contained in:
commit
c4f2ae5386
|
|
@ -2158,7 +2158,7 @@ M: Alice Ryhl <aliceryhl@google.com>
|
|||
L: dri-devel@lists.freedesktop.org
|
||||
S: Supported
|
||||
W: https://rust-for-linux.com/tyr-gpu-driver
|
||||
W https://drm.pages.freedesktop.org/maintainer-tools/drm-rust.html
|
||||
W: https://drm.pages.freedesktop.org/maintainer-tools/drm-rust.html
|
||||
B: https://gitlab.freedesktop.org/panfrost/linux/-/issues
|
||||
T: git https://gitlab.freedesktop.org/drm/rust/kernel.git
|
||||
F: Documentation/devicetree/bindings/gpu/arm,mali-valhall-csf.yaml
|
||||
|
|
@ -8067,7 +8067,7 @@ W: https://rust-for-linux.com/nova-gpu-driver
|
|||
Q: https://patchwork.freedesktop.org/project/nouveau/
|
||||
B: https://gitlab.freedesktop.org/drm/nova/-/issues
|
||||
C: irc://irc.oftc.net/nouveau
|
||||
T: git https://gitlab.freedesktop.org/drm/nova.git nova-next
|
||||
T: git https://gitlab.freedesktop.org/drm/rust/kernel.git drm-rust-next
|
||||
F: Documentation/gpu/nova/
|
||||
F: drivers/gpu/nova-core/
|
||||
|
||||
|
|
@ -8079,7 +8079,7 @@ W: https://rust-for-linux.com/nova-gpu-driver
|
|||
Q: https://patchwork.freedesktop.org/project/nouveau/
|
||||
B: https://gitlab.freedesktop.org/drm/nova/-/issues
|
||||
C: irc://irc.oftc.net/nouveau
|
||||
T: git https://gitlab.freedesktop.org/drm/nova.git nova-next
|
||||
T: git https://gitlab.freedesktop.org/drm/rust/kernel.git drm-rust-next
|
||||
F: Documentation/gpu/nova/
|
||||
F: drivers/gpu/drm/nova/
|
||||
F: include/uapi/drm/nova_drm.h
|
||||
|
|
@ -8357,6 +8357,7 @@ X: drivers/gpu/drm/msm/
|
|||
X: drivers/gpu/drm/nova/
|
||||
X: drivers/gpu/drm/radeon/
|
||||
X: drivers/gpu/drm/tegra/
|
||||
X: drivers/gpu/drm/tyr/
|
||||
X: drivers/gpu/drm/xe/
|
||||
|
||||
DRM DRIVERS AND COMMON INFRASTRUCTURE [RUST]
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ config NOVA_CORE
|
|||
depends on 64BIT
|
||||
depends on PCI
|
||||
depends on RUST
|
||||
depends on RUST_FW_LOADER_ABSTRACTIONS
|
||||
select RUST_FW_LOADER_ABSTRACTIONS
|
||||
select AUXILIARY_BUS
|
||||
default n
|
||||
help
|
||||
|
|
|
|||
|
|
@ -588,21 +588,23 @@ fn wait_for_msg(&self, timeout: Delta) -> Result<GspMessage<'_>> {
|
|||
header.length(),
|
||||
);
|
||||
|
||||
let payload_length = header.payload_length();
|
||||
|
||||
// Check that the driver read area is large enough for the message.
|
||||
if slice_1.len() + slice_2.len() < header.length() {
|
||||
if slice_1.len() + slice_2.len() < payload_length {
|
||||
return Err(EIO);
|
||||
}
|
||||
|
||||
// Cut the message slices down to the actual length of the message.
|
||||
let (slice_1, slice_2) = if slice_1.len() > header.length() {
|
||||
// PANIC: we checked above that `slice_1` is at least as long as `msg_header.length()`.
|
||||
(slice_1.split_at(header.length()).0, &slice_2[0..0])
|
||||
let (slice_1, slice_2) = if slice_1.len() > payload_length {
|
||||
// PANIC: we checked above that `slice_1` is at least as long as `payload_length`.
|
||||
(slice_1.split_at(payload_length).0, &slice_2[0..0])
|
||||
} else {
|
||||
(
|
||||
slice_1,
|
||||
// PANIC: we checked above that `slice_1.len() + slice_2.len()` is at least as
|
||||
// large as `msg_header.length()`.
|
||||
slice_2.split_at(header.length() - slice_1.len()).0,
|
||||
// large as `payload_length`.
|
||||
slice_2.split_at(payload_length - slice_1.len()).0,
|
||||
)
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -141,8 +141,8 @@ unsafe impl AsBytes for GspFwWprMeta {}
|
|||
// are valid.
|
||||
unsafe impl FromBytes for GspFwWprMeta {}
|
||||
|
||||
type GspFwWprMetaBootResumeInfo = r570_144::GspFwWprMeta__bindgen_ty_1;
|
||||
type GspFwWprMetaBootInfo = r570_144::GspFwWprMeta__bindgen_ty_1__bindgen_ty_1;
|
||||
type GspFwWprMetaBootResumeInfo = bindings::GspFwWprMeta__bindgen_ty_1;
|
||||
type GspFwWprMetaBootInfo = bindings::GspFwWprMeta__bindgen_ty_1__bindgen_ty_1;
|
||||
|
||||
impl GspFwWprMeta {
|
||||
/// Fill in and return a `GspFwWprMeta` suitable for booting `gsp_firmware` using the
|
||||
|
|
@ -150,8 +150,8 @@ impl GspFwWprMeta {
|
|||
pub(crate) fn new(gsp_firmware: &GspFirmware, fb_layout: &FbLayout) -> Self {
|
||||
Self(bindings::GspFwWprMeta {
|
||||
// CAST: we want to store the bits of `GSP_FW_WPR_META_MAGIC` unmodified.
|
||||
magic: r570_144::GSP_FW_WPR_META_MAGIC as u64,
|
||||
revision: u64::from(r570_144::GSP_FW_WPR_META_REVISION),
|
||||
magic: bindings::GSP_FW_WPR_META_MAGIC as u64,
|
||||
revision: u64::from(bindings::GSP_FW_WPR_META_REVISION),
|
||||
sysmemAddrOfRadix3Elf: gsp_firmware.radix3_dma_handle(),
|
||||
sizeOfRadix3Elf: u64::from_safe_cast(gsp_firmware.size),
|
||||
sysmemAddrOfBootloader: gsp_firmware.bootloader.ucode.dma_handle(),
|
||||
|
|
@ -315,19 +315,19 @@ fn from(value: MsgFunction) -> Self {
|
|||
#[repr(u32)]
|
||||
pub(crate) enum SeqBufOpcode {
|
||||
// Core operation opcodes
|
||||
CoreReset = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET,
|
||||
CoreResume = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME,
|
||||
CoreStart = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START,
|
||||
CoreWaitForHalt = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT,
|
||||
CoreReset = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET,
|
||||
CoreResume = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME,
|
||||
CoreStart = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START,
|
||||
CoreWaitForHalt = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT,
|
||||
|
||||
// Delay opcode
|
||||
DelayUs = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US,
|
||||
DelayUs = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US,
|
||||
|
||||
// Register operation opcodes
|
||||
RegModify = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY,
|
||||
RegPoll = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL,
|
||||
RegStore = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE,
|
||||
RegWrite = r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE,
|
||||
RegModify = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY,
|
||||
RegPoll = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL,
|
||||
RegStore = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE,
|
||||
RegWrite = bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE,
|
||||
}
|
||||
|
||||
impl fmt::Display for SeqBufOpcode {
|
||||
|
|
@ -351,25 +351,25 @@ impl TryFrom<u32> for SeqBufOpcode {
|
|||
|
||||
fn try_from(value: u32) -> Result<SeqBufOpcode> {
|
||||
match value {
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET => {
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESET => {
|
||||
Ok(SeqBufOpcode::CoreReset)
|
||||
}
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME => {
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME => {
|
||||
Ok(SeqBufOpcode::CoreResume)
|
||||
}
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START => {
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_START => {
|
||||
Ok(SeqBufOpcode::CoreStart)
|
||||
}
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT => {
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_WAIT_FOR_HALT => {
|
||||
Ok(SeqBufOpcode::CoreWaitForHalt)
|
||||
}
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US => Ok(SeqBufOpcode::DelayUs),
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY => {
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_DELAY_US => Ok(SeqBufOpcode::DelayUs),
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_MODIFY => {
|
||||
Ok(SeqBufOpcode::RegModify)
|
||||
}
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL => Ok(SeqBufOpcode::RegPoll),
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE => Ok(SeqBufOpcode::RegStore),
|
||||
r570_144::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE => Ok(SeqBufOpcode::RegWrite),
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_POLL => Ok(SeqBufOpcode::RegPoll),
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_STORE => Ok(SeqBufOpcode::RegStore),
|
||||
bindings::GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_REG_WRITE => Ok(SeqBufOpcode::RegWrite),
|
||||
_ => Err(EINVAL),
|
||||
}
|
||||
}
|
||||
|
|
@ -385,7 +385,7 @@ fn from(value: SeqBufOpcode) -> Self {
|
|||
/// Wrapper for GSP sequencer register write payload.
|
||||
#[repr(transparent)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub(crate) struct RegWritePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_WRITE);
|
||||
pub(crate) struct RegWritePayload(bindings::GSP_SEQ_BUF_PAYLOAD_REG_WRITE);
|
||||
|
||||
impl RegWritePayload {
|
||||
/// Returns the register address.
|
||||
|
|
@ -408,7 +408,7 @@ unsafe impl AsBytes for RegWritePayload {}
|
|||
/// Wrapper for GSP sequencer register modify payload.
|
||||
#[repr(transparent)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub(crate) struct RegModifyPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_MODIFY);
|
||||
pub(crate) struct RegModifyPayload(bindings::GSP_SEQ_BUF_PAYLOAD_REG_MODIFY);
|
||||
|
||||
impl RegModifyPayload {
|
||||
/// Returns the register address.
|
||||
|
|
@ -436,7 +436,7 @@ unsafe impl AsBytes for RegModifyPayload {}
|
|||
/// Wrapper for GSP sequencer register poll payload.
|
||||
#[repr(transparent)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub(crate) struct RegPollPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_POLL);
|
||||
pub(crate) struct RegPollPayload(bindings::GSP_SEQ_BUF_PAYLOAD_REG_POLL);
|
||||
|
||||
impl RegPollPayload {
|
||||
/// Returns the register address.
|
||||
|
|
@ -469,7 +469,7 @@ unsafe impl AsBytes for RegPollPayload {}
|
|||
/// Wrapper for GSP sequencer delay payload.
|
||||
#[repr(transparent)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub(crate) struct DelayUsPayload(r570_144::GSP_SEQ_BUF_PAYLOAD_DELAY_US);
|
||||
pub(crate) struct DelayUsPayload(bindings::GSP_SEQ_BUF_PAYLOAD_DELAY_US);
|
||||
|
||||
impl DelayUsPayload {
|
||||
/// Returns the delay value in microseconds.
|
||||
|
|
@ -487,7 +487,7 @@ unsafe impl AsBytes for DelayUsPayload {}
|
|||
/// Wrapper for GSP sequencer register store payload.
|
||||
#[repr(transparent)]
|
||||
#[derive(Copy, Clone)]
|
||||
pub(crate) struct RegStorePayload(r570_144::GSP_SEQ_BUF_PAYLOAD_REG_STORE);
|
||||
pub(crate) struct RegStorePayload(bindings::GSP_SEQ_BUF_PAYLOAD_REG_STORE);
|
||||
|
||||
impl RegStorePayload {
|
||||
/// Returns the register address.
|
||||
|
|
@ -510,7 +510,7 @@ unsafe impl AsBytes for RegStorePayload {}
|
|||
|
||||
/// Wrapper for GSP sequencer buffer command.
|
||||
#[repr(transparent)]
|
||||
pub(crate) struct SequencerBufferCmd(r570_144::GSP_SEQUENCER_BUFFER_CMD);
|
||||
pub(crate) struct SequencerBufferCmd(bindings::GSP_SEQUENCER_BUFFER_CMD);
|
||||
|
||||
impl SequencerBufferCmd {
|
||||
/// Returns the opcode as a `SeqBufOpcode` enum, or error if invalid.
|
||||
|
|
@ -612,7 +612,7 @@ unsafe impl AsBytes for SequencerBufferCmd {}
|
|||
|
||||
/// Wrapper for GSP run CPU sequencer RPC.
|
||||
#[repr(transparent)]
|
||||
pub(crate) struct RunCpuSequencer(r570_144::rpc_run_cpu_sequencer_v17_00);
|
||||
pub(crate) struct RunCpuSequencer(bindings::rpc_run_cpu_sequencer_v17_00);
|
||||
|
||||
impl RunCpuSequencer {
|
||||
/// Returns the command index.
|
||||
|
|
@ -797,13 +797,6 @@ fn init(cmd_size: usize, function: MsgFunction) -> impl Init<Self, Error> {
|
|||
}
|
||||
}
|
||||
|
||||
// SAFETY: We can't derive the Zeroable trait for this binding because the
|
||||
// procedural macro doesn't support the syntax used by bindgen to create the
|
||||
// __IncompleteArrayField types. So instead we implement it here, which is safe
|
||||
// because these are explicitly padded structures only containing types for
|
||||
// which any bit pattern, including all zeros, is valid.
|
||||
unsafe impl Zeroable for bindings::rpc_message_header_v {}
|
||||
|
||||
/// GSP Message Element.
|
||||
///
|
||||
/// This is essentially a message header expected to be followed by the message data.
|
||||
|
|
@ -853,11 +846,16 @@ pub(crate) fn set_checksum(&mut self, checksum: u32) {
|
|||
self.inner.checkSum = checksum;
|
||||
}
|
||||
|
||||
/// Returns the total length of the message.
|
||||
/// Returns the length of the message's payload.
|
||||
pub(crate) fn payload_length(&self) -> usize {
|
||||
// `rpc.length` includes the length of the RPC message header.
|
||||
num::u32_as_usize(self.inner.rpc.length)
|
||||
.saturating_sub(size_of::<bindings::rpc_message_header_v>())
|
||||
}
|
||||
|
||||
/// Returns the total length of the message, message and RPC headers included.
|
||||
pub(crate) fn length(&self) -> usize {
|
||||
// `rpc.length` includes the length of the GspRpcHeader but not the message header.
|
||||
size_of::<Self>() - size_of::<bindings::rpc_message_header_v>()
|
||||
+ num::u32_as_usize(self.inner.rpc.length)
|
||||
size_of::<Self>() + self.payload_length()
|
||||
}
|
||||
|
||||
// Returns the sequence number of the message.
|
||||
|
|
|
|||
|
|
@ -24,8 +24,11 @@
|
|||
unreachable_pub,
|
||||
unsafe_op_in_unsafe_fn
|
||||
)]
|
||||
use kernel::{
|
||||
ffi,
|
||||
prelude::Zeroable, //
|
||||
};
|
||||
use kernel::ffi;
|
||||
use pin_init::MaybeZeroable;
|
||||
|
||||
include!("r570_144/bindings.rs");
|
||||
|
||||
// SAFETY: This type has a size of zero, so its inclusion into another type should not affect their
|
||||
// ability to implement `Zeroable`.
|
||||
unsafe impl<T> kernel::prelude::Zeroable for __IncompleteArrayField<T> {}
|
||||
|
|
|
|||
|
|
@ -320,11 +320,12 @@ fn fmt(&self, fmt: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
|
|||
pub const NV_VGPU_MSG_EVENT_NUM_EVENTS: _bindgen_ty_3 = 4131;
|
||||
pub type _bindgen_ty_3 = ffi::c_uint;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS {
|
||||
pub totalVFs: u32_,
|
||||
pub firstVfOffset: u32_,
|
||||
pub vfFeatureMask: u32_,
|
||||
pub __bindgen_padding_0: [u8; 4usize],
|
||||
pub FirstVFBar0Address: u64_,
|
||||
pub FirstVFBar1Address: u64_,
|
||||
pub FirstVFBar2Address: u64_,
|
||||
|
|
@ -340,23 +341,26 @@ pub struct NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS {
|
|||
pub bClientRmAllocatedCtxBuffer: u8_,
|
||||
pub bNonPowerOf2ChannelCountSupported: u8_,
|
||||
pub bVfResizableBAR1Supported: u8_,
|
||||
pub __bindgen_padding_1: [u8; 7usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS {
|
||||
pub BoardID: u32_,
|
||||
pub chipSKU: [ffi::c_char; 9usize],
|
||||
pub chipSKUMod: [ffi::c_char; 5usize],
|
||||
pub __bindgen_padding_0: [u8; 2usize],
|
||||
pub skuConfigVersion: u32_,
|
||||
pub project: [ffi::c_char; 5usize],
|
||||
pub projectSKU: [ffi::c_char; 5usize],
|
||||
pub CDP: [ffi::c_char; 6usize],
|
||||
pub projectSKUMod: [ffi::c_char; 2usize],
|
||||
pub __bindgen_padding_1: [u8; 2usize],
|
||||
pub businessCycle: u32_,
|
||||
}
|
||||
pub type NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG = [u8_; 17usize];
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO {
|
||||
pub base: u64_,
|
||||
pub limit: u64_,
|
||||
|
|
@ -368,13 +372,14 @@ pub struct NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO {
|
|||
pub blackList: NV2080_CTRL_CMD_FB_GET_FB_REGION_SURFACE_MEM_TYPE_FLAG,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS {
|
||||
pub numFBRegions: u32_,
|
||||
pub __bindgen_padding_0: [u8; 4usize],
|
||||
pub fbRegion: [NV2080_CTRL_CMD_FB_GET_FB_REGION_FB_REGION_INFO; 16usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, MaybeZeroable)]
|
||||
pub struct NV2080_CTRL_GPU_GET_GID_INFO_PARAMS {
|
||||
pub index: u32_,
|
||||
pub flags: u32_,
|
||||
|
|
@ -391,14 +396,14 @@ fn default() -> Self {
|
|||
}
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct DOD_METHOD_DATA {
|
||||
pub status: u32_,
|
||||
pub acpiIdListLen: u32_,
|
||||
pub acpiIdList: [u32_; 16usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct JT_METHOD_DATA {
|
||||
pub status: u32_,
|
||||
pub jtCaps: u32_,
|
||||
|
|
@ -407,14 +412,14 @@ pub struct JT_METHOD_DATA {
|
|||
pub __bindgen_padding_0: u8,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct MUX_METHOD_DATA_ELEMENT {
|
||||
pub acpiId: u32_,
|
||||
pub mode: u32_,
|
||||
pub status: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct MUX_METHOD_DATA {
|
||||
pub tableLen: u32_,
|
||||
pub acpiIdMuxModeTable: [MUX_METHOD_DATA_ELEMENT; 16usize],
|
||||
|
|
@ -422,13 +427,13 @@ pub struct MUX_METHOD_DATA {
|
|||
pub acpiIdMuxStateTable: [MUX_METHOD_DATA_ELEMENT; 16usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct CAPS_METHOD_DATA {
|
||||
pub status: u32_,
|
||||
pub optimusCaps: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct ACPI_METHOD_DATA {
|
||||
pub bValid: u8_,
|
||||
pub __bindgen_padding_0: [u8; 3usize],
|
||||
|
|
@ -438,20 +443,20 @@ pub struct ACPI_METHOD_DATA {
|
|||
pub capsMethodData: CAPS_METHOD_DATA,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS {
|
||||
pub headIndex: u32_,
|
||||
pub maxHResolution: u32_,
|
||||
pub maxVResolution: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS {
|
||||
pub numHeads: u32_,
|
||||
pub maxNumHeads: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct BUSINFO {
|
||||
pub deviceID: u16_,
|
||||
pub vendorID: u16_,
|
||||
|
|
@ -461,7 +466,7 @@ pub struct BUSINFO {
|
|||
pub __bindgen_padding_0: u8,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_VF_INFO {
|
||||
pub totalVFs: u32_,
|
||||
pub firstVFOffset: u32_,
|
||||
|
|
@ -474,34 +479,37 @@ pub struct GSP_VF_INFO {
|
|||
pub __bindgen_padding_0: [u8; 5usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_PCIE_CONFIG_REG {
|
||||
pub linkCap: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct EcidManufacturingInfo {
|
||||
pub ecidLow: u32_,
|
||||
pub ecidHigh: u32_,
|
||||
pub ecidExtended: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct FW_WPR_LAYOUT_OFFSET {
|
||||
pub nonWprHeapOffset: u64_,
|
||||
pub frtsOffset: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[derive(Debug, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspStaticConfigInfo_t {
|
||||
pub grCapsBits: [u8_; 23usize],
|
||||
pub __bindgen_padding_0: u8,
|
||||
pub gidInfo: NV2080_CTRL_GPU_GET_GID_INFO_PARAMS,
|
||||
pub SKUInfo: NV2080_CTRL_BIOS_GET_SKU_INFO_PARAMS,
|
||||
pub __bindgen_padding_1: [u8; 4usize],
|
||||
pub fbRegionInfoParams: NV2080_CTRL_CMD_FB_GET_FB_REGION_INFO_PARAMS,
|
||||
pub sriovCaps: NV0080_CTRL_GPU_GET_SRIOV_CAPS_PARAMS,
|
||||
pub sriovMaxGfid: u32_,
|
||||
pub engineCaps: [u32_; 3usize],
|
||||
pub poisonFuseEnabled: u8_,
|
||||
pub __bindgen_padding_2: [u8; 7usize],
|
||||
pub fb_length: u64_,
|
||||
pub fbio_mask: u64_,
|
||||
pub fb_bus_width: u32_,
|
||||
|
|
@ -527,16 +535,20 @@ pub struct GspStaticConfigInfo_t {
|
|||
pub bIsMigSupported: u8_,
|
||||
pub RTD3GC6TotalBoardPower: u16_,
|
||||
pub RTD3GC6PerstDelay: u16_,
|
||||
pub __bindgen_padding_3: [u8; 2usize],
|
||||
pub bar1PdeBase: u64_,
|
||||
pub bar2PdeBase: u64_,
|
||||
pub bVbiosValid: u8_,
|
||||
pub __bindgen_padding_4: [u8; 3usize],
|
||||
pub vbiosSubVendor: u32_,
|
||||
pub vbiosSubDevice: u32_,
|
||||
pub bPageRetirementSupported: u8_,
|
||||
pub bSplitVasBetweenServerClientRm: u8_,
|
||||
pub bClRootportNeedsNosnoopWAR: u8_,
|
||||
pub __bindgen_padding_5: u8,
|
||||
pub displaylessMaxHeads: VIRTUAL_DISPLAY_GET_NUM_HEADS_PARAMS,
|
||||
pub displaylessMaxResolution: VIRTUAL_DISPLAY_GET_MAX_RESOLUTION_PARAMS,
|
||||
pub __bindgen_padding_6: [u8; 4usize],
|
||||
pub displaylessMaxPixels: u64_,
|
||||
pub hInternalClient: u32_,
|
||||
pub hInternalDevice: u32_,
|
||||
|
|
@ -558,7 +570,7 @@ fn default() -> Self {
|
|||
}
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspSystemInfo {
|
||||
pub gpuPhysAddr: u64_,
|
||||
pub gpuPhysFbAddr: u64_,
|
||||
|
|
@ -615,7 +627,7 @@ pub struct GspSystemInfo {
|
|||
pub hostPageSize: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct MESSAGE_QUEUE_INIT_ARGUMENTS {
|
||||
pub sharedMemPhysAddr: u64_,
|
||||
pub pageTableEntryCount: u32_,
|
||||
|
|
@ -624,7 +636,7 @@ pub struct MESSAGE_QUEUE_INIT_ARGUMENTS {
|
|||
pub statQueueOffset: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SR_INIT_ARGUMENTS {
|
||||
pub oldLevel: u32_,
|
||||
pub flags: u32_,
|
||||
|
|
@ -632,7 +644,7 @@ pub struct GSP_SR_INIT_ARGUMENTS {
|
|||
pub __bindgen_padding_0: [u8; 3usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_ARGUMENTS_CACHED {
|
||||
pub messageQueueInitArguments: MESSAGE_QUEUE_INIT_ARGUMENTS,
|
||||
pub srInitArguments: GSP_SR_INIT_ARGUMENTS,
|
||||
|
|
@ -642,13 +654,13 @@ pub struct GSP_ARGUMENTS_CACHED {
|
|||
pub profilerArgs: GSP_ARGUMENTS_CACHED__bindgen_ty_1,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_ARGUMENTS_CACHED__bindgen_ty_1 {
|
||||
pub pa: u64_,
|
||||
pub size: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Zeroable)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub union rpc_message_rpc_union_field_v03_00 {
|
||||
pub spare: u32_,
|
||||
pub cpuRmGfid: u32_,
|
||||
|
|
@ -664,6 +676,7 @@ fn default() -> Self {
|
|||
}
|
||||
pub type rpc_message_rpc_union_field_v = rpc_message_rpc_union_field_v03_00;
|
||||
#[repr(C)]
|
||||
#[derive(MaybeZeroable)]
|
||||
pub struct rpc_message_header_v03_00 {
|
||||
pub header_version: u32_,
|
||||
pub signature: u32_,
|
||||
|
|
@ -686,7 +699,7 @@ fn default() -> Self {
|
|||
}
|
||||
pub type rpc_message_header_v = rpc_message_header_v03_00;
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Zeroable)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspFwWprMeta {
|
||||
pub magic: u64_,
|
||||
pub revision: u64_,
|
||||
|
|
@ -721,19 +734,19 @@ pub struct GspFwWprMeta {
|
|||
pub verified: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Zeroable)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub union GspFwWprMeta__bindgen_ty_1 {
|
||||
pub __bindgen_anon_1: GspFwWprMeta__bindgen_ty_1__bindgen_ty_1,
|
||||
pub __bindgen_anon_2: GspFwWprMeta__bindgen_ty_1__bindgen_ty_2,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspFwWprMeta__bindgen_ty_1__bindgen_ty_1 {
|
||||
pub sysmemAddrOfSignature: u64_,
|
||||
pub sizeOfSignature: u64_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspFwWprMeta__bindgen_ty_1__bindgen_ty_2 {
|
||||
pub gspFwHeapFreeListWprOffset: u32_,
|
||||
pub unused0: u32_,
|
||||
|
|
@ -749,13 +762,13 @@ fn default() -> Self {
|
|||
}
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone, Zeroable)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub union GspFwWprMeta__bindgen_ty_2 {
|
||||
pub __bindgen_anon_1: GspFwWprMeta__bindgen_ty_2__bindgen_ty_1,
|
||||
pub __bindgen_anon_2: GspFwWprMeta__bindgen_ty_2__bindgen_ty_2,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspFwWprMeta__bindgen_ty_2__bindgen_ty_1 {
|
||||
pub partitionRpcAddr: u64_,
|
||||
pub partitionRpcRequestOffset: u16_,
|
||||
|
|
@ -767,7 +780,7 @@ pub struct GspFwWprMeta__bindgen_ty_2__bindgen_ty_1 {
|
|||
pub lsUcodeVersion: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GspFwWprMeta__bindgen_ty_2__bindgen_ty_2 {
|
||||
pub partitionRpcPadding: [u32_; 4usize],
|
||||
pub sysmemAddrOfCrashReportQueue: u64_,
|
||||
|
|
@ -802,7 +815,7 @@ fn default() -> Self {
|
|||
pub const LibosMemoryRegionLoc_LIBOS_MEMORY_REGION_LOC_FB: LibosMemoryRegionLoc = 2;
|
||||
pub type LibosMemoryRegionLoc = ffi::c_uint;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct LibosMemoryRegionInitArgument {
|
||||
pub id8: LibosAddress,
|
||||
pub pa: LibosAddress,
|
||||
|
|
@ -812,7 +825,7 @@ pub struct LibosMemoryRegionInitArgument {
|
|||
pub __bindgen_padding_0: [u8; 6usize],
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct PACKED_REGISTRY_ENTRY {
|
||||
pub nameOffset: u32_,
|
||||
pub type_: u8_,
|
||||
|
|
@ -821,14 +834,14 @@ pub struct PACKED_REGISTRY_ENTRY {
|
|||
pub length: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default)]
|
||||
#[derive(Debug, Default, MaybeZeroable)]
|
||||
pub struct PACKED_REGISTRY_TABLE {
|
||||
pub size: u32_,
|
||||
pub numEntries: u32_,
|
||||
pub entries: __IncompleteArrayField<PACKED_REGISTRY_ENTRY>,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct msgqTxHeader {
|
||||
pub version: u32_,
|
||||
pub size: u32_,
|
||||
|
|
@ -840,13 +853,13 @@ pub struct msgqTxHeader {
|
|||
pub entryOff: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone, Zeroable)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct msgqRxHeader {
|
||||
pub readPtr: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[repr(align(8))]
|
||||
#[derive(Zeroable)]
|
||||
#[derive(MaybeZeroable)]
|
||||
pub struct GSP_MSG_QUEUE_ELEMENT {
|
||||
pub authTagBuffer: [u8_; 16usize],
|
||||
pub aadBuffer: [u8_; 16usize],
|
||||
|
|
@ -866,7 +879,7 @@ fn default() -> Self {
|
|||
}
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default)]
|
||||
#[derive(Debug, Default, MaybeZeroable)]
|
||||
pub struct rpc_run_cpu_sequencer_v17_00 {
|
||||
pub bufferSizeDWord: u32_,
|
||||
pub cmdIndex: u32_,
|
||||
|
|
@ -884,20 +897,20 @@ pub struct rpc_run_cpu_sequencer_v17_00 {
|
|||
pub const GSP_SEQ_BUF_OPCODE_GSP_SEQ_BUF_OPCODE_CORE_RESUME: GSP_SEQ_BUF_OPCODE = 8;
|
||||
pub type GSP_SEQ_BUF_OPCODE = ffi::c_uint;
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQ_BUF_PAYLOAD_REG_WRITE {
|
||||
pub addr: u32_,
|
||||
pub val: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQ_BUF_PAYLOAD_REG_MODIFY {
|
||||
pub addr: u32_,
|
||||
pub mask: u32_,
|
||||
pub val: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQ_BUF_PAYLOAD_REG_POLL {
|
||||
pub addr: u32_,
|
||||
pub mask: u32_,
|
||||
|
|
@ -906,24 +919,24 @@ pub struct GSP_SEQ_BUF_PAYLOAD_REG_POLL {
|
|||
pub error: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQ_BUF_PAYLOAD_DELAY_US {
|
||||
pub val: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Debug, Default, Copy, Clone)]
|
||||
#[derive(Debug, Default, Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQ_BUF_PAYLOAD_REG_STORE {
|
||||
pub addr: u32_,
|
||||
pub index: u32_,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub struct GSP_SEQUENCER_BUFFER_CMD {
|
||||
pub opCode: GSP_SEQ_BUF_OPCODE,
|
||||
pub payload: GSP_SEQUENCER_BUFFER_CMD__bindgen_ty_1,
|
||||
}
|
||||
#[repr(C)]
|
||||
#[derive(Copy, Clone)]
|
||||
#[derive(Copy, Clone, MaybeZeroable)]
|
||||
pub union GSP_SEQUENCER_BUFFER_CMD__bindgen_ty_1 {
|
||||
pub regWrite: GSP_SEQ_BUF_PAYLOAD_REG_WRITE,
|
||||
pub regModify: GSP_SEQ_BUF_PAYLOAD_REG_MODIFY,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user