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
@@ -68,33 +69,19 @@ const DOORBELL_DEVCTRL: u64 = 0x11;
6869
6970// Upper kernel half VA address ranges.
7071/// Private (cached) firmware structure VA range base.
71- const IOVA_KERN_PRIV_BASE : u64 = 0xffffffa000000000 ;
72- /// Private (cached) firmware structure VA range top.
73- const IOVA_KERN_PRIV_TOP : u64 = 0xffffffa5ffffffff ;
72+ const IOVA_KERN_PRIV_RANGE : Range < u64 > = 0xffffffa000000000 ..0xffffffa600000000 ;
7473/// Private (cached) GPU-RO firmware structure VA range base.
75- const IOVA_KERN_GPU_RO_BASE : u64 = 0xffffffa600000000 ;
76- /// Private (cached) GPU-RO firmware structure VA range top.
77- const IOVA_KERN_GPU_RO_TOP : u64 = 0xffffffa7ffffffff ;
74+ const IOVA_KERN_GPU_RO_RANGE : Range < u64 > = 0xffffffa600000000 ..0xffffffa800000000 ;
7875/// Shared (uncached) firmware structure VA range base.
79- const IOVA_KERN_SHARED_BASE : u64 = 0xffffffa800000000 ;
80- /// Shared (uncached) firmware structure VA range top.
81- const IOVA_KERN_SHARED_TOP : u64 = 0xffffffa9ffffffff ;
76+ const IOVA_KERN_SHARED_RANGE : Range < u64 > = 0xffffffa800000000 ..0xffffffaa00000000 ;
8277/// Shared (uncached) read-only firmware structure VA range base.
83- const IOVA_KERN_SHARED_RO_BASE : u64 = 0xffffffaa00000000 ;
84- /// Shared (uncached) read-only firmware structure VA range top.
85- const IOVA_KERN_SHARED_RO_TOP : u64 = 0xffffffabffffffff ;
78+ const IOVA_KERN_SHARED_RO_RANGE : Range < u64 > = 0xffffffaa00000000 ..0xffffffac00000000 ;
8679/// GPU/FW shared structure VA range base.
87- const IOVA_KERN_GPU_BASE : u64 = 0xffffffac00000000 ;
88- /// GPU/FW shared structure VA range top.
89- const IOVA_KERN_GPU_TOP : u64 = 0xffffffadffffffff ;
80+ const IOVA_KERN_GPU_RANGE : Range < u64 > = 0xffffffac00000000 ..0xffffffae00000000 ;
9081/// GPU/FW shared structure VA range base.
91- const IOVA_KERN_RTKIT_BASE : u64 = 0xffffffae00000000 ;
92- /// GPU/FW shared structure VA range top.
93- const IOVA_KERN_RTKIT_TOP : u64 = 0xffffffae0fffffff ;
82+ const IOVA_KERN_RTKIT_RANGE : Range < u64 > = 0xffffffae00000000 ..0xffffffae10000000 ;
9483/// FW MMIO VA range base.
95- const IOVA_KERN_MMIO_BASE : u64 = 0xffffffaf00000000 ;
96- /// FW MMIO VA range top.
97- const IOVA_KERN_MMIO_TOP : u64 = 0xffffffafffffffff ;
84+ const IOVA_KERN_MMIO_RANGE : Range < u64 > = 0xffffffaf00000000 ..0xffffffb000000000 ;
9885
9986/// GPU/FW buffer manager control address (context 0 low)
10087pub ( crate ) const IOVA_KERN_GPU_BUFMGR_LOW : u64 = 0x20_0000_0000 ;
@@ -354,8 +341,7 @@ impl rtkit::Operations for GpuManager::ver {
354341 obj. vmap ( ) ?;
355342 let mapping = obj. map_into_range (
356343 data. uat . kernel_vm ( ) ,
357- IOVA_KERN_RTKIT_BASE ,
358- IOVA_KERN_RTKIT_TOP ,
344+ IOVA_KERN_RTKIT_RANGE ,
359345 mmu:: UAT_PGSZ as u64 ,
360346 mmu:: PROT_FW_SHARED_RW ,
361347 true ,
@@ -381,8 +367,7 @@ impl GpuManager::ver {
381367 private : alloc:: DefaultAllocator :: new (
382368 dev,
383369 uat. kernel_vm ( ) ,
384- IOVA_KERN_PRIV_BASE ,
385- IOVA_KERN_PRIV_TOP ,
370+ IOVA_KERN_PRIV_RANGE ,
386371 0x80 ,
387372 mmu:: PROT_FW_PRIV_RW ,
388373 1024 * 1024 ,
@@ -393,8 +378,7 @@ impl GpuManager::ver {
393378 shared : alloc:: DefaultAllocator :: new (
394379 dev,
395380 uat. kernel_vm ( ) ,
396- IOVA_KERN_SHARED_BASE ,
397- IOVA_KERN_SHARED_TOP ,
381+ IOVA_KERN_SHARED_RANGE ,
398382 0x80 ,
399383 mmu:: PROT_FW_SHARED_RW ,
400384 1024 * 1024 ,
@@ -405,8 +389,7 @@ impl GpuManager::ver {
405389 shared_ro : alloc:: DefaultAllocator :: new (
406390 dev,
407391 uat. kernel_vm ( ) ,
408- IOVA_KERN_SHARED_RO_BASE ,
409- IOVA_KERN_SHARED_RO_TOP ,
392+ IOVA_KERN_SHARED_RO_RANGE ,
410393 0x80 ,
411394 mmu:: PROT_FW_SHARED_RO ,
412395 64 * 1024 ,
@@ -417,8 +400,7 @@ impl GpuManager::ver {
417400 gpu : alloc:: DefaultAllocator :: new (
418401 dev,
419402 uat. kernel_vm ( ) ,
420- IOVA_KERN_GPU_BASE ,
421- IOVA_KERN_GPU_TOP ,
403+ IOVA_KERN_GPU_RANGE ,
422404 0x80 ,
423405 mmu:: PROT_GPU_FW_SHARED_RW ,
424406 64 * 1024 ,
@@ -429,8 +411,7 @@ impl GpuManager::ver {
429411 gpu_ro : alloc:: DefaultAllocator :: new (
430412 dev,
431413 uat. kernel_vm ( ) ,
432- IOVA_KERN_GPU_RO_BASE ,
433- IOVA_KERN_GPU_RO_TOP ,
414+ IOVA_KERN_GPU_RO_RANGE ,
434415 0x80 ,
435416 mmu:: PROT_GPU_RO_FW_PRIV_RW ,
436417 1024 * 1024 ,
@@ -592,7 +573,7 @@ impl GpuManager::ver {
592573 let addr = * next_ref;
593574 let next = addr + ( size + mmu:: UAT_PGSZ ) as u64 ;
594575
595- assert ! ( next - 1 <= IOVA_KERN_MMIO_TOP ) ;
576+ assert ! ( next <= IOVA_KERN_MMIO_RANGE . end ) ;
596577
597578 * next_ref = next;
598579
@@ -702,31 +683,37 @@ impl GpuManager::ver {
702683 ) ?;
703684
704685 let alloc_ref = & mut alloc;
705- let tx_channels = Box :: init ( try_init ! ( TxChannels :: ver {
706- device_control: channel:: DeviceControlChannel :: ver:: new( dev, alloc_ref) ?,
707- } ) ) ?;
708-
709- let x = UniqueArc :: pin_init ( try_pin_init ! ( GpuManager :: ver {
710- dev: dev. into( ) ,
711- cfg,
712- dyncfg: * dyncfg,
713- initdata: * initdata,
714- uat: * uat,
715- io_mappings: Vec :: new( ) ,
716- next_mmio_iova: IOVA_KERN_MMIO_BASE ,
717- rtkit <- Mutex :: new_named( None , c_str!( "rtkit" ) ) ,
718- crashed: AtomicBool :: new( false ) ,
719- event_manager,
720- alloc <- Mutex :: new_named( alloc, c_str!( "alloc" ) ) ,
721- fwctl_channel <- Mutex :: new_named( fwctl_channel, c_str!( "fwctl_channel" ) ) ,
722- rx_channels <- Mutex :: new_named( * rx_channels, c_str!( "rx_channels" ) ) ,
723- tx_channels <- Mutex :: new_named( * tx_channels, c_str!( "tx_channels" ) ) ,
724- pipes,
725- buffer_mgr,
726- ids: Default :: default ( ) ,
727- garbage_work <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_work" ) ) ,
728- garbage_contexts <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_contexts" ) ) ,
729- } ) ) ?;
686+ let tx_channels = Box :: init (
687+ try_init ! ( TxChannels :: ver {
688+ device_control: channel:: DeviceControlChannel :: ver:: new( dev, alloc_ref) ?,
689+ } ) ,
690+ GFP_KERNEL ,
691+ ) ?;
692+
693+ let x = UniqueArc :: pin_init (
694+ try_pin_init ! ( GpuManager :: ver {
695+ dev: dev. into( ) ,
696+ cfg,
697+ dyncfg: * dyncfg,
698+ initdata: * initdata,
699+ uat: * uat,
700+ io_mappings: Vec :: new( ) ,
701+ next_mmio_iova: IOVA_KERN_MMIO_RANGE . start,
702+ rtkit <- Mutex :: new_named( None , c_str!( "rtkit" ) ) ,
703+ crashed: AtomicBool :: new( false ) ,
704+ event_manager,
705+ alloc <- Mutex :: new_named( alloc, c_str!( "alloc" ) ) ,
706+ fwctl_channel <- Mutex :: new_named( fwctl_channel, c_str!( "fwctl_channel" ) ) ,
707+ rx_channels <- Mutex :: new_named( * rx_channels, c_str!( "rx_channels" ) ) ,
708+ tx_channels <- Mutex :: new_named( * tx_channels, c_str!( "tx_channels" ) ) ,
709+ pipes,
710+ buffer_mgr,
711+ ids: Default :: default ( ) ,
712+ garbage_work <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_work" ) ) ,
713+ garbage_contexts <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_contexts" ) ) ,
714+ } ) ,
715+ GFP_KERNEL ,
716+ ) ?;
730717
731718 Ok ( x)
732719 }
0 commit comments