public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* RE: How to notify a user process from within a driver
@ 2003-05-01 21:54 Lee, Shuyu
  2003-05-01 22:29 ` Hua Zhong
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Lee, Shuyu @ 2003-05-01 21:54 UTC (permalink / raw)
  To: linux-kernel; +Cc: 'root@chaos.analogic.com', 'Alan Cox'

Richard and Alan,

Thank you for the info. Given the prototype for poll() is
"int poll(struct pollfd *ufds, unsigned int nfds, int timeout);", and pollfd
is struct pollfd {int fd; short events; short revents};, how do I
communicate complex info to the driver?

For example, assuming there are 8 input lines on my hardware, and the user
wants to be notified in the following three cases:
1) input on Line 1 only,
2) input on either Line 2 or Line 3,
3) input on both Line 4 and Line 5,
how do I pass that info to the driver? Also, other than POLLERR and POLLHUP,
can I pass back to the user more descriptive error messages?

Thanks,
Shuyu


 -----Original Message-----
From: 	Richard B. Johnson [mailto:root@chaos.analogic.com] 
Sent:	Thursday, May 01, 2003 3:32 PM
To:	Lee, Shuyu
Cc:	linux-kernel@vger.kernel.org
Subject:	Re: How to notify a user process from within a driver

On Thu, 1 May 2003, Lee, Shuyu wrote:

> Hello, All.
>
> I am working on a device driver. One of the features of the hardware is
> multi-channel I/O control. In order for a user process to communicate with
> the hardware, my design is for the user process to call the driver's ioctl
> to register a semaphore for each I/O channel, then wait on them. When the
> hardware detects an input, the ISR then BH will wake up the user process.
> This sounds straightforward in principle. Because there are two types of
> semaphores in Linux (one for kernel, and one for user), I am not sure how
> this can be accomplished. Any help would be greatly appreciated.
>
> My development environment is:
> 1) OS:  RedHat 7.2 (Linux 2.4.7),
> 2) gcc: 3.2.1,
> 3) PC:  one P-III (HP kayak) with 128Mbyte of memory,
> 4) Bus: PCI.
>
> Shuyu
>

You normally use poll() or select() for this. It's called poll()
inside the driver.

The user-mode code sleeps in poll() or select(). When your
driver ISR wants to wake up the process, it calls
wake_up_interruptible() from within the ISR.

Cheers,
Dick Johnson
Penguin : Linux version 2.4.20 on an i686 machine (797.90 BogoMips).
Why is the government concerned about the lunatic fringe? Think about it.

^ permalink raw reply	[flat|nested] 7+ messages in thread
* How to notify a user process from within a driver
@ 2003-05-01 19:23 Lee, Shuyu
  2003-05-01 19:09 ` Alan Cox
  2003-05-01 19:32 ` Richard B. Johnson
  0 siblings, 2 replies; 7+ messages in thread
From: Lee, Shuyu @ 2003-05-01 19:23 UTC (permalink / raw)
  To: linux-kernel

Hello, All.

I am working on a device driver. One of the features of the hardware is
multi-channel I/O control. In order for a user process to communicate with
the hardware, my design is for the user process to call the driver's ioctl
to register a semaphore for each I/O channel, then wait on them. When the
hardware detects an input, the ISR then BH will wake up the user process.
This sounds straightforward in principle. Because there are two types of
semaphores in Linux (one for kernel, and one for user), I am not sure how
this can be accomplished. Any help would be greatly appreciated.  

My development environment is:
1) OS:  RedHat 7.2 (Linux 2.4.7),
2) gcc: 3.2.1,
3) PC:  one P-III (HP kayak) with 128Mbyte of memory,
4) Bus: PCI.

Shuyu


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2003-05-02 11:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-01 21:54 How to notify a user process from within a driver Lee, Shuyu
2003-05-01 22:29 ` Hua Zhong
2003-05-01 22:37 ` Chris Friesen
2003-05-02 11:53 ` Richard B. Johnson
  -- strict thread matches above, loose matches on Subject: below --
2003-05-01 19:23 Lee, Shuyu
2003-05-01 19:09 ` Alan Cox
2003-05-01 19:32 ` Richard B. Johnson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox