Share via


estrutura ISOCH_DESCRIPTOR (1394.h)

A estrutura ISOCH_DESCRIPTOR descreve um buffer a ser anexado ou detalhado de um identificador de recurso, usando as solicitações REQUEST_ISOCH_ATTACH_BUFFERS e REQUEST_ISOCH_DETACH_BUFFERS .

Sintaxe

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;

Membros

fulFlags

Especifica vários sinalizadores para esse descritor isócrono. Cada buffer anexado no canal tem um descritor isoch associado.

Antes de usar um buffer específico para uma operação de E/S, o controlador de host examina os sinalizadores no descritor isoch do buffer para obter instruções sobre como lidar com os dados. Em alguns casos, o controlador host continuará observando o comportamento especificado por esses sinalizadores durante operações de E/S com buffers subsequentes. Por exemplo, se os sinalizadores do descritor isoch indicarem que o controlador de host deve filtrar pacotes que não têm um determinado valor Sy registrado em ulSynch, o controlador de host continuará essa operação de filtragem com os dados nos buffers a seguir, mesmo que os descritores isoch associados a esses buffers não tenham os mesmos sinalizadores definidos.

A tabela a seguir descreve os sinalizadores que podem ser atribuídos a esse membro.

Sinalizador Transação isocrona Descrição
DESCRIPTOR_SYNCH_ON_SY Escutar Começando com os dados no buffer atual, o controlador de host ignora todos os pacotes que não contêm um valor Sy específico inserido no pacote isócrono. O valor Sy é especificado em ulSynch. Se o sinalizador DESCRIPTOR_USE_SY_TAG_IN_FIRST estiver definido, o controlador host retomará a leitura de todos os pacotes depois de encontrar o primeiro pacote com o valor Sy especificado em ulSynch. Se o sinalizador DESCRIPTOR_USE_SY_TAG_IN_FIRST não estiver definido, o controlador de host continuará filtrando, lendo pacotes com o valor Sy indicado e ignorando todos os outros.
DESCRIPTOR_SYNCH_ON_TAG Escutar Começando com os dados no buffer atual, o controlador de host ignora todos os pacotes que não contêm um valor de marca específico inserido no pacote isócrono. O valor da marca é especificado em ulTag. Se o sinalizador DESCRIPTOR_USE_SY_TAG_IN_FIRST estiver definido, o controlador de host retomará a leitura de todos os pacotes depois de encontrar o primeiro pacote com o valor de marca especificado em ulTag. Se o sinalizador DESCRIPTOR_USE_SY_TAG_IN_FIRST não estiver definido, o controlador de host continuará filtrando, lendo pacotes com o valor de marca indicado e ignorando todos os outros.
DESCRIPTOR_SYNCH_ON_TIME Ouça, Fale O controlador host aguarda um tempo de ciclo isócrono específico antes de continuar a operação. O tempo de ciclo é especificado no membro CycleTime . Começando com os dados no buffer atual, o controlador de host ignora todos os pacotes que não contêm um tempo de ciclo de CycleTime. Depois de encontrar um pacote com o tempo de ciclo indicado, o controlador de host retoma o processamento de todos os pacotes.
DESCRIPTOR_USE_SY_TAG_IN_FIRST Escutar A filtragem nos membros Sy ou Tag ocorre somente até que o primeiro pacote correspondente seja recebido. Esse sinalizador é usado em conjunto com os sinalizadores DESCRIPTOR_SYNCH_ON_SY e DESCRIPTOR_SYNCH_ON_TAG. Esses dois sinalizadores iniciam uma operação de filtragem com base nos valores em Sy ou Tag, a menos que DESCRIPTOR_USE_SY_TAG_IN_FIRST também esteja definido, nesse caso, esses sinalizadores iniciam uma sincronização em vez de uma operação de filtragem. Nesta operação de sincronização, o controlador host ignora todos os pacotes até descobrir um pacote com o valor correto de Sy ou Marca . Depois de descobrir um pacote com o valor indicado de Sy ou Marca , o controlador host retoma o processamento de todos os pacotes.
DESCRIPTOR_TIME_STAMP_ON_COMPLETION Ouça, Fale Depois que o controlador de host concluir seu DMA de ou para esse buffer, armazene o tempo de ciclo no membro CycleTime do ISOCH_DESCRIPTOR.
DESCRIPTOR_PRIORITY_TIME_DELIVERY Tlk Se o controlador de host local não estiver pronto para uma gravação, não tente novamente a gravação mais tarde. (O comportamento padrão é tentar novamente até que o controlador de host esteja pronto.)
DESCRIPTOR_HEADER_SCATTER_GATHER Tlk O controlador host trata os dados nesse buffer como uma sequência de cabeçalhos. O controlador de host prepara um cabeçalho desse buffer para cada pacote que ele monta dos dados no próximo buffer anexado.

Mdl

