Lines Matching full:prp

1555 	 * Allocate NVMe PRP Pages for NVMe SGL support only if the FW supports  in mpr_alloc_requests()
1634 * 1 PRP entry in main frame for PRP list pointer still leaves 255 PRPs in mpr_alloc_nvme_prp_pages()
1659 mpr_dprint(sc, MPR_ERROR, "Cannot allocate NVMe PRP DMA " in mpr_alloc_nvme_prp_pages()
1665 mpr_dprint(sc, MPR_ERROR, "Cannot allocate NVMe PRP memory\n"); in mpr_alloc_nvme_prp_pages()
1951 &sc->prp_pages_free, 0, "number of free PRP pages"); in mpr_setup_sysctl()
1955 &sc->prp_pages_free_lowwater, 0,"lowest number of free PRP pages"); in mpr_setup_sysctl()
1959 &sc->prp_page_alloc_fail, "PRP page allocation failures"); in mpr_setup_sysctl()
2872 * native SGL (NVMe PRP). The native SGL is built starting in the first PRP entry
2876 * using the two PRP entriess inside the NVMe message, then PRP1 describes the
2877 * first data memory segment, and PRP2 contains a pointer to a PRP list located
2878 * elsewhere in memory to describe the remaining data memory segments. The PRP
2881 * The native SGL for NVMe devices is a Physical Region Page (PRP). A PRP
2882 * consists of a list of PRP entries to describe a number of noncontigous
2886 * non-contiguous SGL into a PRP in this case. All PRPs will describe contiguous
2889 * Each NVMe message contains two PRP entries. The first (PRP1) either contains
2890 * a PRP list pointer or a PRP element, depending upon the command. PRP2 contains
2891 * the second PRP element if the memory being described fits within 2 PRP
2892 * entries, or a PRP list pointer if the PRP spans more than two entries.
2894 * A PRP list pointer contains the address of a PRP list, structured as a linear
2895 * array of PRP entries. Each PRP entry in this list describes a segment of
2898 * Each 64-bit PRP entry comprises an address and an offset field. The address
2901 * first element in a PRP list may contain a non-zero offest, implying that all
2904 * Each PRP element normally describes a chunck of PAGE_SIZE physical memory,
2907 * then the first PRP element will contain a non-zero offset indicating where the
2910 * described by the PRP list.
2912 * Since PRP entries lack any indication of size, the overall data buffer length
2914 * how many PRP entries are required to describe it.
2933 * without constructing any PRP. in mpr_build_nvme_prp()
2941 * set the current PRP entry pointer to PRP1. in mpr_build_nvme_prp()
2950 * For the PRP entries, use the specially allocated buffer of in mpr_build_nvme_prp()
2951 * contiguous memory. PRP Page allocation failures should not happen in mpr_build_nvme_prp()
2952 * because there should be enough PRP page buffers to account for the in mpr_build_nvme_prp()
2956 KASSERT(prp_page_info != NULL, ("%s: There are no PRP Pages left to be " in mpr_build_nvme_prp()
2962 * Insert the allocated PRP page into the command's PRP page list. This in mpr_build_nvme_prp()
2969 * first entry to be a PRP List entry. in mpr_build_nvme_prp()
2983 * Set PRP physical pointer, which initially points to the current PRP in mpr_build_nvme_prp()
3007 * This is the last entry in a PRP List, so we need to in mpr_build_nvme_prp()
3008 * put a PRP list pointer here. What this does is: in mpr_build_nvme_prp()
3011 * - set the PRP Entry to point to that page. This is in mpr_build_nvme_prp()
3012 * now the PRP List pointer. in mpr_build_nvme_prp()
3013 * - bump the PRP Entry pointer the start of the next in mpr_build_nvme_prp()
3014 * page. Since all of this PRP memory is contiguous, in mpr_build_nvme_prp()
3031 * Must fill in the first PRP pointer (PRP1) before in mpr_build_nvme_prp()
3037 * Now point to the second PRP entry within the in mpr_build_nvme_prp()
3045 * Should the PRP2 entry be a PRP List pointer or just a in mpr_build_nvme_prp()
3046 * regular PRP pointer? If there is more than one more in mpr_build_nvme_prp()
3047 * page of data, must use a PRP List pointer. in mpr_build_nvme_prp()
3052 * PRP2 will contain a PRP List pointer because in mpr_build_nvme_prp()
3053 * more PRP's are needed with this command. The in mpr_build_nvme_prp()
3062 * The next PRP Entry will be the start of the in mpr_build_nvme_prp()
3063 * first PRP List. in mpr_build_nvme_prp()
3070 * After this, the PRP Entries are complete. in mpr_build_nvme_prp()
3071 * This command uses 2 PRP's and no PRP list. in mpr_build_nvme_prp()
3082 * all remaining PRP entries in a PRP List, one per each in mpr_build_nvme_prp()
3159 * NVMe uses one PRP for each physical page (or part of physical in mpr_check_pcie_native_sgl()
3182 * beyond end of the 5th page, we need the extra PRP in mpr_check_pcie_native_sgl()
3222 * For the PRP entries, use the specially allocated buffer of in mpr_check_pcie_native_sgl()
3223 * contiguous memory. PRP Page allocation failures should not happen in mpr_check_pcie_native_sgl()
3224 * because there should be enough PRP page buffers to account for the in mpr_check_pcie_native_sgl()
3228 KASSERT(prp_page_info != NULL, ("%s: There are no PRP Pages left to be " in mpr_check_pcie_native_sgl()
3234 * Insert the allocated PRP page into the command's PRP page list. This in mpr_check_pcie_native_sgl()
3241 * first entry to be a PRP List entry. in mpr_check_pcie_native_sgl()
3267 * NVMe has a very convoluted PRP format. One PRP is required for each in mpr_check_pcie_native_sgl()
3270 * a PRP list pointer entry as the last entry in each physical page of in mpr_check_pcie_native_sgl()
3271 * the PRP list. in mpr_check_pcie_native_sgl()
3273 * NOTE: The first PRP "entry" is actually placed in the first SGL entry in mpr_check_pcie_native_sgl()
3275 * message is the chain element, and the rest of the PRP entries are in mpr_check_pcie_native_sgl()
3322 * Need to put a PRP list pointer here. in mpr_check_pcie_native_sgl()
3348 /* No longer the first PRP entry. */ in mpr_check_pcie_native_sgl()