ISOCH_DESCRIPTOR 구조체(1394.h)

ISOCH_DESCRIPTOR 구조는 REQUEST_ISOCH_ATTACH_BUFFERS REQUEST_ISOCH_DETACH_BUFFERS 요청을 사용하여 리소스 핸들에서 연결하거나 자세히 설명할 버퍼를 설명합니다.

구문

typedef struct _ISOCH_DESCRIPTOR {
  ULONG                         fulFlags;
  PMDL                          Mdl;
  ULONG                         ulLength;
  ULONG                         nMaxBytesPerFrame;
  ULONG                         ulSynch;
  ULONG                         ulTag;
  CYCLE_TIME                    CycleTime;
  PBUS_ISOCH_DESCRIPTOR_ROUTINE Callback;
  PVOID                         Context1;
  PVOID                         Context2;
  NTSTATUS                      status;
  ULONG_PTR                     DeviceReserved[8];
  ULONG_PTR                     BusReserved[8];
  ULONG_PTR                     PortReserved[16];
} ISOCH_DESCRIPTOR, *PISOCH_DESCRIPTOR;

멤버

fulFlags

이 등시 설명자에 대한 다양한 플래그를 지정합니다. 채널의 연결된 각 버퍼에는 연결된 isoch 설명자가 있습니다.

I/O 작업에 특정 버퍼를 사용하기 전에 호스트 컨트롤러는 버퍼의 isoch 설명자에서 데이터를 처리하는 방법에 대한 지침을 검사합니다. 경우에 따라 호스트 컨트롤러는 후속 버퍼를 사용하여 I/O 작업 중에 이러한 플래그에 지정된 동작을 계속 관찰합니다. instance 경우, isoch 설명자 플래그가 호스트 컨트롤러가 ulSynch에 기록된 특정 Sy 값이 없는 패킷을 필터링해야 한다고 나타내는 경우 호스트 컨트롤러는 이러한 버퍼와 연결된 isoch 설명자에 동일한 플래그가 설정되어 있지 않더라도 다음 버퍼의 데이터로 이 필터링 작업을 계속합니다.

다음 표에서는 이 멤버에 할당할 수 있는 플래그에 대해 설명합니다.

플래그 등시 트랜잭션 Description
DESCRIPTOR_SYNCH_ON_SY 수신 대기 현재 버퍼의 데이터부터 호스트 컨트롤러는 등시 패킷에 포함된 특정 Sy 값을 포함하지 않는 모든 패킷을 무시합니다. Sy 값은 ulSynch에 지정됩니다. DESCRIPTOR_USE_SY_TAG_IN_FIRST 플래그가 설정되면 호스트 컨트롤러는 ulSynch에 지정된 Sy 값이 있는 첫 번째 패킷이 발생한 후 모든 패킷 읽기를 다시 시작합니다. DESCRIPTOR_USE_SY_TAG_IN_FIRST 플래그가 설정되지 않은 경우 호스트 컨트롤러는 필터링을 계속하여 표시된 Sy 값으로 패킷을 읽고 다른 모든 항목은 무시합니다.
DESCRIPTOR_SYNCH_ON_TAG 수신 대기 현재 버퍼의 데이터부터 호스트 컨트롤러는 등시 패킷에 포함된 특정 태그 값을 포함하지 않는 모든 패킷을 무시합니다. 태그 값은 ulTag에 지정됩니다. DESCRIPTOR_USE_SY_TAG_IN_FIRST 플래그가 설정된 경우 호스트 컨트롤러는 ulTag에 지정된 태그 값이 있는 첫 번째 패킷이 발생한 후 모든 패킷 읽기를 다시 시작합니다. DESCRIPTOR_USE_SY_TAG_IN_FIRST 플래그가 설정되지 않은 경우 호스트 컨트롤러는 필터링을 계속하여 표시된 태그 값으로 패킷을 읽고 다른 모든 항목은 무시합니다.
DESCRIPTOR_SYNCH_ON_TIME 듣기, 말하기 호스트 컨트롤러는 작업을 계속하기 전에 특정 등시 주기 시간을 기다립니다. 주기 시간은 CycleTime 멤버에 지정됩니다. 현재 버퍼의 데이터부터 호스트 컨트롤러는 CycleTime의 주기 시간을 포함하지 않는 모든 패킷을 무시합니다. 지정된 주기 시간이 있는 패킷을 찾은 후 호스트 컨트롤러는 모든 패킷 처리를 다시 시작합니다.
DESCRIPTOR_USE_SY_TAG_IN_FIRST 수신 대기 Sy 또는 태그 멤버에 대한 필터링은 일치하는 첫 번째 패킷이 수신될 때까지만 발생합니다. 이 플래그는 플래그 DESCRIPTOR_SYNCH_ON_SY 및 DESCRIPTOR_SYNCH_ON_TAG 함께 사용됩니다. 이러한 두 플래그는 DESCRIPTOR_USE_SY_TAG_IN_FIRST 설정되지 않는 한 Sy 또는 Tag의 값에 따라 필터링 작업을 시작합니다. 이 경우 이러한 플래그는 필터링 작업이 아닌 동기화를 시작합니다. 이 동기화 작업에서 호스트 컨트롤러는 올바른 Sy 또는 태그 값이 있는 패킷을 검색할 때까지 모든 패킷을 무시합니다. 표시된 Sy 또는 태그 값이 있는 패킷을 검색한 후 호스트 컨트롤러는 모든 패킷 처리를 다시 시작합니다.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION 듣기, 말하기 호스트 컨트롤러가 이 버퍼에서 DMA를 완료하면 주기 시간을 ISOCH_DESCRIPTOR CycleTime 멤버에 저장합니다.
DESCRIPTOR_PRIORITY_TIME_DELIVERY 이야기 로컬 호스트 컨트롤러가 쓰기에 대해 준비되지 않은 경우 나중에 쓰기를 다시 시도하지 마세요. (기본 동작은 호스트 컨트롤러가 준비될 때까지 다시 시도하는 것입니다.)
DESCRIPTOR_HEADER_SCATTER_GATHER 이야기 호스트 컨트롤러는 이 버퍼의 데이터를 헤더 시퀀스로 처리합니다. 호스트 컨트롤러는 이 버퍼의 헤더를 연결된 다음 버퍼의 데이터에서 어셈블하는 각 패킷 앞에 추가합니다.

