Partilhar via


Tratamento de interrupções do cartão SD

Os controladores de cartões Secure Digital (SD) não têm rotinas de serviço de interrupção (ISRs) e não adquirem recursos de solicitação de interrupção (IRQ). O driver de barramento SD deteta e intercepta interrupções de hardware e, em seguida, reporta-as ao driver de dispositivo através da rotina de notificação de interrupção PSDBUS_CALLBACK_ROUTINE, como explicado nas secções Secure Digital (SD) Driver Stack e Abrindo e inicializando uma interface de barramento SD.

O driver de dispositivo não precisa concluir o processamento de interrupção no contexto da rotina de retorno de chamada de notificação de interrupção. O driver pode voltar da rotina de callback e concluir o processamento de interrupção no seu próprio contexto. Quando o driver termina de processar a interrupção, ele informa o controlador de barramento por uma chamada explícita para uma rotina de reconhecimento de interrupção fornecida com a interface de barramento SD. Para obter mais informações sobre a rotina de confirmação de interrupção, consulte PSDBUS_ACKNOWLEDGE_INT_ROUTINE. Quando o motorista do ônibus recebe essa chamada, ele reativa a interrupção.

Os controladores de dispositivos SD têm duas opções em relação aos níveis de IRQ (IRQLs) em que operam. Um driver SD pode funcionar exclusivamente em PASSIVE_LEVEL, ou pode funcionar em DISPATCH_LEVEL durante a rotina de retorno de chamada de notificação de interrupção e em PASSIVE_LEVEL o resto do tempo. Quando um driver de dispositivo SD funciona exclusivamente em PASSIVE_LEVEL, o controlador de barramento assume a responsabilidade pela sincronização de interrupções. Escolha esta opção se o seu dispositivo puder operar sem limites estritos de latência de interrupção, pois simplificará o design do seu driver. Além de descarregar a tarefa de sincronização de interrupção no motorista do ônibus, há outros benefícios. Por exemplo, os condutores têm de transferir frequentemente dados em resposta a uma interrupção. Se a rotina de retorno de chamada do driver estiver sendo executada em PASSIVE_LEVEL, ele estará livre para fazer uma operação de E/S síncrona em vez de assíncrona. Se a rotina de retorno de chamada for executada em DISPATCH_LEVEL, o driver deverá aguardar até que esteja sendo executado em um IRQL mais baixo antes de fazer E/S síncrona.

Um driver de dispositivo SD especifica o IRQL em que será executado quando inicializar a interface de bus SD. Para executar em DISPATCH_LEVEL na rotina de retorno de chamada de notificação de interrupção, o driver deve definir o CallbackAtDpcLevel membro da estrutura SDBUS_INTERFACE_PARAMETERS para TRUE e passar essa estrutura para a rotina de inicialização da interface. Para obter uma descrição da rotina da interface, consulte PSDBUS_INITIALIZE_INTERFACE_ROUTINE. Para executar exclusivamente em PASSIVE_LEVEL, o driver deve definir CallbackAtDpcLevel como FALSE.