Lines Matching full:prp
2219 * a native SGL (NVMe PRP).
2228 * The native SGL is built starting in the first PRP
2232 * describe using the two PRP entriess inside the NVMe message, then PRP1
2233 * describes the first data memory segment, and PRP2 contains a pointer to a PRP
2235 * segments. The PRP list will be contiguous.
2237 * The native SGL for NVMe devices is a Physical Region Page (PRP). A PRP
2238 * consists of a list of PRP entries to describe a number of noncontigous
2242 * non-contiguous SGL into a PRP in this case. All PRPs will describe
2245 * Each NVMe message contains two PRP entries. The first (PRP1) either contains
2246 * a PRP list pointer or a PRP element, depending upon the command. PRP2
2247 * contains the second PRP element if the memory being described fits within 2
2248 * PRP entries, or a PRP list pointer if the PRP spans more than two entries.
2250 * A PRP list pointer contains the address of a PRP list, structured as a linear
2251 * array of PRP entries. Each PRP entry in this list describes a segment of
2254 * Each 64-bit PRP entry comprises an address and an offset field. The address
2257 * first element in a PRP list may contain a non-zero offset, implying that all
2260 * Each PRP element normally describes 4KB of physical memory, with exceptions
2263 * first PRP element will contain a non-zero offset indicating where the region
2266 * described by the PRP list.
2268 * Since PRP entries lack any indication of size, the overall data buffer length
2270 * how many PRP entries are required to describe it.
2290 * without constructing any PRP. in _base_build_nvme_prp()
2298 * For the PRP entries, use the specially allocated buffer of in _base_build_nvme_prp()
2306 * want our first entry to be a PRP List entry. in _base_build_nvme_prp()
2317 * Set PRP physical pointer, which initially points to the current PRP in _base_build_nvme_prp()
2340 * This is the last entry in a PRP List, so we need to in _base_build_nvme_prp()
2341 * put a PRP list pointer here. What this does is: in _base_build_nvme_prp()
2344 * - set the PRP Entry to point to that page. This in _base_build_nvme_prp()
2345 * is now the PRP List pointer. in _base_build_nvme_prp()
2346 * - bump the PRP Entry pointer the start of the in _base_build_nvme_prp()
2347 * next page. Since all of this PRP memory is in _base_build_nvme_prp()
2362 * Must fill in the first PRP pointer (PRP1) before in _base_build_nvme_prp()
2368 * Now point to the second PRP entry within the in _base_build_nvme_prp()
2374 * Should the PRP2 entry be a PRP List pointer or just in _base_build_nvme_prp()
2375 * a regular PRP pointer? If there is more than one in _base_build_nvme_prp()
2376 * more page of data, must use a PRP List pointer. in _base_build_nvme_prp()
2380 * PRP2 will contain a PRP List pointer because in _base_build_nvme_prp()
2381 * more PRP's are needed with this command. The in _base_build_nvme_prp()
2388 * The next PRP Entry will be the start of the in _base_build_nvme_prp()
2389 * first PRP List. in _base_build_nvme_prp()
2394 * After this, the PRP Entries are complete. in _base_build_nvme_prp()
2395 * This command uses 2 PRP's and no PRP list. in _base_build_nvme_prp()
2404 * all remaining PRP entries in a PRP List, one per in _base_build_nvme_prp()
2457 * Nvme has a very convoluted prp format. One prp is required in base_make_prp_nvme()
2460 * boundary. Driver also have to insert a PRP list pointer entry as in base_make_prp_nvme()
2461 * the last entry in each physical page of the PRP list. in base_make_prp_nvme()
2463 * NOTE: The first PRP "entry" is actually placed in the first in base_make_prp_nvme()
2466 * of the PRP entries are built in the contiguous pcie buffer. in base_make_prp_nvme()
2489 * For the PRP entries, use the specially allocated buffer of in base_make_prp_nvme()
2503 /* Build first prp, sge need not to be page aligned*/ in base_make_prp_nvme()
2529 /* Put PRP pointer due to page boundary*/ in base_make_prp_nvme()
2624 * Build native NVMe PRP. in _base_check_pcie_native_sgl()
6001 "Number of chains can fit in a PRP page(%d)\n", in _base_allocate_pcie_sgl_pool()
6580 * ((sg_tablesize * 8) - 1) is the max PRP's minus the first PRP entry in _base_allocate_memory_pools()
6581 * that is placed in the main message frame. 8 is the size of each PRP in _base_allocate_memory_pools()
6582 * entry or PRP list pointer entry. 8 is subtracted from page_size in _base_allocate_memory_pools()
6583 * because of the PRP list pointer entry at the end of a page, so this in _base_allocate_memory_pools()
6584 * is not counted as a PRP entry. The 1 added page is a round up. in _base_allocate_memory_pools()
6587 * be required for NVMe PRP's, only each set of NVMe blocks will be in _base_allocate_memory_pools()