Lines Matching +full:in +full:- +full:memory

2 How to access I/O mapped memory from within device drivers
11 (see Documentation/core-api/dma-api-howto.rst). They continue
13 must not use them. --davidm 00/12/12
17 [ This is a mail message in response to a query on IO mapping, thus the
20 The AHA-1542 is a bus-master device, and your patch makes the driver give the
22 (because all bus master devices see the physical memory mappings directly).
25 at memory addresses, and in this case we actually want the third, the
26 so-called "bus address".
28 Essentially, the three ways of addressing memory are (this is "real memory",
29 that is, normal RAM--see later about other details):
31 - CPU untranslated. This is the "physical" address. Physical address
32 0 is what the CPU sees when it drives zeroes on the memory bus.
34 - CPU translated address. This is the "virtual" address, and is
38 - bus address. This is the address of memory as seen by OTHER devices,
39 not the CPU. Now, in theory there could be many different bus
40 addresses, with each device seeing memory in some device-specific way, but
43 external hardware sees the memory the same way.
47 because the memory and the devices share the same address space, and that is
51 CPU sees a memory map something like this (this is from memory)::
53 0-2 GB "real memory"
54 2 GB-3 GB "system IO" (inb/out and similar accesses on x86)
55 3 GB-4 GB "IO memory" (shared memory over the IO bus)
58 the viewpoint of the devices, you have the reverse, and the physical memory
61 So when the CPU wants any bus master to write to physical memory 0, it
62 has to give the master address 0x80000000 as the memory address.
130 address in some cases, it's just not very often in normal code. The physical
131 address is needed if you use memory mappings, for example, because the
132 "remap_pfn_range()" mm function wants the physical address of the memory to
133 be remapped as measured in units of pages, a.k.a. the pfn (the memory
140 only talks about "real memory", that is, CPU memory (RAM).
142 There is a completely different type of memory too, and that's the "shared
143 memory" on the PCI or ISA bus. That's generally not RAM (although in the case
145 buffer), but can be things like a packet buffer in a network card etc.
147 This memory is called "PCI memory" or "shared memory" or "IO memory" or
149 related functions. You should never take the address of such memory, because
151 conceptually in the same memory space as "real memory" at all, so you cannot
152 just dereference a pointer. (Sadly, on x86 it **is** in the same memory space,
156 For such memory, you can do things like:
158 - reading::
161 * read first 32 bits from ISA memory at 0xC0000, aka
162 * C000:0000 in DOS terms
166 - remapping and writing::
169 * remap framebuffer PCI memory area at 0xFC000000,
171 * access only the 640k-1MB area, so anything else
182 - copying and clearing::
184 /* get the 6-byte Ethernet address at ISA address E000:0040 */
187 memcpy_toio(0xE1000, skb->data, skb->len);
193 might find yourself with a 500 MHz Alpha in front of you, and then you'll be
212 much in the actual IO accesses as in error handling and timeouts etc).
213 It's generally not hard to fix drivers, and in many cases the code