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:
- Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_VERSION <- Responder
- Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_CAPABILITIES <- Responder
- Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
- 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}
- LOCK_INTERFACE_RESPONSE <- Responder
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- DEVICE_INTERFACE_STATE <- Responder
- If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_LOCKED, then skip the test.
TestTeardown:
- Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- STOP_INTERFACE_RESPONSE <- Responder
Steps:
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0, LENGTH=0x400}
- 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
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=Next_Offset, LENGTH=0x400}, while TdispMessage.REMAINDER_LENGTH != 0
- TdispMessage <- Responder
Assertion 4.1.*.
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- 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:
- Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_VERSION <- Responder
- Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_CAPABILITIES <- Responder
- Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
- 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}
- LOCK_INTERFACE_RESPONSE <- Responder
- Requester -> START_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, START_INTERFACE_NONCE=LOCK_INTERFACE_RESPONSE.START_INTERFACE_NONCE}
- START_INTERFACE_RESPONSE <- Responder
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- DEVICE_INTERFACE_STATE <- Responder
- If DEVICE_INTERFACE_STATE.TDI_STATE != RUN, then skip the test.
TestTeardown:
- Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- STOP_INTERFACE_RESPONSE <- Responder
Steps:
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0, LENGTH=0x400}
- 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
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=Next_Offset, LENGTH=0x400}, while TdispMessage.REMAINDER_LENGTH != 0
- TdispMessage <- Responder
Assertion 4.2.*.
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- 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:
- Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_VERSION <- Responder
- Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_CAPABILITIES <- Responder
- Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
- 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}
- LOCK_INTERFACE_RESPONSE <- Responder
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- DEVICE_INTERFACE_STATE <- Responder
- If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_LOCKED, then skip the test.
TestTeardown:
- Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- STOP_INTERFACE_RESPONSE <- Responder
Steps:
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0xFFFF, LENGTH=0x1}
- 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
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- 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:
- Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_VERSION <- Responder
- Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_CAPABILITIES <- Responder
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- DEVICE_INTERFACE_STATE <- Responder
- If DEVICE_INTERFACE_STATE.TDI_STATE != CONFIG_UNLOCKED, then skip the test.
TestTeardown:
- Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- STOP_INTERFACE_RESPONSE <- Responder
Steps:
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, OFFSET=0x0, LENGTH=0x400}
- 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
- Requester -> GET_DEVICE_INTERFACE_STATE {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TdispMessage <- Responder
Assertion 4.4.6: TdispMessage.TDI_STATE == CONFIG_UNLOCKED
Case 4.5
Description: TDI Report shall follow TDISP specification.
TestSetup:
- Requester -> GET_TDISP_VERSION {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_VERSION <- Responder
- Requester -> GET_TDISP_CAPABILITIES {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- TDISP_CAPABILITIES <- Responder
- Setup IDE Key with IDE_KM protocol for default_Selective_IDE_Stream_ID.
- 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}
- LOCK_INTERFACE_RESPONSE <- Responder
- Requester -> GET_DEVICE_INTERFACE_REPORT {TDISPVersion=0x10, INTERFACE_ID=TDI_ID, ...}
- DEVICE_INTERFACE_REPORT <- Responder
TestTeardown:
- Requester -> STOP_INTERFACE_REQUEST {TDISPVersion=0x10, INTERFACE_ID=TDI_ID}
- 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