Windows 7의 DDI(디바이스 드라이버 인터페이스) 변경 내용

Windows 7에는 KMDF(커널 모드 드라이버 프레임워크)를 사용하여 구현되는 새로운 IEEE 1394 버스 드라이버인 1394ohci.sys 포함되어 있습니다. 새로운 1394 버스 드라이버는 포트/미니포트 configuration--1394bus.sys 및 ochi1394.sys 레거시 IEEE 버스 드라이버를 대체합니다. 1394ohci.sys 지원하는 새로운 기능에 새 DDI가 추가되었습니다. 또한 1394b 사양에 정의된 더 빠른 속도를 지원하도록 특정 1394 DDI가 변경되었으며 1394 클라이언트 드라이버의 개발을 간소화하도록 개선되었습니다.

이 항목에서는 새 1394 버스 드라이버를 지원하는 일반적인 DDI 변경 내용을 요약합니다.

확장 버스 재설정 알림

1394ohci.sys 버스 드라이버는 확장 버스 재설정 알림을 지원합니다. 이 알림은 버스 재설정 알림의 컨텍스트에서 1394 클라이언트 드라이버에 버스의 현재 세대(예: 세대 수 및 노드 ID)에 대한 정보를 반환합니다. 이 정보를 사용하면 1394 클라이언트 드라이버가 버스 재설정 알림 처리기와 세대 수, 노드 ID 및 기타 정보의 검색을 동기화할 필요가 없습니다.

확장 버스 재설정 알림을 등록하기 위해 클라이언트 드라이버는 기존 REQUEST_BUS_RESET_NOTIFICATION I/O 요청을 사용하고 u.BusResetNotification.fulFlags 매개 변수에 새 EXTENDED_NOTIFICATION_ROUTINE 플래그를 지정합니다. EXTENDED_NOTIFICATION_ROUTINE 플래그를 지정하면 u.BusResetNotification.ResetContext 매개 변수는 BUS_RESET_DATA 구조를 가리킵니다.

PHY 패킷 지원을 위한 새로운 IOCTL

1394ohci.sys 버스 드라이버는 IEEE-1394a 사양에 정의된 대로 PHY 패킷을 보내고 받기 위한 다음과 같은 새 DDI를 노출합니다.

REQUEST_SEND_PHY_CONFIG_PACKET 대신 새 REQUEST_SEND_PHY_PACKET I/O 요청을 사용해야 합니다. 후자의 I/O 요청은 세대 수를 지정할 수 없으므로 PHY 패킷이 1394 버스의 잘못된 세대로 전송될 수 있습니다.

구성 ROM을 검색하는 새 IOCTL

REQUEST_GET_CONFIG_ROM 새 IOCTL은 노드 구성 ROM의 콘텐츠를 최대 1KB(KB) 크기까지 반환합니다. 1394ohci.sys 버스 드라이버는 레거시 1394 버스 드라이버와 동일한 1KB 구성 ROM만 지원합니다.

IEEE Bus 드라이버 DDI 변경 내용

다음 표에서는 새 1394 버스 드라이버와 레거시 1394 버스 드라이버가 노출하는 DDI의 기능 동작 변경에 대해 설명합니다.

디바이스 드라이버 인터페이스 Description
REQUEST_GET_LOCAL_HOST_INFO 1394ohci.sys 버스 드라이버는 nLevel 을 GET_HOST_CSR_CONTENTS 설정하고 SPEED_MAP_LOCATION CsrBaseAddress로 지정하는 것을 지원하지 않습니다. 속도 맵은 IEEE-1394a 사양에서 사용되지 않습니다.
REQUEST_GET_SPEED_TOPOLOGY_MAPS REQUEST_GET_SPEED_TOPOLOGY_MAPS 운영 체제의 Windows 2000 이상 버전에서는 사용되지 않습니다. 이 요청을 1394ohci.sys 보내면 STATUS_INVALID_PARAMETER 반환됩니다.
REQUEST_GET_SPEED_BETWEEN_DEVICES REQUEST_GET_SPEED_BETWEEN_DEVICES 요청을 1394ohci.sys 보내면 로컬 노드와 디바이스 간의 속도가 검색됩니다. USE_LOCAL_NODE 플래그는 u.GetMaxSpeedBetweenDevices.fulFlags 매개 변수에 설정해야 합니다.

속도 및 페이로드 크기에 대한 새 플래그

Windows 7 Windows 드라이버 키트의 1394 헤더 파일 1394.h는 더 빠른 속도와 더 큰 페이로드를 위한 새로운 플래그를 정의합니다. 이 섹션에서는 이러한 새 플래그 및 값에 대해 설명합니다.

다음 표에서는 새로 지원되는 각 속도에 대한 최대 비동기 페이로드 크기를 설명합니다.

플래그 Description
ASYNC_PAYLOAD_800_RATE 4096 800Mb/s
ASYNC_PAYLOAD_1600_RATE 4096 160Mb/s
ASYNC_PAYLOAD_3200_RATE 4096 3200Mb/s

다음 표에서는 새로 지원되는 각 속도에 대한 속도 플래그를 설명합니다.

플래그 Description
SPEED_FLAGS_800 0x08 800Mb/s
SPEED_FLAGS_1600 0x10 160Mb/s
SPEED_FLAGS_3200 0x20 3200Mb/s

다음 표에서는 새로 지원되는 각 속도에 대한 속도 코드 값을 설명합니다.

