IEEE 1394 노드 구성 ROM의 콘텐츠 검색

Windows 7에는 KMDF(커널 모드 드라이버 프레임워크)를 사용하여 구현되는 새로운 IEEE 1394 버스 드라이버인 1394ohci.sys 포함되어 있습니다. 1394ohci.sys 버스 드라이버는 포트/미니포트 구성의 레거시 IEEE 버스 드라이버(1394bus.sys 및 ochi1394.sys)를 대체합니다. 레거시 1394 버스 드라이버와 이전 버전과 호환됩니다. 새 버스 드라이버와 레거시 1394 버스 드라이버 간의 동작에 대한 알려진 차이점에 대한 자세한 내용은 Windows 7의 IEEE 1394 버스 드라이버를 참조하세요.

이 항목에서는 1394ohci.sys 버스 드라이버가 나중에 디바이스 열거에 사용되는 노드 구성 ROM의 콘텐츠를 검색하는 방법에 대해 자세히 설명합니다. Windows 7에서는 디바이스 검색을 위해 노드 구성 ROM의 내용 처리가 변경되지 않았습니다. 노드 구성 ROM의 내용이 처리되는 방법에 대한 자세한 내용은 1394 구성 ROM 수정을 참조하세요.

1394ohci.sys 버스 드라이버는 비동기 읽기 트랜잭션을 노드로 전송하여 1394 버스 재설정 후 노드의 구성 ROM의 내용을 검색합니다. 노드 구성 ROM의 내용을 검색하기 위해 노드로 전송되는 비동기 읽기 트랜잭션의 수를 줄이려고 시도합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

구성 ROM 헤더 검색

노드 구성 ROM의 내용을 검색하기 위해 클라이언트 드라이버는 GET_HOST_CONFIG_ROMu.GetLocalHostInformation.nLevel 을 지정하여 IEEE 1394 드라이버 스택에 REQUEST_GET_LOCAL_HOST_INFO 요청을 보냅니다. 요청을 완료하면 버스 드라이버는 GET_LOCAL_HOST_INFO5 구조에서 노드의 구성 ROM 헤더를 검색합니다. 구성 ROM 헤더는 노드 구성 ROM의 처음 5개 쿼드렛에 있습니다. 이 헤더에는 IEEE-1394a 사양에 정의된 버스 정보 블록의 내용이 포함됩니다.

1394ohci.sys 버스 드라이버는 단일 비동기 블록 읽기 트랜잭션에서 구성 ROM 헤더를 검색하려고 합니다. 그러나 특정 1394 디바이스가 이 트랜잭션에 올바르게 응답하지 않을 수 있습니다. 이 경우 새 1394 버스 드라이버는 5개의 비동기 쿼드렛 읽기 트랜잭션을 사용하여 구성 ROM 헤더를 검색합니다.

노드와의 통신 속도는 노드의 구성 ROM 헤더를 검색하는 동안 결정됩니다. 1394ohci.sys 버스 드라이버는 지원되는 가장 빠른 속도로 비동기 읽기 트랜잭션을 노드로 보내고 로컬 노드와 대상 노드 간의 느린 노드를 고려합니다. 비동기 읽기 트랜잭션이 지원되는 가장 빠른 속도로 성공적으로 완료되지 않으면 1394ohci.sys 버스 드라이버는 느린 속도로 다른 비동기 읽기 트랜잭션을 노드로 보냅니다. 1394ohci.sys 버스 드라이버는 트랜잭션이 성공적으로 완료될 때까지 느리고 느린 속도로 비동기 읽기 트랜잭션을 노드에 계속 보냅니다. 비동기 트랜잭션이 특정 속도로 완료되면 다른 1394 버스 재설정이 발생할 때까지 노드와의 모든 추가 통신에 해당 속도가 사용됩니다. 비동기 읽기 트랜잭션이 가능한 가장 느린 속도로 완료되지 않으면 1394ohci.sys 버스 드라이버가 노드 구성 ROM의 내용을 검색하지 않습니다.

구성 ROM 헤더를 검색한 후 1394ohci.sys 버스 드라이버는 노드 구성 ROM의 내용이 이전에 검색되었는지 확인합니다. 이 경우 캐시된 버전을 다시 사용할 수 있습니다. 그렇지 않으면 노드 구성 ROM의 나머지 내용을 검색해야 합니다.

새 구성 ROM

1394ohci.sys 버스 드라이버에서 노드 구성 ROM의 내용이 이전에 검색되지 않은 것으로 확인되면 노드 구성 ROM의 나머지 내용을 검색합니다.

1394ohci.sys 버스 드라이버는 구성 ROM 헤더의 버스 정보 블록에 있는 max_rom 값을 사용하여 노드에 보낼 비동기 읽기 트랜잭션의 크기를 확인하여 구성 ROM의 나머지 내용을 검색합니다. max_rom 값에 관계없이 비동기 읽기 트랜잭션이 실패하는 경우 새 1394 버스 드라이버는 비동기 쿼드렛 읽기 트랜잭션을 사용하여 노드 구성 ROM의 나머지 내용을 검색합니다.

이전에 검색한 구성 ROM

1394ohci.sys 버스 드라이버는 노드의 구성 ROM 헤더 콘텐츠를 검색한 후 헤더가 드라이버가 이전에 검색한 구성 ROM 콘텐츠의 캐시된 복사본 중 하나의 헤더와 일치하는지 여부를 결정합니다. 에서 일치하는 구성 ROM 헤더를 찾으면 캐시된 구성 ROM 콘텐츠를 다시 사용합니다.

1394ohci.sys 버스 드라이버는 다음 단계를 사용하여 노드 구성 ROM의 캐시된 콘텐츠 복사본을 다시 사용할 수 있는지 여부를 결정합니다.

  1. 버스 드라이버는 노드 구성 ROM 헤더의 버스 정보 블록에 있는 node_vendor_id, chip_id hichip_id lo 값이 드라이버의 캐시된 구성 ROM 콘텐츠 복사본 중 하나의 헤더에 있는 동일한 값과 일치하는지 여부를 결정합니다.
  2. 1단계에서 일치 항목이 발견되면 버스 드라이버는 버스 정보 블록의 생성 값도 일치하는지 여부를 결정합니다. 생성 값이 변경되지 않았거나 변경되지 않음을 나타내는 1로 설정된 경우 버스 드라이버는 구성 ROM의 캐시된 콘텐츠를 다시 사용합니다.

IEEE 1394 사양의 이전 단계에서 구성 ROM 값에 대한 설명을 찾을 수 있습니다. 1394ohci.sys 버스 드라이버가 일치하는 캐시된 구성 ROM 헤더를 찾지 못하거나 생성 값이 변경되어 노드의 구성 ROM 내용을 다시 읽어야 하는 경우 이전 단계에 따라 새 구성 ROM의 내용을 검색합니다.

IEEE 1394 드라이버 스택
1394 구성 ROM 수정
REQUEST_GET_CONFIG_ROM