RE: what is the diff between PCI I/O & memory space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi,
> if i'm using an intel machine then can i use memory mapped
> I/O to communicate with my PCI device (use ioremap etc.),
> even though intel arch's use I/O mapped I/O????
 its not processor specific, and AFAIK , rtl8139 in intel uses memory
mapping

-Anand


> -----Original Message-----
> From: kernelnewbies-bounce@nl.linux.org 
> [mailto:kernelnewbies-bounce@nl.linux.org]On Behalf Of 
> Mandeep Singh Sandhu
> Sent: Wednesday, March 10, 2004 2:55 PM
> To: Momchil Velikov
> Cc: kernelnewbies@nl.linux.org
> Subject: RE: what is the diff between PCI I/O & memory space
> 
> 
> thanx velco,
> that cleared a lot of things. one last doubt hopefully... :)
> if i'm using an intel machine then can i use memory mapped
> I/O to communicate with my PCI device (use ioremap etc.),
> even though intel arch's use I/O mapped I/O????
> 
> In the ethernet driver for the realtek NIC 8139too.c
> a "#ifdef USE_IO_OPS" is used to choose between PCI I/O
> or Memory mapped I/O, where is this "USE_IO_OPS" defined
> and on what basis???
> 
> TIA,
> - /dev/mandeep
> 
> 
> -----Original Message-----
> From: Momchil Velikov [mailto:velco@fadata.bg]
> Sent: Tuesday, March 09, 2004 3:00 PM
> To: Mandeep Singh Sandhu
> Cc: kernelnewbies@nl.linux.org
> Subject: Re: what is the diff between PCI I/O & memory space
> 
> 
> 
> >>>>> "Mandeep" == Mandeep Singh Sandhu 
> <mandeep_sandhu@infosys.com> writes:
> 
> Mandeep> few basic PCI doubts :-
> 
>   All doubts are usually cleared by reading the PCI spec.
> 
> Mandeep> 1) What is difference between PCI I/O & Memory regions??
> 
>   The PCI bus has several separate address spaces, accessed by issuing
> different PCI bus commands, i.e. driving C/BE[0:3]# lanes with the
> command code during the address phase of a PCI bus transaction.  I/O
> and Memory space are simply two of these address spaces.
> 
>   On IA-32 usually inb/inw/ind/outb/outw/outd insns generate I/O
> Read/Write cycles, whereas ordinary memory load/store insns generate
> Memory Read/Write cycles.
> 
>   A device may request either I/O or Memory address or both to be
> allocated to it.  There's no particular difference between the address
> spaces from the device point of view. 
> 
> Mandeep> 2) What r these 2 regions required for??
> 
>   To communicate with the device, of course.
> 
> Mandeep> 3) Linux's PCI subsystem provides some functions like
> Mandeep>    "pci_resource_start" to get resource info.
> Mandeep>    There's an arg passed to it - "int bar"(base adr. reg.).
> Mandeep>    In one of the driver files i've seen for getting the I/O
> Mandeep>    and Memory start addresses "bar" was passed as 0 & 1
> Mandeep>    respectively. In rubini's book it says these values can
> Mandeep>    vary from 0 to 5 (for the 6 base addr. regs i guess!).
> Mandeep>    what does these values signify. Does it mean BAR0 holds
> Mandeep>    the start address of PCI I/O space etc.???
> 
>   The PCI Configuration Space (note that this is yet another bus
> address space) contains six Base Address Registers, which are used by
> the devices to state its address requirements and later to obtain the
> device configuration.  A BAR can specify either a I/O or Memory space.
> 
> An I/O space BAR has the following format:
> 
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa01
> 
> where a*30 is the address, bit 1 is reserved and zero, bit 0 is set 1
> to indicate I/O space.
> 
> A Memory space BAR has the following format:
> 
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaptt0
> 
> where a*28 is the address,
> p is prefetchable bit: 1-prefetchable, 0 non-prefetchable,
> tt are type bits: 00 - locate anywhere in 32-bit address space
>                   01 - locate below 1M
>                   10 - locate anywhere in 64-bit address space
>                   11 - reserved
> 
> ~velco
> 
> --
> Kernelnewbies: Help each other learn about the Linux kernel.
> Archive:       http://mail.nl.linux.org/kernelnewbies/
> FAQ:           http://kernelnewbies.org/faq/
> 

<<attachment: winmail.dat>>


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux