Lines Matching full:prp
2224 * a native SGL (NVMe PRP).
2233 * The native SGL is built starting in the first PRP
2237 * describe using the two PRP entriess inside the NVMe message, then PRP1
2238 * describes the first data memory segment, and PRP2 contains a pointer to a PRP
2240 * segments. The PRP list will be contiguous.
2242 * The native SGL for NVMe devices is a Physical Region Page (PRP). A PRP
2243 * consists of a list of PRP entries to describe a number of noncontigous
2247 * non-contiguous SGL into a PRP in this case. All PRPs will describe
2250 * Each NVMe message contains two PRP entries. The first (PRP1) either contains
2251 * a PRP list pointer or a PRP element, depending upon the command. PRP2
2252 * contains the second PRP element if the memory being described fits within 2
2253 * PRP entries, or a PRP list pointer if the PRP spans more than two entries.
2255 * A PRP list pointer contains the address of a PRP list, structured as a linear
2256 * array of PRP entries. Each PRP entry in this list describes a segment of
2259 * Each 64-bit PRP entry comprises an address and an offset field. The address
2262 * first element in a PRP list may contain a non-zero offset, implying that all
2265 * Each PRP element normally describes 4KB of physical memory, with exceptions
2268 * first PRP element will contain a non-zero offset indicating where the region
2271 * described by the PRP list.
2273 * Since PRP entries lack any indication of size, the overall data buffer length
2275 * how many PRP entries are required to describe it.
2295 * without constructing any PRP. in _base_build_nvme_prp()
2303 * For the PRP entries, use the specially allocated buffer of in _base_build_nvme_prp()
2311 * want our first entry to be a PRP List entry. in _base_build_nvme_prp()
2322 * Set PRP physical pointer, which initially points to the current PRP in _base_build_nvme_prp()
2345 * This is the last entry in a PRP List, so we need to in _base_build_nvme_prp()
2346 * put a PRP list pointer here. What this does is: in _base_build_nvme_prp()
2349 * - set the PRP Entry to point to that page. This in _base_build_nvme_prp()
2350 * is now the PRP List pointer. in _base_build_nvme_prp()
2351 * - bump the PRP Entry pointer the start of the in _base_build_nvme_prp()
2352 * next page. Since all of this PRP memory is in _base_build_nvme_prp()
2367 * Must fill in the first PRP pointer (PRP1) before in _base_build_nvme_prp()
2373 * Now point to the second PRP entry within the in _base_build_nvme_prp()
2379 * Should the PRP2 entry be a PRP List pointer or just in _base_build_nvme_prp()
2380 * a regular PRP pointer? If there is more than one in _base_build_nvme_prp()
2381 * more page of data, must use a PRP List pointer. in _base_build_nvme_prp()
2385 * PRP2 will contain a PRP List pointer because in _base_build_nvme_prp()
2386 * more PRP's are needed with this command. The in _base_build_nvme_prp()
2393 * The next PRP Entry will be the start of the in _base_build_nvme_prp()
2394 * first PRP List. in _base_build_nvme_prp()
2399 * After this, the PRP Entries are complete. in _base_build_nvme_prp()
2400 * This command uses 2 PRP's and no PRP list. in _base_build_nvme_prp()
2409 * all remaining PRP entries in a PRP List, one per in _base_build_nvme_prp()
2462 * Nvme has a very convoluted prp format. One prp is required in base_make_prp_nvme()
2465 * boundary. Driver also have to insert a PRP list pointer entry as in base_make_prp_nvme()
2466 * the last entry in each physical page of the PRP list. in base_make_prp_nvme()
2468 * NOTE: The first PRP "entry" is actually placed in the first in base_make_prp_nvme()
2471 * of the PRP entries are built in the contiguous pcie buffer. in base_make_prp_nvme()
2494 * For the PRP entries, use the specially allocated buffer of in base_make_prp_nvme()
2508 /* Build first prp, sge need not to be page aligned*/ in base_make_prp_nvme()
2534 /* Put PRP pointer due to page boundary*/ in base_make_prp_nvme()
2629 * Build native NVMe PRP. in _base_check_pcie_native_sgl()
6011 "Number of chains can fit in a PRP page(%d)\n", in _base_allocate_pcie_sgl_pool()
6590 * ((sg_tablesize * 8) - 1) is the max PRP's minus the first PRP entry in _base_allocate_memory_pools()
6591 * that is placed in the main message frame. 8 is the size of each PRP in _base_allocate_memory_pools()
6592 * entry or PRP list pointer entry. 8 is subtracted from page_size in _base_allocate_memory_pools()
6593 * because of the PRP list pointer entry at the end of a page, so this in _base_allocate_memory_pools()
6594 * is not counted as a PRP entry. The 1 added page is a round up. in _base_allocate_memory_pools()
6597 * be required for NVMe PRP's, only each set of NVMe blocks will be in _base_allocate_memory_pools()