플래그 Description
SCODE_800_RATE 3 800Mb/s
SCODE_1600_RATE 4 160Mb/s
SCODE_3200_RATE 5 3200Mb/s

IEEE 1394 IOCTL 변경 내용

이 섹션에서는 새 속도 및 페이로드 크기 값을 사용하는 1394 I/O 요청에 대해 설명합니다.

REQUEST_ASYNC_READ
u.AsyncRead.nBlockSize

1394 노드에서 읽은 데이터 스트림 내의 각 블록 크기를 지정합니다. 이 매개 변수가 0이면 원시 모드 주소 지정을 사용하지 않는 한 디바이스의 최대 패킷 크기와 선택한 속도를 사용하여 이러한 읽기 요청을 발급합니다.

nBlockSize 멤버에서 ASYNC_PAYLOAD_XXX 플래그를 지정할 수 있습니다. 원시 모드 주소 지정을 사용하지 않는 한 1394 버스 driver1394ohci.sys 지원되는 최대 값을 사용하도록 클라이언트 드라이버에서 nBlockSize 멤버를 0으로 설정하는 것이 좋습니다.

원시 모드 주소 지정을 사용하는 경우 클라이언트 드라이버는 nBlockSize 멤버를 연결된 속도로 디바이스에서 지원하는 최대 비동기 페이로드 크기로 설정해야 합니다.

원시 모드 주소 지정에 대한 자세한 내용은 IEEE 1394 Bus에서 비동기 I/O 요청 패킷 보내기를 참조하세요.

REQUEST_ASYNC_WRITE

u.AsyncRead.nBlockSize

1394 노드에 기록되는 데이터 스트림 내의 각 블록 크기를 지정합니다. 이 매개 변수가 0이면 원시 모드 주소 지정을 사용하지 않는 한 선택한 속도의 최대 패킷 크기를 사용하여 이러한 쓰기 요청을 나눕니다.

nBlockSize 멤버에서 ASYNC_PAYLOAD_XXX 플래그를 지정할 수 있습니다. 원시 모드 주소 지정을 사용하지 않는 한 클라이언트 드라이버에서 nBlockSize 멤버를 0으로 설정하여 1394 버스 드라이버가 지원되는 최대 값을 사용하도록 하는 것이 좋습니다.

원시 모드 주소 지정을 사용하는 경우 클라이언트 드라이버는 nBlockSize 멤버를 연결된 속도로 디바이스에서 지원하는 최대 비동기 페이로드 크기로 설정해야 합니다.

REQUEST_ISOCH_ALLOCATE_BANDWIDTH
fulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다. 새 1394 버스 드라이버는 SpeedSelected 멤버에서 새 SPEED_FLAGS_XXX 플래그를 반환할 수 있습니다.

u.IsochAllocateBandwidth.fulSpeed

대역폭을 할당하는 데 사용할 연결 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

u.IsochAllocateBandwidth.SpeedSelected

대역폭을 할당하기 위해 선택한 실제 속도를 지정합니다. 값은 SPEED_FLAGS_XXX 중 하나입니다( fulSpeed 멤버 설명 참조).

REQUEST_ISOCH_ALLOCATE_RESOURCES
fulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.IsochAllocateResources.fulSpeed

채널에서 통신하는 데 사용할 연결 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

REQUEST_ISOCH_FREE_BANDWIDTH
fulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.IsochFreeBandwidth.fulSpeed

대역폭을 해제하는 데 사용할 연결 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

참고

새 1394 버스 드라이버는 IRB_FLAG_ALLOW_REMOTE_FREE 플래그가 설정되고 IRB_FLAG_USE_PRE_CALCULATE_VALUE 플래그가 IRB의 플래그에 설정되지 않은 경우에만 fulSpeed 멤버를 사용합니다. 다른 모든 경우에서 새로운 1394 버스 드라이버는 fulSpeed를 무시합니다.

REQUEST_SET_DEVICE_XMIT_PROPERTIES
fulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.SetDeviceXmitProperties.fulSpeed

디바이스에 대한 트랜잭션의 최대 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

REQUEST_ASYNC_STREAM
nSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.AsyncStream.nSpeed

전송 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

REQUEST_ISOCH_MODIFY_STREAM_PROPERTIESfulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.IsochModifyStreamProperties.fulSpeed

디바이스에 대한 트랜잭션의 최대 속도를 지정합니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

REQUEST_GET_SPEED_BETWEEN_DEVICES
fulSpeed 멤버에서 SPEED_FLAGS_XXX 플래그를 지정할 수 있습니다.

u.GetMaxSpeedBetweenDevices.fulSpeed

원본 디바이스와 대상 디바이스 집합 간에 가능한 최대 트랜잭션 속도를 지정합니다. 반환된 값은 모든 디바이스가 동시에 지원하는 최대 속도입니다. 가능한 속도 값은 SPEED_FLAGS_XXX입니다. 여기서 XXX 는 mbps의 (근사치) 전송 속도입니다.

참고

클라이언트 드라이버는 u.GetMaxSpeedBetweenDevices.fulFlags 에서 USE_SCODE_SPEED 플래그를 지정하여 SCODE_XXX_RATE 속도 코드 값을 SPEED_FLAGS_xxx 값 대신 fulSpeed 로 반환하도록 요청할 수도 있습니다.

IEEE 1394 드라이버 스택
Windows 7의 IEEE 1394 버스 드라이버