Accessing PCI Memory Mapped Registers in Linux Kernel

Daniel (Youngwhan) Song breadncup at gmail.com
Tue Dec 21 20:40:44 EST 2010


Hi Mulyadi,

On Tue, Dec 21, 2010 at 9:59 AM, Mulyadi Santosa
<mulyadi.santosa at gmail.com>wrote:

> Hi Daniel.........
>
> On Tue, Dec 21, 2010 at 16:04, YOUNGWHAN SONG <breadncup at gmail.com> wrote:
> > test_foo = (struct foo*)regsva;
>
> I was thinking differently, could it be that casting...as shown
> above...introduce this behaviour? what if you just point to the
> address...directly without any "container" such as struct foo?
>
>
>
> printk(KERN_DBG "value TEST1: 0x%lx\n", readl(test_foo->TEST1));
> > printk(KERN_DBG "value 0: 0x%x\n", readw(&test_foo->a1[0]);
> > printk(KERN_DBG "value 1: 0x%x\n", readw(&test_foo->a1[1]);
>
> in the above statement, it means "take the address of a1[0 and read
> some bytes from that address", right?
>
> --
> regards,
>
> Mulyadi Santosa
> Freelance Linux trainer and consultant
>
> blog: the-hydra.blogspot.com
> training: mulyaditraining.blogspot.com
>

As we've talked, it looks the code would be ok, but I guess architecture
doesn't handle the 16 bit address correctly. Our team will find a way to get
through this by modifying the PCI module.

Thanks, Mulaydi for this post.

Have a great day.

Daniel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20101221/c03c4f50/attachment.html 


More information about the Kernelnewbies mailing list