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.
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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de