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 ,
@@ -593,7 +574,7 @@ impl GpuManager::ver {
593574 let addr = * next_ref;
594575 let next = addr + ( size + mmu:: UAT_PGSZ ) as u64 ;
595576
596- assert ! ( next - 1 <= IOVA_KERN_MMIO_TOP ) ;
577+ assert ! ( next <= IOVA_KERN_MMIO_RANGE . end ) ;
597578
598579 * next_ref = next;
599580
@@ -703,34 +684,37 @@ impl GpuManager::ver {
703684 ) ?;
704685
705686 let alloc_ref = & mut alloc;
706- let tx_channels = Box :: init ( try_init ! ( TxChannels :: ver {
707- device_control: channel:: DeviceControlChannel :: ver:: new( dev, alloc_ref) ?,
708- } ) ) ?;
709-
710- let x = UniqueArc :: pin_init ( try_pin_init ! ( GpuManager :: ver {
711- dev: dev. into( ) ,
712- cfg,
713- dyncfg: * dyncfg,
714- initdata: * initdata,
715- uat: * uat,
716- io_mappings: Vec :: new( ) ,
717- next_mmio_iova: IOVA_KERN_MMIO_BASE ,
718- rtkit <- Mutex :: new_named( None , c_str!( "rtkit" ) ) ,
719- crashed: AtomicBool :: new( false ) ,
720- event_manager,
721- alloc <- Mutex :: new_named( alloc, c_str!( "alloc" ) ) ,
722- fwctl_channel <- Mutex :: new_named( fwctl_channel, c_str!( "fwctl_channel" ) ) ,
723- rx_channels <- Mutex :: new_named( * rx_channels, c_str!( "rx_channels" ) ) ,
724- tx_channels <- Mutex :: new_named( * tx_channels, c_str!( "tx_channels" ) ) ,
725- pipes,
726- buffer_mgr,
727- ids: Default :: default ( ) ,
728- garbage_work <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_work" ) ) ,
729- garbage_contexts <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_contexts" ) ) ,
730- } ) ) ?;
687+ let tx_channels = Box :: init (
688+ try_init ! ( TxChannels :: ver {
689+ device_control: channel:: DeviceControlChannel :: ver:: new( dev, alloc_ref) ?,
690+ } ) ,
691+ GFP_KERNEL ,
692+ ) ?;
731693
732- Ok ( x)
733- }
694+ let x = UniqueArc :: pin_init (
695+ try_pin_init ! ( GpuManager :: ver {
696+ dev: dev. into( ) ,
697+ cfg,
698+ dyncfg: * dyncfg,
699+ initdata: * initdata,
700+ uat: * uat,
701+ io_mappings: Vec :: new( ) ,
702+ next_mmio_iova: IOVA_KERN_MMIO_RANGE . start,
703+ rtkit <- Mutex :: new_named( None , c_str!( "rtkit" ) ) ,
704+ crashed: AtomicBool :: new( false ) ,
705+ event_manager,
706+ alloc <- Mutex :: new_named( alloc, c_str!( "alloc" ) ) ,
707+ fwctl_channel <- Mutex :: new_named( fwctl_channel, c_str!( "fwctl_channel" ) ) ,
708+ rx_channels <- Mutex :: new_named( * rx_channels, c_str!( "rx_channels" ) ) ,
709+ tx_channels <- Mutex :: new_named( * tx_channels, c_str!( "tx_channels" ) ) ,
710+ pipes,
711+ buffer_mgr,
712+ ids: Default :: default ( ) ,
713+ garbage_work <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_work" ) ) ,
714+ garbage_contexts <- Mutex :: new_named( Vec :: new( ) , c_str!( "garbage_contexts" ) ) ,
715+ } ) ,
716+ GFP_KERNEL ,
717+ ) ?;
734718
735719 Ok ( x)
736720 }
0 commit comments