@@ -52,17 +52,17 @@ enum Trace {
5252 Programmed ,
5353
5454 Startup {
55- early_power_rdbks : fmc_periph :: EarlyPowerRdbksView ,
55+ early_power_rdbks : fmc_sequencer :: EarlyPowerRdbksView ,
5656 } ,
5757 RegStateValues {
58- seq_api_status : fmc_periph :: SeqApiStatusView ,
59- seq_raw_status : fmc_periph :: SeqRawStatusView ,
60- nic_api_status : fmc_periph :: NicApiStatusView ,
61- nic_raw_status : fmc_periph :: NicRawStatusView ,
58+ seq_api_status : fmc_sequencer :: SeqApiStatusView ,
59+ seq_raw_status : fmc_sequencer :: SeqRawStatusView ,
60+ nic_api_status : fmc_sequencer :: NicApiStatusView ,
61+ nic_raw_status : fmc_sequencer :: NicRawStatusView ,
6262 } ,
6363 RegPgValues {
64- rail_pgs : fmc_periph :: RailPgsView ,
65- rail_pgs_max_hold : fmc_periph :: RailPgsMaxHoldView ,
64+ rail_pgs : fmc_sequencer :: RailPgsView ,
65+ rail_pgs_max_hold : fmc_sequencer :: RailPgsMaxHoldView ,
6666 } ,
6767 SetState {
6868 prev : Option < PowerState > ,
@@ -73,12 +73,12 @@ enum Trace {
7373 } ,
7474 UnexpectedPowerOff {
7575 our_state : PowerState ,
76- seq_state : Result < fmc_periph :: A0Sm , u8 > ,
76+ seq_state : Result < fmc_sequencer :: A0Sm , u8 > ,
7777 } ,
7878 SequencerInterrupt {
7979 our_state : PowerState ,
80- seq_state : Result < fmc_periph :: A0Sm , u8 > ,
81- ifr : fmc_periph :: IfrView ,
80+ seq_state : Result < fmc_sequencer :: A0Sm , u8 > ,
81+ ifr : fmc_sequencer :: IfrView ,
8282 } ,
8383 PowerDownError ( drv_cpu_seq_api:: SeqError ) ,
8484 Coretype {
@@ -155,8 +155,8 @@ use gpio_irq_pins::SEQ_IRQ;
155155
156156/// Helper type which includes both sequencer and NIC state machine states
157157struct StateMachineStates {
158- seq : Result < fmc_periph :: A0Sm , u8 > ,
159- nic : Result < fmc_periph :: NicSm , u8 > ,
158+ seq : Result < fmc_sequencer :: A0Sm , u8 > ,
159+ nic : Result < fmc_sequencer :: NicSm , u8 > ,
160160}
161161
162162#[ export_name = "main" ]
@@ -260,7 +260,7 @@ fn init(packrat: Packrat) -> Result<ServerImpl, SeqError> {
260260
261261 // Set up the checksum registers for the Spartan7 FPGA
262262 let token = loader. get_token ( ) ;
263- let info = fmc_periph:: Info :: new ( token) ;
263+ let info = fmc_periph:: info :: Info :: new ( token) ;
264264 let short_checksum = gen:: SPARTAN7_FPGA_BITSTREAM_CHECKSUM [ ..4 ]
265265 . try_into ( )
266266 . unwrap ( ) ;
@@ -298,8 +298,7 @@ fn init(packrat: Packrat) -> Result<ServerImpl, SeqError> {
298298 // Turn on the chassis LED!
299299 sys. gpio_set ( SP_CHASSIS_STATUS_LED ) ;
300300
301- let token = loader. get_token ( ) ;
302- Ok ( ServerImpl :: new ( token, packrat) )
301+ Ok ( ServerImpl :: new ( loader, packrat) )
303302}
304303
305304/// Configures the front FPGA pins and holds it in reset
@@ -376,7 +375,8 @@ struct ServerImpl {
376375 jefe : Jefe ,
377376 sys : Sys ,
378377 hf : HostFlash ,
379- seq : fmc_periph:: Sequencer ,
378+ seq : fmc_sequencer:: Sequencer ,
379+ espi : fmc_periph:: espi:: Espi ,
380380 vcore : VCore ,
381381 /// Static buffer for encoding ereports. This is a static so that we don't
382382 /// have it on the stack when encoding ereports.
@@ -387,11 +387,14 @@ const EREPORT_BUF_LEN: usize = 256;
387387
388388impl ServerImpl {
389389 fn new (
390- token : drv_spartan7_loader_api:: Spartan7Token ,
390+ loader : drv_spartan7_loader_api:: Spartan7Loader ,
391391 packrat : Packrat ,
392392 ) -> Self {
393393 let now = sys_get_timer ( ) . now ;
394- let seq = fmc_periph:: Sequencer :: new ( token) ;
394+
395+ let seq = fmc_sequencer:: Sequencer :: new ( loader. get_token ( ) ) ;
396+ let espi = fmc_periph:: espi:: Espi :: new ( loader. get_token ( ) ) ;
397+
395398 ringbuf_entry ! ( Trace :: Startup {
396399 early_power_rdbks: ( & seq. early_power_rdbks) . into( ) ,
397400 } ) ;
@@ -417,6 +420,7 @@ impl ServerImpl {
417420 sys : Sys :: from ( SYS . get_task_id ( ) ) ,
418421 hf : HostFlash :: from ( HF . get_task_id ( ) ) ,
419422 seq,
423+ espi,
420424 vcore : VCore :: new ( I2C . get_task_id ( ) , packrat) ,
421425 ereport_buf,
422426 }
@@ -464,7 +468,7 @@ impl ServerImpl {
464468 now,
465469 } ) ;
466470
467- use fmc_periph :: A0Sm ;
471+ use fmc_sequencer :: A0Sm ;
468472 match ( self . get_state_impl ( ) , state) {
469473 ( PowerState :: A2 , PowerState :: A0 ) => {
470474 // Reset edge counters in the sequencer
@@ -881,6 +885,13 @@ impl idl::InOrderSequencerImpl for ServerImpl {
881885 idol_runtime:: ClientError :: BadMessageContents ,
882886 ) )
883887 }
888+
889+ fn last_post_code (
890+ & mut self ,
891+ _: & RecvMessage ,
892+ ) -> Result < u32 , RequestError < core:: convert:: Infallible > > {
893+ Ok ( self . espi . last_post_code . payload ( ) )
894+ }
884895}
885896
886897impl NotificationHandler for ServerImpl {
@@ -897,7 +908,7 @@ impl NotificationHandler for ServerImpl {
897908 return ;
898909 }
899910 let state = self . log_state_registers ( ) ;
900- use fmc_periph :: { A0Sm , NicSm } ;
911+ use fmc_sequencer :: { A0Sm , NicSm } ;
901912
902913 // Detect when the NIC comes online
903914 // TODO: should we handle the NIC powering down while the main CPU
@@ -940,8 +951,9 @@ mod gen {
940951}
941952
942953mod fmc_periph {
943- include ! ( concat!( env!( "OUT_DIR" ) , "/fmc_sequencer .rs" ) ) ;
954+ include ! ( concat!( env!( "OUT_DIR" ) , "/fmc_periph .rs" ) ) ;
944955}
956+ use fmc_periph:: sequencer as fmc_sequencer;
945957
946958include ! ( concat!( env!( "OUT_DIR" ) , "/notifications.rs" ) ) ;
947959include ! ( concat!( env!( "OUT_DIR" ) , "/gpio_irq_pins.rs" ) ) ;
0 commit comments