lkml.org 
[lkml]   [2002]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: Virtual to physical address mapping
From
Date
Thanks, but the address specified there is certainly not the same as the
base address ifconfig reports. I made a simple program to verify this:

# ./ioctl_test eth0
mem_start: 0x0
mem_end: 0x0
base_addr: 0xa000
irq: 10
dma: 0
port: 0

And /proc/pci tells me, for that device:
Bus 0, device 15, function 0:
Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C
(rev 16).
IRQ 10.
Master Capable. Latency=32. Min Gnt=32.Max Lat=64.
I/O at 0xd800 [0xd8ff].
Non-prefetchable 32 bit memory at 0xe4005000 [0xe40050ff].

Is there any way I can map this 0xa000 address, which I assume is
virtual, to its physical address? I guess I'm very limited in userspace,
but are there any options or do I have to go about modifying the kernel?

The source for my test program is here for clarity's sake:
#include <stdio.h>
#include <errno.h>
#include <net/if.h>
#include <sys/ioctl.h>

int main(int argc, char *argv[])
{
int fd;
struct ifreq ifr;

if (!argv[1]) {
fprintf(stderr, "usage: %s [devname]\n", argv[0]);
return 1;
}

fd = socket(AF_INET, SOCK_DGRAM, 0);

if (fd < 0) {
perror("failed to open socket");
return 1;
}

memset(&ifr, 0, sizeof(struct ifreq));
strcpy(ifr.ifr_name, argv[1]);

if (ioctl(fd, SIOCGIFMAP, &ifr) < 0) {
perror("ioctl failed");
close(fd);
return 1;
}

printf("mem_start: 0x%lx\n", ifr.ifr_map.mem_start);
printf("mem_end: 0x%lx\n", ifr.ifr_map.mem_end);
printf("base_addr: 0x%hx\n", ifr.ifr_map.base_addr);
printf("irq: %d\n", ifr.ifr_map.irq);
printf("dma: %d\n", ifr.ifr_map.dma);
printf("port: %d\n", ifr.ifr_map.port);

close(fd);

return 0;
}


Ole André

On Wed, 2002-09-18 at 08:05, Steve Mickeler wrote:
>
> That info will be in /proc/pci
>
>
> On 18 Sep 2002, Ole André Vadla Ravnås wrote:
>
> > Hi
> >
> > I've noticed that ifconfig shows a base address and an interrupt
> > number.. However, I can't get that base address to correspond to
> > anything in /proc/iomem, which means that I can't determine which PCI
> > device (in this case) it corresponds to (guess the base address is
> > virtual). What I want is to find a way to get the PCI bus and device no
> > for the network device, but is this at all possible without altering the
> > kernel?
> >
> > Ole André
> >
> >
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
> >
>
>
>
> [-] Steve Mickeler [ steve@neptune.ca ]
>
> [|] Todays root password is brought to you by /dev/random
>
> [+] 1024D/9AA80CDF = 4103 9E35 2713 D432 924F 3C2E A7B9 A0FE 9AA8 0CDF
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:53    [W:0.467 / U:0.040 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site