##############################################################################
## This file is part of 'SLAC Firmware Standard Library'.
## It is subject to the license terms in the LICENSE.txt file found in the 
## top-level directory of this distribution and at: 
##    https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. 
## No part of 'SLAC Firmware Standard Library', including this file, 
## may be copied, modified, propagated, or distributed except according to 
## the terms contained in the LICENSE.txt file.
##############################################################################
#schemaversion 3.0.0
#once TimingFrameRx.yaml

TimingFrameRx: &TimingFrameRx
  class: MMIODev
  configPrio: 1
  description: Status of timing frame reception
  size: 0x10000
  children:
    #########################################################
    sofCount:
      at:
        offset: 0x0000
      class: IntField
      name: sofCount
      sizeBits: 32
      lsBit: 0
      mode: RO
      description: Start of frame count
    #########################################################
    eofCount:
      at:
        offset: 0x0004
      class: IntField
      name: eofCount
      sizeBits: 32
      lsBit: 0
      mode: RO
      description: End of frame count
    #########################################################
    FidCount:
      at:
        offset: 0x0008
      class: IntField
      name: FidCount
      sizeBits: 32
      lsBit: 0
      mode: RO
      description: Valid frame count
    #########################################################
    CrcErrCount:
      at:
        offset: 0x000C
      class: IntField
      name: CrcErrCount
      sizeBits: 32
      mode: RO
      description: CRC error count
    #########################################################
    RxClkCount:
      at:
        offset: 0x0010
      class: IntField
      name: RxClkCount
      sizeBits: 32
      mode: RO
      description: Recovered clock count div 16
    #########################################################
    RxRstCount:
      at:
        offset: 0x0014
      class: IntField
      name: RxRstCount
      sizeBits: 32
      mode: RO
      description: Receive link reset count
    #########################################################
    RxDecErrCount:
      at:
        offset: 0x0018
      class: IntField
      name: RxDecErrCount
      sizeBits: 32
      mode: RO
      description: Receive 8b/10b decode error count
    #########################################################
    RxDspErrCount:
      at:
        offset: 0x001C
      class: IntField
      name: RxDspErrCount
      sizeBits: 32
      mode: RO
      description: Receive disparity error count
    #########################################################
    RxCountReset:
      at:
        offset: 0x0020
      class: IntField
      name: RxCountReset
      sizeBits: 1
      lsBit: 0
      mode: RW
      description: Reset receive counters
    #########################################################
    RxLinkUp:
      at:
        offset: 0x0020
      class: IntField
      name: RxLinkUp
      sizeBits: 1
      lsBit: 1
      mode: RO
      description: Receive link status
    #########################################################
    RxPolarity:
      at:
        offset: 0x0020
      class: IntField
      name: RxPolarity
      sizeBits: 1
      lsBit: 2
      mode: RW
      description: Invert receive link polarity
    #########################################################
    RxReset:
      at:
        offset: 0x0020
      class: IntField
      name: RxReset
      sizeBits: 1
      lsBit: 3
      mode: RW
      description: Reset receive link
    #########################################################
    ClkSel:
      at:
        offset: 0x0020
      class: IntField
      name: ClkSel
      sizeBits: 1
      lsBit: 4
      mode: RW
      description: Select LCLS-I/LCLS-II Timing
    #########################################################
    RxDown:
      at:
        offset: 0x0020
      class: IntField
      name: RxDown
      sizeBits: 1
      lsBit: 5
      mode: RW
      description: Rx down latch status
    #########################################################
    BypassRst:
      at:
        offset: 0x0020
      class: IntField
      name: BypassRst
      sizeBits: 1
      lsBit: 6
      mode: RW
      description: Buffer bypass reset status
    #########################################################
    PipelineDelay:
      at:
        offset: 0x0023
      class: IntField
      sizeBits: 1
      lsBit:    0
      mode: RW
      description: Delay streamed databuffer by 2 fiducials
      enums:
        - { name: Enabled,  value: 0 }
        - { name: Disabled, value: 1 }
    #########################################################
    MsgDelay:
      at:
        offset: 0x0024
      class: IntField
      name: MsgDelay
      sizeBits: 20
      lsBit: 0
      mode: RW
      description: LCLS-II timing frame pipeline delay (186MHz clks)
    #########################################################
    TxClkCount:
      at:
        offset: 0x0028
      class: IntField
      name: TxClkCount
      sizeBits: 32
      lsBit: 0
      mode: RO
      description: Transmit clock counter div 16
    #########################################################
    BypassDoneCount:
      at:
        offset: 0x002C
      class: IntField
      name: BypassDoneCount
      sizeBits: 16
      lsBit: 0
      mode: RO
      description: Buffer bypass done count
    #########################################################
    BypassResetCount:
      at:
        offset: 0x002E
      class: IntField
      name: BypassResetCount
      sizeBits: 16
      lsBit: 0
      mode: RO
      description: Buffer bypass reset count
    #########################################################
    TimestampEventCount:
      at:
        offset: 0x0040
      class:    IntField
      sizeBits: 32
      lsBit:    0
      mode:     RO
      description: Counter running on event clock; reset by fiducial
    #########################################################
    C_RxReset:
      class: SequenceCommand
      at:
        offset: 0x0
      description: Reset Rx Link
      sequence:
      - entry: RxReset
        value: 1
      - entry: usleep
        value: 1000
      - entry: RxReset
        value: 0 
    #########################################################
    ClearRxCounters:
      class: SequenceCommand
      at:
        offset: 0x0
      description: "Clear the Rx status counters."
      sequence:
      - entry: RxCountReset
        value: 1
      - entry: usleep
        value: 1000
      - entry: RxCountReset
        value: 0 

