> > > > Aziz Kezzou wrote: > > > Hi all, > > > I am trying to implement a small kld pseudo-device driver on FreeBSD 5.3 > > > that > > > behaves just like a socket with regards to the select system call. > > > > > > Currently, I am using the sample echo pseudo-device driver from > > > http://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/driverbasics-char.html > > > as an example. However, whenever I call select on the file > > > descriptor of "/dev/echo" it always returns even when there is no data > > > to be read. > > > > > > I looked at the socket code and it looks like I need to provide my own > > > "fo_select" function in the fileops data structure. Am i right ? How > > > do I do that ? The sample echo pseudo-device driver above uses > > > "struct cdevsw" instead... > > > > > > Thanks > > > -aziz > > > _______________________________________________ > > > freebsd-net@freebsd.org mailing list > > > http://lists.freebsd.org/mailman/listinfo/freebsd-net > > > To unsubscribe, send any mail to "[EMAIL PROTECTED]" > > > > > > > > look at spec_poll() > > I beleive that when your device is opened the fileops{} will > > point to the spec ops and you're code will be entered via > > spec_poll() - now you just need to implement the poll/select notion > > for your device. > > > > Thanks, > Actually, il turned out to be very simple. > I needed only to provide a "d_poll" function as part of the structure > cdevsw, as follows : > > /* Character device entry points */ > static struct cdevsw echo_cdevsw = { > .d_version = D_VERSION, > .d_open = echo_open, > .d_close = echo_close, > .d_read = echo_read, > .d_write = echo_write, > .d_poll = echo_poll, > .d_name = "echo", > }; > > with echo_poll : > static int > echo_poll(struct cdev *dev, int events, struct thread *td) > { > > uprintf( "echo_poll called : data_available = %d!\n", data_available ); > if(data_available == 0) > return 0; > data_available = 0; > return 1; > } >
Now the question is, if I don't have any data available when select (i.e d_poll ) is called, how do I notify select when data arrives ? looks like "d_poll" is called only once (the name is a bit misleading here ;-) , isn't it ? Any hints ? Thanks. -aziz _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"