• Harald Freudenberger's avatar
    s390/ap: split ap queue state machine state from device state · 0b641cbd
    Harald Freudenberger authored
    The state machine for each ap queue covered a mixture of
    device states and state machine (firmware queue state) states.
    
    This patch splits the device states and the state machine
    states into two different enums and variables. The major
    state is the device state with currently these values:
    
      AP_DEV_STATE_UNINITIATED - fresh and virgin, not touched
      AP_DEV_STATE_OPERATING   - queue dev is working normal
      AP_DEV_STATE_SHUTDOWN	   - remove/unbind/shutdown in progress
      AP_DEV_STATE_ERROR	   - device is in error state
    
    only when the device state is > UNINITIATED the state machine
    is run. The state machine represents the states of the firmware
    queue:
    
      AP_SM_STATE_RESET_START - starting point, reset (RAPQ) ap queue
      AP_SM_STATE_RESET_WAIT  - reset triggered, waiting to be finished
    			    if irqs enabled, set up irq (AQIC)
      AP_SM_STATE_SETIRQ_WAIT - enable irq triggered, waiting to be
    			    finished, then go to IDLE
      AP_SM_STATE_IDLE	  - queue is operational but empty
      AP_SM_STATE_WORKING	  - queue is operational, requests are stored
    			    and replies may wait for getting fetched
      AP_SM_STATE_QUEUE_FULL  - firmware queue is full, so only replies
    			    can get fetched
    
    For debugging each ap queue shows a sysfs attribute 'states' which
    displays the device and state machine state and is only available
    when the kernel is build with CONFIG_ZCRYPT_DEBUG enabled.
    Signed-off-by: default avatarHarald Freudenberger <freude@linux.ibm.com>
    Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
    0b641cbd
ap_bus.c 39.3 KB