1212//! itself with version dependence.
1313
1414use core:: any:: Any ;
15+ use core:: ops:: Range ;
1516use core:: sync:: atomic:: { AtomicBool , AtomicU64 , Ordering } ;
1617use core:: time:: Duration ;
1718
@@ -69,33 +70,19 @@ const DOORBELL_DEVCTRL: u64 = 0x11;
6970
7071// Upper kernel half VA address ranges.
7172/// Private (cached) firmware structure VA range base.
72- const IOVA_KERN_PRIV_BASE : u64 = 0xffffffa000000000 ;
73- /// Private (cached) firmware structure VA range top.
74- const IOVA_KERN_PRIV_TOP : u64 = 0xffffffa5ffffffff ;
73+ const IOVA_KERN_PRIV_RANGE : Range < u64 > = 0xffffffa000000000 ..0xffffffa600000000 ;
7574/// Private (cached) GPU-RO firmware structure VA range base.
76- const IOVA_KERN_GPU_RO_BASE : u64 = 0xffffffa600000000 ;
77- /// Private (cached) GPU-RO firmware structure VA range top.
78- const IOVA_KERN_GPU_RO_TOP : u64 = 0xffffffa7ffffffff ;
75+ const IOVA_KERN_GPU_RO_RANGE : Range < u64 > = 0xffffffa600000000 ..0xffffffa800000000 ;
7976/// Shared (uncached) firmware structure VA range base.
80- const IOVA_KERN_SHARED_BASE : u64 = 0xffffffa800000000 ;
81- /// Shared (uncached) firmware structure VA range top.
82- const IOVA_KERN_SHARED_TOP : u64 = 0xffffffa9ffffffff ;
77+ const IOVA_KERN_SHARED_RANGE : Range < u64 > = 0xffffffa800000000 ..0xffffffaa00000000 ;
8378/// Shared (uncached) read-only firmware structure VA range base.
84- const IOVA_KERN_SHARED_RO_BASE : u64 = 0xffffffaa00000000 ;
85- /// Shared (uncached) read-only firmware structure VA range top.
86- const IOVA_KERN_SHARED_RO_TOP : u64 = 0xffffffabffffffff ;
79+ const IOVA_KERN_SHARED_RO_RANGE : Range < u64 > = 0xffffffaa00000000 ..0xffffffac00000000 ;
8780/// GPU/FW shared structure VA range base.
88- const IOVA_KERN_GPU_BASE : u64 = 0xffffffac00000000 ;
89- /// GPU/FW shared structure VA range top.
90- const IOVA_KERN_GPU_TOP : u64 = 0xffffffadffffffff ;
81+ const IOVA_KERN_GPU_RANGE : Range < u64 > = 0xffffffac00000000 ..0xffffffae00000000 ;
9182/// GPU/FW shared structure VA range base.
92- const IOVA_KERN_RTKIT_BASE : u64 = 0xffffffae00000000 ;
93- /// GPU/FW shared structure VA range top.
94- const IOVA_KERN_RTKIT_TOP : u64 = 0xffffffae0fffffff ;
83+ const IOVA_KERN_RTKIT_RANGE : Range < u64 > = 0xffffffae00000000 ..0xffffffae10000000 ;
9584/// FW MMIO VA range base.
96- const IOVA_KERN_MMIO_BASE : u64 = 0xffffffaf00000000 ;
97- /// FW MMIO VA range top.
98- const IOVA_KERN_MMIO_TOP : u64 = 0xffffffafffffffff ;
85+ const IOVA_KERN_MMIO_RANGE : Range < u64 > = 0xffffffaf00000000 ..0xffffffb000000000 ;
9986
10087/// GPU/FW buffer manager control address (context 0 low)
10188pub ( crate ) const IOVA_KERN_GPU_BUFMGR_LOW : u64 = 0x20_0000_0000 ;
@@ -355,8 +342,7 @@ impl rtkit::Operations for GpuManager::ver {
355342 obj. vmap ( ) ?;
356343 let mapping = obj. map_into_range (
357344 data. uat . kernel_vm ( ) ,
358- IOVA_KERN_RTKIT_BASE ,
359- IOVA_KERN_RTKIT_TOP ,
345+ IOVA_KERN_RTKIT_RANGE ,
360346 mmu:: UAT_PGSZ as u64 ,
361347 mmu:: PROT_FW_SHARED_RW ,
362348 true ,
@@ -382,8 +368,7 @@ impl GpuManager::ver {
382368 private : alloc:: DefaultAllocator :: new (
383369 dev,
384370 uat. kernel_vm ( ) ,
385- IOVA_KERN_PRIV_BASE ,
386- IOVA_KERN_PRIV_TOP ,
371+ IOVA_KERN_PRIV_RANGE ,
387372 0x80 ,
388373 mmu:: PROT_FW_PRIV_RW ,
389374 1024 * 1024 ,
@@ -394,8 +379,7 @@ impl GpuManager::ver {
394379 shared : alloc:: DefaultAllocator :: new (
395380 dev,
396381 uat. kernel_vm ( ) ,
397- IOVA_KERN_SHARED_BASE ,
398- IOVA_KERN_SHARED_TOP ,
382+ IOVA_KERN_SHARED_RANGE ,
399383 0x80 ,
400384 mmu:: PROT_FW_SHARED_RW ,
401385 1024 * 1024 ,
@@ -406,8 +390,7 @@ impl GpuManager::ver {
406390 shared_ro : alloc:: DefaultAllocator :: new (
407391 dev,
408392 uat. kernel_vm ( ) ,
409- IOVA_KERN_SHARED_RO_BASE ,
410- IOVA_KERN_SHARED_RO_TOP ,
393+ IOVA_KERN_SHARED_RO_RANGE ,
411394 0x80 ,
412395 mmu:: PROT_FW_SHARED_RO ,
413396 64 * 1024 ,
@@ -418,8 +401,7 @@ impl GpuManager::ver {
418401 gpu : alloc:: DefaultAllocator :: new (
419402 dev,
420403 uat. kernel_vm ( ) ,
421- IOVA_KERN_GPU_BASE ,
422- IOVA_KERN_GPU_TOP ,
404+ IOVA_KERN_GPU_RANGE ,
423405 0x80 ,
424406 mmu:: PROT_GPU_FW_SHARED_RW ,
425407 64 * 1024 ,
@@ -430,8 +412,7 @@ impl GpuManager::ver {
430412 gpu_ro : alloc:: DefaultAllocator :: new (
431413 dev,
432414 uat. kernel_vm ( ) ,
433- IOVA_KERN_GPU_RO_BASE ,
434- IOVA_KERN_GPU_RO_TOP ,
415+ IOVA_KERN_GPU_RO_RANGE ,
435416 0x80 ,
436417 mmu:: PROT_GPU_RO_FW_PRIV_RW ,
437418 1024 * 1024 ,
@@ -590,7 +571,7 @@ impl GpuManager::ver {
590571 let addr = * next_ref;
591572 let next = addr + ( size + mmu:: UAT_PGSZ ) as u64 ;
592573
593- assert ! ( next - 1 <= IOVA_KERN_MMIO_TOP ) ;
574+ assert ! ( next <= IOVA_KERN_MMIO_RANGE . end ) ;
594575
595576 * next_ref = next;
596577
@@ -687,7 +668,7 @@ impl GpuManager::ver {
687668 initdata: * initdata,
688669 uat: * uat,
689670 io_mappings: Vec :: new( ) ,
690- next_mmio_iova: IOVA_KERN_MMIO_BASE ,
671+ next_mmio_iova: IOVA_KERN_MMIO_RANGE . start ,
691672 rtkit <- Mutex :: new_named( None , c_str!( "rtkit" ) ) ,
692673 crashed: AtomicBool :: new( false ) ,
693674 event_manager,
0 commit comments