Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] request_irq, free_irq - déclare un gestionnaire d'interruptions [size=18] [b]Résumé[/b] [/size] [b]#include
[/b] [b][/b] [b]#include
[/b] [b][/b] [b]#include
[/b] [b][/b] [b]#include
[/b] .HP [b][i]int request_irq(unsigned int irq ,[/i][/b] [b][i]void (* gest )(int, void *, struct pt_regs *),[/i][/b] [b][i]unsigned long drap_interrupt , const char * devname ,[/i][/b] [b][i]void * dev_id );[/i][/b] [b][i]void free_irq(unsigned int irq , void * dev_id );[/i][/b] [size=18] [b]Description[/b] [/size] [b]Usage[/b] La fonction [b]request_irq()[/b] demande que la fonction indiquée (le gestionnaire) soit appellée à chaque fois que le noyau reçoit une certaine interruption. Le gestionnaiore peut lui-même enregistrer un gestionnaire bas, chargé de réaliser le gros du traitement de manière asynchrone. Consultez [b]init_bh (9) [/b] pour plus d'information sur les gestionnaires d'interruptions asynchrones. Le paramètres [i]irq[/i] est le numéro de l'interruption à gérer. Il doit ête inférieur à [b]NR_IRQS[/b] (16 sur les sytèmes à base d'architecture Intel ix86 alias ia32) ; il peut y avoir d'autres limitations sur cette valeur. Consultez [b]arch/*/kernel/irq.c ( intr.c[/b] pour les machines à base de Motorola 680x0 : m68k) pour plus d'informations. [i]gest[/i] est un pointeur sur la fonction chargée de gérer les interruptions. Le gestionnaire se verra passer les paramètres suivants lors de son exécution :[table][row][col] [/col][col] [b][i]int irq[/i][/b] [table][row][col] [/col][col]Le numéro d'interruption. En testant la valeur de ce paramètre, il est possible d'associer la gestion de plusieurs interruptions différentes à une même fonction.[/col][/row][/table] [b][i]void * dev_id[/i][/b] [table][row][col] [/col][col]Le numéro de périphérique de ce gestionnaire (voir plus bas).[/col][/row][/table] [b][i]struct pt_regs * regs[/i][/b] [table][row][col] [/col][col]Les registres stockés sur la pile du processus qui a été interrompu. Normalement, personne ne devrait avoir à s'en préoccuper ; cependant ils peuvent être lus pour, par exemple, déterminer si le processus suspendu était en mode utilisateur ou noyau.[/col][/row][/table][/col][/row][/table] [i]drap_interrupt[/i] est, comme l'indique son nom, un masque de drapeaux (chacun représenté par un bit) relatifs à ce gestionnaire d'interruption. Les bits prédéfinis sont :[table][row][col] [/col][col] [b]SA_INTERRUPT[/b] [table][row][col] [/col][col]Ce bit indique que le gestionnaire d'interruptions est un gestionnaire rapide. La sémantique de ce drapeau est défini plus loin.[/col][/row][/table] [b]SA_SHIRQ[/b] [table][row][col] [/col][col]Ce bit indique que le gestionnaire supporte le partage de l'interruption avec d'autres gestionnaires (voir aussi [i]* dev_id[/i] plus loin).[/col][/row][/table] [b]SA_SAMPLE_RANDOM[/b] [table][row][col] [/col][col]Ce bit indique que cette interruption peut être utilisée comme générateur d'entropie pour [i]/dev/random[/i] et [i]/dev/urandom[/i] (voir [b]drivers/char/random.c ).[/b] [Ndt : voir aussi [b]random (4), urandom (4)][/b][/col][/row][/table] [b]SA_PROBE[/b] [table][row][col] [/col][col]Ce bit indique que cette interruption est autodétectée et que le gestionnaire installé est bidon. Cette valeur était prévue pour être utilisée en interne par [b]probe_irq_on()[/b] (q.v.), mais n'est plus utilisée dans les noyaux 2.1.x. En fait, même dans les noyaux 2.0.x, elle n'était déja plus utilisée dans l'architecture MIPS. Vous ne devriez donc pas utiliser cette valeur à moins que vous ne sachiez ce que vous faites.[/col][/row][/table] [b]SA_STATIC_ALLOC [/b] [table][row][col] [/col][col](Sparc/Sparc64 seulement). Ce bit demande à ce que la structure [b]struct irqaction[/b] (voir plus loin) soit ajoutée à une tableau statiquement préalloué de quatre gestionnaires plutôt que dans la table habituelle [b]irq_action[] .[/b] Ceci est utilisé pour les interruptions qui doivent être utilisées tôt dans le processus d'initialisation du système, avant que [b]kmalloc_init()[/b] soit appelé.[/col][/row][/table][/col][/row][/table] Le paramètre [i]devname[/i] est un nom court pour le périphérique et est affiché dans la liste [i]/proc/interrupts[/i]. Le paramètre [i]dev_id[/i] est le numéro d'identification du périphérique. Ce paramètre est fréquemment initialisé à NULL, mais ne devrait pas l'être dans le cas des interruptions partagées. Cela n'a aucune importance en utilisation courante, mais quand [b]free_irq()[/b] est appelée, le pilote correct est appelé. Comme son type est [b]void * ,[/b] il peut pointer sur n'importe quoi, comme une structure spécifique à un périphérique, ou même un espace mémoire vide, mais soyez certain de passer le même pointeur à [b]free_irq() .[/b] La fonction [b]free_irq()[/b] libère un gestionnaire d'interruption. Elle prend en paramètres, le numéro d'interruptions à désenregistrer et le numéro de périphérique à désenregistrer. Vous devriez passer la même valeur que celle passée à [b]request_irq() . [/b] Vous ne devriez probablement jamais désenregistrer un autre gestionnaire à moins de savoir ce que vous faites. [b]Opération[/b] Sur la plupart des architectures, [b]request_irq()[/b] alloue de la mémoire pour une structure de type [b]struct irqaction , [/b] remplit ses champs, et l'ajoute à la table [b]irq_action[] .[/b] [b]enable_irq()[/b] est ensuite appelée pour signaler au noyau de commencer à délivrer les interruptions au gestionnaire nouvellement installé. Ce processus est très différent sur les machines à base de m68k, où il dépend du sous-type de machine (Amiga, Atari, etc.). [b]free_irq()[/b] enlève simplement les entrées que [b]request_irq()[/b] a ajoutées. NB : certains de ces noms changent sur certaines architectures (par exemple, [b]struct irqaction[/b] est appelée [b]struct irq_action[/b] sur les Power PC). Si vous désirez approfondir vos connaissances sur le fonctionnement interne de ces fonctions, vous devriez lire les sources, car une partie de ces informations peut avoir changé lorsque vous lirez cette page (dans ce cas, signalez-le moi afin que je mette à jour cette page). Gestionnaire d'Interruption Rapides Un gestionnaire d'inrruption « rapide » (dont le bit [b]SA_INTERRUPT[/b] est positionné) a un comportement différent d'un gestionnaire « lent » : [table][row][col] [/col][col] Sur ix86 et MIPS, durant l'exécution du gestionnaire, les interruptions sont désactivées (elles sont activées par défaut sur ces machines et désactivées sur les autres). Sur MIPS, le retour est plus rapide. Sur Alpha, MIPS, Sparc et Sparc64, un gestionnaire lent et un gestionnaire rapide ne peuvent pas partager la même interruption. Sur toutes les architectures, exceptés les m68k et les ix86, un `+' est affiché entre le compteur d'interruptions et le nom du périphérique dans [b]/proc/interrupts . [/b][/col][/row][/table] La distinction d'interruptions lente/rapide est lentement dépréciée. Par exemple, sous 2.0.x sur ix86, [b]SA_INTERRUPT[/b] activait un retour rapide comme il le fait encore sur le MIPS ; Cette distinction a été supprimée dans le 2.1.x. [size=18] [b]Valeur renvoyée[/b] [/size] En cas de succès, [b]request_irq()[/b] renvoie 0 si tout s'est déroulé normalement. Votre gestionnaire d'interruptions commencera à recevoir des interruptions immédiatement. En cas d'échec, [b]request_irq()[/b] renvoie :[table][row][col] [/col][col] [b]-EINVAL[/b] [table][row][col] [/col][col]Le numéro d'interruption indiqué n'est pas valide ou est réservé, ou alors, un pointeur NULL a été passé pour le paramètre [i]gest() .[/i][/col][/row][/table] [b]-ENOMEM[/b] [b]request_irq()[/b] [table][row][col] [/col][col]ne peut pas allouer suffisamment de mémoire pour quelque chose (probablement la structure [b]struct irqaction ).[/b][/col][/row][/table] [b]-EBUSY[/b] [table][row][col] [/col][col]L'interruption indiquée est déjà gérée, et ne peut être partagée entre plusieurs gestionnaires. Cette erreur se produit lorque le gestionnaire en cours d'enregistrement ou celui déja enregistré n'a pas le bit [b]SA_SHIRQ[/b] activé dans son champ [i]drap_interrupt .[/i] De plus, sur la plupart des architectures, tous les gestionnaires partageant la même interruption doivent avoir la même « vitesse », c'est-à-dire être soit tous soit aucun d'entre eux ont le bit [b]SA_INTERRUPT[/b] positionné. Enfin, il est possible que votre architecture ne supporte pas le partage de l'interruption que vous voulez utiliser.[/col][/row][/table] [b]-ENXIO[/b] [table][row][col] [/col][col]Sur m68k, cette valeur de retour indique un mauvais numéro d'interruption.[/col][/row][/table][/col][/row][/table] [b]free_irq()[/b] ne renvoie aucune valeur. [size=18] [b]Disponibilité[/b] [/size] Linux 2.1+. Les informations de cette page devraient fonctionner avec un noyau 2.0.x, mais de légères différences d'implémentation peuvent être rencontrées (particulièrement dans le comportement de [b]SA_INTERRUPT[/b] sur les machines à base d'ix86). Les versions plus anciennes que la 2.0.0 possèdent ces fonctions mais ne passent pas le paramètre [i]dev_id .[/i] Si vous voulez voir votre code fonctionner sur des versions plus anciennes et plus récentes que le 2.0, vous devriez protéger votre code avec des macros du préprocesseur utilisant [b]LINUX_VERSION_CODE . [/b] [size=18] [b]Voir aussi[/b] [/size] [b]init_bh (9), probe_irq_on (9), [/b] [b]arch/*/kernel/irq.c , arch/*/kernel/entry.S , [/b] [b]include/linux/interrupt.h , include/asm*/signal.h .[/b] [size=18] [b]Auteur[/b] [/size] [i]Neil Moore < amethyst@maxwell.ml.org >[/i] [size=18] [b]Traduction[/b] [/size] [i]Thierry Vignaud < tvignaud@mandrakesoft.com >, 2000[/i] [size=18] [b]Bugs[/b] [/size] Ce n'est pas exactement un bug, mais [b]request_irq()[/b] ne fontionne pas [i]tout à fait[/i] sur m68k comme sur les autres architectures. Vous devriez lire [b]arch/m68k/kernel/ints.c , arch/m68k/atari/ataints.c , [/b] [b]arch/m68k/amiga/amiints.c , et arch/m68k/amiga/cia.c[/b] si vous souhaitez écrire un pilote pour l'un de ces systèmes.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?