Especifica o MDL que representa um buffer no qual os dados estão ou estarão contidos.

ulLength

Especifica o comprimento do Mdl.

nMaxBytesPerFrame

Especifica o máximo de bytes contidos em cada quadro isócrono. Nas gravações, os dados no buffer são divididos em pacotes isócronos desse tamanho.

ulSynch

Para solicitações IsochTalk, se o sinalizador DESCRIPTOR_SYNCH_ON_SY estiver definido, esse membro especificará o campo Sy do pacote de saída. Para REQUEST_ISOCH_LISTEN solicitações, se o sinalizador DESCRIPTOR_SYNCH_ON_SY estiver definido, esse membro especificará o valor que o controlador host corresponderá ao campo Sy em cabeçalhos de pacote isócrono.

ulTag

Para solicitações isochTalk, esse membro especifica o campo Marca do pacote de saída. Para REQUEST_ISOCH_LISTEN solicitações, se o sinalizador DESCRIPTOR_SYNCH_ON_TAG estiver definido, esse membro especificará o valor que o controlador host corresponderá ao campo Marca em cabeçalhos de pacote isócrono.

CycleTime

Se o sinalizador DESCRIPTOR_SYNCH_ON_TIME estiver definido, esse membro especificará o tempo de ciclo isócrono para sincronizar. (A resolução de tempo é por ciclo isócrono. O membro CycleOffset do tempo de ciclo não é usado.) Se o sinalizador DESCRIPTOR_TIME_STAMP_ON_COMPLETION estiver definido, o motorista do barramento preencherá esse membro com o tempo de ciclo isocrono após a conclusão da operação que usou esse buffer.

Callback

Ponteiro para uma rotina de retorno de chamada. Se não for NULL, o motorista do barramento chamará essa rotina para indicar que os buffers anexados associados estão prontos para serem desanexados. O retorno de chamada é executado em DISPATCH_LEVEL IRQL. O retorno de chamada é do seguinte tipo:

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

Context1

Especifica o primeiro parâmetro quando o motorista do ônibus chama a rotina passada em Retorno de chamada.

Context2

Especifica o segundo parâmetro quando o motorista do ônibus chama a rotina passada em Retorno de chamada.

status

Para REQUEST_ISOCH_ATTACH_BUFFERS solicitações, esse membro especifica o status da operação de anexação nesse buffer. Se ocorrer um erro durante o processamento da solicitação de REQUEST_ISOCH_ATTACH_BUFFERS, o motorista do ônibus preencherá o membro status com um código de erro apropriado.

Nota O membro status deve ser inicializado para STATUS_SUCCESS antes que a solicitação de REQUEST_ISOCH_ATTACH_BUFFERS seja feita.

DeviceReserved[8]

Reservado.

BusReserved[8]

Reservado.

PortReserved[16]

Reservado.

Comentários

Nem todos os sinalizadores de DESCRIPTOR_XXX têm suporte em todos os hardwares. O driver do dispositivo pode usar a solicitação REQUEST_GET_LOCAL_HOST_INFO, com nLevel = GET_HOST_CAPABILITIES, para determinar quais sinalizadores de DESCRIPTOR_XXX têm suporte. O driver do barramento retorna um ponteiro para uma estrutura GET_LOCAL_HOST_INFO2, cujo membro HostCapabilities contém sinalizadores que determinam quais sinalizadores o controlador host dá suporte. A tabela a seguir lista quais sinalizadores DESCRIPTOR_XXX exigem suporte de hardware e o sinalizador HostCapabilities correspondente que o driver deve marcar.

sinalizadores de DESCRIPTOR_XXX HostCapabilities
DESCRIPTOR_SYNCH_ON_TIME HOST_INFO_SUPPORTS_START_ON_CYCLE
DESCRIPTOR_HEADER_SCATTER_GATHER HOST_INFO_SUPPORTS_ISO_HDR_INSERTION

Se o driver definir o sinalizador DESCRIPTOR_HEADER_SCATTER_GATHER, o controlador de host combinará os dados do buffer especificado em Mdl com os dados do próximo buffer anexado. (Os buffers subsequentes não são afetados.) Cada quadro do buffer é anexado a um quadro do próximo buffer (na ordem em que os dados no buffer são divididos em quadros) e enviados como os dados do próximo pacote isócrono. O número de quadros de cada buffer deve corresponder ou o motorista do ônibus retorna STATUS_INVALID_PARAMETER para a próxima solicitação de REQUEST_ISOCH_ATTACH_BUFFER.

Requisitos

Requisito Valor
Cabeçalho 1394.h (inclua 1394.h)

Confira também

GET_LOCAL_HOST_INFO2

REQUEST_ISOCH_ALLOCATE_RESOURCES

REQUEST_ISOCH_ATTACH_BUFFERS

REQUEST_ISOCH_DETACH_BUFFERS

REQUEST_ISOCH_LISTEN

REQUEST_ISOCH_TALK