@@ -31,6 +31,7 @@ enum Trace {
3131    Ready , 
3232    Present  {  index :  usize ,  present :  bool  } , 
3333    TemperatureReadTimeout  {  index :  usize ,  pos :  usize  } , 
34+     DimmFailure  {  index :  usize  } , 
3435} 
3536
3637ringbuf ! ( Trace ,  32 ,  Trace :: None ) ; 
@@ -263,6 +264,15 @@ impl idol_runtime::NotificationHandler for ServerImpl {
263264            } } ; 
264265        } 
265266
267+         macro_rules!  check_dimm_failure { 
268+             ( $dev: ident,  $index: expr)  => { 
269+                 let  $dev = self . dimms. dimm_pcamp. $dev( ) ; 
270+                 if  !$dev { 
271+                     ringbuf_entry!( Trace :: DimmFailure  {  index:  $index } ) ; 
272+                 } 
273+             } ; 
274+         } 
275+ 
266276        for  ( index,  present)  in  self . present . iter ( ) . cloned ( ) . enumerate ( )  { 
267277            let  bus = index / 6 ;  // FPGA bus (0 or 1) 
268278            let  dev = index % 6 ;  // device index (SDI, 0-6) 
@@ -318,6 +328,46 @@ impl idol_runtime::NotificationHandler for ServerImpl {
318328
319329                // Send the value to the sensors task 
320330                self . sensor . post_now ( DIMM_SENSORS [ index] [ pos] ,  temp_c) ; 
331+ 
332+                 match  index { 
333+                     0  => { 
334+                         check_dimm_failure ! ( pcamp_a,  0 ) ; 
335+                     } 
336+                     1  => { 
337+                         check_dimm_failure ! ( pcamp_b,  1 ) ; 
338+                     } 
339+                     2  => { 
340+                         check_dimm_failure ! ( pcamp_c,  2 ) ; 
341+                     } 
342+                     3  => { 
343+                         check_dimm_failure ! ( pcamp_d,  3 ) ; 
344+                     } 
345+                     4  => { 
346+                         check_dimm_failure ! ( pcamp_e,  4 ) ; 
347+                     } 
348+                     5  => { 
349+                         check_dimm_failure ! ( pcamp_f,  5 ) ; 
350+                     } 
351+                     6  => { 
352+                         check_dimm_failure ! ( pcamp_g,  6 ) ; 
353+                     } 
354+                     7  => { 
355+                         check_dimm_failure ! ( pcamp_h,  7 ) ; 
356+                     } 
357+                     8  => { 
358+                         check_dimm_failure ! ( pcamp_i,  8 ) ; 
359+                     } 
360+                     9  => { 
361+                         check_dimm_failure ! ( pcamp_j,  9 ) ; 
362+                     } 
363+                     10  => { 
364+                         check_dimm_failure ! ( pcamp_k,  10 ) ; 
365+                     } 
366+                     11  => { 
367+                         check_dimm_failure ! ( pcamp_l,  11 ) ; 
368+                     } 
369+                     _ => unreachable ! ( ) , 
370+                 } 
321371            } 
322372        } 
323373        set_timer_relative ( TIMER_INTERVAL ,  notifications:: TIMER_MASK ) ; 
0 commit comments