Unix Technical Forum

Device driver: wsio_get_isc() returns NULL

This is a discussion on Device driver: wsio_get_isc() returns NULL within the HP-UX Operating System forums, part of the Unix Operating Systems category; --> Hello. I'm writing a monolithic DKLM and I'm finding that wsio_get_isc() always seems to return a NULL 'isc' pointer ...


Go Back   Unix Technical Forum > Unix Operating Systems > HP-UX Operating System

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 01-16-2008, 07:20 PM
Jimmie Mayfield
 
Posts: n/a
Default Device driver: wsio_get_isc() returns NULL


Hello. I'm writing a monolithic DKLM and I'm finding that wsio_get_isc()
always seems to return a NULL 'isc' pointer even though the return code
indicates success.

For example, on the driver_ioctl() entry point:

mydriver_ioctl(dev_t dev, int flag)
{
struct isc_table_type *isc;
...
rc = wsio_get_isc(dev, &isc, &mydriver_wsio_info);
if (rc != 1) {
msg_printf("rc != 1\n");
return EIO;
}

if (!isc) {
printf("NULL!\n");
return EIO;
}
...
}


Now, section 10.8 of HP's DDK FAQ attempts to explain this problem:

"The device instance number is supposed to be encoded in bits 16-23
(ie the third byte)...If the dev_t that is passed down has this encoding,
wsio_get_isc() will return a valid ISC pointer."


According to 'ioscan -fun', my device's instance number is 0:
unknown 0 10/6/3/0 mydrv CLAIMED INTERFACE PCI Co-Processor

This agrees with the character special file I created in /dev:
crw-rw-rw- 1 root sys 254, 0 Aug 18 21:17 my_device

Furthermore, it agrees with the dev_t that's being passed to my ioctl()
routine: fe000000 (major 254, minor 0x000000).

(It is interesting that ioscan does not report /dev/my_device. Is that
indicative of a problem? If so, what?)

So...I don't understand. The kernel is forming a dev_t value and passing it
to my ioctl() routine (or open(), or close()). However when I attempt to use
WSIO to get an isc pointer from that dev_t value, the returned pointer
is NULL. The FAQ implies that this is because the dev_t value was somehow
invalid.

What am I not understanding here?

Any insights would be greatly appreciated. Thanks.


Jimmie


(Sorry about the long-winded post. I've wasted a day pursing this problem
and I feel I'm no closer to the answer now than I was when I started. As
an aside, I have to admit driver development for Solaris and in fact Linux
is a lot less frustrating than it has been for HP-UX. There's so little
useful HP-UX information available that it seems HP is trying to discourage
driver developers from targetting their platform).


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 01-16-2008, 07:20 PM
Pai
 
Posts: n/a
Default Re: Device driver: wsio_get_isc() returns NULL

Jimmie Mayfield wrote:
> Hello. I'm writing a monolithic DKLM and I'm finding that wsio_get_isc()
> always seems to return a NULL 'isc' pointer even though the return code
> indicates success.
>
> For example, on the driver_ioctl() entry point:
>
> mydriver_ioctl(dev_t dev, int flag)
> {
> struct isc_table_type *isc;
> ...
> rc = wsio_get_isc(dev, &isc, &mydriver_wsio_info);
> if (rc != 1) {
> msg_printf("rc != 1\n");
> return EIO;
> }
>
> if (!isc) {
> printf("NULL!\n");
> return EIO;
> }
> ...
> }
>
>
> Now, section 10.8 of HP's DDK FAQ attempts to explain this problem:
>
> "The device instance number is supposed to be encoded in bits 16-23
> (ie the third byte)...If the dev_t that is passed down has this encoding,
> wsio_get_isc() will return a valid ISC pointer."
>
>
> According to 'ioscan -fun', my device's instance number is 0:
> unknown 0 10/6/3/0 mydrv CLAIMED INTERFACE PCI Co-Processor
>
> This agrees with the character special file I created in /dev:
> crw-rw-rw- 1 root sys 254, 0 Aug 18 21:17 my_device
>
> Furthermore, it agrees with the dev_t that's being passed to my ioctl()
> routine: fe000000 (major 254, minor 0x000000).
>
> (It is interesting that ioscan does not report /dev/my_device. Is that
> indicative of a problem? If so, what?)
>
> So...I don't understand. The kernel is forming a dev_t value and passing it
> to my ioctl() routine (or open(), or close()). However when I attempt to use
> WSIO to get an isc pointer from that dev_t value, the returned pointer
> is NULL. The FAQ implies that this is because the dev_t value was somehow
> invalid.
>


1> Could you post your drv_info_t initialization here ?

2> Try calling wsio_get_isc(dev, &isc, NULL) with wsio.h included.
This will work only if your driver is char driver.

--vishwas
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 01-16-2008, 07:21 PM
Pai
 
Posts: n/a
Default Re: Device driver: wsio_get_isc() returns NULL

> That leads to another question though:
>
> 1) What is the significance of the classname in the drv_info_t structure?
>
> The DLKM appeared to get initialized properly even with the bad
> classname string. That is, the attach() function was called, the 'isc'
> was claimed and I was able to use that isc to read and write the
> card's register space. No errors were reported by WSIO or any other
> kernel routine.
>
> Problems didn't occur until I started to do things from user space.
> The kernel called my driver routines (open, close, ioctl, etc) when the
> user space app accessed the corresponding /dev entry which suggests that
> the kernel has properly mapped the device major to my driver. But the
> bad classname string somehow caused the kernel to fail to map the dev_t
> to the isc. This still confuses me.
>
> It seems to me that if the classname were such an crucial piece
> of information, WSIO should have thrown an error as soon as my driver
> tried to claim the isc in the attach() routine.
>


AFAIK class should be one of the known class strings or unknown.
Yes, WSIO should have reported an error if the class was not
acceptable.

--vishwas
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 02:05 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com