(C) 1997 Dmitry A. Fedorov, fedorov@inp.nsk.su

irq(4)

NAME
	irq -  .

SYNOPSIS
	#include <linux/irq.h>

	int fd=open(devname,openflags);

	int rc=irq_request(int fd, int sig, int flags);
	int rc=irq_free(int fd);

	int rc=irq_enable(int fd);
	int rc=irq_disable(int fd);

	int rc=irq_skipping_on(int fd);
	int rc=irq_skipping_off(int fd);

	int rc=irq_skipping_consent(int fd);
	int rc=irq_skipping_inconsent(int fd);

	int rc=irq_simulate(int fd);

	void irq_simulate(int irq);

	int rc=irq_stat(int fd, struct irq_stat* stat);

	int nsel=select(int n,	fd_set* readfds,
							fd_set* writefds,
							fd_set* exceptfds, struct timeval* timeout);

DESCRIPTION
	irq[0-15] -  ,  
	    (IRQ).



	int fd=open(devname,openflags);

		devname
			   "/dev/irqN"

		N
			 IRQ: 0..NR_IRQS-1.
			NR_IRQS   /usr/include/asm/irq.h

		openflags
			    O_ACCMODE,   
			O_RDONLY  O_WRONLY  O_RDWR (POSIX, not GNU!),
			 /usr/include/asm/fcntl.h

		 open(2)



	int rc=irq_request(int fd, int sig, int flags);

		  -     
		 .       
		    (IRQ) .
		        
		O_RDWR.
		  ,  irq_simulate()  irq_stat(), 
		    irq_request().

		sig
			    -  
			 -1,      select(2).
			   ,  9,   
			SIGUSR1	 SIGUSR2.
			 sigaction(2), signal(7)

		flags
			   IRQ_SHARED, IRQ_SKIPPING,
			IRQ_SKIPPING_CONSENT

			IRQ_SHARED
				   (share) IRQ line  
				 ()   ( 
				,   ). 
				,     , 
				     . 
				     ,  
				    ,  .

			IRQ_SKIPPING
				     ,
				   ,    
				 ( irq_skipping_on()).

			IRQ_SKIPPING_CONSENT
				    
				( irq_skipping_consent()).

		 request_irq(9)

		     
		  /proc/interrupts  :

			irq:pid.sig -  ,   
			irq:pid     -  ,   ,

				pid -  - 
				sig -  ,    

		:
			$ cat /proc/interrupt

			 0:    3294731   timer
			 1:      70305   keyboard
			 2:          0   cascade
			 3:      78645 + serial
			 4:          8 + serial
			10:          0   irq:2589.12, irq:2592, irq:2594.12, irq:2596
			12:     635424   NE2000
			13:          1   math error
			14:      99101 + ide0
			15:          0 + ide1



	int rc=irq_free(int fd);

		 .   irq_request().
		 free_irq(9)



	int rc=irq_enable(int fd);
	int rc=irq_disable(int fd);

		/     (PIC).
		    .
		 enable_irq(9), disable_irq(9)



	int rc=irq_skipping_on(int fd);
	int rc=irq_skipping_off(int fd);

		/     ,
		   ,     .
		  . off()   
		  on(),   off()    
		 on(),    .



	int rc=irq_skipping_consent(int fd);

		    .



	int rc=irq_skipping_inconsent(int fd);

		    .



	int rc=irq_simulate(int fd);

		 .  ,  
		,      
		        ,
		       (irq_disable()).



	void irq_simulate(int irq);

		     .
		     
		.



	int rc=irq_stat(int fd, struct irq_stat* stat);

		 .



	int nsel=select(int n,	fd_set* readfds, fd_set* writefds,
							fd_set* exceptfds, struct timeval* timeout);

		 .
		  irq     readfds.
		 select(2).



RETURN VALUE
	fd
		open()      
		,  open(2).
	rc
		   ioctl(2).


ERRORS

	EBADFD	Assertion failed, driver developer's error,
		see kernel log for a message.


	open();

		ENXIO	No such device or address:
				IRQ number >= NR_IRQS
				   .

		EINVAL	Invalid argument:
				openflags  -  O_ACCMODE.

	irq_request();

		EACCES	Permission denied:
				    .

		EINVAL	Invalid argument:
				 ()  ,
				  .

		EBUSY	Device or resource busy:
				     IRQ,
				  /     IRQ
				     IRQ    ,
				   ,   IRQ 
				  ,    IRQ "",
				  irq  "".

		ENOMEM	Out of memory:
				     
				      /proc/interrupts

	irq_free();

		EPERM	Operation not permitted:
				IRQ not requested.

		EACCES	Permission denied:
				    
				  .

	irq_enable();

		EPERM	Operation not permitted:
				IRQ not requested or shared.

		EACCES	Permission denied:
				    
				  .

	irq_disable();

		EPERM	Operation not permitted:
				IRQ not requested or shared.

		EACCES	Permission denied:
				    
				  .

	irq_skipping_on();

		EPERM	Operation not permitted:
				IRQ not requested.

		EACCES	Permission denied:
				    
				  .

	irq_skipping_off();

		EPERM	Operation not permitted:
				IRQ not requested.
				   off()    on().

		EACCES	Permission denied:
				    
				  .

	irq_skipping_consent();
	irq_skipping_inconsent();

		EPERM	Operation not permitted:
				IRQ not requested.

		EACCES	Permission denied:
				    
				  .

	irq_simulate();

		EACCES	Permission denied:
				    .


FILES
	/dev/irq[0-15]

AUTHOR
	(C) 1997 Dmitry A. Fedorov, fedorov@inp.nsk.su

BUGS
	irq_simulate()     
	(disable_irq(9))      .

	  irq_stat().

