3.LockInterfaceResponse.md

July 10, 2024 ยท View on GitHub

3. Test Case for LOCK_INTERFACE_RESPONSE

Case 3.1

Description: TDISP responder shall return valid LOCK_INTERFACE_RESPONSE, if it receives a LOCK_INTERFACE_REQUEST in CONFIG_UNLOCKED state.

TestSetup:

  1. Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TDISP_VERSION <- Responder
  3. Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  4. TDISP_CAPABILITIES <- Responder
  5. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  6. DEVICE_INTERFACE_STATE <- Responder
  7. If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_UNLOCKED, then skip the test.
  8. Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.

TestTeardown:

  1. Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. STOP_INTERFACE_RESPONSE <- Responder

Steps:

  1. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=default_Selective_IDE_Stream_ID, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  2. TdispMessage <- Responder

Assertion 3.1.1: sizeof(TdispMessage) == sizeof(LOCK_INTERFACE_RESPONSE)

Assertion 3.1.2: TdispMessage.MessageType == LOCK_INTERFACE_RESPONSE

Assertion 3.1.3: TdispMessage.TDISPVersion == 0x10

Assertion 3.1.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

  1. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TdispMessage <- Responder

Assertion 3.1.5: TdispMessage.TDI_STATE == CONFIG_LOCKED

Case 3.2

Description: TDISP responder shall return TDISP_ERROR(INVALID_REQUEST), if it receives a LOCK_INTERFACE_REQUEST when IDE Key is NOT configured.

TestSetup:

  1. Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TDISP_VERSION <- Responder
  3. Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  4. TDISP_CAPABILITIES <- Responder
  5. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  6. DEVICE_INTERFACE_STATE <- Responder
  7. If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_UNLOCKED, then skip the test.
  8. Skip the IDE Key setup with IDE_KM protocol in this SPDM session.

TestTeardown:

  1. Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. STOP_INTERFACE_RESPONSE <- Responder

Steps:

  1. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=0, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  2. TdispMessage <- Responder

Assertion 3.2.1: sizeof(TdispMessage) == sizeof(TDISP_ERROR)

Assertion 3.2.2: TdispMessage.MessageType == TDISP_ERROR

Assertion 3.2.3: TdispMessage.TDISPVersion == 0x10

Assertion 3.2.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

Assertion 3.2.5: TdispMessage.ERROR_CODE == INVALID_REQUEST

  1. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TdispMessage <- Responder

Assertion 3.2.6: TdispMessage.TDI_STATE == CONFIG_UNLOCKED

Case 3.3

Description: TDISP responder shall return TDISP_ERROR(INVALID_INTERFACE_STATE), if it receives a LOCK_INTERFACE_REQUEST in CONFIG_LOCKED state.

TestSetup:

  1. Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TDISP_VERSION <- Responder
  3. Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  4. TDISP_CAPABILITIES <- Responder
  5. Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
  6. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=default_Selective_IDE_Stream_ID, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  7. LOCK_INTERFACE_RESPONSE <- Responder
  8. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  9. DEVICE_INTERFACE_STATE <- Responder
  10. If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_LOCKED, then skip the test.

TestTeardown:

  1. Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. STOP_INTERFACE_RESPONSE <- Responder

Steps:

  1. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=default_Selective_IDE_Stream_ID, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  2. TdispMessage <- Responder

Assertion 3.3.1: sizeof(TdispMessage) == sizeof(TDISP_ERROR)

Assertion 3.3.2: TdispMessage.MessageType == TDISP_ERROR

Assertion 3.3.3: TdispMessage.TDISPVersion == 0x10

Assertion 3.3.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

Assertion 3.3.5: TdispMessage.ERROR_CODE == INVALID_INTERFACE_STATE

  1. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TdispMessage <- Responder

Assertion 3.3.6: TdispMessage.TDI_STATE == CONFIG_LOCKED

Case 3.4

Description: TDISP responder shall return TDISP_ERROR(INVALID_INTERFACE_STATE), if it receives a LOCK_INTERFACE_REQUEST in RUN state.

TestSetup:

  1. Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TDISP_VERSION <- Responder
  3. Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  4. TDISP_CAPABILITIES <- Responder
  5. Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
  6. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=default_Selective_IDE_Stream_ID, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  7. LOCK_INTERFACE_RESPONSE <- Responder
  8. Requester -> START_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, START_INTERFACE_NONCE=LOCK_INTERFACE_RESPONSE.START_INTERFACE_NONCE}
  9. START_INTERFACE_RESPONSE <- Responder
  10. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  11. DEVICE_INTERFACE_STATE <- Responder
  12. If DEVICE_INTERFACE_STATE.TDI_STATE != RUN, then skip the test.

TestTeardown:

  1. Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. STOP_INTERFACE_RESPONSE <- Responder

Steps:

  1. Requester -> LOCK_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, FLAGS=TDISP_CAPABILITIES.LOCK_INTERFACE_FLAGS_SUPPORTED, StreamID=default_Selective_IDE_Stream_ID, MMIO_REPORTING_OFFSET, BIND_P2P_ADDRESS_MASK=0}
  2. TdispMessage <- Responder

Assertion 3.4.1: sizeof(TdispMessage) == sizeof(TDISP_ERROR)

Assertion 3.4.2: TdispMessage.MessageType == TDISP_ERROR

Assertion 3.4.3: TdispMessage.TDISPVersion == 0x10

Assertion 3.4.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

Assertion 3.4.5: TdispMessage.ERROR_CODE == INVALID_INTERFACE_STATE

  1. Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
  2. TdispMessage <- Responder

Assertion 3.4.6: TdispMessage.TDI_STATE == RUN