IEEE 1394 디바이스에 대한 등시 수신 대기 옵션

이 섹션에서는 다양한 등시 수신 대기 옵션에 대해 설명합니다.

패킷 헤더 수신 또는 제거

호스트 컨트롤러는 등시 패킷에서 헤더를 자동으로 제거하거나 제거하지 않을 수 있습니다. 호스트 컨트롤러가 등시 패킷에서 헤더를 자동으로 제거하지 않는 경우 버스 드라이버는 GET_LOCAL_HOST_INFO2 구조체의 HostCapabilities 멤버의 HOST_INFO_SUPPORTS_RETURNING_ISO_HDR 플래그를 설정합니다.

또한 호스트 컨트롤러는 구성 가능한 헤더 제거를 지원할 수 있습니다. 호스트 컨트롤러가 헤더를 제거하도록 구성할 수 있는 경우 버스 드라이버는 HostCapabilities의 HOST_INFO_SUPPORTS_ISOCH_STRIPPING 플래그를 설정합니다. 실제로 호스트 컨트롤러가 헤더를 제거하도록 구성하기 위해 드라이버는 RESOURCE_STRIP_ADDITIONAL_QUADLETS 플래그 집합을 사용하여 REQUEST_ISOCH_ALLOCATE_RESOURCES 요청을 제출합니다. nQuadletsToStrip 멤버는 각 패킷의 시작을 제거할 쿼드렛 수를 지정합니다. 예를 들어 nQuadletsToStrip = 1은 등시 패킷 헤더를 제거합니다.

스트림 및 패킷 기반 DMA 비교

스트림 기반 및 패킷 기반 DMA 전략에는 기본 호스트 컨트롤러의 지원이 필요합니다. 모든 호스트 컨트롤러는 DMA 전략 중 하나 이상을 지원하며 OHCI 규격 호스트 컨트롤러는 둘 다 지원합니다.

패킷 기반 DMA 및 스트림 기반 DMA는 모든 패킷의 크기가 같을 때 비슷한 특성을 갖습니다. 그러나 두 종류의 DMA는 패킷 크기가 다를 때 매우 다른 특성을 갖습니다.

스트림 기반 DMA에서 호스트 컨트롤러는 I/O 버퍼를 채울 때 패킷 경계를 무시하므로 쓰는 데이터에 간격이 없습니다. 특정 패킷의 위치를 확인하려면 이전 패킷의 길이를 모두 알고 있어야 합니다.

패킷 기반 DMA에서 호스트 컨트롤러는 버퍼당 하나의 등시 패킷만 씁니다. 따라서 패킷 모드에서 호스트 컨트롤러는 각 패킷이 최대 패킷 크기의 정수 배수인 I/O 버퍼의 시작부터 먼 거리에서 시작되도록 기록되는 데이터를 공백으로 만듭니다. 특정 패킷이 최댓값보다 작은 경우 해당 패킷의 끝과 다음 패킷의 시작 사이에 있는 데이터는 정의되지 않습니다. 따라서 패킷이 최대 크기보다 작으면 일부 버퍼 공간이 낭비됩니다. 예를 들어 10개의 패킷을 보유할 수 있을 만큼 큰 버퍼는 일부 패킷이 허용되는 최대 크기보다 작더라도 항상 정확히 10개의 패킷을 보유합니다.

선택한 DMA 모드에 관계없이 일부 디자인 절충이 적용됩니다. 예를 들어 버퍼 크기를 선택하면 사용하는 DMA 모드에 관계없이 디바이스의 성능에 영향을 줍니다. 많은 수의 버퍼를 초기화하는 것과 관련된 일부 오버헤드를 방지하므로 큰 버퍼는 효율성을 제공합니다. 또한 버퍼가 적다는 것은 필요한 DMA 설명자가 적다는 것을 의미합니다. 반면에 버퍼가 클수록 I/O 작업의 시작과 버스 드라이버가 버퍼가 가득 찼다는 것을 함수 드라이버에 알리는 순간 사이의 대기 시간이 증가합니다.

호스트 컨트롤러가 두 가지 유형의 DMA를 모두 지원하는 경우 버스 드라이버는 호스트 컨트롤러를 스트림 기반 DMA로 기본값으로 설정합니다. 호스트 컨트롤러를 패킷 기반 DMA로 다시 설정하려면 드라이버가 리소스 핸들을 할당할 때 RESOURCE_USE_PACKET_BASED 플래그를 설정해야 합니다.

드라이버는 REQUEST_GET_LOCAL_HOST_INFO 버스 요청(IRB = GET_HOST_CAPABILITIESu.GetLocalHostInformation.nLevel 멤버 포함)을 사용하여 호스트 컨트롤러의 특성을 확인합니다. 버스 드라이버는 GET_LOCAL_HOST_INFO2 구조를 반환하고 HostCapabilities 멤버 내에 플래그를 설정하여 호스트 컨트롤러가 지원하는 내용을 나타냅니다.

DMA 유형 HostCapabilities 플래그

스트림 기반

HOST_INFO_STREAM_BASED

패킷 기반

HOST_INFO_PACKET_BASED