Mdl

데이터가 포함되거나 포함될 버퍼를 나타내는 MDL을 지정합니다.

ulLength

Mdl의 길이를 지정합니다.

nMaxBytesPerFrame

각 등시 프레임에 포함된 최대 바이트를 지정합니다. 쓰기 시 버퍼의 데이터는 이 크기의 등시 패킷으로 분할됩니다.

ulSynch

IsochTalk 요청의 경우 DESCRIPTOR_SYNCH_ON_SY 플래그가 설정된 경우 이 멤버는 나가는 패킷의 Sy 필드를 지정합니다. REQUEST_ISOCH_LISTEN 요청의 경우 DESCRIPTOR_SYNCH_ON_SY 플래그가 설정된 경우 이 멤버는 호스트 컨트롤러가 등시 패킷 헤더의 Sy 필드와 일치하는 값을 지정합니다.

ulTag

IsochTalk 요청의 경우 이 멤버는 나가는 패킷의 태그 필드를 지정합니다. REQUEST_ISOCH_LISTEN 요청의 경우 DESCRIPTOR_SYNCH_ON_TAG 플래그가 설정된 경우 이 멤버는 호스트 컨트롤러가 등시 패킷 헤더의 태그 필드에 일치하는 값을 지정합니다.

CycleTime

DESCRIPTOR_SYNCH_ON_TIME 플래그가 설정된 경우 이 멤버는 동기화할 등시 주기 시간을 지정합니다. (타이밍 확인은 등시 주기당 입니다. 주기 시간의 CycleOffset 멤버는 사용되지 않습니다.) DESCRIPTOR_TIME_STAMP_ON_COMPLETION 플래그가 설정된 경우 버스 드라이버는 이 버퍼를 사용한 작업이 완료될 때 이 멤버를 등시 주기 시간으로 채웁니다.

Callback

콜백 루틴에 대한 포인터입니다. NULL이 아닌 경우 버스 드라이버는 이 루틴을 호출하여 연결된 버퍼를 분리할 준비가 되었음을 나타냅니다. 콜백은 IRQL DISPATCH_LEVEL 실행됩니다. 콜백 유형은 다음과 같습니다.

void Callback(IN PVOID Context1, IN PVOID Context2);

Context1

버스 드라이버가 콜백에서 전달된 루틴을 호출할 때 첫 번째 매개 변수를 지정합니다.

Context2

버스 드라이버가 콜백에 전달된 루틴을 호출할 때 두 번째 매개 변수를 지정합니다.

status

REQUEST_ISOCH_ATTACH_BUFFERS 요청의 경우 이 멤버는 이 버퍼에 대한 연결 작업의 상태 지정합니다. REQUEST_ISOCH_ATTACH_BUFFERS 요청을 처리하는 동안 오류가 발생하면 버스 드라이버가 적절한 오류 코드로 상태 멤버를 채웁니다.

참고 상태 멤버는 REQUEST_ISOCH_ATTACH_BUFFERS 요청이 이루어지기 전에 STATUS_SUCCESS 초기화해야 합니다.

DeviceReserved[8]

예약되어 있습니다.

BusReserved[8]

예약되어 있습니다.

PortReserved[16]

예약되어 있습니다.

설명

모든 DESCRIPTOR_XXX 플래그가 모든 하드웨어에서 지원되는 것은 아닙니다. 디바이스 드라이버는 nLevel = GET_HOST_CAPABILITIES REQUEST_GET_LOCAL_HOST_INFO 요청을 사용하여 지원되는 DESCRIPTOR_XXX 플래그를 확인할 수 있습니다. 버스 드라이버는 hostCapabilities 멤버에 호스트 컨트롤러가 지원하는 플래그를 결정하는 플래그가 포함된 GET_LOCAL_HOST_INFO2 구조체에 대한 포인터를 반환합니다. 다음 표에서는 하드웨어 지원이 필요한 DESCRIPTOR_XXX 플래그와 드라이버가 검사 해당 HostCapabilities 플래그를 나열합니다.

DESCRIPTOR_XXX 플래그 HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

드라이버가 DESCRIPTOR_HEADER_SCATTER_GATHER 플래그를 설정하는 경우 호스트 컨트롤러는 Mdl 에 지정된 버퍼의 데이터를 연결된 다음 버퍼의 데이터와 결합합니다. (후속 버퍼는 영향을 받지 않습니다.) 버퍼의 각 프레임은 다음 버퍼의 프레임 앞에 추가되고(버퍼의 데이터가 프레임으로 분할되는 순서대로) 다음 등시 패킷의 데이터로 전송됩니다. 각 버퍼의 프레임 수가 일치해야 하거나 버스 드라이버가 다음 REQUEST_ISOCH_ATTACH_BUFFER 요청에 대한 STATUS_INVALID_PARAMETER 반환합니다.

요구 사항

요구 사항
헤더 1394.h(1394.h 포함)

추가 정보

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK