mirror of
https://github.com/mbilker/vgpu_unlock-rs.git
synced 2026-01-17 11:57:00 +01:00
lib: add PCI bus info mapping to allow custom spoofing
- Including spoofing Maxwell and Pascal cards to Turing for 19.x use
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
struct Defaults;
|
struct Defaults;
|
||||||
@@ -22,6 +24,8 @@ pub struct Config {
|
|||||||
pub unlock: bool,
|
pub unlock: bool,
|
||||||
#[serde(default = "Defaults::unlock_migration")]
|
#[serde(default = "Defaults::unlock_migration")]
|
||||||
pub unlock_migration: bool,
|
pub unlock_migration: bool,
|
||||||
|
#[serde(default)]
|
||||||
|
pub pci_info_map: Option<HashMap<u32, u32>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Config {
|
impl Default for Config {
|
||||||
@@ -30,6 +34,7 @@ impl Default for Config {
|
|||||||
Self {
|
Self {
|
||||||
unlock: Defaults::unlock(),
|
unlock: Defaults::unlock(),
|
||||||
unlock_migration: Defaults::unlock_migration(),
|
unlock_migration: Defaults::unlock_migration(),
|
||||||
|
pci_info_map: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/lib.rs
14
src/lib.rs
@@ -482,10 +482,21 @@ pub unsafe extern "C" fn ioctl(fd: RawFd, request: c_ulong, argp: *mut c_void) -
|
|||||||
let orig_device_id = params.pci_device_id;
|
let orig_device_id = params.pci_device_id;
|
||||||
let orig_sub_system_id = params.pci_sub_system_id;
|
let orig_sub_system_id = params.pci_sub_system_id;
|
||||||
|
|
||||||
|
let mapped_id = CONFIG
|
||||||
|
.pci_info_map
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|pci_info_map| pci_info_map.get(&orig_device_id));
|
||||||
|
|
||||||
let actual_device_id = (orig_device_id & 0xffff0000) >> 16;
|
let actual_device_id = (orig_device_id & 0xffff0000) >> 16;
|
||||||
let actual_sub_system_id = (orig_sub_system_id & 0xffff0000) >> 16;
|
let actual_sub_system_id = (orig_sub_system_id & 0xffff0000) >> 16;
|
||||||
|
|
||||||
let (spoofed_devid, spoofed_subsysid) = match actual_device_id {
|
let (spoofed_devid, spoofed_subsysid) = if let Some(mapped_id) = mapped_id {
|
||||||
|
let device_id = (mapped_id & 0xffff0000) >> 16;
|
||||||
|
let sub_system_id = mapped_id & 0xffff;
|
||||||
|
|
||||||
|
(device_id, sub_system_id)
|
||||||
|
} else {
|
||||||
|
match actual_device_id {
|
||||||
// Maxwell
|
// Maxwell
|
||||||
0x1340..=0x13bd | 0x174d..=0x179c => {
|
0x1340..=0x13bd | 0x174d..=0x179c => {
|
||||||
// Tesla M10
|
// Tesla M10
|
||||||
@@ -520,6 +531,7 @@ pub unsafe extern "C" fn ioctl(fd: RawFd, request: c_ulong, argp: *mut c_void) -
|
|||||||
(0x2230, actual_sub_system_id)
|
(0x2230, actual_sub_system_id)
|
||||||
}
|
}
|
||||||
_ => (actual_device_id, actual_sub_system_id),
|
_ => (actual_device_id, actual_sub_system_id),
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
params.pci_device_id = (orig_device_id & 0xffff) | (spoofed_devid << 16);
|
params.pci_device_id = (orig_device_id & 0xffff) | (spoofed_devid << 16);
|
||||||
|
|||||||
Reference in New Issue
Block a user