Jayaraman, Bhaskar wrote:
Garrett, I'm trying to port xenbus drivers onto Solaris HVM and hence I need to 
get to the register space of the platform PCI device which xen emulates for 
each VM. So any help in this regard would be very helpful. I'm attaching the 
sample code which I picked up from 
http://dsc.sun.com/solaris/developer/support/driver/faqs.html#QA3.17 and then 
modified.

In the attach routine I tried doing the ddi_regs_map_setup on BAR1 of the 
platform device but I keep getting 0xc000 as its virtual address. If I try 
writing anything to it the driver crashes the system. Then I decided to switch 
to devmap_devmem_setup but then on calling it the driver crashes the system.

Sounds to me like this might be an "IO" device BAR, rather than a memory BAR. You do know that to access BAR0, you have to pass index 1, and to access BAR1, you pass index 2, to ddi_regs_map_setup()... right?

   - Garrett
Regards,
Bhaskar.


-----Original Message-----
From: Garrett D'Amore [mailto:garr...@damore.org] Sent: Wednesday, September 16, 2009 7:13 PM
To: Jayaraman, Bhaskar
Cc: opensolaris-code@opensolaris.org
Subject: Re: [osol-code] Doubt in ddi_regs_map_setup!

Jayaraman, Bhaskar wrote:
Ok I changed the call to devmap_devmem_setup() but my driver is crashing. Any 
idea why this could be happening? I'm calling it from the 'attach' routine 
which I hope is allowed. Also all my callbacks do nothing and return 0 unless 
they're void i.e. I'm not setting the pvtp pointers in the callbacks or 
anything.
Regards,
Bhaskar.

It doesn't sound like conceptually you are doing anything wrong. I think we'd need to look at the crash dump and source code in order to understand why you're experiencing these crashes.

    - Garrett
-----Original Message-----
From: Garrett D'Amore [mailto:garr...@damore.org] Sent: Tuesday, September 15, 2009 7:35 PM
To: Jayaraman, Bhaskar
Cc: opensolaris-code@opensolaris.org
Subject: Re: [osol-code] Doubt in ddi_regs_map_setup!

Jayaraman, Bhaskar wrote:
Hi, I'm making this call on my driver's BAR1 which has a physical address 0xf2000008 written on it. So I'm assuming that when I call a hat_getpfnum(kas.a_hat, returned_address), I should get the physical page frame number.

Instead I get 0xffffffff as its return value (which is definitely some error). Also the virtual address that ddi_regs_map_setup is returning 0xc000 as the virtual address for the physical address in the BAR1.

Please note that hat_getpfnum returns proper values for other virtual addresses. Can someone help me understand what is going on in my case?

I'm not sure exactly why this is failing, but you do know that hat_getkpfnum() is an obsolete interface, right? Its been obsolete for quite a long time now. (I think maybe as far back as Solaris 8.)

If you're using this for mmap(), you should try implementing a devmap(9e) routine instead.

-- Garrett
Regards,

Bhaskar.

------------------------------------------------------------------------

_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code


_______________________________________________
opensolaris-code mailing list
opensolaris-code@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to