4.DeviceInterfaceReport.md

July 10, 2024 ยท View on GitHub

4. Test Case for DEVICE_INTERFACE_REPORT

Case 4.1

Description: TDISP responder shall return valid DEVICE_INTERFACE_REPORT, if it receives a GET_DEVICE_INTERFACE_REPORT 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 -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0, LENGTH=0x400}
  2. TdispMessage <- Responder

Assertion 4.1.1: sizeof(TdispMessage) >= sizeof(DEVICE_INTERFACE_REPORT, REPORT_BYTES)

Assertion 4.1.2: TdispMessage.MessageType == DEVICE_INTERFACE_REPORT

Assertion 4.1.3: TdispMessage.TDISPVersion == 0x10

Assertion 4.1.4: TdispMessage.INTERFACE_ID == DEVICE_INTERFACE_REPORT.INTERFACE_ID

Assertion 4.1.5: TdispMessage.PORTION_LENGTH > 0

  1. Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=Next_Offset, LENGTH=0x400}, while TdispMessage.REMAINDER_LENGTH != 0
  2. TdispMessage <- Responder

Assertion 4.1.*.

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

Assertion 4.1.6: TdispMessage.TDI_STATE == CONFIG_LOCKED

Case 4.2

Description: TDISP responder shall return valid DEVICE_INTERFACE_REPORT, if it receives a GET_DEVICE_INTERFACE_REPORT 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 -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0, LENGTH=0x400}
  2. TdispMessage <- Responder

Assertion 4.2.1: sizeof(TdispMessage) >= sizeof(DEVICE_INTERFACE_REPORT, REPORT_BYTES)

Assertion 4.2.2: TdispMessage.MessageType == DEVICE_INTERFACE_REPORT

Assertion 4.2.3: TdispMessage.TDISPVersion == 0x10

Assertion 4.2.4: TdispMessage.INTERFACE_ID == DEVICE_INTERFACE_REPORT.INTERFACE_ID

Assertion 4.2.5: TdispMessage.PORTION_LENGTH > 0

  1. Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=Next_Offset, LENGTH=0x400}, while TdispMessage.REMAINDER_LENGTH != 0
  2. TdispMessage <- Responder

Assertion 4.2.*.

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

Assertion 4.2.6: TdispMessage.TDI_STATE == RUN

Case 4.3

Description: TDISP responder shall return TDISP_ERROR(INVALID_REQUEST), if it receives a GET_DEVICE_INTERFACE_REPORT with invalid OFFSET.

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 -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0xFFFF, LENGTH=0x1}
  2. TdispMessage <- Responder

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

Assertion 4.3.2: TdispMessage.MessageType == TDISP_ERROR

Assertion 4.3.3: TdispMessage.TDISPVersion == 0x10

Assertion 4.3.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

Assertion 4.3.5: TdispMessage.ERROR_CODE == INVALID_REQUEST

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

Assertion 4.3.6: TdispMessage.TDI_STATE == CONFIG_LOCKED

Case 4.4

Description: TDISP responder shall return TDISP_ERROR(INVALID_INTERFACE_STATE), if it receives a GET_DEVICE_INTERFACE_REPORT 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.

TestTeardown:

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

Steps:

  1. Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0x0, LENGTH=0x400}
  2. TdispMessage <- Responder

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

Assertion 4.4.2: TdispMessage.MessageType == TDISP_ERROR

Assertion 4.4.3: TdispMessage.TDISPVersion == 0x10

Assertion 4.4.4: TdispMessage.INTERFACE_ID == LOCK_INTERFACE_REQUEST.INTERFACE_ID

Assertion 4.4.5: TdispMessage.ERROR_CODE == INVALID_INTERFACE_STATE

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

Assertion 4.4.6: TdispMessage.TDI_STATE == CONFIG_UNLOCKED

Case 4.5

Description: TDI Report shall follow TDISP specification.

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_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, ...}
  9. DEVICE_INTERFACE_REPORT <- Responder

TestTeardown:

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

Steps:

Assertion 4.5.1: sizeof(REPORT_BYTES) == sizeof(REPORT_BYTES, DEVICE_SPECIFIC_INFO) + REPORT_BYTES.DEVICE_SPECIFIC_INFO_LEN

Assertion 4.5.2: (REPORT_BYTES.INTERFACE_INFO & 0xFFE0) == 0

Assertion 4.5.3: (REPORT_BYTES.MMIO_RANGE[i].RangeAttributes & 0xFFF0) == 0