€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ$/translations/zh_CN/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/zh_TW/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/it_IT/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ja_JP/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/ko_KR/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/pt_BR/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ$/translations/sp_SP/core-api/dma-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ,Dynamic DMA mapping using the generic device”h]”hŒ,Dynamic DMA mapping using the generic device”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ>/var/lib/git/docbuild/linux/Documentation/core-api/dma-api.rst”h´KubhŒ field_list”“”)�”}”(hhh]”hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÕhhÒh³hÊh´KubhŒ field_body”“”)�”}”(hŒ=James E.J. Bottomley ”h]”hŒ paragraph”“”)�”}”(hŒ”h]”(hŒJames E.J. Bottomley <”…”�”}”(hhíh²hh³Nh´NubhŒ reference”“”)�”}”(hŒ%James.Bottomley@HansenPartnership.com”h]”hŒ%James.Bottomley@HansenPartnership.com”…”�”}”(hh÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œ,mailto:James.Bottomley@HansenPartnership.com”uh1hõhhíubhŒ>”…”�”}”(hhíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khhçubah}”(h]”h ]”h"]”h$]”h&]”uh1håhhÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÐh³hÊh´KhhÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1hËhh·h²hh³hÊh´Kubhì)�”}”(hŒ”This document describes the DMA API. For a more gentle introduction of the API (and actual examples), see Documentation/core-api/dma-api-howto.rst.”h]”hŒ”This document describes the DMA API. For a more gentle introduction of the API (and actual examples), see Documentation/core-api/dma-api-howto.rst.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khh·h²hubhì)�”}”(hX9This API is split into two pieces. Part I describes the basic API. Part II describes extensions for supporting non-coherent memory machines. Unless you know that your driver absolutely has to support non-coherent platforms (this is usually only legacy platforms) you should only use the API described in part I.”h]”hX9This API is split into two pieces. Part I describes the basic API. Part II describes extensions for supporting non-coherent memory machines. Unless you know that your driver absolutely has to support non-coherent platforms (this is usually only legacy platforms) you should only use the API described in part I.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒPart I - DMA API”h]”hŒPart I - DMA API”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj?h²hh³hÊh´Kubhì)�”}”(hŒzTo get the DMA API, you must #include . This provides dma_addr_t and the interfaces described below.”h]”hŒzTo get the DMA API, you must #include . This provides dma_addr_t and the interfaces described below.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khj?h²hubhì)�”}”(hX A dma_addr_t can hold any valid DMA address for the platform. It can be given to a device to use as a DMA source or target. A CPU cannot reference a dma_addr_t directly because there may be translation between its physical address space and the DMA address space.”h]”hX A dma_addr_t can hold any valid DMA address for the platform. It can be given to a device to use as a DMA source or target. A CPU cannot reference a dma_addr_t directly because there may be translation between its physical address space and the DMA address space.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Khj?h²hubeh}”(h]”Œpart-i-dma-api”ah ]”h"]”Œpart i - dma api”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ*Part Ia - Using large DMA-coherent buffers”h]”hŒ*Part Ia - Using large DMA-coherent buffers”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjth²hh³hÊh´KubhŒ literal_block”“”)�”}”(hŒqvoid * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag)”h]”hŒqvoid * dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flag)”…”�”}”hj‡sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1j…h³hÊh´K hjth²hubhì)�”}”(hX+Coherent memory is memory for which a write by either the device or the processor can immediately be read by the processor or device without having to worry about caching effects. (You may however need to make sure to flush the processor's write buffers before telling devices to read that memory.)”h]”hX-Coherent memory is memory for which a write by either the device or the processor can immediately be read by the processor or device without having to worry about caching effects. (You may however need to make sure to flush the processor’s write buffers before telling devices to read that memory.)”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K$hjth²hubhì)�”}”(hŒCThis routine allocates a region of bytes of coherent memory.”h]”hŒCThis routine allocates a region of bytes of coherent memory.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K*hjth²hubhì)�”}”(hŒyIt returns a pointer to the allocated region (in the processor's virtual address space) or NULL if the allocation failed.”h]”hŒ{It returns a pointer to the allocated region (in the processor’s virtual address space) or NULL if the allocation failed.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K,hjth²hubhì)�”}”(hŒ It also returns a which may be cast to an unsigned integer the same width as the bus and given to the device as the DMA address base of the region.”h]”hŒ It also returns a which may be cast to an unsigned integer the same width as the bus and given to the device as the DMA address base of the region.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K/hjth²hubhì)�”}”(hX Note: coherent memory can be expensive on some platforms, and the minimum allocation length may be as big as a page, so you should consolidate your requests for coherent memory as much as possible. The simplest way to do that is to use the dma_pool calls (see below).”h]”hX Note: coherent memory can be expensive on some platforms, and the minimum allocation length may be as big as a page, so you should consolidate your requests for coherent memory as much as possible. The simplest way to do that is to use the dma_pool calls (see below).”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K3hjth²hubhì)�”}”(hŒÊThe flag parameter allows the caller to specify the ``GFP_`` flags (see kmalloc()) for the allocation (the implementation may ignore flags that affect the location of the returned memory, like GFP_DMA).”h]”(hŒ4The flag parameter allows the caller to specify the ”…”�”}”(hjÝh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``GFP_``”h]”hŒGFP_”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÝubhŒŽ flags (see kmalloc()) for the allocation (the implementation may ignore flags that affect the location of the returned memory, like GFP_DMA).”…”�”}”(hjÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K8hjth²hubj†)�”}”(hŒpvoid dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle)”h]”hŒpvoid dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle)”…”�”}”hjÿsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´K>hjth²hubhì)�”}”(hŒØFree a previously allocated region of coherent memory. dev, size and dma_handle must all be the same as those passed into dma_alloc_coherent(). cpu_addr must be the virtual address returned by dma_alloc_coherent().”h]”hŒØFree a previously allocated region of coherent memory. dev, size and dma_handle must all be the same as those passed into dma_alloc_coherent(). cpu_addr must be the virtual address returned by dma_alloc_coherent().”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KBhjth²hubhì)�”}”(hŒ`Note that unlike the sibling allocation call, this routine may only be called with IRQs enabled.”h]”hŒ`Note that unlike the sibling allocation call, this routine may only be called with IRQs enabled.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KFhjth²hubeh}”(h]”Œ(part-ia-using-large-dma-coherent-buffers”ah ]”h"]”Œ*part ia - using large dma-coherent buffers”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ*Part Ib - Using small DMA-coherent buffers”h]”hŒ*Part Ib - Using small DMA-coherent buffers”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj1h²hh³hÊh´KKubhì)�”}”(hŒDTo get this part of the DMA API, you must #include ”h]”hŒDTo get this part of the DMA API, you must #include ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KMhj1h²hubhì)�”}”(hX¸Many drivers need lots of small DMA-coherent memory regions for DMA descriptors or I/O buffers. Rather than allocating in units of a page or more using dma_alloc_coherent(), you can use DMA pools. These work much like a struct kmem_cache, except that they use the DMA-coherent allocator, not __get_free_pages(). Also, they understand common hardware constraints for alignment, like queue heads needing to be aligned on N-byte boundaries.”h]”hX¸Many drivers need lots of small DMA-coherent memory regions for DMA descriptors or I/O buffers. Rather than allocating in units of a page or more using dma_alloc_coherent(), you can use DMA pools. These work much like a struct kmem_cache, except that they use the DMA-coherent allocator, not __get_free_pages(). Also, they understand common hardware constraints for alignment, like queue heads needing to be aligned on N-byte boundaries.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KOhj1h²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ!dma_pool_create_node (C function)”Œc.dma_pool_create_node”hNt”auh1j^hj1h²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒƒstruct dma_pool * dma_pool_create_node (const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)”h]”hŒdesc_signature_line”“”)�”}”(hŒ�struct dma_pool *dma_pool_create_node(const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j€hj|h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KËubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j’hj|h²hh³j‘h´KËubh)�”}”(hhh]”hŒ desc_sig_name”“”)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j¦hj£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jªŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jÅŒ ASTIdentifier”“”)�”}”jÀŒdma_pool_create_node”sbŒc.dma_pool_create_node”†”asbuh1hhj|h²hh³j‘h´KËubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj|h²hh³j‘h´KËubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jáhj|h²hh³j‘h´KËubhŒ desc_name”“”)�”}”(hŒdma_pool_create_node”h]”j§)�”}”(hjÐh]”hŒdma_pool_create_node”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjôubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”j•j–uh1jòhj|h²hh³j‘h´KËubhŒdesc_parameterlist”“”)�”}”(hŒ\(const char *name, struct device *dev, size_t size, size_t align, size_t boundary, int node)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst char *name”h]”(j�)�”}”(hŒconst”h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjubhŒdesc_sig_keyword_type”“”)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j5hjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjubj§)�”}”(hŒname”h]”hŒname”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒstruct device *dev”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjvubh)�”}”(hhh]”j§)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jšŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÎŒc.dma_pool_create_node”†”asbuh1hhjvubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjvubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjvubj§)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jïŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÎŒc.dma_pool_create_node”†”asbuh1hhjæubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjæubj§)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒ size_t align”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j7Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÎŒc.dma_pool_create_node”†”asbuh1hhj.ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj.ubj§)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒsize_t boundary”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÎŒc.dma_pool_create_node”†”asbuh1hhjvubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjvubj§)�”}”(hŒboundary”h]”hŒboundary”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒint node”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¾ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¾ubj§)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj|h²hh³j‘h´KËubeh}”(h]”h ]”h"]”h$]”h&]”j•j–Œ add_permalink”ˆuh1jzŒsphinx_line_type”Œ declarator”hjvh²hh³j‘h´KËubah}”(h]”jmah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jth³j‘h´KËhjqh²hubhŒ desc_content”“”)�”}”(hhh]”hì)�”}”(hŒ-Creates a pool of coherent DMA memory blocks.”h]”hŒ-Creates a pool of coherent DMA memory blocks.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KËhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjqh²hh³j‘h´KËubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”Œdomain”j¾Œobjtype”j*Œdesctype”j*Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1joh²hhj1h³Nh´NubhŒ container”“”)�”}”(hXT**Parameters** ``const char *name`` name of pool, for diagnostics ``struct device *dev`` device that will be doing the DMA ``size_t size`` size of the blocks in this pool. ``size_t align`` alignment requirement for blocks; must be a power of two ``size_t boundary`` returned blocks won't cross this power of two boundary ``int node`` optional NUMA node to allocate structs 'dma_pool' and 'dma_page' on **Context** not in_interrupt() **Description** Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have coherent DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment. If **boundary** is nonzero, objects returned from dma_pool_alloc() won't cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes. **Return** a dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.”h]”(hì)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hj<h]”hŒ Parameters”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÏhj6ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ3``const char *name`` name of pool, for diagnostics ”h]”(hŒterm”“”)�”}”(hŒ``const char *name``”h]”jæ)�”}”(hjch]”hŒconst char *name”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÌhj[ubhŒ definition”“”)�”}”(hhh]”hì)�”}”(hŒname of pool, for diagnostics”h]”hŒname of pool, for diagnostics”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jxh´KÌhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jxh´KÌhjVubjZ)�”}”(hŒ9``struct device *dev`` device that will be doing the DMA ”h]”(j`)�”}”(hŒ``struct device *dev``”h]”jæ)�”}”(hjžh]”hŒstruct device *dev”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÍhj˜ubjz)�”}”(hhh]”hì)�”}”(hŒ!device that will be doing the DMA”h]”hŒ!device that will be doing the DMA”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j³h´KÍhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j³h´KÍhjVubjZ)�”}”(hŒ1``size_t size`` size of the blocks in this pool. ”h]”(j`)�”}”(hŒ``size_t size``”h]”jæ)�”}”(hj×h]”hŒ size_t size”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÎhjÑubjz)�”}”(hhh]”hì)�”}”(hŒ size of the blocks in this pool.”h]”hŒ size of the blocks in this pool.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jìh´KÎhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jìh´KÎhjVubjZ)�”}”(hŒJ``size_t align`` alignment requirement for blocks; must be a power of two ”h]”(j`)�”}”(hŒ``size_t align``”h]”jæ)�”}”(hjh]”hŒ size_t align”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÏhj ubjz)�”}”(hhh]”hì)�”}”(hŒ8alignment requirement for blocks; must be a power of two”h]”hŒ8alignment requirement for blocks; must be a power of two”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j%h´KÏhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j%h´KÏhjVubjZ)�”}”(hŒK``size_t boundary`` returned blocks won't cross this power of two boundary ”h]”(j`)�”}”(hŒ``size_t boundary``”h]”jæ)�”}”(hjIh]”hŒsize_t boundary”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÐhjCubjz)�”}”(hhh]”hì)�”}”(hŒ6returned blocks won't cross this power of two boundary”h]”hŒ8returned blocks won’t cross this power of two boundary”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j^h´KÐhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j^h´KÐhjVubjZ)�”}”(hŒQ``int node`` optional NUMA node to allocate structs 'dma_pool' and 'dma_page' on ”h]”(j`)�”}”(hŒ ``int node``”h]”jæ)�”}”(hj‚h]”hŒint node”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÑhj|ubjz)�”}”(hhh]”hì)�”}”(hŒCoptional NUMA node to allocate structs 'dma_pool' and 'dma_page' on”h]”hŒKoptional NUMA node to allocate structs ‘dma_pool’ and ‘dma_page’ on”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j—h´KÑhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j—h´KÑhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj6ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hj½h]”hŒContext”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÓhj6ubhì)�”}”(hŒnot in_interrupt()”h]”hŒnot in_interrupt()”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÒhj6ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjäh]”hŒ Description”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÔhj6ubhì)�”}”(hX%Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have coherent DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment.”h]”hX%Given one of these pools, dma_pool_alloc() may be used to allocate memory. Such memory will all have coherent DMA mappings, accessible by the device and its driver without using cache flushing primitives. The actual size of blocks allocated may be larger than requested because of alignment.”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÓhj6ubhì)�”}”(hŒêIf **boundary** is nonzero, objects returned from dma_pool_alloc() won't cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes.”h]”(hŒIf ”…”�”}”(hj h²hh³Nh´Nubj?)�”}”(hŒ **boundary**”h]”hŒboundary”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj ubhŒÝ is nonzero, objects returned from dma_pool_alloc() won’t cross that size boundary. This is useful for devices which have addressing restrictions on individual DMA transfers, such as not crossing boundaries of 4KBytes.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÙhj6ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hj,h]”hŒReturn”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´KÞhj6ubhì)�”}”(hŒ^a dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.”h]”(hŒ=a dma allocation pool with the requested characteristics, or ”…”�”}”(hjBh²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjBubhŒ if one can’t be created.”…”�”}”(hjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Kßhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdma_pool_destroy (C function)”Œc.dma_pool_destroy”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ-void dma_pool_destroy (struct dma_pool *pool)”h]”j{)�”}”(hŒ,void dma_pool_destroy(struct dma_pool *pool)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mdubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjh²hh³j‘h´Mdubjó)�”}”(hŒdma_pool_destroy”h]”j§)�”}”(hŒdma_pool_destroy”h]”hŒdma_pool_destroy”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjh²hh³j‘h´Mdubj)�”}”(hŒ(struct dma_pool *pool)”h]”j)�”}”(hŒstruct dma_pool *pool”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¼ubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jàŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj¦sbŒc.dma_pool_destroy”†”asbuh1hhj¼ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¼ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj¼ubj§)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjh²hh³j‘h´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj{h²hh³j‘h´Mdubah}”(h]”jvah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j‘h´Mdhjxh²hubj)�”}”(hhh]”hì)�”}”(hŒ%destroys a pool of dma memory blocks.”h]”hŒ%destroys a pool of dma memory blocks.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mdhj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxh²hh³j‘h´Mdubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j[j0j[j1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hŒõ**Parameters** ``struct dma_pool *pool`` dma pool that will be destroyed **Context** !in_interrupt() **Description** Caller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjeh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mhhj_ubjU)�”}”(hhh]”jZ)�”}”(hŒ:``struct dma_pool *pool`` dma pool that will be destroyed ”h]”(j`)�”}”(hŒ``struct dma_pool *pool``”h]”jæ)�”}”(hj„h]”hŒstruct dma_pool *pool”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mehj~ubjz)�”}”(hhh]”hì)�”}”(hŒdma pool that will be destroyed”h]”hŒdma pool that will be destroyed”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j™h´Mehjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j™h´Mehj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj_ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hj¿h]”hŒContext”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mghj_ubhì)�”}”(hŒ!in_interrupt()”h]”hŒ!in_interrupt()”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mfhj_ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjæh]”hŒ Description”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mhhj_ubhì)�”}”(hŒyCaller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.”h]”hŒyCaller guarantees that no more memory from the pool is in use, and that nothing will try to use the pool after this call.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mghj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdma_pool_alloc (C function)”Œc.dma_pool_alloc”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒRvoid * dma_pool_alloc (struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”j{)�”}”(hŒPvoid *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj' h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MŽubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj' h²hh³j9 h´MŽubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj' h²hh³j9 h´MŽubjó)�”}”(hŒdma_pool_alloc”h]”j§)�”}”(hŒdma_pool_alloc”h]”hŒdma_pool_alloc”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjU ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj' h²hh³j9 h´MŽubj)�”}”(hŒ<(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”(j)�”}”(hŒstruct dma_pool *pool”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjq ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjq ubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j• Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj[ sbŒc.dma_pool_alloc”†”asbuh1hhjq ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjq ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjq ubj§)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjq ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjm ubj)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjç ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jì Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j¯ Œc.dma_pool_alloc”†”asbuh1hhjã ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjã ubj§)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjã ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjm ubj)�”}”(hŒdma_addr_t *handle”h]”(h)�”}”(hhh]”j§)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj/ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j4 Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j¯ Œc.dma_pool_alloc”†”asbuh1hhj+ ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj+ ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj+ ubj§)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj+ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjm ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj' h²hh³j9 h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj# h²hh³j9 h´MŽubah}”(h]”j ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j9 h´MŽhj h²hubj)�”}”(hhh]”hì)�”}”(hŒget a block of coherent memory”h]”hŒget a block of coherent memory”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MŽhj’ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj h²hh³j9 h´MŽubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j­ j0j­ j1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hXe**Parameters** ``struct dma_pool *pool`` dma pool that will produce the block ``gfp_t mem_flags`` GFP_* bitmask ``dma_addr_t *handle`` pointer to dma address of block **Return** the kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can't be allocated, ``NULL`` is returned.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj· h]”hŒ Parameters”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjµ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M’hj± ubjU)�”}”(hhh]”(jZ)�”}”(hŒ?``struct dma_pool *pool`` dma pool that will produce the block ”h]”(j`)�”}”(hŒ``struct dma_pool *pool``”h]”jæ)�”}”(hjÖ h]”hŒstruct dma_pool *pool”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M�hjÐ ubjz)�”}”(hhh]”hì)�”}”(hŒ$dma pool that will produce the block”h]”hŒ$dma pool that will produce the block”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jë h´M�hjì ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÐ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jë h´M�hjÍ ubjZ)�”}”(hŒ"``gfp_t mem_flags`` GFP_* bitmask ”h]”(j`)�”}”(hŒ``gfp_t mem_flags``”h]”jæ)�”}”(hj h]”hŒgfp_t mem_flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M�hj ubjz)�”}”(hhh]”hì)�”}”(hŒ GFP_* bitmask”h]”hŒ GFP_* bitmask”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j$ h´M�hj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j$ h´M�hjÍ ubjZ)�”}”(hŒ7``dma_addr_t *handle`` pointer to dma address of block ”h]”(j`)�”}”(hŒ``dma_addr_t *handle``”h]”jæ)�”}”(hjH h]”hŒdma_addr_t *handle”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M‘hjB ubjz)�”}”(hhh]”hì)�”}”(hŒpointer to dma address of block”h]”hŒpointer to dma address of block”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j] h´M‘hj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjB ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j] h´M‘hjÍ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj± ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjƒ h]”hŒReturn”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M“hj± ubhì)�”}”(hŒ¨the kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can't be allocated, ``NULL`` is returned.”h]”(hŒ•the kernel virtual address of a currently unused block, and reports its dma address through the handle. If such a memory block can’t be allocated, ”…”�”}”(hj™ h²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj™ ubhŒ is returned.”…”�”}”(hj™ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M“hj± ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdma_pool_free (C function)”Œc.dma_pool_free”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒGvoid dma_pool_free (struct dma_pool *pool, void *vaddr, dma_addr_t dma)”h]”j{)�”}”(hŒFvoid dma_pool_free(struct dma_pool *pool, void *vaddr, dma_addr_t dma)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÖ h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M½ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÖ h²hh³jè h´M½ubjó)�”}”(hŒ dma_pool_free”h]”j§)�”}”(hŒ dma_pool_free”h]”hŒ dma_pool_free”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj÷ ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÖ h²hh³jè h´M½ubj)�”}”(hŒ4(struct dma_pool *pool, void *vaddr, dma_addr_t dma)”h]”(j)�”}”(hŒstruct dma_pool *pool”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj ubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj2 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j7 Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjý sbŒc.dma_pool_free”†”asbuh1hhj ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj ubj§)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj ubj)�”}”(hŒ void *vaddr”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj… ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj… ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj… ubj§)�”}”(hŒvaddr”h]”hŒvaddr”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj… ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj ubj)�”}”(hŒdma_addr_t dma”h]”(h)�”}”(hhh]”j§)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjË ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÐ Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jQ Œc.dma_pool_free”†”asbuh1hhjÇ ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÇ ubj§)�”}”(hŒdma”h]”hŒdma”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÇ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÖ h²hh³jè h´M½ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÒ h²hh³jè h´M½ubah}”(h]”jÍ ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jè h´M½hjÏ h²hubj)�”}”(hhh]”hì)�”}”(hŒput block back into dma pool”h]”hŒput block back into dma pool”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M½hj! h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏ h²hh³jè h´M½ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j< j0j< j1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hX**Parameters** ``struct dma_pool *pool`` the dma pool holding the block ``void *vaddr`` virtual address of block ``dma_addr_t dma`` dma address of block **Description** Caller promises neither device nor driver will again touch this block unless it is first re-allocated.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjF h]”hŒ Parameters”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjD ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MÁhj@ ubjU)�”}”(hhh]”(jZ)�”}”(hŒ9``struct dma_pool *pool`` the dma pool holding the block ”h]”(j`)�”}”(hŒ``struct dma_pool *pool``”h]”jæ)�”}”(hje h]”hŒstruct dma_pool *pool”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M¾hj_ ubjz)�”}”(hhh]”hì)�”}”(hŒthe dma pool holding the block”h]”hŒthe dma pool holding the block”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jz h´M¾hj{ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj_ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jz h´M¾hj\ ubjZ)�”}”(hŒ)``void *vaddr`` virtual address of block ”h]”(j`)�”}”(hŒ``void *vaddr``”h]”jæ)�”}”(hjž h]”hŒ void *vaddr”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´M¿hj˜ ubjz)�”}”(hhh]”hì)�”}”(hŒvirtual address of block”h]”hŒvirtual address of block”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j³ h´M¿hj´ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj˜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j³ h´M¿hj\ ubjZ)�”}”(hŒ(``dma_addr_t dma`` dma address of block ”h]”(j`)�”}”(hŒ``dma_addr_t dma``”h]”jæ)�”}”(hj× h]”hŒdma_addr_t dma”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MÀhjÑ ubjz)�”}”(hhh]”hì)�”}”(hŒdma address of block”h]”hŒdma address of block”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jì h´MÀhjí ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÑ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jì h´MÀhj\ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj@ ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MÂhj@ ubhì)�”}”(hŒfCaller promises neither device nor driver will again touch this block unless it is first re-allocated.”h]”hŒfCaller promises neither device nor driver will again touch this block unless it is first re-allocated.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MÁhj@ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdmam_pool_create (C function)”Œc.dmam_pool_create”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒwstruct dma_pool * dmam_pool_create (const char *name, struct device *dev, size_t size, size_t align, size_t allocation)”h]”j{)�”}”(hŒustruct dma_pool *dmam_pool_create(const char *name, struct device *dev, size_t size, size_t align, size_t allocation)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mãubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjSh²hh³jdh´Mãubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jxŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒdmam_pool_create”sbŒc.dmam_pool_create”†”asbuh1hhjSh²hh³jdh´Mãubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjSh²hh³jdh´Mãubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjSh²hh³jdh´Mãubjó)�”}”(hŒdmam_pool_create”h]”j§)�”}”(hj”h]”hŒdmam_pool_create”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj²ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjSh²hh³jdh´Mãubj)�”}”(hŒT(const char *name, struct device *dev, size_t size, size_t align, size_t allocation)”h]”(j)�”}”(hŒconst char *name”h]”(j�)�”}”(hjh]”hŒconst”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÍubj6)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÍubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÍubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjÍubj§)�”}”(hŒname”h]”hŒname”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÉubj)�”}”(hŒstruct device *dev”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj*ubh)�”}”(hhh]”j§)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jNŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j’Œc.dmam_pool_create”†”asbuh1hhj*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj*ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj*ubj§)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÉubj)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j£Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j’Œc.dmam_pool_create”†”asbuh1hhjšubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjšubj§)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÉubj)�”}”(hŒ size_t align”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jëŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j’Œc.dmam_pool_create”†”asbuh1hhjâubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjâubj§)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÉubj)�”}”(hŒsize_t allocation”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j3Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j’Œc.dmam_pool_create”†”asbuh1hhj*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj*ubj§)�”}”(hŒ allocation”h]”hŒ allocation”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÉubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjSh²hh³jdh´Mãubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjOh²hh³jdh´Mãubah}”(h]”jJah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jdh´MãhjLh²hubj)�”}”(hhh]”hì)�”}”(hŒManaged dma_pool_create()”h]”hŒManaged dma_pool_create()”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mãhj„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLh²hh³jdh´Mãubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jŸj0jŸj1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hXA**Parameters** ``const char *name`` name of pool, for diagnostics ``struct device *dev`` device that will be doing the DMA ``size_t size`` size of the blocks in this pool. ``size_t align`` alignment requirement for blocks; must be a power of two ``size_t allocation`` returned blocks won't cross this boundary (or zero) **Description** Managed dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach. **Return** a managed dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj©h]”hŒ Parameters”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mçhj£ubjU)�”}”(hhh]”(jZ)�”}”(hŒ3``const char *name`` name of pool, for diagnostics ”h]”(j`)�”}”(hŒ``const char *name``”h]”jæ)�”}”(hjÈh]”hŒconst char *name”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MähjÂubjz)�”}”(hhh]”hì)�”}”(hŒname of pool, for diagnostics”h]”hŒname of pool, for diagnostics”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÝh´MähjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÝh´Mähj¿ubjZ)�”}”(hŒ9``struct device *dev`` device that will be doing the DMA ”h]”(j`)�”}”(hŒ``struct device *dev``”h]”jæ)�”}”(hjh]”hŒstruct device *dev”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Måhjûubjz)�”}”(hhh]”hì)�”}”(hŒ!device that will be doing the DMA”h]”hŒ!device that will be doing the DMA”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´Måhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jh´Måhj¿ubjZ)�”}”(hŒ1``size_t size`` size of the blocks in this pool. ”h]”(j`)�”}”(hŒ``size_t size``”h]”jæ)�”}”(hj:h]”hŒ size_t size”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mæhj4ubjz)�”}”(hhh]”hì)�”}”(hŒ size of the blocks in this pool.”h]”hŒ size of the blocks in this pool.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jOh´MæhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jOh´Mæhj¿ubjZ)�”}”(hŒJ``size_t align`` alignment requirement for blocks; must be a power of two ”h]”(j`)�”}”(hŒ``size_t align``”h]”jæ)�”}”(hjsh]”hŒ size_t align”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mçhjmubjz)�”}”(hhh]”hì)�”}”(hŒ8alignment requirement for blocks; must be a power of two”h]”hŒ8alignment requirement for blocks; must be a power of two”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jˆh´Mçhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jˆh´Mçhj¿ubjZ)�”}”(hŒJ``size_t allocation`` returned blocks won't cross this boundary (or zero) ”h]”(j`)�”}”(hŒ``size_t allocation``”h]”jæ)�”}”(hj¬h]”hŒsize_t allocation”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mèhj¦ubjz)�”}”(hhh]”hì)�”}”(hŒ3returned blocks won't cross this boundary (or zero)”h]”hŒ5returned blocks won’t cross this boundary (or zero)”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÁh´MèhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÁh´Mèhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj£ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjçh]”hŒ Description”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mêhj£ubhì)�”}”(hŒlManaged dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach.”h]”hŒlManaged dma_pool_create(). DMA pool created with this function is automatically destroyed on driver detach.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Méhj£ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mìhj£ubhì)�”}”(hŒfa managed dma allocation pool with the requested characteristics, or ``NULL`` if one can't be created.”h]”(hŒEa managed dma allocation pool with the requested characteristics, or ”…”�”}”(hj$h²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj$ubhŒ if one can’t be created.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Míhj£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdmam_pool_destroy (C function)”Œc.dmam_pool_destroy”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ.void dmam_pool_destroy (struct dma_pool *pool)”h]”j{)�”}”(hŒ-void dmam_pool_destroy(struct dma_pool *pool)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjah²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjah²hh³jsh´Mubjó)�”}”(hŒdmam_pool_destroy”h]”j§)�”}”(hŒdmam_pool_destroy”h]”hŒdmam_pool_destroy”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‚ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjah²hh³jsh´Mubj)�”}”(hŒ(struct dma_pool *pool)”h]”j)�”}”(hŒstruct dma_pool *pool”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjžubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÂŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjˆsbŒc.dmam_pool_destroy”†”asbuh1hhjžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjžubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjžubj§)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjah²hh³jsh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj]h²hh³jsh´Mubah}”(h]”jXah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jsh´MhjZh²hubj)�”}”(hhh]”hì)�”}”(hŒManaged dma_pool_destroy()”h]”hŒManaged dma_pool_destroy()”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mhj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjZh²hh³jsh´Mubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j=j0j=j1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hŒy**Parameters** ``struct dma_pool *pool`` dma pool that will be destroyed **Description** Managed dma_pool_destroy().”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjGh]”hŒ Parameters”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MhjAubjU)�”}”(hhh]”jZ)�”}”(hŒ:``struct dma_pool *pool`` dma pool that will be destroyed ”h]”(j`)�”}”(hŒ``struct dma_pool *pool``”h]”jæ)�”}”(hjfh]”hŒstruct dma_pool *pool”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´Mhj`ubjz)�”}”(hhh]”hì)�”}”(hŒdma pool that will be destroyed”h]”hŒdma pool that will be destroyed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j{h´Mhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j{h´Mhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjAubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj¡h]”hŒ Description”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MhjAubhì)�”}”(hŒManaged dma_pool_destroy().”h]”hŒManaged dma_pool_destroy().”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:86: ./mm/dmapool.c”h´MhjAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj1h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒdma_pool_zalloc (C function)”Œc.dma_pool_zalloc”hNt”auh1j^hj1h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒSvoid * dma_pool_zalloc (struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”j{)�”}”(hŒQvoid *dma_pool_zalloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjâh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´K@ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjâh²hh³jôh´K@ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjâh²hh³jôh´K@ubjó)�”}”(hŒdma_pool_zalloc”h]”j§)�”}”(hŒdma_pool_zalloc”h]”hŒdma_pool_zalloc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjâh²hh³jôh´K@ubj)�”}”(hŒ<(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle)”h]”(j)�”}”(hŒstruct dma_pool *pool”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj,ubh)�”}”(hhh]”j§)�”}”(hŒdma_pool”h]”hŒdma_pool”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jPŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjsbŒc.dma_pool_zalloc”†”asbuh1hhj,ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj,ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj,ubj§)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj(ubj)�”}”(hŒgfp_t mem_flags”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j§Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jjŒc.dma_pool_zalloc”†”asbuh1hhjžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjžubj§)�”}”(hŒ mem_flags”h]”hŒ mem_flags”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj(ubj)�”}”(hŒdma_addr_t *handle”h]”(h)�”}”(hhh]”j§)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jïŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jjŒc.dma_pool_zalloc”†”asbuh1hhjæubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjæubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjæubj§)�”}”(hŒhandle”h]”hŒhandle”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj(ube•h}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjâh²hh³jôh´K@ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÞh²hh³jôh´K@ubah}”(h]”jÙah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jôh´K@hjÛh²hubj)�”}”(hhh]”hì)�”}”(hŒ4Get a zero-initialized block of DMA coherent memory.”h]”hŒ4Get a zero-initialized block of DMA coherent memory.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´K@hjMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÛh²hh³jôh´K@ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jhj0jhj1‰j2‰j3‰uh1joh²hhj1h³Nh´Nubj5)�”}”(hŒþ**Parameters** ``struct dma_pool *pool`` dma pool that will produce the block ``gfp_t mem_flags`` GFP_* bitmask ``dma_addr_t *handle`` pointer to dma address of block **Description** Same as dma_pool_alloc(), but the returned memory is zeroed.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjrh]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´KDhjlubjU)�”}”(hhh]”(jZ)�”}”(hŒ?``struct dma_pool *pool`` dma pool that will produce the block ”h]”(j`)�”}”(hŒ``struct dma_pool *pool``”h]”jæ)�”}”(hj‘h]”hŒstruct dma_pool *pool”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´KAhj‹ubjz)�”}”(hhh]”hì)�”}”(hŒ$dma pool that will produce the block”h]”hŒ$dma pool that will produce the block”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¦h´KAhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¦h´KAhjˆubjZ)�”}”(hŒ"``gfp_t mem_flags`` GFP_* bitmask ”h]”(j`)�”}”(hŒ``gfp_t mem_flags``”h]”jæ)�”}”(hjÊh]”hŒgfp_t mem_flags”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´KBhjÄubjz)�”}”(hhh]”hì)�”}”(hŒ GFP_* bitmask”h]”hŒ GFP_* bitmask”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jßh´KBhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jßh´KBhjˆubjZ)�”}”(hŒ7``dma_addr_t *handle`` pointer to dma address of block ”h]”(j`)�”}”(hŒ``dma_addr_t *handle``”h]”jæ)�”}”(hjh]”hŒdma_addr_t *handle”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´KChjýubjz)�”}”(hhh]”hì)�”}”(hŒpointer to dma address of block”h]”hŒpointer to dma address of block”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh´KChjubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jh´KChjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjlubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj>h]”hŒ Description”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:89: ./include/linux/dmapool.h”h´KEhjlubhì)�”}”(hŒ`. However, these methods are not always available, and even if they are, they may still fail for a number of reasons. In short, a device driver may need to be wary of where buffers are located in physical memory, especially if the DMA mask is less than 32 bits.”h]”(hì)�”}”(hX#In particular, mapping may fail for memory not addressable by the device, e.g. if it is not within the DMA mask of the device and/or a connecting bus bridge. Streaming DMA functions try to overcome such addressing constraints, either by using an IOMMU (a device which maps I/O DMA addresses to physical memory addresses), or by copying the data to/from a bounce buffer if the kernel is configured with a :doc:`SWIOTLB `. However, these methods are not always available, and even if they are, they may still fail for a number of reasons.”h]”(hX•In particular, mapping may fail for memory not addressable by the device, e.g. if it is not within the DMA mask of the device and/or a connecting bus bridge. Streaming DMA functions try to overcome such addressing constraints, either by using an IOMMU (a device which maps I/O DMA addresses to physical memory addresses), or by copying the data to/from a bounce buffer if the kernel is configured with a ”…”�”}”(hjòh²hh³Nh´Nubh)�”}”(hŒ:doc:`SWIOTLB `”h]”hŒinline”“”)�”}”(hjüh]”hŒSWIOTLB”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-doc”eh"]”h$]”h&]”uh1jþhjúubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/dma-api”Œ refdomain”j Œreftype”Œdoc”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œswiotlb”uh1hh³hÊh´KÁhjòubhŒv. However, these methods are not always available, and even if they are, they may still fail for a number of reasons.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÁhjîubhì)�”}”(hŒ�In short, a device driver may need to be wary of where buffers are located in physical memory, especially if the DMA mask is less than 32 bits.”h]”hŒ�In short, a device driver may need to be wary of where buffers are located in physical memory, especially if the DMA mask is less than 32 bits.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KËhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jìhjÍh²hh³hÊh´Nubj†)�”}”(hŒ|dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction direction)”h]”hŒ|dma_addr_t dma_map_single(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction direction)”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´KÑhjÍh²hubhì)�”}”(hŒwMaps a piece of processor virtual memory so it can be accessed by the device and returns the DMA address of the memory.”h]”hŒwMaps a piece of processor virtual memory so it can be accessed by the device and returns the DMA address of the memory.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÕhjÍh²hubhì)�”}”(hŒ?The DMA API uses a strongly typed enumerator for its direction:”h]”hŒ?The DMA API uses a strongly typed enumerator for its direction:”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KØhjÍh²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jqhjnubjr)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K-uh1jqhjnubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hì)�”}”(hŒDMA_NONE”h]”hŒDMA_NONE”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÛhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjŽubj’)�”}”(hhh]”hì)�”}”(hŒ!no direction (used for debugging)”h]”hŒ!no direction (used for debugging)”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÛhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‰ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒ DMA_TO_DEVICE”h]”hŒ DMA_TO_DEVICE”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÜhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjÇubj’)�”}”(hhh]”hì)�”}”(hŒ+data is going from the memory to the device”h]”hŒ+data is going from the memory to the device”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÜhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‰ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒDMA_FROM_DEVICE”h]”hŒDMA_FROM_DEVICE”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÝhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjþubj’)�”}”(hhh]”hì)�”}”(hŒ,data is coming from the device to the memory”h]”hŒ,data is coming from the device to the memory”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÝhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‰ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒDMA_BIDIRECTIONAL”h]”hŒDMA_BIDIRECTIONAL”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÞhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj5ubj’)�”}”(hhh]”hì)�”}”(hŒdirection isn't known”h]”hŒdirection isn’t known”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´KÞhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jlhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjÍh²hh³hÊh´Nubjí)�”}”(hXmContiguous kernel virtual space may not be contiguous as physical memory. Since this API does not provide any scatter/gather capability, it will fail if the user tries to map a non-physically contiguous piece of memory. For this reason, memory to be mapped by this API should be obtained from sources which guarantee it to be physically contiguous (like kmalloc).”h]”hì)�”}”(hXmContiguous kernel virtual space may not be contiguous as physical memory. Since this API does not provide any scatter/gather capability, it will fail if the user tries to map a non-physically contiguous piece of memory. For this reason, memory to be mapped by this API should be obtained from sources which guarantee it to be physically contiguous (like kmalloc).”h]”hXmContiguous kernel virtual space may not be contiguous as physical memory. Since this API does not provide any scatter/gather capability, it will fail if the user tries to map a non-physically contiguous piece of memory. For this reason, memory to be mapped by this API should be obtained from sources which guarantee it to be physically contiguous (like kmalloc).”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kãhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jìhjÍh²hh³hÊh´NubhŒwarning”“”)�”}”(hX Memory coherency operates at a granularity called the cache line width. In order for memory mapped by this API to operate correctly, the mapped region must begin exactly on a cache line boundary and end exactly on one (to prevent two separately mapped regions from sharing a single cache line). Since the cache line size may not be known at compile time, the API will not enforce this requirement. Therefore, it is recommended that driver writers who don't take special care to determine the cache line size at run time only map virtual regions that begin and end on page boundaries (which are guaranteed also to be cache line boundaries). DMA_TO_DEVICE synchronisation must be done after the last modification of the memory region by the software and before it is handed off to the device. Once this primitive is used, memory covered by this primitive should be treated as read-only by the device. If the device may write to it at any point, it should be DMA_BIDIRECTIONAL (see below). DMA_FROM_DEVICE synchronisation must be done before the driver accesses data that may be changed by the device. This memory should be treated as read-only by the driver. If the driver needs to write to it at any point, it should be DMA_BIDIRECTIONAL (see below). DMA_BIDIRECTIONAL requires special handling: it means that the driver isn't sure if the memory was modified before being handed off to the device and also isn't sure if the device will also modify it. Thus, you must always sync bidirectional memory twice: once before the memory is handed off to the device (to make sure all memory changes are flushed from the processor) and once before the data may be accessed after being used by the device (to make sure any processor cache lines are updated with data that the device may have changed).”h]”(hì)�”}”(hX‚Memory coherency operates at a granularity called the cache line width. In order for memory mapped by this API to operate correctly, the mapped region must begin exactly on a cache line boundary and end exactly on one (to prevent two separately mapped regions from sharing a single cache line). Since the cache line size may not be known at compile time, the API will not enforce this requirement. Therefore, it is recommended that driver writers who don't take special care to determine the cache line size at run time only map virtual regions that begin and end on page boundaries (which are guaranteed also to be cache line boundaries).”h]”hX„Memory coherency operates at a granularity called the cache line width. In order for memory mapped by this API to operate correctly, the mapped region must begin exactly on a cache line boundary and end exactly on one (to prevent two separately mapped regions from sharing a single cache line). Since the cache line size may not be known at compile time, the API will not enforce this requirement. Therefore, it is recommended that driver writers who don’t take special care to determine the cache line size at run time only map virtual regions that begin and end on page boundaries (which are guaranteed also to be cache line boundaries).”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kìhj™ubhì)�”}”(hX\DMA_TO_DEVICE synchronisation must be done after the last modification of the memory region by the software and before it is handed off to the device. Once this primitive is used, memory covered by this primitive should be treated as read-only by the device. If the device may write to it at any point, it should be DMA_BIDIRECTIONAL (see below).”h]”hX\DMA_TO_DEVICE synchronisation must be done after the last modification of the memory region by the software and before it is handed off to the device. Once this primitive is used, memory covered by this primitive should be treated as read-only by the device. If the device may write to it at any point, it should be DMA_BIDIRECTIONAL (see below).”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´K÷hj™ubhì)�”}”(hXDMA_FROM_DEVICE synchronisation must be done before the driver accesses data that may be changed by the device. This memory should be treated as read-only by the driver. If the driver needs to write to it at any point, it should be DMA_BIDIRECTIONAL (see below).”h]”hXDMA_FROM_DEVICE synchronisation must be done before the driver accesses data that may be changed by the device. This memory should be treated as read-only by the driver. If the driver needs to write to it at any point, it should be DMA_BIDIRECTIONAL (see below).”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Kþhj™ubhì)�”}”(hXDMA_BIDIRECTIONAL requires special handling: it means that the driver isn't sure if the memory was modified before being handed off to the device and also isn't sure if the device will also modify it. Thus, you must always sync bidirectional memory twice: once before the memory is handed off to the device (to make sure all memory changes are flushed from the processor) and once before the data may be accessed after being used by the device (to make sure any processor cache lines are updated with data that the device may have changed).”h]”hX!DMA_BIDIRECTIONAL requires special handling: it means that the driver isn’t sure if the memory was modified before being handed off to the device and also isn’t sure if the device will also modify it. Thus, you must always sync bidirectional memory twice: once before the memory is handed off to the device (to make sure all memory changes are flushed from the processor) and once before the data may be accessed after being used by the device (to make sure any processor cache lines are updated with data that the device may have changed).”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j—hjÍh²hh³hÊh´Nubj†)�”}”(hŒvoid dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction)”h]”hŒvoid dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction direction)”…”�”}”hjÛsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MhjÍh²hubhì)�”}”(hŒ‹Unmaps the region previously mapped. All the parameters passed in must be identical to those passed to (and returned by) dma_map_single().”h]”hŒ‹Unmaps the region previously mapped. All the parameters passed in must be identical to those passed to (and returned by) dma_map_single().”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MhjÍh²hubj†)�”}”(hXdma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction) void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction)”h]”hXdma_addr_t dma_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction direction) void dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size, enum dma_data_direction direction)”…”�”}”hj÷sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MhjÍh²hubhì)�”}”(hX"API for mapping and unmapping for pages. All the notes and warnings for the other mapping APIs apply here. Also, although the and parameters are provided to do partial page mapping, it is recommended that you never use these unless you really know what the cache width is.”h]”hX"API for mapping and unmapping for pages. All the notes and warnings for the other mapping APIs apply here. Also, although the and parameters are provided to do partial page mapping, it is recommended that you never use these unless you really know what the cache width is.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hjÍh²hubj†)�”}”(hX&dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_resource(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs)”h]”hX&dma_addr_t dma_map_resource(struct device *dev, phys_addr_t phys_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_resource(struct device *dev, dma_addr_t addr, size_t size, enum dma_data_direction dir, unsigned long attrs)”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M(hjÍh²hubhì)�”}”(hŒÎAPI for mapping and unmapping for MMIO resources. All the notes and warnings for the other mapping APIs apply here. The API should only be used to map device MMIO resources, mapping of RAM is not permitted.”h]”hŒÎAPI for mapping and unmapping for MMIO resources. All the notes and warnings for the other mapping APIs apply here. The API should only be used to map device MMIO resources, mapping of RAM is not permitted.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M0hjÍh²hubj†)�”}”(hŒ>int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)”h]”hŒ>int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)”…”�”}”hj/sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M6hjÍh²hubhì)�”}”(hX�In some circumstances dma_map_single(), dma_map_page() and dma_map_resource() will fail to create a mapping. A driver can check for these errors by testing the returned DMA address with dma_mapping_error(). A non-zero return value means the mapping could not be created and the driver should take appropriate action (e.g. reduce current DMA mapping usage or delay and try again later).”h]”hX�In some circumstances dma_map_single(), dma_map_page() and dma_map_resource() will fail to create a mapping. A driver can check for these errors by testing the returned DMA address with dma_mapping_error(). A non-zero return value means the mapping could not be created and the driver should take appropriate action (e.g. reduce current DMA mapping usage or delay and try again later).”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M9hjÍh²hubj†)�”}”(hŒsint dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”h]”hŒsint dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”…”�”}”hjKsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MAhjÍh²hubhì)�”}”(hXMaps a scatter/gather list for DMA. Returns the number of DMA address segments mapped, which may be smaller than passed in if several consecutive sglist entries are merged (e.g. with an IOMMU, or if some adjacent segments just happen to be physically contiguous).”h]”hXMaps a scatter/gather list for DMA. Returns the number of DMA address segments mapped, which may be smaller than passed in if several consecutive sglist entries are merged (e.g. with an IOMMU, or if some adjacent segments just happen to be physically contiguous).”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MEhjÍh²hubhì)�”}”(hŒ‹Please note that the sg cannot be mapped again if it has been mapped once. The mapping process is allowed to destroy information in the sg.”h]”hŒ‹Please note that the sg cannot be mapped again if it has been mapped once. The mapping process is allowed to destroy information in the sg.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MJhjÍh²hubhì)�”}”(hX/As with the other mapping interfaces, dma_map_sg() can fail. When it does, 0 is returned and a driver must take appropriate action. It is critical that the driver do something, in the case of a block driver aborting the request or even oopsing is better than doing nothing and corrupting the filesystem.”h]”hX/As with the other mapping interfaces, dma_map_sg() can fail. When it does, 0 is returned and a driver must take appropriate action. It is critical that the driver do something, in the case of a block driver aborting the request or even oopsing is better than doing nothing and corrupting the filesystem.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MMhjÍh²hubhì)�”}”(hŒaddress and sg->length as shown above.”h]”hŒÄThen you should loop count times (note: this can be less than nents times) and use sg_dma_address() and sg_dma_len() macros where you previously accessed sg->address and sg->length as shown above.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MchjÍh²hubj†)�”}”(hŒxvoid dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”h]”hŒxvoid dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”…”�”}”hjÉsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MihjÍh²hubhì)�”}”(hŒ�Unmap the previously mapped scatter/gather list. All the parameters must be the same as those and passed in to the scatter/gather mapping API.”h]”hŒ�Unmap the previously mapped scatter/gather list. All the parameters must be the same as those and passed in to the scatter/gather mapping API.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MmhjÍh²hubhì)�”}”(hŒaNote: must be the number you passed in, *not* the number of DMA address entries returned.”h]”(hŒ0Note: must be the number you passed in, ”…”�”}”(hjåh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjåubhŒ, the number of DMA address entries returned.”…”�”}”(hjåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MqhjÍh²hubj†)�”}”(hXšvoid dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction) void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction) void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction) void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”h]”hXšvoid dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction) void dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size, enum dma_data_direction direction) void dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction) void dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction)”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MvhjÍh²hubhì)�”}”(hXQSynchronise a single contiguous or scatter/gather mapping for the CPU and device. With the sync_sg API, all the parameters must be the same as those passed into the sg mapping API. With the sync_single API, you can use dma_handle and size parameters that aren't identical to those passed into the single mapping API to do a partial sync.”h]”hXSSynchronise a single contiguous or scatter/gather mapping for the CPU and device. With the sync_sg API, all the parameters must be the same as those passed into the sg mapping API. With the sync_single API, you can use dma_handle and size parameters that aren’t identical to those passed into the single mapping API to do a partial sync.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MŠhjÍh²hubjí)�”}”(hX=You must do this: - Before reading values that have been written by DMA from the device (use the DMA_FROM_DEVICE direction) - After writing values that will be written to the device using DMA (use the DMA_TO_DEVICE) direction - before *and* after handing memory to the device if the memory is DMA_BIDIRECTIONAL”h]”(hì)�”}”(hŒYou must do this:”h]”hŒYou must do this:”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M“hj#ubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒgBefore reading values that have been written by DMA from the device (use the DMA_FROM_DEVICE direction)”h]”hì)�”}”(hŒgBefore reading values that have been written by DMA from the device (use the DMA_FROM_DEVICE direction)”h]”hŒgBefore reading values that have been written by DMA from the device (use the DMA_FROM_DEVICE direction)”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M•hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj7ubj;)�”}”(hŒcAfter writing values that will be written to the device using DMA (use the DMA_TO_DEVICE) direction”h]”hì)�”}”(hŒcAfter writing values that will be written to the device using DMA (use the DMA_TO_DEVICE) direction”h]”hŒcAfter writing values that will be written to the device using DMA (use the DMA_TO_DEVICE) direction”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M—hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj7ubj;)�”}”(hŒRbefore *and* after handing memory to the device if the memory is DMA_BIDIRECTIONAL”h]”hì)�”}”(hŒRbefore *and* after handing memory to the device if the memory is DMA_BIDIRECTIONAL”h]”(hŒbefore ”…”�”}”(hjph²hh³Nh´Nubjî)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhjpubhŒF after handing memory to the device if the memory is DMA_BIDIRECTIONAL”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M™hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j5h³hÊh´M•hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jìhjÍh²hh³Nh´Nubhì)�”}”(hŒSee also dma_map_single().”h]”hŒSee also dma_map_single().”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MœhjÍh²hubj†)�”}”(hXªdma_addr_t dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, unsigned long attrs)”h]”hXªdma_addr_t dma_map_single_attrs(struct device *dev, void *cpu_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_single_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) int dma_map_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, unsigned long attrs) void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sgl, int nents, enum dma_data_direction dir, unsigned long attrs)”…”�”}”hj²sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M hjÍh²hubhì)�”}”(hŒŠThe four functions above are just like the counterpart functions without the _attrs suffixes, except that they pass an optional dma_attrs.”h]”hŒŠThe four functions above are just like the counterpart functions without the _attrs suffixes, except that they pass an optional dma_attrs.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M´hjÍh²hubhì)�”}”(hŒ”The interpretation of DMA attributes is architecture-specific, and each attribute should be documented in Documentation/core-api/dma-attributes.rst.”h]”hŒ”The interpretation of DMA attributes is architecture-specific, and each attribute should be documented in Documentation/core-api/dma-attributes.rst.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¸hjÍh²hubhì)�”}”(hŒÛIf dma_attrs are 0, the semantics of each of these functions is identical to those of the corresponding function without the _attrs suffix. As a result dma_map_single_attrs() can generally replace dma_map_single(), etc.”h]”hŒÛIf dma_attrs are 0, the semantics of each of these functions is identical to those of the corresponding function without the _attrs suffix. As a result dma_map_single_attrs() can generally replace dma_map_single(), etc.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¼hjÍh²hubhì)�”}”(hŒˆAs an example of the use of the ``*_attrs`` functions, here's how you could pass an attribute DMA_ATTR_FOO when mapping memory for DMA::”h]”(hŒ As an example of the use of the ”…”�”}”(hjêh²hh³Nh´Nubjæ)�”}”(hŒ ``*_attrs``”h]”hŒ*_attrs”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjêubhŒ^ functions, here’s how you could pass an attribute DMA_ATTR_FOO when mapping memory for DMA:”…”�”}”(hjêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÁhjÍh²hubj†)�”}”(hX4#include /* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and * documented in Documentation/core-api/dma-attributes.rst */ ... unsigned long attr; attr |= DMA_ATTR_FOO; .... n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr); ....”h]”hX4#include /* DMA_ATTR_FOO should be defined in linux/dma-mapping.h and * documented in Documentation/core-api/dma-attributes.rst */ ... unsigned long attr; attr |= DMA_ATTR_FOO; .... n = dma_map_sg_attrs(dev, sg, nents, DMA_TO_DEVICE, attr); ....”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MÅhjÍh²hubhì)�”}”(hŒ�Architectures that care about DMA_ATTR_FOO would check for its presence in their implementations of the mapping and unmapping routines, e.g.:::”h]”hŒŽArchitectures that care about DMA_ATTR_FOO would check for its presence in their implementations of the mapping and unmapping routines, e.g.::”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÐhjÍh²hubj†)�”}”(hX+void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { .... if (attrs & DMA_ATTR_FOO) /* twizzle the frobnozzle */ .... }”h]”hX+void whizco_dma_map_sg_attrs(struct device *dev, dma_addr_t dma_addr, size_t size, enum dma_data_direction dir, unsigned long attrs) { .... if (attrs & DMA_ATTR_FOO) /* twizzle the frobnozzle */ .... }”…”�”}”hj&sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MÔhjÍh²hubeh}”(h]”Œpart-id-streaming-dma-mappings”ah ]”h"]”Œ part id - streaming dma mappings”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¹ubh¶)�”}”(hhh]”(h»)�”}”(hŒ!Part Ie - IOVA-based DMA mappings”h]”hŒ!Part Ie - IOVA-based DMA mappings”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj<h²hh³hÊh´Mßubhì)�”}”(hX5These APIs allow a very efficient mapping when using an IOMMU. They are an optional path that requires extra code and are only recommended for drivers where DMA mapping performance, or the space usage for storing the DMA addresses matter. All the considerations from the previous section apply here as well.”h]”hX5These APIs allow a very efficient mapping when using an IOMMU. They are an optional path that requires extra code and are only recommended for drivers where DMA mapping performance, or the space usage for storing the DMA addresses matter. All the considerations from the previous section apply here as well.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Máhj<h²hubj†)�”}”(hŒubool dma_iova_try_alloc(struct device *dev, struct dma_iova_state *state, phys_addr_t phys, size_t size);”h]”hŒubool dma_iova_try_alloc(struct device *dev, struct dma_iova_state *state, phys_addr_t phys, size_t size);”…”�”}”hj[sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mèhj<h²hubhì)�”}”(hXIs used to try to allocate IOVA space for mapping operation. If it returns false this API can't be used for the given device and the normal streaming DMA mapping API should be used. The ``struct dma_iova_state`` is allocated by the driver and must be kept around until unmap time.”h]”(hŒ¾Is used to try to allocate IOVA space for mapping operation. If it returns false this API can’t be used for the given device and the normal streaming DMA mapping API should be used. The ”…”�”}”(hjih²hh³Nh´Nubjæ)�”}”(hŒ``struct dma_iova_state``”h]”hŒstruct dma_iova_state”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjiubhŒE is allocated by the driver and must be kept around until unmap time.”…”�”}”(hjih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mëhj<h²hubj†)�”}”(hŒ=static inline bool dma_use_iova(struct dma_iova_state *state)”h]”hŒ=static inline bool dma_use_iova(struct dma_iova_state *state)”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mòhj<h²hubhì)�”}”(hŒ‹Can be used by the driver to check if the IOVA-based API is used after a call to dma_iova_try_alloc. This can be useful in the unmap path.”h]”hŒ‹Can be used by the driver to check if the IOVA-based API is used after a call to dma_iova_try_alloc. This can be useful in the unmap path.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Môhj<h²hubj†)�”}”(hŒ¼int dma_iova_link(struct device *dev, struct dma_iova_state *state, phys_addr_t phys, size_t offset, size_t size, enum dma_data_direction dir, unsigned long attrs);”h]”hŒ¼int dma_iova_link(struct device *dev, struct dma_iova_state *state, phys_addr_t phys, size_t offset, size_t size, enum dma_data_direction dir, unsigned long attrs);”…”�”}”hj¥sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mùhj<h²hubhì)�”}”(hX.Is used to link ranges to the IOVA previously allocated. The start of all but the first call to dma_iova_link for a given state must be aligned to the DMA merge boundary returned by ``dma_get_merge_boundary()``, and the size of all but the last range must be aligned to the DMA merge boundary as well.”h]”(hŒ·Is used to link ranges to the IOVA previously allocated. The start of all but the first call to dma_iova_link for a given state must be aligned to the DMA merge boundary returned by ”…”�”}”(hj³h²hh³Nh´Nubjæ)�”}”(hŒ``dma_get_merge_boundary()``”h]”hŒdma_get_merge_boundary()”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj³ubhŒ[, and the size of all but the last range must be aligned to the DMA merge boundary as well.”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mýhj<h²hubj†)�”}”(hŒlint dma_iova_sync(struct device *dev, struct dma_iova_state *state, size_t offset, size_t size);”h]”hŒlint dma_iova_sync(struct device *dev, struct dma_iova_state *state, size_t offset, size_t size);”…”�”}”hjÓsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mhj<h²hubhì)�”}”(hŒoMust be called to sync the IOMMU page tables for IOVA-range mapped by one or more calls to ``dma_iova_link()``.”h]”(hŒ[Must be called to sync the IOMMU page tables for IOVA-range mapped by one or more calls to ”…”�”}”(hjáh²hh³Nh´Nubjæ)�”}”(hŒ``dma_iova_link()``”h]”hŒdma_iova_link()”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjáubhŒ.”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj<h²hubhì)�”}”(hŒbFor drivers that use a one-shot mapping, all ranges can be unmapped and the IOVA freed by calling:”h]”hŒbFor drivers that use a one-shot mapping, all ranges can be unmapped and the IOVA freed by calling:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hj<h²hubj†)�”}”(hŒ§void dma_iova_destroy(struct device *dev, struct dma_iova_state *state, size_t mapped_len, enum dma_data_direction dir, unsigned long attrs);”h]”hŒ§void dma_iova_destroy(struct device *dev, struct dma_iova_state *state, size_t mapped_len, enum dma_data_direction dir, unsigned long attrs);”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mhj<h²hubhì)�”}”(hŒvAlternatively drivers can dynamically manage the IOVA space by unmapping and mapping individual regions. In that case”h]”hŒvAlternatively drivers can dynamically manage the IOVA space by unmapping and mapping individual regions. In that case”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj<h²hubj†)�”}”(hŒ­void dma_iova_unlink(struct device *dev, struct dma_iova_state *state, size_t offset, size_t size, enum dma_data_direction dir, unsigned long attrs);”h]”hŒ­void dma_iova_unlink(struct device *dev, struct dma_iova_state *state, size_t offset, size_t size, enum dma_data_direction dir, unsigned long attrs);”…”�”}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mhj<h²hubhì)�”}”(hŒ/is used to unmap a range previously mapped, and”h]”hŒ/is used to unmap a range previously mapped, and”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj<h²hubj†)�”}”(hŒEvoid dma_iova_free(struct device *dev, struct dma_iova_state *state);”h]”hŒEvoid dma_iova_free(struct device *dev, struct dma_iova_state *state);”…”�”}”hjGsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M!hj<h²hubhì)�”}”(hŒ„is used to free the IOVA space. All regions must have been unmapped using ``dma_iova_unlink()`` before calling ``dma_iova_free()``.”h]”(hŒKis used to free the IOVA space. All regions must have been unmapped using ”…”�”}”(hjUh²hh³Nh´Nubjæ)�”}”(hŒ``dma_iova_unlink()``”h]”hŒdma_iova_unlink()”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjUubhŒ before calling ”…”�”}”(hjUh²hh³Nh´Nubjæ)�”}”(hŒ``dma_iova_free()``”h]”hŒdma_iova_free()”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjUubhŒ.”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M#hj<h²hubeh}”(h]”Œpart-ie-iova-based-dma-mappings”ah ]”h"]”Œ!part ie - iova-based dma mappings”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mßubh¶)�”}”(hhh]”(h»)�”}”(hŒ&Part II - Non-coherent DMA allocations”h]”hŒ&Part II - Non-coherent DMA allocations”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´M'ubhì)�”}”(hŒºThese APIs allow to allocate pages that are guaranteed to be DMA addressable by the passed in device, but which need explicit management of memory ownership for the kernel vs the device.”h]”hŒºThese APIs allow to allocate pages that are guaranteed to be DMA addressable by the passed in device, but which need explicit management of memory ownership for the kernel vs the device.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M)hj�h²hubhì)�”}”(hŒ‹If you don't understand how cache line coherency works between a processor and an I/O device, you should not be using this part of the API.”h]”hŒ�If you don’t understand how cache line coherency works between a processor and an I/O device, you should not be using this part of the API.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M-hj�h²hubj†)�”}”(hŒŽstruct page * dma_alloc_pages(struct device *dev, size_t size, dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp)”h]”hŒŽstruct page * dma_alloc_pages(struct device *dev, size_t size, dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp)”…”�”}”hj¼sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M2hj�h²hubhì)�”}”(hŒøThis routine allocates a region of bytes of non-coherent memory. It returns a pointer to first struct page for the region, or NULL if the allocation failed. The resulting struct page can be used for everything a struct page is suitable for.”h]”hŒøThis routine allocates a region of bytes of non-coherent memory. It returns a pointer to first struct page for the region, or NULL if the allocation failed. The resulting struct page can be used for everything a struct page is suitable for.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M6hj�h²hubhì)�”}”(hŒ It also returns a which may be cast to an unsigned integer the same width as the bus and given to the device as the DMA address base of the region.”h]”hŒ It also returns a which may be cast to an unsigned integer the same width as the bus and given to the device as the DMA address base of the region.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M;hj�h²hubhì)�”}”(hŒkThe dir parameter specified if data is read and/or written by the device, see dma_map_single() for details.”h]”hŒkThe dir parameter specified if data is read and/or written by the device, see dma_map_single() for details.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M?hj�h²hubhì)�”}”(hŒµThe gfp parameter allows the caller to specify the ``GFP_`` flags (see kmalloc()) for the allocation, but rejects flags used to specify a memory zone such as GFP_DMA or GFP_HIGHMEM.”h]”(hŒ3The gfp parameter allows the caller to specify the ”…”�”}”(hjôh²hh³Nh´Nubjæ)�”}”(hŒ``GFP_``”h]”hŒGFP_”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjôubhŒz flags (see kmalloc()) for the allocation, but rejects flags used to specify a memory zone such as GFP_DMA or GFP_HIGHMEM.”…”�”}”(hjôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MBhj�h²hubhì)�”}”(hŒÚBefore giving the memory to the device, dma_sync_single_for_device() needs to be called, and before reading memory written by the device, dma_sync_single_for_cpu(), just like for streaming DMA mappings that are reused.”h]”hŒÚBefore giving the memory to the device, dma_sync_single_for_device() needs to be called, and before reading memory written by the device, dma_sync_single_for_cpu(), just like for streaming DMA mappings that are reused.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MFhj�h²hubj†)�”}”(hŒ‹void dma_free_pages(struct device *dev, size_t size, struct page *page, dma_addr_t dma_handle, enum dma_data_direction dir)”h]”hŒ‹void dma_free_pages(struct device *dev, size_t size, struct page *page, dma_addr_t dma_handle, enum dma_data_direction dir)”…”�”}”hj"sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MMhj�h²hubhì)�”}”(hŒÙFree a region of memory previously allocated using dma_alloc_pages(). dev, size, dma_handle and dir must all be the same as those passed into dma_alloc_pages(). page must be the pointer returned by dma_alloc_pages().”h]”hŒÙFree a region of memory previously allocated using dma_alloc_pages(). dev, size, dma_handle and dir must all be the same as those passed into dma_alloc_pages(). page must be the pointer returned by dma_alloc_pages().”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MQhj�h²hubj†)�”}”(hŒqint dma_mmap_pages(struct device *dev, struct vm_area_struct *vma, size_t size, struct page *page)”h]”hŒqint dma_mmap_pages(struct device *dev, struct vm_area_struct *vma, size_t size, struct page *page)”…”�”}”hj>sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MWhj�h²hubhì)�”}”(hŒÊMap an allocation returned from dma_alloc_pages() into a user address space. dev and size must be the same as those passed into dma_alloc_pages(). page must be the pointer returned by dma_alloc_pages().”h]”hŒÊMap an allocation returned from dma_alloc_pages() into a user address space. dev and size must be the same as those passed into dma_alloc_pages(). page must be the pointer returned by dma_alloc_pages().”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M[hj�h²hubj†)�”}”(hŒ�void * dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp)”h]”hŒ�void * dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp)”…”�”}”hjZsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mahj�h²hubhì)�”}”(hŒ›This routine is a convenient wrapper around dma_alloc_pages that returns the kernel virtual address for the allocated memory instead of the page structure.”h]”hŒ›This routine is a convenient wrapper around dma_alloc_pages that returns the kernel virtual address for the allocated memory instead of the page structure.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mfhj�h²hubj†)�”}”(hŒŽvoid dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle, enum dma_data_direction dir)”h]”hŒŽvoid dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle, enum dma_data_direction dir)”…”�”}”hjvsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mkhj�h²hubhì)�”}”(hŒ÷Free a region of memory previously allocated using dma_alloc_noncoherent(). dev, size, dma_handle and dir must all be the same as those passed into dma_alloc_noncoherent(). cpu_addr must be the virtual address returned by dma_alloc_noncoherent().”h]”hŒ÷Free a region of memory previously allocated using dma_alloc_noncoherent(). dev, size, dma_handle and dir must all be the same as those passed into dma_alloc_noncoherent(). cpu_addr must be the virtual address returned by dma_alloc_noncoherent().”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mohj�h²hubj†)�”}”(hŒ¸struct sg_table * dma_alloc_noncontiguous(struct device *dev, size_t size, enum dma_data_direction dir, gfp_t gfp, unsigned long attrs);”h]”hŒ¸struct sg_table * dma_alloc_noncontiguous(struct device *dev, size_t size, enum dma_data_direction dir, gfp_t gfp, unsigned long attrs);”…”�”}”hj’sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mvhj�h²hubhì)�”}”(hX4This routine allocates bytes of non-coherent and possibly non-contiguous memory. It returns a pointer to struct sg_table that describes the allocated and DMA mapped memory, or NULL if the allocation failed. The resulting memory can be used for struct page mapped into a scatterlist are suitable for.”h]”hX4This routine allocates bytes of non-coherent and possibly non-contiguous memory. It returns a pointer to struct sg_table that describes the allocated and DMA mapped memory, or NULL if the allocation failed. The resulting memory can be used for struct page mapped into a scatterlist are suitable for.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M{hj�h²hubhì)�”}”(hŒ¯The return sg_table is guaranteed to have 1 single DMA mapped segment as indicated by sgt->nents, but it might have multiple CPU side segments as indicated by sgt->orig_nents.”h]”hŒ¯The return sg_table is guaranteed to have 1 single DMA mapped segment as indicated by sgt->nents, but it might have multiple CPU side segments as indicated by sgt->orig_nents.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M€hj�h²hubhì)�”}”(hŒkThe dir parameter specified if data is read and/or written by the device, see dma_map_single() for details.”h]”hŒkThe dir parameter specified if data is read and/or written by the device, see dma_map_single() for details.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M„hj�h²hubhì)�”}”(hŒµThe gfp parameter allows the caller to specify the ``GFP_`` flags (see kmalloc()) for the allocation, but rejects flags used to specify a memory zone such as GFP_DMA or GFP_HIGHMEM.”h]”(hŒ3The gfp parameter allows the caller to specify the ”…”�”}”(hjÊh²hh³Nh´Nubjæ)�”}”(hŒ``GFP_``”h]”hŒGFP_”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÊubhŒz flags (see kmalloc()) for the allocation, but rejects flags used to specify a memory zone such as GFP_DMA or GFP_HIGHMEM.”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M‡hj�h²hubhì)�”}”(hŒCThe attrs argument must be either 0 or DMA_ATTR_ALLOC_SINGLE_PAGES.”h]”hŒCThe attrs argument must be either 0 or DMA_ATTR_ALLOC_SINGLE_PAGES.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M‹hj�h²hubhì)�”}”(hŒÜBefore giving the memory to the device, dma_sync_sgtable_for_device() needs to be called, and before reading memory written by the device, dma_sync_sgtable_for_cpu(), just like for streaming DMA mappings that are reused.”h]”hŒÜBefore giving the memory to the device, dma_sync_sgtable_for_device() needs to be called, and before reading memory written by the device, dma_sync_sgtable_for_cpu(), just like for streaming DMA mappings that are reused.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M�hj�h²hubj†)�”}”(hŒ�void dma_free_noncontiguous(struct device *dev, size_t size, struct sg_table *sgt, enum dma_data_direction dir)”h]”hŒ�void dma_free_noncontiguous(struct device *dev, size_t size, struct sg_table *sgt, enum dma_data_direction dir)”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M”hj�h²hubhì)�”}”(hŒÙFree memory previously allocated using dma_alloc_noncontiguous(). dev, size, and dir must all be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”h]”hŒÙFree memory previously allocated using dma_alloc_noncontiguous(). dev, size, and dir must all be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M™hj�h²hubj†)�”}”(hŒ\void * dma_vmap_noncontiguous(struct device *dev, size_t size, struct sg_table *sgt)”h]”hŒ\void * dma_vmap_noncontiguous(struct device *dev, size_t size, struct sg_table *sgt)”…”�”}”hj"sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MŸhj�h²hubhì)�”}”(hŒìReturn a contiguous kernel mapping for an allocation returned from dma_alloc_noncontiguous(). dev and size must be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”h]”hŒìReturn a contiguous kernel mapping for an allocation returned from dma_alloc_noncontiguous(). dev and size must be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M£hj�h²hubhì)�”}”(hŒóOnce a non-contiguous allocation is mapped using this function, the flush_kernel_vmap_range() and invalidate_kernel_vmap_range() APIs must be used to manage the coherency between the kernel mapping, the device and user space mappings (if any).”h]”hŒóOnce a non-contiguous allocation is mapped using this function, the flush_kernel_vmap_range() and invalidate_kernel_vmap_range() APIs must be used to manage the coherency between the kernel mapping, the device and user space mappings (if any).”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M¨hj�h²hubj†)�”}”(hŒ>void dma_vunmap_noncontiguous(struct device *dev, void *vaddr)”h•]”hŒ>void dma_vunmap_noncontiguous(struct device *dev, void *vaddr)”…”�”}”hjLsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M¯hj�h²hubhì)�”}”(hŒÂUnmap a kernel mapping returned by dma_vmap_noncontiguous(). dev must be the same the one passed into dma_alloc_noncontiguous(). vaddr must be the pointer returned by dma_vmap_noncontiguous().”h]”hŒÂUnmap a kernel mapping returned by dma_vmap_noncontiguous(). dev must be the same the one passed into dma_alloc_noncontiguous(). vaddr must be the pointer returned by dma_vmap_noncontiguous().”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M²hj�h²hubj†)�”}”(hŒ„int dma_mmap_noncontiguous(struct device *dev, struct vm_area_struct *vma, size_t size, struct sg_table *sgt)”h]”hŒ„int dma_mmap_noncontiguous(struct device *dev, struct vm_area_struct *vma, size_t size, struct sg_table *sgt)”…”�”}”hjhsbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´M¹hj�h²hubhì)�”}”(hŒãMap an allocation returned from dma_alloc_noncontiguous() into a user address space. dev and size must be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”h]”hŒãMap an allocation returned from dma_alloc_noncontiguous() into a user address space. dev and size must be the same as those passed into dma_alloc_noncontiguous(). sgt must be the pointer returned by dma_alloc_noncontiguous().”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M½hj�h²hubj†)�”}”(hŒ!int dma_get_cache_alignment(void)”h]”hŒ!int dma_get_cache_alignment(void)”…”�”}”hj„sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MÄhj�h²hubhì)�”}”(hŒ¥Returns the processor cache alignment. This is the absolute minimum alignment *and* width that you must observe when either mapping memory or doing partial flushes.”h]”(hŒOReturns the processor cache alignment. This is the absolute minimum alignment ”…”�”}”(hj’h²hh³Nh´Nubjî)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj’ubhŒQ width that you must observe when either mapping memory or doing partial flushes.”…”�”}”(hj’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÇhj�h²hubjí)�”}”(hŒáThis API may return a number *larger* than the actual cache line, but it will guarantee that one or more cache lines fit exactly into the width returned by this call. It will also always be a power of two for easy alignment.”h]”hì)�”}”(hŒáThis API may return a number *larger* than the actual cache line, but it will guarantee that one or more cache lines fit exactly into the width returned by this call. It will also always be a power of two for easy alignment.”h]”(hŒThis API may return a number ”…”�”}”(hj¶h²hh³Nh´Nubjî)�”}”(hŒ*larger*”h]”hŒlarger”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jíhj¶ubhŒ¼ than the actual cache line, but it will guarantee that one or more cache lines fit exactly into the width returned by this call. It will also always be a power of two for easy alignment.”…”�”}”(hj¶h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÍhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jìhj�h²hh³hÊh´Nubeh}”(h]”Œ$part-ii-non-coherent-dma-allocations”ah ]”h"]”Œ&part ii - non-coherent dma allocations”ah$]”h&]”uh1hµhh·h²hh³hÊh´M'ubh¶)�”}”(hhh]”(h»)�”}”(hŒ+Part III - Debug drivers use of the DMA API”h]”hŒ+Part III - Debug drivers use of the DMA API”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjäh²hh³hÊh´MÔubhì)�”}”(hXfThe DMA API as described above has some constraints. DMA addresses must be released with the corresponding function with the same size for example. With the advent of hardware IOMMUs it becomes more and more important that drivers do not violate those constraints. In the worst case such a violation can result in data corruption up to destroyed filesystems.”h]”hXfThe DMA API as described above has some constraints. DMA addresses must be released with the corresponding function with the same size for example. With the advent of hardware IOMMUs it becomes more and more important that drivers do not violate those constraints. In the worst case such a violation can result in data corruption up to destroyed filesystems.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÖhjäh²hubhì)�”}”(hXrTo debug drivers and find bugs in the usage of the DMA API checking code can be compiled into the kernel which will tell the developer about those violations. If your architecture supports it you can select the "Enable debugging of DMA API usage" option in your kernel configuration. Enabling this option has a performance impact. Do not enable it in production kernels.”h]”hXvTo debug drivers and find bugs in the usage of the DMA API checking code can be compiled into the kernel which will tell the developer about those violations. If your architecture supports it you can select the “Enable debugging of DMA API usageâ€� option in your kernel configuration. Enabling this option has a performance impact. Do not enable it in production kernels.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MÜhjäh²hubhì)�”}”(hXIf you boot the resulting kernel will contain code which does some bookkeeping about what DMA memory was allocated for which device. If this code detects an error it prints a warning message with some details into your kernel log. An example warning message may look like this::”h]”hXIf you boot the resulting kernel will contain code which does some bookkeeping about what DMA memory was allocated for which device. If this code detects an error it prints a warning message with some details into your kernel log. An example warning message may look like this:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mâhjäh²hubj†)�”}”(hX�WARNING: at /data2/repos/linux-2.6-iommu/lib/dma-debug.c:448 check_unmap+0x203/0x490() Hardware name: forcedeth 0000:00:08.0: DMA-API: device driver frees DMA memory with wrong function [device address=0x00000000640444be] [size=66 bytes] [mapped as single] [unmapped as page] Modules linked in: nfsd exportfs bridge stp llc r8169 Pid: 0, comm: swapper Tainted: G W 2.6.28-dmatest-09289-g8bb99c0 #1 Call Trace: [] warn_slowpath+0xf2/0x130 [] _spin_unlock+0x10/0x30 [] usb_hcd_link_urb_to_ep+0x75/0xc0 [] _spin_unlock_irqrestore+0x12/0x40 [] ohci_urb_enqueue+0x19f/0x7c0 [] queue_work+0x56/0x60 [] enqueue_task_fair+0x20/0x50 [] usb_hcd_submit_urb+0x379/0xbc0 [] cpumask_next_and+0x23/0x40 [] find_busiest_group+0x207/0x8a0 [] _spin_lock_irqsave+0x1f/0x50 [] check_unmap+0x203/0x490 [] debug_dma_unmap_phys+0x49/0x50 [] nv_tx_done_optimized+0xc6/0x2c0 [] nv_nic_irq_optimized+0x73/0x2b0 [] handle_IRQ_event+0x34/0x70 [] handle_edge_irq+0xc9/0x150 [] do_IRQ+0xcb/0x1c0 [] ret_from_intr+0x0/0xa <4>---[ end trace f6435a98e2a38c0e ]---”h]”hX�WARNING: at /data2/repos/linux-2.6-iommu/lib/dma-debug.c:448 check_unmap+0x203/0x490() Hardware name: forcedeth 0000:00:08.0: DMA-API: device driver frees DMA memory with wrong function [device address=0x00000000640444be] [size=66 bytes] [mapped as single] [unmapped as page] Modules linked in: nfsd exportfs bridge stp llc r8169 Pid: 0, comm: swapper Tainted: G W 2.6.28-dmatest-09289-g8bb99c0 #1 Call Trace: [] warn_slowpath+0xf2/0x130 [] _spin_unlock+0x10/0x30 [] usb_hcd_link_urb_to_ep+0x75/0xc0 [] _spin_unlock_irqrestore+0x12/0x40 [] ohci_urb_enqueue+0x19f/0x7c0 [] queue_work+0x56/0x60 [] enqueue_task_fair+0x20/0x50 [] usb_hcd_submit_urb+0x379/0xbc0 [] cpumask_next_and+0x23/0x40 [] find_busiest_group+0x207/0x8a0 [] _spin_lock_irqsave+0x1f/0x50 [] check_unmap+0x203/0x490 [] debug_dma_unmap_phys+0x49/0x50 [] nv_tx_done_optimized+0xc6/0x2c0 [] nv_nic_irq_optimized+0x73/0x2b0 [] handle_IRQ_event+0x34/0x70 [] handle_edge_irq+0xc9/0x150 [] do_IRQ+0xcb/0x1c0 [] ret_from_intr+0x0/0xa <4>---[ end trace f6435a98e2a38c0e ]---”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´Mçhjäh²hubhì)�”}”(hŒ}The driver developer can find the driver and the device including a stacktrace of the DMA API call which caused this warning.”h]”hŒ}The driver developer can find the driver and the device including a stacktrace of the DMA API call which caused this warning.”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjäh²hubhì)�”}”(hX:Per default only the first error will result in a warning message. All other errors will only silently counted. This limitation exist to prevent the code from flooding your kernel log. To support debugging a device driver this can be disabled via debugfs. See the debugfs interface documentation below for details.”h]”hX:Per default only the first error will result in a warning message. All other errors will only silently counted. This limitation exist to prevent the code from flooding your kernel log. To support debugging a device driver this can be disabled via debugfs. See the debugfs interface documentation below for details.”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjäh²hubhì)�”}”(hŒ†The debugfs directory for the DMA API debugging code is called dma-api/. In this directory the following files can currently be found:”h]”hŒ†The debugfs directory for the DMA API debugging code is called dma-api/. In this directory the following files can currently be found:”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjäh²hubjh)�”}”(hhh]”jm)�”}”(hhh]”(jr)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jqhjZ ubjr)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jqhjZ ubjˆ)�”}”(hhh]”(j�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/all_errors”h]”hŒdma-api/all_errors”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjt ubj’)�”}”(hhh]”hì)�”}”(hŒÛThis file contains a numeric value. If this value is not equal to zero the debugging code will print a warning for every error it finds into the kernel log. Be careful with this option, as it can easily flood your logs.”h]”hŒÛThis file contains a numeric value. If this value is not equal to zero the debugging code will print a warning for every error it finds into the kernel log. Be careful with this option, as it can easily flood your logs.”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjt ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/disabled”h]”hŒdma-api/disabled”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj« ubj’)�”}”(hhh]”hì)�”}”(hŒŸThis read-only file contains the character 'Y' if the debugging code is disabled. This can happen when it runs out of memory or if it was disabled at boot time”h]”hŒ£This read-only file contains the character ‘Y’ if the debugging code is disabled. This can happen when it runs out of memory or if it was disabled at boot time”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj« ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒ dma-api/dump”h]”hŒ dma-api/dump”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjâ ubj’)�”}”(hhh]”hì)�”}”(hŒ2This read-only file contains current DMA mappings.”h]”hŒ2This read-only file contains current DMA mappings.”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´Mhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjâ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/error_count”h]”hŒdma-api/error_count”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj!ubj’)�”}”(hhh]”hì)�”}”(hŒCThis file is read-only and shows the total numbers of errors found.”h]”hŒCThis file is read-only and shows the total numbers of errors found.”…”�”}”(hj6!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M hj3!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/num_errors”h]”hŒdma-api/num_errors”…”�”}”(hjV!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M#hjS!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjP!ubj’)�”}”(hhh]”hì)�”}”(hŒ¸The number in this file shows how many warnings will be printed to the kernel log before it stops. This number is initialized to one at system boot and be set by writing into this file”h]”hŒ¸The number in this file shows how many warnings will be printed to the kernel log before it stops. This number is initialized to one at system boot and be set by writing into this file”…”�”}”(hjm!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M#hjj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjP!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/min_free_entries”h]”hŒdma-api/min_free_entries”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M)hjŠ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj‡!ubj’)�”}”(hhh]”hì)�”}”(hŒÒThis read-only file can be read to get the minimum number of free dma_debug_entries the allocator has ever seen. If this value goes down to zero the code will attempt to increase nr_total_entries to compensate.”h]”hŒÒThis read-only file can be read to get the minimum number of free dma_debug_entries the allocator has ever seen. If this value goes down to zero the code will attempt to increase nr_total_entries to compensate.”…”�”}”(hj¤!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M)hj¡!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj‡!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/num_free_entries”h]”hŒdma-api/num_free_entries”…”�”}”(hjÄ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M/hjÁ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj¾!ubj’)�”}”(hhh]”hì)�”}”(hŒ>The current number of free dma_debug_entries in the allocator.”h]”hŒ>The current number of free dma_debug_entries in the allocator.”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M/hjØ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj¾!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/nr_total_entries”h]”hŒdma-api/nr_total_entries”…”�”}”(hjû!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M2hjø!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjõ!ubj’)�”}”(hhh]”hì)�”}”(hŒKThe total number of dma_debug_entries in the allocator, both free and used.”h]”hŒKThe total number of dma_debug_entries in the allocator, both free and used.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M2hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hjõ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubj�)�”}”(hhh]”(j’)�”}”(hhh]”hì)�”}”(hŒdma-api/driver_filter”h]”hŒdma-api/driver_filter”…”�”}”(hj2"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M5hj/"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj,"ubj’)�”}”(hhh]”hì)�”}”(hŒÅYou can write a name of a driver into this file to limit the debug output to requests from that particular driver. Write an empty string to that file to disable the filter and see all errors again.”h]”hŒÅYou can write a name of a driver into this file to limit the debug output to requests from that particular driver. Write an empty string to that file to disable the filter and see all errors again.”…”�”}”(hjI"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M5hjF"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j‘hj,"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjq ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j‡hjZ ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jlhjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1jghjäh²hh³hÊh´Nubhì)�”}”(hX,If you have this code compiled into your kernel it will be enabled by default. If you want to boot without the bookkeeping anyway you can provide 'dma_debug=off' as a boot parameter. This will disable DMA API debugging. Notice that you can not enable it again at runtime. You have to reboot to do so.”h]”hX0If you have this code compiled into your kernel it will be enabled by default. If you want to boot without the bookkeeping anyway you can provide ‘dma_debug=off’ as a boot parameter. This will disable DMA API debugging. Notice that you can not enable it again at runtime. You have to reboot to do so.”…”�”}”(hjv"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´M<hjäh²hubhì)�”}”(hX.If you want to see debug messages only for a special device driver you can specify the dma_debug_driver= parameter. This will enable the driver filter at boot time. The debug code will only print errors for that driver afterwards. This filter can be disabled or changed later using debugfs.”h]”hX.If you want to see debug messages only for a special device driver you can specify the dma_debug_driver= parameter. This will enable the driver filter at boot time. The debug code will only print errors for that driver afterwards. This filter can be disabled or changed later using debugfs.”…”�”}”(hj„"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MBhjäh²hubhì)�”}”(hX¹When the code disables itself at runtime this is most likely because it ran out of dma_debug_entries and was unable to allocate more on-demand. 65536 entries are preallocated at boot - if this is too low for you boot with 'dma_debug_entries=' to overwrite the default. Note that the code allocates entries in batches, so the exact number of preallocated entries may be greater than the actual number requested. The code will print to the kernel log each time it has dynamically allocated as many entries as were initially preallocated. This is to indicate that a larger preallocation size may be appropriate, or if it happens continually that a driver may be leaking mappings.”h]”hX½When the code disables itself at runtime this is most likely because it ran out of dma_debug_entries and was unable to allocate more on-demand. 65536 entries are preallocated at boot - if this is too low for you boot with ‘dma_debug_entries=’ to overwrite the default. Note that the code allocates entries in batches, so the exact number of preallocated entries may be greater than the actual number requested. The code will print to the kernel log each time it has dynamically allocated as many entries as were initially preallocated. This is to indicate that a larger preallocation size may be appropriate, or if it happens continually that a driver may be leaking mappings.”…”�”}”(hj’"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MGhjäh²hubj†)�”}”(hŒFvoid debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);”h]”hŒFvoid debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr);”…”�”}”hj "sbah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j…h³hÊh´MThjäh²hubhì)�”}”(hX;dma-debug interface debug_dma_mapping_error() to debug drivers that fail to check DMA mapping errors on addresses returned by dma_map_single() and dma_map_page() interfaces. This interface clears a flag set by debug_dma_map_phys() to indicate that dma_mapping_error() has been called by the driver. When driver does unmap, debug_dma_unmap() checks the flag and if this flag is still set, prints warning message that includes call trace that leads up to the unmap. This interface can be called from dma_mapping_error() routines to enable DMA mapping error check debugging.”h]”hX;dma-debug interface debug_dma_mapping_error() to debug drivers that fail to check DMA mapping errors on addresses returned by dma_map_single() and dma_map_page() interfaces. This interface clears a flag set by debug_dma_map_phys() to indicate that dma_mapping_error() has been called by the driver. When driver does unmap, debug_dma_unmap() checks the flag and if this flag is still set, prints warning message that includes call trace that leads up to the unmap. This interface can be called from dma_mapping_error() routines to enable DMA mapping error check debugging.”…”�”}”(hj®"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³hÊh´MWhjäh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒFunctions and structures”h]”hŒFunctions and structures”…”�”}”(hj¿"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¼"h²hh³hÊh´Maubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_next (C function)”Œ c.sg_next”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ5struct scatterlist * sg_next (struct scatterlist *sg)”h]”j{)�”}”(hŒ3struct scatterlist *sg_next(struct scatterlist *sg)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjæ"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ"h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kbubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô"h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjâ"h²hh³jó"h´Kbubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j#Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_next”sbŒ c.sg_next”†”asbuh1hhjâ"h²hh³jó"h´Kbubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&#h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjâ"h²hh³jó"h´Kbubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj4#h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjâ"h²hh³jó"h´Kbubjó)�”}”(hŒsg_next”h]”j§)�”}”(hj##h]”hŒsg_next”…”�”}”(hjE#h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjA#ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjâ"h²hh³jó"h´Kbubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj`#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\#ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm#h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj\#ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj~#h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj{#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j€#Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j!#Œ c.sg_next”†”asbuh1hhj\#ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ#h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj\#ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjª#h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj\#ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj·#h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj\#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjX#ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjâ"h²hh³jó"h´Kbubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÞ"h²hh³jó"h´Kbubah}”(h]”jÙ"ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jó"h´KbhjÛ"h²hubj)�”}”(hhh]”hì)�”}”(hŒ+return the next scatterlist entry in a list”h]”hŒ+return the next scatterlist entry in a list”…”�”}”(hjá#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KbhjÞ#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÛ"h²hh³jó"h´Kbubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jù#j0jù#j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒô**Parameters** ``struct scatterlist *sg`` The current sg entry **Description** Usually the next entry will be **sg** + 1, but if this sg element is part of a chained scatterlist, it could jump to the start of a new scatterlist array.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj$h]”hŒ Parameters”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kfhjý#ubjU)�”}”(hhh]”jZ)�”}”(hŒ0``struct scatterlist *sg`` The current sg entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj"$h]”hŒstruct scatterlist *sg”…”�”}”(hj$$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj $ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kchj$ubjz)�”}”(hhh]”hì)�”}”(hŒThe current sg entry”h]”hŒThe current sg entry”…”�”}”(hj;$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j7$h´Kchj8$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j7$h´Kchj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjý#ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj]$h]”hŒ Description”…”�”}”(hj_$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj[$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kehjý#ubhŒ block_quote”“”)�”}”(hŒšUsually the next entry will be **sg** + 1, but if this sg element is part of a chained scatterlist, it could jump to the start of a new scatterlist array.”h]”hì)�”}”(hŒšUsually the next entry will be **sg** + 1, but if this sg element is part of a chained scatterlist, it could jump to the start of a new scatterlist array.”h]”(hŒUsually the next entry will be ”…”�”}”(hjy$h²hh³Nh´Nubj?)�”}”(hŒ**sg**”h]”hŒsg”…”�”}”(hj�$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjy$ubhŒu + 1, but if this sg element is part of a chained scatterlist, it could jump to the start of a new scatterlist array.”…”�”}”(hjy$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kehju$ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j™$h´Kehjý#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_assign_page (C function)”Œc.sg_assign_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ?void sg_assign_page (struct scatterlist *sg, struct page *page)”h]”j{)�”}”(hŒ>void sg_assign_page(struct scatterlist *sg, struct page *page)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÀ$h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¼$h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¼$h²hh³jÎ$h´Kxubjó)�”}”(hŒsg_assign_page”h]”j§)�”}”(hŒsg_assign_page”h]”hŒsg_assign_page”…”�”}”(hjá$h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÝ$ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj¼$h²hh³jÎ$h´Kxubj)�”}”(hŒ+(struct scatterlist *sg, struct page *page)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjý$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù$ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù$ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j%Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjã$sbŒc.sg_assign_page”†”asbuh1hhjù$ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;%h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjù$ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjI%h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjù$ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjV%h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjù$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjõ$ubj)�”}”(hŒstruct page *page”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjo%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk%ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|%h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjk%ubh)�”}”(hhh]”j§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŠ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j�%Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j7%Œc.sg_assign_page”†”asbuh1hhjk%ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«%h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjk%ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¹%h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjk%ubj§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÆ%h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjk%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjõ$ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj¼$h²hh³jÎ$h´Kxubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj¸$h²hh³jÎ$h´Kxubah}”(h]”j³$ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÎ$h´Kxhjµ$h²hubj)�”}”(hhh]”hì)�”}”(hŒ"Assign a given page to an SG entry”h]”hŒ"Assign a given page to an SG entry”…”�”}”(hjð%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kxhjí%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjµ$h²hh³jÎ$h´Kxubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j&j0j&j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒ¾**Parameters** ``struct scatterlist *sg`` SG entry ``struct page *page`` The page **Description** Assign page to sg entry. Also see sg_set_page(), the most commonly used variant.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj&h]”hŒ Parameters”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K|hj &ubjU)�”}”(hhh]”(jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj1&h]”hŒstruct scatterlist *sg”…”�”}”(hj3&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj/&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kyhj+&ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjJ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jF&h´KyhjG&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj+&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jF&h´Kyhj(&ubjZ)�”}”(hŒ``struct page *page`` The page ”h]”(j`)�”}”(hŒ``struct page *page``”h]”jæ)�”}”(hjj&h]”hŒstruct page *page”…”�”}”(hjl&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjh&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kzhjd&ubjz)�”}”(hhh]”hì)�”}”(hŒThe page”h]”hŒThe page”…”�”}”(hjƒ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j&h´Kzhj€&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjd&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j&h´Kzhj(&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj &ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj¥&h]”hŒ Description”…”�”}”(hj§&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj£&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K|hj &ubjt$)�”}”(hŒPAssign page to sg entry. Also see sg_set_page(), the most commonly used variant.”h]”hì)�”}”(hŒPAssign page to sg entry. Also see sg_set_page(), the most commonly used variant.”h]”hŒPAssign page to sg entry. Also see sg_set_page(), the most commonly used variant.”…”�”}”(hj¿&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K|hj»&ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jÍ&h´K|hj &ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_set_page (C function)”Œ c.sg_set_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒcvoid sg_set_page (struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset)”h]”j{)�”}”(hŒbvoid sg_set_page(struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjô&h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjð&h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjð&h²hh³j'h´K‘ubjó)�”}”(hŒ sg_set_page”h]”j§)�”}”(hŒ sg_set_page”h]”hŒ sg_set_page”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj'ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjð&h²hh³j'h´K‘ubj)�”}”(hŒR(struct scatterlist *sg, struct page *page, unsigned int len, unsigned int offset)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj1'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-'ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj-'ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjO'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjL'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jQ'Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj'sbŒ c.sg_set_page”†”asbuh1hhj-'ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj-'ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj}'h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj-'ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjŠ'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj-'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj)'ubj)�”}”(hŒstruct page *page”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj£'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ'ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ'ubh)�”}”(hhh]”j§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÁ'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¾'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÃ'Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jk'Œ c.sg_set_page”†”asbuh1hhjŸ'ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß'h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ'ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjí'h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjŸ'ubj§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjú'h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŸ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj)'ubj)�”}”(hŒunsigned int len”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj(ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!(h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj(ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj/(h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj(ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj(ubj§)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjK(h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj)'ubj)�”}”(hŒunsigned int offset”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjd(h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj`(ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr(h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj`(ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj€(h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj`(ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ(h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj`(ubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjœ(h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj`(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj)'ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjð&h²hh³j'h´K‘ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjì&h²hh³j'h´K‘ubah}”(h]”jç&ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j'h´K‘hjé&h²hubj)�”}”(hhh]”hì)�”}”(hŒ#Set sg entry to point at given page”h]”hŒ#Set sg entry to point at given page”…”�”}”(hjÆ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K‘hjÃ(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjé&h²hh³j'h´K‘ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÞ(j0jÞ(j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX£**Parameters** ``struct scatterlist *sg`` SG entry ``struct page *page`` The page ``unsigned int len`` Length of data ``unsigned int offset`` Offset into page **Description** Use this function to set an sg entry pointing at a page, never assign the page directly. We encode sg table information in the lower bits of the page pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjè(h]”hŒ Parameters”…”�”}”(hjê(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjæ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K•hjâ(ubjU)�”}”(hhh]”(jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj)h]”hŒstruct scatterlist *sg”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K’hj)ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j)h´K’hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j)h´K’hjþ(ubjZ)�”}”(hŒ``struct page *page`` The page ”h]”(j`)�”}”(hŒ``struct page *page``”h]”jæ)�”}”(hj@)h]”hŒstruct page *page”…”�”}”(hjB)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj>)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K“hj:)ubjz)�”}”(hhh]”hì)�”}”(hŒThe page”h]”hŒThe page”…”�”}”(hjY)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jU)h´K“hjV)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj:)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jU)h´K“hjþ(ubjZ)�”}”(hŒ$``unsigned int len`` Length of data ”h]”(j`)�”}”(hŒ``unsigned int len``”h]”jæ)�”}”(hjy)h]”hŒunsigned int len”…”�”}”(hj{)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjw)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K”hjs)ubjz)�”}”(hhh]”hì)�”}”(hŒLength of data”h]”hŒLength of data”…”�”}”(hj’)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŽ)h´K”hj�)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjs)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jŽ)h´K”hjþ(ubjZ)�”}”(hŒ)``unsigned int offset`` Offset into page ”h]”(j`)�”}”(hŒ``unsigned int offset``”h]”jæ)�”}”(hj²)h]”hŒunsigned int offset”…”�”}”(hj´)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj°)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K•hj¬)ubjz)�”}”(hhh]”hì)�”}”(hŒOffset into page”h]”hŒOffset into page”…”�”}”(hjË)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÇ)h´K•hjÈ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¬)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÇ)h´K•hjþ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjâ(ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjí)h]”hŒ Description”…”�”}”(hjï)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjë)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K—hjâ(ubjt$)�”}”(hŒÞUse this function to set an sg entry pointing at a page, never assign the page directly. We encode sg table information in the lower bits of the page pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”hì)�”}”(hŒÞUse this function to set an sg entry pointing at a page, never assign the page directly. We encode sg table information in the lower bits of the page pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”hŒÞUse this function to set an sg entry pointing at a page, never assign the page directly. We encode sg table information in the lower bits of the page pointer. See sg_page() for looking up the page belonging to an sg entry.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K—hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j*h´K—hjâ(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_set_folio (C function)”Œc.sg_set_folio”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒZvoid sg_set_folio (struct scatterlist *sg, struct folio *folio, size_t len, size_t offset)”h]”j{)�”}”(hŒYvoid sg_set_folio(struct scatterlist *sg, struct folio *folio, size_t len, size_t offset)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj<*h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj8*h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K¨ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK*h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj8*h²hh³jJ*h´K¨ubjó)�”}”(hŒ sg_set_folio”h]”j§)�”}”(hŒ sg_set_folio”h]”hŒ sg_set_folio”…”�”}”(hj]*h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjY*ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj8*h²hh³jJ*h´K¨ubj)�”}”(hŒH(struct scatterlist *sg, struct folio *folio, size_t len, size_t offset)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjy*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hju*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†*h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hju*ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj—*h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj”*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j™*Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj_*sbŒc.sg_set_folio”†”asbuh1hhju*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·*h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hju*ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÅ*h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhju*ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjÒ*h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hju*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjq*ubj)�”}”(hŒstruct folio *folio”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjë*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø*h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjç*ubh)�”}”(hhh]”j§)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j +Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j³*Œc.sg_set_folio”†”asbuh1hhjç*ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'+h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjç*ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj5+h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjç*ubj§)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjB+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjç*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjq*ubj)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj^+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj[+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j`+Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j³*Œc.sg_set_folio”†”asbuh1hhjW+ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|+h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjW+ubj§)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjŠ+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjW+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjq*ubj)�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¦+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj£+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¨+Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j³*Œc.sg_set_folio”†”asbuh1hhjŸ+ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ+h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ+ubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjÒ+h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŸ+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjq*ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj8*h²hh³jJ*h´K¨ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj4*h²hh³jJ*h´K¨ubah}”(h]”j/*ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jJ*h´K¨hj1*h²hubj)�”}”(hhh]”hì)�”}”(hŒ$Set sg entry to point at given folio”h]”hŒ$Set sg entry to point at given folio”…”�”}”(hjü+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K¨hjù+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj1*h²hh³jJ*h´K¨ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j,j0j,j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXž**Parameters** ``struct scatterlist *sg`` SG entry ``struct folio *folio`` The folio ``size_t len`` Length of data ``size_t offset`` Offset into folio **Description** Use this function to set an sg entry pointing at a folio, never assign the folio directly. We encode sg table information in the lower bits of the folio pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj,h]”hŒ Parameters”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K¬hj,ubjU)�”}”(hhh]”(jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj=,h]”hŒstruct scatterlist *sg”…”�”}”(hj?,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj;,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K©hj7,ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjV,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jR,h´K©hjS,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj7,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jR,h´K©hj4,ubjZ)�”}”(hŒ"``struct folio *folio`` The folio ”h]”(j`)�”}”(hŒ``struct folio *folio``”h]”jæ)�”}”(hjv,h]”hŒstruct folio *folio”…”�”}”(hjx,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjt,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kªhjp,ubjz)�”}”(hhh]”hì)�”}”(hŒ The folio”h]”hŒ The folio”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‹,h´KªhjŒ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjp,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j‹,h´Kªhj4,ubjZ)�”}”(hŒ``size_t len`` Length of data ”h]”(j`)�”}”(hŒ``size_t len``”h]”jæ)�”}”(hj¯,h]”hŒ size_t len”…”�”}”(hj±,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj­,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K«hj©,ubjz)�”}”(hhh]”hì)�”}”(hŒLength of data”h]”hŒLength of data”…”�”}”(hjÈ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÄ,h´K«hjÅ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj©,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÄ,h´K«hj4,ubjZ)�”}”(hŒ$``size_t offset`` Offset into folio ”h]”(j`)�”}”(hŒ``size_t offset``”h]”jæ)�”}”(hjè,h]”hŒ size_t offset”…”�”}”(hjê,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjæ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K¬hjâ,ubjz)�”}”(hhh]”hì)�”}”(hŒOffset into folio”h]”hŒOffset into folio”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jý,h´K¬hjþ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjâ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jý,h´K¬hj4,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj,ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj#-h]”hŒ Description”…”�”}”(hj%-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj!-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K®hj,ubjt$)�”}”(hŒáUse this function to set an sg entry pointing at a folio, never assign the folio directly. We encode sg table information in the lower bits of the folio pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”hì)�”}”(hŒáUse this function to set an sg entry pointing at a folio, never assign the folio directly. We encode sg table information in the lower bits of the folio pointer. See sg_page() for looking up the page belonging to an sg entry.”h]”hŒáUse this function to set an sg entry pointing at a folio, never assign the folio directly. We encode sg table information in the lower bits of the folio pointer. See sg_page() for looking up the page belonging to an sg entry.”…”�”}”(hj=-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´K®hj9-ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jK-h´K®hj,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_set_buf (C function)”Œ c.sg_set_buf”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒNvoid sg_set_buf (struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”j{)�”}”(hŒMvoid sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjr-h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjn-h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÈubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn-h²hh³j€-h´KÈubjó)�”}”(hŒ sg_set_buf”h]”j§)�”}”(hŒ sg_set_buf”h]”hŒ sg_set_buf”…”�”}”(hj“-h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�-ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjn-h²hh³j€-h´KÈubj)�”}”(hŒ>(struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¯-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«-ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼-h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj«-ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjÍ-h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÊ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÏ-Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj•-sbŒ c.sg_set_buf”†”asbuh1hhj«-ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí-h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj«-ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjû-h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj«-ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj«-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj§-ubj)�”}”(hŒconst void *buf”h]”(j�)�”}”(hjh]”hŒconst”…”�”}”(hj!.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj..h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj.ubj6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj<.h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj.ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ.h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj.ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjX.h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj.ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hje.h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj§-ubj)�”}”(hŒunsigned int buflen”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj~.h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjz.ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ.h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjz.ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjš.h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjz.ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨.h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjz.ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hj¶.h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjz.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj§-ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjn-h²hh³j€-h´KÈubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjj-h²hh³j€-h´KÈubah}”(h]”je-ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j€-h´KÈhjg-h²hubj)�”}”(hhh]”hì)�”}”(hŒ#Set sg entry to point at given data”h]”hŒ#Set sg entry to point at given data”…”�”}”(hjà.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÈhjÝ.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjg-h²hh³j€-h´KÈubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jø.j0jø.j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒx**Parameters** ``struct scatterlist *sg`` SG entry ``const void *buf`` Data ``unsigned int buflen`` Data length”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj/h]”hŒ Parameters”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÌhjü.ubjU)�”}”(hhh]”(jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj!/h]”hŒstruct scatterlist *sg”…”�”}”(hj#/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÉhj/ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj:/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j6/h´KÉhj7/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j6/h´KÉhj/ubjZ)�”}”(hŒ``const void *buf`` Data ”h]”(j`)�”}”(hŒ``const void *buf``”h]”jæ)�”}”(hjZ/h]”hŒconst void *buf”…”�”}”(hj\/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjX/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÊhjT/ubjz)�”}”(hhh]”hì)�”}”(hŒData”h]”hŒData”…”�”}”(hjs/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jo/h´KÊhjp/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjT/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jo/h´KÊhj/ubjZ)�”}”(hŒ#``unsigned int buflen`` Data length”h]”(j`)�”}”(hŒ``unsigned int buflen``”h]”jæ)�”}”(hj“/h]”hŒunsigned int buflen”…”�”}”(hj•/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj‘/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KÌhj�/ubjz)�”}”(hhh]”hì)�”}”(hŒ Data length”h]”hŒ Data length”…”�”}”(hj¬/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´KËhj©/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj�/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¨/h´KÌhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjü.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_chain (C function)”Œ c.sg_chain”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒXvoid sg_chain (struct scatterlist *prv, unsigned int prv_nents, struct scatterlist *sgl)”h]”j{)�”}”(hŒWvoid sg_chain(struct scatterlist *prv, unsigned int prv_nents, struct scatterlist *sgl)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjí/h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjé/h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Küubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü/h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjé/h²hh³jû/h´Küubjó)�”}”(hŒsg_chain”h]”j§)�”}”(hŒsg_chain”h]”hŒsg_chain”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj 0ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjé/h²hh³jû/h´Küubj)�”}”(hŒJ(struct scatterlist *prv, unsigned int prv_nents, struct scatterlist *sgl)”h]”(j)�”}”(hŒstruct scatterlist *prv”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj*0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj70h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj&0ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjH0h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjE0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jJ0Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj0sbŒ c.sg_chain”†”asbuh1hhj&0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh0h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj&0ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjv0h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj&0ubj§)�”}”(hŒprv”h]”hŒprv”…”�”}”(hjƒ0h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj&0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"0ubj)�”}”(hŒunsigned int prv_nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjœ0h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj˜0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj˜0ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸0h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj˜0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ0h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj˜0ubj§)�”}”(hŒ prv_nents”h]”hŒ prv_nents”…”�”}”(hjÔ0h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj˜0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"0ubj)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjí0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú0h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjé0ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j 1Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jd0Œ c.sg_chain”†”asbuh1hhjé0ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)1h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjé0ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj71h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjé0ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjé0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"0ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjé/h²hh³jû/h´Küubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjå/h²hh³jû/h´Küubah}”(h]”jà/ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jû/h´Kühjâ/h²hubj)�”}”(hhh]”hì)�”}”(hŒChain two sglists together”h]”hŒChain two sglists together”…”�”}”(hjn1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kühjk1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjâ/h²hh³jû/h´Küubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j†1j0j†1j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒþ**Parameters** ``struct scatterlist *prv`` First scatterlist ``unsigned int prv_nents`` Number of entries in prv ``struct scatterlist *sgl`` Second scatterlist **Description** Links **prv** and **sgl** together, to form a longer scatterlist.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj�1h]”hŒ Parameters”…”�”}”(hj’1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŽ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MhjŠ1ubjU)�”}”(hhh]”(jZ)�”}”(hŒ.``struct scatterlist *prv`` First scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *prv``”h]”jæ)�”}”(hj¯1h]”hŒstruct scatterlist *prv”…”�”}”(hj±1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj­1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kýhj©1ubjz)�”}”(hhh]”hì)�”}”(hŒFirst scatterlist”h]”hŒFirst scatterlist”…”�”}”(hjÈ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÄ1h´KýhjÅ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj©1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÄ1h´Kýhj¦1ubjZ)�”}”(hŒ4``unsigned int prv_nents`` Number of entries in prv ”h]”(j`)�”}”(hŒ``unsigned int prv_nents``”h]”jæ)�”}”(hjè1h]”hŒunsigned int prv_nents”…”�”}”(hjê1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjæ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kþhjâ1ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in prv”h]”hŒNumber of entries in prv”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jý1h´Kþhjþ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjâ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jý1h´Kþhj¦1ubjZ)�”}”(hŒ/``struct scatterlist *sgl`` Second scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj!2h]”hŒstruct scatterlist *sgl”…”�”}”(hj#2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Kÿhj2ubjz)�”}”(hhh]”hì)�”}”(hŒSecond scatterlist”h]”hŒSecond scatterlist”…”�”}”(hj:2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j62h´Kÿhj72ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j62h´Kÿhj¦1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjŠ1ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj\2h]”hŒ Description”…”�”}”(hj^2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjZ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MhjŠ1ubjt$)�”}”(hŒALinks **prv** and **sgl** together, to form a longer scatterlist.”h]”hì)�”}”(hjt2h]”(hŒLinks ”…”�”}”(hjv2h²hh³Nh´Nubj?)�”}”(hŒ**prv**”h]”hŒprv”…”�”}”(hj}2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjv2ubhŒ and ”…”�”}”(hjv2h²hh³Nh´Nubj?)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hj�2h²hh³Nh´Nubah}”(h•]”h ]”h"]”h$]”h&]”uh1j>hjv2ubhŒ( together, to form a longer scatterlist.”…”�”}”(hjv2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mhjr2ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j§2h´MhjŠ1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_mark_end (C function)”Œ c.sg_mark_end”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ)void sg_mark_end (struct scatterlist *sg)”h]”j{)�”}”(hŒ(void sg_mark_end(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎ2h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÊ2h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ2h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÊ2h²hh³jÜ2h´M ubjó)�”}”(hŒ sg_mark_end”h]”j§)�”}”(hŒ sg_mark_end”h]”hŒ sg_mark_end”…”�”}”(hjï2h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjë2ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÊ2h²hh³jÜ2h´M ubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj3ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj)3h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj&3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j+3Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjñ2sbŒ c.sg_mark_end”†”asbuh1hhj3ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI3h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj3ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjW3h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj3ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjd3h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÊ2h²hh³jÜ2h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÆ2h²hh³jÜ2h´M ubah}”(h]”jÁ2ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÜ2h´M hjÃ2h²hubj)�”}”(hhh]”hì)�”}”(hŒMark the end of the scatterlist”h]”hŒMark the end of the scatterlist”…”�”}”(hjŽ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M hj‹3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÃ2h²hh³jÜ2h´M ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j¦3j0j¦3j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒÒ**Parameters** ``struct scatterlist *sg`` SG entryScatterlist **Description** Marks the passed in sg entry as the termination point for the sg table. A call to sg_next() on this entry will return NULL.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj°3h]”hŒ Parameters”…”�”}”(hj²3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj®3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mhjª3ubjU)�”}”(hhh]”jZ)�”}”(hŒ/``struct scatterlist *sg`` SG entryScatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjÏ3h]”hŒstruct scatterlist *sg”…”�”}”(hjÑ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÍ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M hjÉ3ubjz)�”}”(hhh]”hì)�”}”(hŒSG entryScatterlist”h]”hŒSG entryScatterlist”…”�”}”(hjè3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jä3h´M hjå3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÉ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jä3h´M hjÆ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjª3ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj 4h]”hŒ Description”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mhjª3ubjt$)�”}”(hŒ{Marks the passed in sg entry as the termination point for the sg table. A call to sg_next() on this entry will return NULL.”h]”hì)�”}”(hŒ{Marks the passed in sg entry as the termination point for the sg table. A call to sg_next() on this entry will return NULL.”h]”hŒ{Marks the passed in sg entry as the termination point for the sg table. A call to sg_next() on this entry will return NULL.”…”�”}”(hj$4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mhj 4ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j24h´Mhjª3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_unmark_end (C function)”Œc.sg_unmark_end”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ+void sg_unmark_end (struct scatterlist *sg)”h]”j{)�”}”(hŒ*void sg_unmark_end(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjY4h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjU4h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh4h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjU4h²hh³jg4h´Mubjó)�”}”(hŒ sg_unmark_end”h]”j§)�”}”(hŒ sg_unmark_end”h]”hŒ sg_unmark_end”…”�”}”(hjz4h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjv4ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjU4h²hh³jg4h´Mubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj–4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’4ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£4h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj’4ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj´4h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj±4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¶4Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj|4sbŒc.sg_unmark_end”†”asbuh1hhj’4ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ4h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj’4ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjâ4h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj’4ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjï4h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj’4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjŽ4ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjU4h²hh³jg4h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjQ4h²hh³jg4h´Mubah}”(h]”jL4ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jg4h´MhjN4h²hubj)�”}”(hhh]”hì)�”}”(hŒ'Undo setting the end of the scatterlist”h]”hŒ'Undo setting the end of the scatterlist”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mhj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjN4h²hh³jg4h´Mubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j15j0j15j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒœ**Parameters** ``struct scatterlist *sg`` SG entryScatterlist **Description** Removes the termination marker from the given entry of the scatterlist.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj;5h]”hŒ Parameters”…”�”}”(hj=5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj95ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M"hj55ubjU)�”}”(hhh]”jZ)�”}”(hŒ/``struct scatterlist *sg`` SG entryScatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjZ5h]”hŒstruct scatterlist *sg”…”�”}”(hj\5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjX5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MhjT5ubjz)�”}”(hhh]”hì)�”}”(hŒSG entryScatterlist”h]”hŒSG entryScatterlist”…”�”}”(hjs5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jo5h´Mhjp5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjT5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jo5h´MhjQ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj55ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj•5h]”hŒ Description”…”�”}”(hj—5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj“5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M!hj55ubjt$)�”}”(hŒGRemoves the termination marker from the given entry of the scatterlist.”h]”hì)�”}”(hj­5h]”hŒGRemoves the termination marker from the given entry of the scatterlist.”…”�”}”(hj¯5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M!hj«5ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j¼5h´M!hj55ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ"sg_dma_is_bus_address (C function)”Œc.sg_dma_is_bus_address”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ3bool sg_dma_is_bus_address (struct scatterlist *sg)”h]”j{)�”}”(hŒ2bool sg_dma_is_bus_address(struct scatterlist *sg)”h]”(j6)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjã5h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjß5h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M6ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò5h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjß5h²hh³jñ5h´M6ubjó)�”}”(hŒsg_dma_is_bus_address”h]”j§)�”}”(hŒsg_dma_is_bus_address”h]”hŒsg_dma_is_bus_address”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj6ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjß5h²hh³jñ5h´M6ubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-6h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj6ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj>6h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj;6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j@6Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj6sbŒc.sg_dma_is_bus_address”†”asbuh1hhj6ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^6h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj6ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjl6h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj6ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjy6h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjß5h²hh³jñ5h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÛ5h²hh³jñ5h´M6ubah}”(h]”jÖ5ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jñ5h´M6hjØ5h²hubj)�”}”(hhh]”hì)�”}”(hŒ:Return whether a given segment was marked as a bus address”h]”hŒ:Return whether a given segment was marked as a bus address”…”�”}”(hj£6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M6hj 6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjØ5h²hh³jñ5h´M6ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j»6j0j»6j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒ–**Parameters** ``struct scatterlist *sg`` SG entry **Description** Returns true if sg_dma_mark_bus_address() has been called on this segment.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÅ6h]”hŒ Parameters”…”�”}”(hjÇ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÃ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M:hj¿6ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjä6h]”hŒstruct scatterlist *sg”…”�”}”(hjæ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjâ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M8hjÞ6ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjý6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jù6h´M8hjú6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÞ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jù6h´M8hjÛ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj¿6ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj7h]”hŒ Description”…”�”}”(hj!7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M:hj¿6ubjt$)�”}”(hŒJReturns true if sg_dma_mark_bus_address() has been called on this segment.”h]”hì)�”}”(hŒJReturns true if sg_dma_mark_bus_address() has been called on this segment.”h]”hŒJReturns true if sg_dma_mark_bus_address() has been called on this segment.”…”�”}”(hj97h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M:hj57ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jG7h´M:hj¿6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ$sg_dma_mark_bus_address (C function)”Œc.sg_dma_mark_bus_address”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ5void sg_dma_mark_bus_address (struct scatterlist *sg)”h]”j{)�”}”(hŒ4void sg_dma_mark_bus_address(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjn7h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjj7h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MDubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}7h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjj7h²hh³j|7h´MDubjó)�”}”(hŒsg_dma_mark_bus_address”h]”j§)�”}”(hŒsg_dma_mark_bus_address”h]”hŒsg_dma_mark_bus_address”…”�”}”(hj�7h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‹7ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjj7h²hh³j|7h´MDubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj«7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§7ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸7h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§7ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjÉ7h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÆ7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jË7Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj‘7sbŒc.sg_dma_mark_bus_address”†”asbuh1hhj§7ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé7h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§7ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj÷7h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj§7ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj§7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj£7ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjj7h²hh³j|7h´MDubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjf7h²hh³j|7h´MDubah}”(h]”ja7ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j|7h´MDhjc7h²hubj)�”}”(hhh]”hì)�”}”(hŒ+Mark the scatterlist entry as a bus address”h]”hŒ+Mark the scatterlist entry as a bus address”…”�”}”(hj.8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MDhj+8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjc7h²hh³j|7h´MDubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jF8j0jF8j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXD**Parameters** ``struct scatterlist *sg`` SG entry **Description** Marks the passed in sg entry to indicate that the dma_address is a bus address and doesn't need to be unmapped. This should only be used by dma_map_sg() implementations to mark bus addresses so they can be properly cleaned up in dma_unmap_sg().”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjP8h]”hŒ Parameters”…”�”}”(hjR8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjN8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MHhjJ8ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjo8h]”hŒstruct scatterlist *sg”…”�”}”(hjq8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjm8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MEhji8ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjˆ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j„8h´MEhj…8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhji8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j„8h´MEhjf8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjJ8ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjª8h]”hŒ Description”…”�”}”(hj¬8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¨8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MGhjJ8ubjt$)�”}”(hŒôMarks the passed in sg entry to indicate that the dma_address is a bus address and doesn't need to be unmapped. This should only be used by dma_map_sg() implementations to mark bus addresses so they can be properly cleaned up in dma_unmap_sg().”h]”hì)�”}”(hŒôMarks the passed in sg entry to indicate that the dma_address is a bus address and doesn't need to be unmapped. This should only be used by dma_map_sg() implementations to mark bus addresses so they can be properly cleaned up in dma_unmap_sg().”h]”hŒöMarks the passed in sg entry to indicate that the dma_address is a bus address and doesn’t need to be unmapped. This should only be used by dma_map_sg() implementations to mark bus addresses so they can be properly cleaned up in dma_unmap_sg().”…”�”}”(hjÄ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MGhjÀ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jÒ8h´MGhjJ8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&sg_dma_unmark_bus_address (C function)”Œc.sg_dma_unmark_bus_address”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ7void sg_dma_unmark_bus_address (struct scatterlist *sg)”h]”j{)�”}”(hŒ6void sg_dma_unmark_bus_address(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjù8h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjõ8h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MSubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjõ8h²hh³j9h´MSubjó)�”}”(hŒsg_dma_unmark_bus_address”h]”j§)�”}”(hŒsg_dma_unmark_bus_address”h]”hŒsg_dma_unmark_bus_address”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj9ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjõ8h²hh³j9h´MSubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj69h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj29ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC9h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj29ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjT9h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjQ9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jV9Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj9sbŒc.sg_dma_unmark_bus_address”†”asbuh1hhj29ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt9h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj29ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj‚9h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj29ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj29ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj.9ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjõ8h²hh³j9h´MSubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjñ8h²hh³j9h´MSubah}”(h]”jì8ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j9h´MShjî8h²hubj)�”}”(hhh]”hì)�”}”(hŒ-Unmark the scatterlist entry as a bus address”h]”hŒ-Unmark the scatterlist entry as a bus address”…”�”}”(hj¹9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MShj¶9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjî8h²hh³j9h´MSubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÑ9j0jÑ9j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒf**Parameters** ``struct scatterlist *sg`` SG entry **Description** Clears the bus address mark.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÛ9h]”hŒ Parameters”…”�”}”(hjÝ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÙ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MWhjÕ9ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjú9h]”hŒstruct scatterlist *sg”…”�”}”(hjü9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjø9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MThjô9ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j:h´MThj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjô9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j:h´MThjñ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjÕ9ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj5:h]”hŒ Description”…”�”}”(hj7:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj3:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MVhjÕ9ubjt$)�”}”(hŒClears the bus address mark.”h]”hì)�”}”(hjM:h]”hŒClears the bus address mark.”…”�”}”(hjO:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MVhjK:ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j\:h´MVhjÕ9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_dma_is_swiotlb (C function)”Œc.sg_dma_is_swiotlb”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ/bool sg_dma_is_swiotlb (struct scatterlist *sg)”h]”j{)�”}”(hŒ.bool sg_dma_is_swiotlb(struct scatterlist *sg)”h]”(j6)�”}”(hjå5h]”hŒbool”…”�”}”(hjƒ:h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj:h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘:h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj:h²hh³j�:h´M_ubjó)�”}”(hŒsg_dma_is_swiotlb”h]”j§)�”}”(hŒsg_dma_is_swiotlb”h]”hŒsg_dma_is_swiotlb”…”�”}”(hj£:h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŸ:ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj:h²hh³j�:h´M_ubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj¿:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»:ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ:h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj»:ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjÝ:h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÚ:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jß:Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj¥:sbŒc.sg_dma_is_swiotlb”†”asbuh1hhj»:ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý:h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj»:ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj ;h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj»:ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj»:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj·:ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj:h²hh³j�:h´M_ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj{:h²hh³j�:h´M_ubah}”(h]”jv:ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j�:h´M_hjx:h²hubj)�”}”(hhh]”hì)�”}”(hŒ>Return whether the scatterlist was marked for SWIOTLB bouncing”h]”hŒ>Return whether the scatterlist was marked for SWIOTLB bouncing”…”�”}”(hjB;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M_hj?;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjx:h²hh³j�:h´M_ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jZ;j0jZ;j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX**Parameters** ``struct scatterlist *sg`` SG entry **Description** Returns true if the scatterlist was marked for SWIOTLB bouncing. Not all elements may have been bounced, so the caller would have to check individual SG entries with swiotlb_find_pool().”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjd;h]”hŒ Parameters”…”�”}”(hjf;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjb;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mchj^;ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjƒ;h]”hŒstruct scatterlist *sg”…”�”}”(hj…;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj�;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mahj};ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjœ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j˜;h´Mahj™;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj};ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j˜;h´Mahjz;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj^;ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj¾;h]”hŒ Description”…”�”}”(hjÀ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¼;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mchj^;ubjt$)�”}”(hŒºReturns true if the scatterlist was marked for SWIOTLB bouncing. Not all elements may have been bounced, so the caller would have to check individual SG entries with swiotlb_find_pool().”h]”hì)�”}”(hŒºReturns true if the scatterlist was marked for SWIOTLB bouncing. Not all elements may have been bounced, so the caller would have to check individual SG entries with swiotlb_find_pool().”h]”hŒºReturns true if the scatterlist was marked for SWIOTLB bouncing. Not all elements may have been bounced, so the caller would have to check individual SG entries with swiotlb_find_pool().”…”�”}”(hjØ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MchjÔ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jæ;h´Mchj^;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ sg_dma_mark_swiotlb (C function)”Œc.sg_dma_mark_swiotlb”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ1void sg_dma_mark_swiotlb (struct scatterlist *sg)”h]”j{)�”}”(hŒ0void sg_dma_mark_swiotlb(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj <h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mnubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj <h²hh³j<h´Mnubjó)�”}”(hŒsg_dma_mark_swiotlb”h]”j§)�”}”(hŒsg_dma_mark_swiotlb”h]”hŒsg_dma_mark_swiotlb”…”�”}”(hj.<h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj*<ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj <h²hh³j<h´Mnubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjJ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF<ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW<h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjF<ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjh<h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hje<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jj<Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj0<sbŒc.sg_dma_mark_swiotlb”†”asbuh1hhjF<ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ<h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjF<ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj–<h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjF<ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj£<h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjF<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjB<ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj <h²hh³j<h´Mnubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj<h²hh³j<h´Mnubah}”(h]”j<ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j<h´Mnhj<h²hubj)�”}”(hhh]”hì)�”}”(hŒ)Mark the scatterlist for SWIOTLB bouncing”h]”hŒ)Mark the scatterlist for SWIOTLB bouncing”…”�”}”(hjÍ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MnhjÊ<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj<h²hh³j<h´Mnubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jå<j0jå<j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒ˜**Parameters** ``struct scatterlist *sg`` SG entry **Description** Marks a a scatterlist for SWIOTLB bounce. Not all SG entries may be bounced.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjï<h]”hŒ Parameters”…”�”}”(hjñ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjí<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mrhjé<ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj=h]”hŒstruct scatterlist *sg”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj =ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mohj=ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj'=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j#=h´Mohj$=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j#=h´Mohj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjé<ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjI=h]”hŒ Description”…”�”}”(hjK=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjG=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mqhjé<ubjt$)�”}”(hŒLMarks a a scatterlist for SWIOTLB bounce. Not all SG entries may be bounced.”h]”hì)�”}”(hŒLMarks a a scatterlist for SWIOTLB bounce. Not all SG entries may be bounced.”h]”hŒLMarks a a scatterlist for SWIOTLB bounce. Not all SG entries may be bounced.”…”�”}”(hjc=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mqhj_=ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jq=h´Mqhjé<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_phys (C function)”Œ c.sg_phys”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ+dma_addr_t sg_phys (struct scatterlist *sg)”h]”j{)�”}”(hŒ*dma_addr_t sg_phys(struct scatterlist *sg)”h]”(h)�”}”(hhh]”j§)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hj›=h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj˜=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j�=Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_phys”sbŒ c.sg_phys”†”asbuh1hhj”=h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M‘ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½=h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj”=h²hh³j¼=h´M‘ubjó)�”}”(hŒsg_phys”h]”j§)�”}”(hj¹=h]”hŒsg_phys”…”�”}”(hjÏ=h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjË=ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj”=h²hh³j¼=h´M‘ubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjê=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæ=ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷=h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjæ=ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j >Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j·=Œ c.sg_phys”†”asbuh1hhjæ=ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&>h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjæ=ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj4>h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjæ=ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjA>h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjæ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjâ=ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj”=h²hh³j¼=h´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj�=h²hh³j¼=h´M‘ubah}”(h]”j‹=ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j¼=h´M‘hj�=h²hubj)�”}”(hhh]”hì)�”}”(hŒ&Return physical address of an sg entry”h]”hŒ&Return physical address of an sg entry”…”�”}”(hjk>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M‘hjh>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�=h²hh³j¼=h´M‘ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jƒ>j0jƒ>j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒê**Parameters** ``struct scatterlist *sg`` SG entry **Description** This calls page_to_phys() on the page in this sg entry, and adds the sg offset. The caller must know that it is legal to call page_to_phys() on the sg page.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj�>h]”hŒ Parameters”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj‹>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M•hj‡>ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj¬>h]”hŒstruct scatterlist *sg”…”�”}”(hj®>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjª>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M’hj¦>ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hjÅ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÁ>h´M’hjÂ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¦>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÁ>h´M’hj£>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj‡>ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjç>h]”hŒ Description”…”�”}”(hjé>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjå>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M”hj‡>ubjt$)�”}”(hŒœThis calls page_to_phys() on the page in this sg entry, and adds the sg offset. The caller must know that it is legal to call page_to_phys() on the sg page.”h]”hì)�”}”(hŒœThis calls page_to_phys() on the page in this sg entry, and adds the sg offset. The caller must know that it is legal to call page_to_phys() on the sg page.”h]”hŒœThis calls page_to_phys() on the page in this sg entry, and adds the sg offset. The caller must know that it is legal to call page_to_phys() on the sg page.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M”hjý>ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j?h´M”hj‡>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_virt (C function)”Œ c.sg_virt”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ'void * sg_virt (struct scatterlist *sg)”h]”j{)�”}”(hŒ%void *sg_virt(struct scatterlist *sg)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj6?h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj2?h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE?h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj2?h²hh³jD?h´M ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjS?h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj2?h²hh³jD?h´M ubjó)�”}”(hŒsg_virt”h]”j§)�”}”(hŒsg_virt”h]”hŒsg_virt”…”�”}”(hjd?h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj`?ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj2?h²hh³jD?h´M ubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj€?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|?ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj|?ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjž?h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj›?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j ?Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjf?sbŒ c.sg_virt”†”asbuh1hhj|?ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾?h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj|?ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÌ?h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj|?ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjÙ?h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj|?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjx?ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj2?h²hh³jD?h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj.?h²hh³jD?h´M ubah}”(h]”j)?ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jD?h´M hj+?h²hubj)�”}”(hhh]”hì)�”}”(hŒ%Return virtual address of an sg entry”h]”hŒ%Return virtual address of an sg entry”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M hj@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj+?h²hh³jD?h´M ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j@j0j@j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒà**Parameters** ``struct scatterlist *sg`` SG entry **Description** This calls page_address() on the page in this sg entry, and adds the sg offset. The caller must know that the sg page has a valid virtual mapping.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj%@h]”hŒ Parameters”…”�”}”(hj'@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj#@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M¤hj@ubjU)�”}”(hhh]”jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjD@h]”hŒstruct scatterlist *sg”…”�”}”(hjF@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjB@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M¡hj>@ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj]@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jY@h´M¡hjZ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj>@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jY@h´M¡hj;@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj@ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj@h]”hŒ Description”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj}@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M£hj@ubjt$)�”}”(hŒ’This calls page_address() on the page in this sg entry, and adds the sg offset. The caller must know that the sg page has a valid virtual mapping.”h]”hì)�”}”(hŒ’This calls page_address() on the page in this sg entry, and adds the sg offset. The caller must know that the sg page has a valid virtual mapping.”h]”hŒ’This calls page_address() on the page in this sg entry, and adds the sg offset. The caller must know that the sg page has a valid virtual mapping.”…”�”}”(hj™@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M£hj•@ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j§@h´M£hj@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_init_marker (C function)”Œc.sg_init_marker”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒAvoid sg_init_marker (struct scatterlist *sgl, unsigned int nents)”h]”j{)�”}”(hŒ@void sg_init_marker(struct scatterlist *sgl, unsigned int nents)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÎ@h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÊ@h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M¯ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ@h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÊ@h²hh³jÜ@h´M¯ubjó)�”}”(hŒsg_init_marker”h]”j§)�”}”(hŒsg_init_marker”h]”hŒsg_init_marker”…”�”}”(hjï@h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjë@ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÊ@h²hh³jÜ@h´M¯ubj)�”}”(hŒ-(struct scatterlist *sgl, unsigned int nents)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjAubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj)Ah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj&Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j+AŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjñ@sbŒc.sg_init_marker”†”asbuh1hhjAubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIAh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjAubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjWAh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjAubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjdAh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjAubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj}Ah²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjyAubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Ah²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjyAubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj™Ah²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjyAubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Ah²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjyAubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjµAh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjyAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjAubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÊ@h²hh³jÜ@h´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÆ@h²hh³jÜ@h´M¯ubah}”(h]”jÁ@ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÜ@h´M¯hjÃ@h²hubj)�”}”(hhh]”hì)�”}”(hŒInitialize markers in sg table”h]”hŒInitialize markers in sg table”…”�”}”(hjßAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M¯hjÜAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÃ@h²hh³jÜ@h´M¯ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j÷Aj0j÷Aj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒo**Parameters** ``struct scatterlist *sgl`` The SG table ``unsigned int nents`` Number of entries in table”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÿAubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M³hjûAubjU)�”}”(hhh]”(jZ)�”}”(hŒ)``struct scatterlist *sgl`` The SG table ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj Bh]”hŒstruct scatterlist *sgl”…”�”}”(hj"Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M°hjBubjz)�”}”(hhh]”hì)�”}”(hŒ The SG table”h]”hŒ The SG table”…”�”}”(hj9Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j5Bh´M°hj6Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j5Bh´M°hjBubjZ)�”}”(hŒ1``unsigned int nents`` Number of entries in table”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hjYBh]”hŒunsigned int nents”…”�”}”(hj[Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjWBubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M²hjSBubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in table”h]”hŒNumber of entries in table”…”�”}”(hjrBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M±hjoBubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjSBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jnBh´M²hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjûAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ&sg_alloc_table_from_pages (C function)”Œc.sg_alloc_table_from_pages”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ˜int sg_alloc_table_from_pages (struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, gfp_t gfp_mask)”h]”j{)�”}”(hŒ—int sg_alloc_table_from_pages(struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, gfp_t gfp_mask)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hj³Bh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¯Bh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MÜubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂBh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¯Bh²hh³jÁBh´MÜubjó)�”}”(hŒsg_alloc_table_from_pages”h]”j§)�”}”(hŒsg_alloc_table_from_pages”h]”hŒsg_alloc_table_from_pages”…”�”}”(hjÔBh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÐBubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj¯Bh²hh³jÁBh´MÜubj)�”}”(hŒz(struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, gfp_t gfp_mask)”h]”(j)�”}”(hŒstruct sg_table *sgt”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjðBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìBubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýBh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjìBubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jCŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjÖBsbŒc.sg_alloc_table_from_pages”†”asbuh1hhjìBubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Ch²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjìBubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj,Dubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjLDh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj,Dubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZDh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj,Dubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjhDh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj,Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjèBubj)�”}”(hŒunsigned long size”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj}Dubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}Dubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj}Dubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Dh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}Dubj§)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¹Dh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj}Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjèBubj)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÕDh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÒDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j×DŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j*CŒc.sg_alloc_table_from_pages”†”asbuh1hhjÎDubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóDh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÎDubj§)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÎDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjèBubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj¯Bh²hh³jÁBh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj«Bh²hh³jÁBh´MÜubah}”(h]”j¦Bah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÁBh´MÜhj¨Bh²hubj)�”}”(hhh]”hì)�”}”(hŒ:Allocate and initialize an sg table from an array of pages”h]”hŒ:Allocate and initialize an sg table from an array of pages”…”�”}”(hj+Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MÜhj(Eh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¨Bh²hh³jÁBh´MÜubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jCEj0jCEj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX **Parameters** ``struct sg_table *sgt`` The sg table header to use ``struct page **pages`` Pointer to an array of page pointers ``unsigned int n_pages`` Number of pages in the pages array ``unsigned int offset`` Offset from start of the first page to the start of a buffer ``unsigned long size`` Number of valid bytes in the buffer (after offset) ``gfp_t gfp_mask`` GFP allocation mask **Description** Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table. **Return** 0 on success, negative error on failure”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjMEh]”hŒ Parameters”…”�”}”(hjOEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjKEubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MàhjGEubjU)�”}”(hhh]”(jZ)�”}”(hŒ4``struct sg_table *sgt`` The sg table header to use ”h]”(j`)�”}”(hŒ``struct sg_table *sgt``”h]”jæ)�”}”(hjlEh]”hŒstruct sg_table *sgt”…”�”}”(hjnEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MÞhjfEubjz)�”}”(hhh]”hì)�”}”(hŒThe sg table header to use”h]”hŒThe sg table header to use”…”�”}”(hj…Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j�Eh´MÞhj‚Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjfEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j�Eh´MÞhjcEubjZ)�”}”(hŒ=``struct page **pages`` Pointer to an array of page pointers ”h]”(j`)�”}”(hŒ``struct page **pages``”h]”jæ)�”}”(hj¥Eh]”hŒstruct page **pages”…”�”}”(hj§Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj£Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MßhjŸEubjz)�”}”(hhh]”hì)�”}”(hŒ$Pointer to an array of page pointers”h]”hŒ$Pointer to an array of page pointers”…”�”}”(hj¾Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jºEh´Mßhj»Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjŸEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jºEh´MßhjcEubjZ)�”}”(hŒ<``unsigned int n_pages`` Number of pages in the pages array ”h]”(j`)�”}”(hŒ``unsigned int n_pages``”h]”jæ)�”}”(hjÞEh]”hŒunsigned int n_pages”…”�”}”(hjàEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÜEubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MàhjØEubjz)�”}”(hhh]”hì)�”}”(hŒ"Number of pages in the pages array”h]”hŒ"Number of pages in the pages array”…”�”}”(hj÷Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jóEh´MàhjôEubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjØEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jóEh´MàhjcEubjZ)�”}”(hŒU``unsigned int offset`` Offset from start of the first page to the start of a buffer ”h]”(j`)�”}”(hŒ``unsigned int offset``”h]”jæ)�”}”(hjFh]”hŒunsigned int offset”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MáhjFubjz)�”}”(hhh]”hì)�”}”(hŒhjÂFubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MåhjGEubjt$)�”}”(hX$Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table. ”h]”hì)�”}”(hX#Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table.”h]”hX#Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table.”…”�”}”(hjÞFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MåhjÚFubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jìFh´MåhjGEubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjõFh]”hŒReturn”…”�”}”(hj÷Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjóFubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MëhjGEubhì)�”}”(hŒ'0 on success, negative error on failure”h]”hŒ'0 on success, negative error on failure”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MìhjGEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_page_iter_page (C function)”Œc.sg_page_iter_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒhjUHubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M]hjQHubjU)�”}”(hhh]”jZ)�”}”(hŒ=``struct sg_page_iter *piter`` page iterator holding the page”h]”(j`)�”}”(hŒ``struct sg_page_iter *piter``”h]”jæ)�”}”(hjvHh]”hŒstruct sg_page_iter *piter”…”�”}”(hjxHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjtHubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M_hjpHubjz)�”}”(hhh]”hì)�”}”(hŒpage iterator holding the page”h]”hŒpage iterator holding the page”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MZhjŒHubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjpHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j‹Hh´M_hjmHubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjQHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ%sg_page_iter_dma_address (C function)”Œc.sg_page_iter_dma_address”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒGdma_addr_t sg_page_iter_dma_address (struct sg_dma_page_iter *dma_iter)”h]”j{)�”}”(hŒFdma_addr_t sg_page_iter_dma_address(struct sg_dma_page_iter *dma_iter)”h]”(h)�”}”(hhh]”j§)�”}”(hŒ dma_addr_t”h]”hŒ dma_addr_t”…”�”}”(hjÓHh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÐHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÕHŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_page_iter_dma_address”sbŒc.sg_page_iter_dma_address”†”asbuh1hhjÌHh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mbubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõHh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÌHh²hh³jôHh´Mbubjó)�”}”(hŒsg_page_iter_dma_address”h]”j§)�”}”(hjñHh]”hŒsg_page_iter_dma_address”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjIubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÌHh²hh³jôHh´Mbubj)�”}”(hŒ#(struct sg_dma_page_iter *dma_iter)”h]”j)�”}”(hŒ!struct sg_dma_page_iter *dma_iter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj"Ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Ih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjIubh)�”}”(hhh]”j§)�”}”(hŒsg_dma_page_iter”h]”hŒsg_dma_page_iter”…”�”}”(hj@Ih²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj=Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jBIŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jïHŒc.sg_page_iter_dma_address”†”asbuh1hhjIubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Ih²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjIubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjlIh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjIubj§)�”}”(hŒdma_iter”h]”hŒdma_iter”…”�”}”(hjyIh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÌHh²hh³jôHh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÈHh²hh³jôHh´Mbubah}”(h]”jÃHah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jôHh´MbhjÅHh²hubj)�”}”(hhh]”hì)�”}”(hŒBget the dma address of the current page held by the page iterator.”h]”hŒBget the dma address of the current page held by the page iterator.”…”�”}”(hj£Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mbhj Ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÅHh²hh³jôHh´Mbubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j»Ij0j»Ij1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒV**Parameters** ``struct sg_dma_page_iter *dma_iter`` page iterator holding the page”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÅIh]”hŒ Parameters”…”�”}”(hjÇIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÃIubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mfhj¿IubjU)�”}”(hhh]”jZ)�”}”(hŒD``struct sg_dma_page_iter *dma_iter`` page iterator holding the page”h]”(j`)�”}”(hŒ%``struct sg_dma_page_iter *dma_iter``”h]”jæ)�”}”(hjäIh]”hŒ!struct sg_dma_page_iter *dma_iter”…”�”}”(hjæIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjâIubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MhhjÞIubjz)�”}”(hhh]”hì)�”}”(hŒpage iterator holding the page”h]”hŒpage iterator holding the page”…”�”}”(hjýIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MdhjúIubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÞIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jùIh´MhhjÛIubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj¿Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒfor_each_sg_page (C macro)”Œc.for_each_sg_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒfor_each_sg_page”h]”j{)�”}”(hŒfor_each_sg_page”h]”jó)�”}”(hŒfor_each_sg_page”h]”j§)�”}”(hj8Jh]”hŒfor_each_sg_page”…”�”}”(hjBJh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj>Jubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj:Jh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mnubah}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj6Jh²hh³jUJh´Mnubah}”(h]”j1Jah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jUJh´Mnhj3Jh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hj3Jh²hh³jUJh´Mnubeh}”(h]”h ]”(j¾Œmacro”eh"]”h$]”h&]”j.j¾j/jnJj0jnJj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubhì)�”}”(hŒ5``for_each_sg_page (sglist, piter, nents, pgoffset)``”h]”jæ)�”}”(hjtJh]”hŒ1for_each_sg_page (sglist, piter, nents, pgoffset)”…”�”}”(hjvJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjrJubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mphj¼"h²hubjt$)�”}”(hŒ,iterate over the pages of the given sg list ”h]”hì)�”}”(hŒ+iterate over the pages of the given sg list”h]”hŒ+iterate over the pages of the given sg list”…”�”}”(hjŽJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MnhjŠJubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jœJh´Mnhj¼"h²hubj5)�”}”(hXZ**Parameters** ``sglist`` sglist to iterate over ``piter`` page iterator to hold current page, sg, sg_pgoffset ``nents`` maximum number of sg entries to iterate over ``pgoffset`` starting page offset (in pages) **Description** Callers may use sg_page_iter_page() to get each page pointer. In each loop it operates on PAGE_SIZE unit.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj©Jh]”hŒ Parameters”…”�”}”(hj«Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj§Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mrhj£JubjU)�”}”(hhh]”(jZ)�”}”(hŒ"``sglist`` sglist to iterate over ”h]”(j`)�”}”(hŒ ``sglist``”h]”jæ)�”}”(hjÈJh]”hŒsglist”…”�”}”(hjÊJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÆJubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MohjÂJubjz)�”}”(hhh]”hì)�”}”(hŒsglist to iterate over”h]”hŒsglist to iterate over”…”�”}”(hjáJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÝJh´MohjÞJubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÂJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÝJh´Mohj¿JubjZ)�”}”(hŒ>``piter`` page iterator to hold current page, sg, sg_pgoffset ”h]”(j`)�”}”(hŒ ``piter``”h]”jæ)�”}”(hjKh]”hŒpiter”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÿJubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MphjûJubjz)�”}”(hhh]”hì)�”}”(hŒ3page iterator to hold current page, sg, sg_pgoffset”h]”hŒ3page iterator to hold current page, sg, sg_pgoffset”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jKh´MphjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjûJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jKh´Mphj¿JubjZ)�”}”(hŒ7``nents`` maximum number of sg entries to iterate over ”h]”(j`)�”}”(hŒ ``nents``”h]”jæ)�”}”(hj:Kh]”hŒnents”…”�”}”(hjhj¬Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mthj£Jubhì)�”}”(hŒiCallers may use sg_page_iter_page() to get each page pointer. In each loop it operates on PAGE_SIZE unit.”h]”hŒiCallers may use sg_page_iter_page() to get each page pointer. In each loop it operates on PAGE_SIZE unit.”…”�”}”(hjÄKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mshj£Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒfor_each_sg_dma_page (C macro)”Œc.for_each_sg_dma_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒfor_each_sg_dma_page”h]”j{)�”}”(hŒfor_each_sg_dma_page”h]”jó)�”}”(hŒfor_each_sg_dma_page”h]”j§)�”}”(hjíKh]”hŒfor_each_sg_dma_page”…”�”}”(hj÷Kh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjóKubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjïKh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M|ubah}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjëKh²hh³j Lh´M|ubah}”(h]”jæKah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j Lh´M|hjèKh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hjèKh²hh³j Lh´M|ubeh}”(h]”h ]”(j¾Œmacro”eh"]”h$]”h&]”j.j¾j/j#Lj0j#Lj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubhì)�”}”(hŒ@``for_each_sg_dma_page (sglist, dma_iter, dma_nents, pgoffset)``”h]”jæ)�”}”(hj)Lh]”hŒhj\Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M€hjXLubjU)�”}”(hhh]”(jZ)�”}”(hŒ"``sglist`` sglist to iterate over ”h]”(j`)�”}”(hŒ ``sglist``”h]”jæ)�”}”(hj}Lh]”hŒsglist”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj{Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M}hjwLubjz)�”}”(hhh]”hì)�”}”(hŒsglist to iterate over”h]”hŒsglist to iterate over”…”�”}”(hj–Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j’Lh´M}hj“Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjwLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j’Lh´M}hjtLubjZ)�”}”(hŒ4``dma_iter`` DMA page iterator to hold current page ”h]”(j`)�”}”(hŒ ``dma_iter``”h]”jæ)�”}”(hj¶Lh]”hŒdma_iter”…”�”}”(hj¸Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj´Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M~hj°Lubjz)�”}”(hhh]”hì)�”}”(hŒ&DMA page iterator to hold current page”h]”hŒ&DMA page iterator to hold current page”…”�”}”(hjÏLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jËLh´M~hjÌLubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj°Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jËLh´M~hjtLubjZ)�”}”(hŒg``dma_nents`` maximum number of sg entries to iterate over, this is the value returned from dma_map_sg ”h]”(j`)�”}”(hŒ ``dma_nents``”h]”jæ)�”}”(hjïLh]”hŒ dma_nents”…”�”}”(hjñLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjíLubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M€hjéLubjz)�”}”(hhh]”hì)�”}”(hŒXmaximum number of sg entries to iterate over, this is the value returned from dma_map_sg”h]”hŒXmaximum number of sg entries to iterate over, this is the value returned from dma_map_sg”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjéLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jMh´M€hjtLubjZ)�”}”(hŒ-``pgoffset`` starting page offset (in pages) ”h]”(j`)�”}”(hŒ ``pgoffset``”h]”jæ)�”}”(hj)Mh]”hŒpgoffset”…”�”}”(hj+Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj'Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hj#Mubjz)�”}”(hhh]”hì)�”}”(hŒstarting page offset (in pages)”h]”hŒstarting page offset (in pages)”…”�”}”(hjBMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j>Mh´M�hj?Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj#Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j>Mh´M�hjtLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjXLubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjdMh]”hŒ Description”…”�”}”(hjfMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjbMubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MƒhjXLubhì)�”}”(hŒvCallers may use sg_page_iter_dma_address() to get each page's DMA address. In each loop it operates on PAGE_SIZE unit.”h]”hŒxCallers may use sg_page_iter_dma_address() to get each page’s DMA address. In each loop it operates on PAGE_SIZE unit.”…”�”}”(hjzMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M‚hjXLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒfor_each_sgtable_page (C macro)”Œc.for_each_sgtable_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒfor_each_sgtable_page”h]”j{)�”}”(hŒfor_each_sgtable_page”h]”jó)�”}”(hŒfor_each_sgtable_page”h]”j§)�”}”(hj£Mh]”hŒfor_each_sgtable_page”…”�”}”(hj­Mh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj©Mubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj¥Mh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MŒubah}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj¡Mh²hh³jÀMh´MŒubah}”(h]”jœMah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÀMh´MŒhjžMh²hubj)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j hjžMh²hh³jÀMh´MŒubeh}”(h]”h ]”(j¾Œmacro”eh"]”h$]”h&]”j.j¾j/jÙMj0jÙMj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubhì)�”}”(hŒ0``for_each_sgtable_page (sgt, piter, pgoffset)``”h]”jæ)�”}”(hjßMh]”hŒ,for_each_sgtable_page (sgt, piter, pgoffset)”…”�”}”(hjáMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÝMubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MŽhj¼"h²hubjt$)�”}”(hŒ.iterate over all pages in the sg_table object ”h]”hì)�”}”(hŒ-iterate over all pages in the sg_table object”h]”hŒ-iterate over all pages in the sg_table object”…”�”}”(hjùMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MŒhjõMubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jNh´MŒhj¼"h²hubj5)�”}”(hXe**Parameters** ``sgt`` sg_table object to iterate over ``piter`` page iterator to hold current page ``pgoffset`` starting page offset (in pages) **Description** Iterates over the all memory pages in the buffer described by a scatterlist stored in the given sg_table object. See also for_each_sg_page(). In each loop it operates on PAGE_SIZE unit.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjNh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hjNubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``sgt`` sg_table object to iterate over ”h]”(j`)�”}”(hŒ``sgt``”h]”jæ)�”}”(hj3Nh]”hŒsgt”…”�”}”(hj5Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj1Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hj-Nubjz)�”}”(hhh]”hì)�”}”(hŒsg_table object to iterate over”h]”hŒsg_table object to iterate over”…”�”}”(hjLNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jHNh´M�hjINubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj-Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jHNh´M�hj*NubjZ)�”}”(hŒ-``piter`` page iterator to hold current page ”h]”(j`)�”}”(hŒ ``piter``”h]”jæ)�”}”(hjlNh]”hŒpiter”…”�”}”(hjnNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MŽhjfNubjz)�”}”(hhh]”hì)�”}”(hŒ"page iterator to hold current page”h]”hŒ"page iterator to hold current page”…”�”}”(hj…Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j�Nh´MŽhj‚Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjfNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j�Nh´MŽhj*NubjZ)�”}”(hŒ-``pgoffset`` starting page offset (in pages) ”h]”(j`)�”}”(hŒ ``pgoffset``”h]”jæ)�”}”(hj¥Nh]”hŒpgoffset”…”�”}”(hj§Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj£Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hjŸNubjz)�”}”(hhh]”hì)�”}”(hŒstarting page offset (in pages)”h]”hŒstarting page offset (in pages)”…”�”}”(hj¾Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jºNh´M�hj»Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjŸNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jºNh´M�hj*Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjNubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjàNh]”hŒ Description”…”�”}”(hjâNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÞNubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M‘hjNubhì)�”}”(hŒ¹Iterates over the all memory pages in the buffer described by a scatterlist stored in the given sg_table object. See also for_each_sg_page(). In each loop it operates on PAGE_SIZE unit.”h]”hŒ¹Iterates over the all memory pages in the buffer described by a scatterlist stored in the given sg_table object. See also for_each_sg_page(). In each loop it operates on PAGE_SIZE unit.”…”�”}”(hjöNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hjNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ#for_each_sgtable_dma_page (C macro)”Œc.for_each_sgtable_dma_page”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒfor_each_sgtable_dma_page”h]”j{)�”}”(hŒfor_each_sgtable_dma_page”h]”jó)�”}”(hŒfor_each_sgtable_dma_page”h]”j§)�”}”(hjOh]”hŒfor_each_sgtable_dma_page”…”�”}”(hj)Oh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj%Oubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj!Oh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M™ubah}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjOh²hh³jhjŽOubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hjŠOubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``sgt`` sg_table object to iterate over ”h]”(j`)�”}”(hŒ``sgt``”h]”jæ)�”}”(hj¯Oh]”hŒsgt”…”�”}”(hj±Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj­Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´Mšhj©Oubjz)�”}”(hhh]”hì)�”}”(hŒsg_table object to iterate over”h]”hŒsg_table object to iterate over”…”�”}”(hjÈOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÄOh´MšhjÅOubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj©Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÄOh´Mšhj¦OubjZ)�”}”(hŒ4``dma_iter`` DMA page iterator to hold current page ”h]”(j`)�”}”(hŒ ``dma_iter``”h]”jæ)�”}”(hjèOh]”hŒdma_iter”…”�”}”(hjêOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjæOubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M›hjâOubjz)�”}”(hhh]”hì)�”}”(hŒ&DMA page iterator to hold current page”h]”hŒ&DMA page iterator to hold current page”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jýOh´M›hjþOubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjâOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jýOh´M›hj¦OubjZ)�”}”(hŒ-``pgoffset`` starting page offset (in pages) ”h]”(j`)�”}”(hŒ ``pgoffset``”h]”jæ)�”}”(hj!Ph]”hŒpgoffset”…”�”}”(hj#Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MœhjPubjz)�”}”(hhh]”hì)�”}”(hŒstarting page offset (in pages)”h]”hŒstarting page offset (in pages)”…”�”}”(hj:Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j6Ph´Mœhj7Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j6Ph´Mœhj¦Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjŠOubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj\Ph]”hŒ Description”…”�”}”(hj^Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjZPubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´MžhjŠOubhì)�”}”(hŒÁIterates over the all DMA mapped pages in the buffer described by a scatterlist stored in the given sg_table object. See also for_each_sg_dma_page(). In each loop it operates on PAGE_SIZE unit.”h]”hŒÁIterates over the all DMA mapped pages in the buffer described by a scatterlist stored in the given sg_table object. See also for_each_sg_dma_page(). In each loop it operates on PAGE_SIZE unit.”…”�”}”(hjrPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:867: ./include/linux/scatterlist.h”h´M�hjŠOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_nents (C function)”Œ c.sg_nents”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ%int sg_nents (struct scatterlist *sg)”h]”j{)�”}”(hŒ$int sg_nents(struct scatterlist *sg)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hj¡Ph²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj�Ph²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Ph²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj�Ph²hh³j¯Ph´Kubjó)�”}”(hŒsg_nents”h]”j§)�”}”(hŒsg_nents”h]”hŒsg_nents”…”�”}”(hjÂPh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¾Pubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj�Ph²hh³j¯Ph´Kubj)�”}”(hŒ(struct scatterlist *sg)”h]”j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÞPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚPubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëPh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÚPubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjüPh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjùPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jþPŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjÄPsbŒ c.sg_nents”†”asbuh1hhjÚPubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÚPubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj*Qh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjÚPubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj7Qh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÚPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÖPubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj�Ph²hh³j¯Ph´Kubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj™Ph²hh³j¯Ph´Kubah}”(h]”j”Pah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j¯Ph´Khj–Ph²hubj)�”}”(hhh]”hì)�”}”(hŒ,return total count of entries in scatterlist”h]”hŒ,return total count of entries in scatterlist”…”�”}”(hjaQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Khj^Qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj–Ph²hh³j¯Ph´Kubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jyQj0jyQj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒž**Parameters** ``struct scatterlist *sg`` The scatterlist **Description** Allows to know how many entries are in sg, taking into account chaining as well”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjƒQh]”hŒ Parameters”…”�”}”(hj…Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Khj}QubjU)�”}”(hhh]”jZ)�”}”(hŒ+``struct scatterlist *sg`` The scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hj¢Qh]”hŒstruct scatterlist *sg”…”�”}”(hj¤Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KhjœQubjz)�”}”(hhh]”hì)�”}”(hŒThe scatterlist”h]”hŒThe scatterlist”…”�”}”(hj»Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j·Qh´Khj¸Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjœQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j·Qh´Khj™Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj}Qubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjÝQh]”hŒ Description”…”�”}”(hjßQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÛQubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Khj}Qubhì)�”}”(hŒOAllows to know how many entries are in sg, taking into account chaining as well”h]”hŒOAllows to know how many entries are in sg, taking into account chaining as well”…”�”}”(hjóQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Khj}Qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_nents_for_len (C function)”Œc.sg_nents_for_len”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ6int sg_nents_for_len (struct scatterlist *sg, u64 len)”h]”j{)�”}”(hŒ5int sg_nents_for_len(struct scatterlist *sg, u64 len)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hj"Rh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjRh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K#ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Rh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjRh²hh³j0Rh´K#ubjó)�”}”(hŒsg_nents_for_len”h]”j§)�”}”(hŒsg_nents_for_len”h]”hŒsg_nents_for_len”…”�”}”(hjCRh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj?Rubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjRh²hh³j0Rh´K#ubj)�”}”(hŒ!(struct scatterlist *sg, u64 len)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj_Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[Rubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlRh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj[Rubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj}Rh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjzRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jRŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjERsbŒc.sg_nents_for_len”†”asbuh1hhj[Rubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Rh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj[Rubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj«Rh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj[Rubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hj¸Rh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj[Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjWRubj)�”}”(hŒu64 len”h]”(h)�”}”(hhh]”j§)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÔRh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÑRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÖRŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j™RŒc.sg_nents_for_len”†”asbuh1hhjÍRubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòRh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÍRubj§)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÍRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjWRubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjRh²hh³j0Rh´K#ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjRh²hh³j0Rh´K#ubah}”(h]”jRah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j0Rh´K#hjRh²hubj)�”}”(hhh]”hì)�”}”(hŒRreturn total count of entries in scatterlist needed to satisfy the supplied length”h]”hŒRreturn total count of entries in scatterlist needed to satisfy the supplied length”…”�”}”(hj*Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K#hj'Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjRh²hh³j0Rh´K#ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jBSj0jBSj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX:**Parameters** ``struct scatterlist *sg`` The scatterlist ``u64 len`` The total required length **Description** Determines the number of entries in sg that are required to meet the supplied length, taking into account chaining as well **Return** the number of sg entries needed, negative error on failure”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjLSh]”hŒ Parameters”…”�”}”(hjNSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjJSubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K'hjFSubjU)�”}”(hhh]”(jZ)�”}”(hŒ+``struct scatterlist *sg`` The scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hjkSh]”hŒstruct scatterlist *sg”…”�”}”(hjmSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjiSubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K%hjeSubjz)�”}”(hhh]”hì)�”}”(hŒThe scatterlist”h]”hŒThe scatterlist”…”�”}”(hj„Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j€Sh´K%hj�Subah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjeSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j€Sh´K%hjbSubjZ)�”}”(hŒ&``u64 len`` The total required length ”h]”(j`)�”}”(hŒ ``u64 len``”h]”jæ)�”}”(hj¤Sh]”hŒu64 len”…”�”}”(hj¦Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¢Subah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K&hjžSubjz)�”}”(hhh]”hì)�”}”(hŒThe total required length”h]”hŒThe total required length”…”�”}”(hj½Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¹Sh´K&hjºSubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjžSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¹Sh´K&hjbSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjFSubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjßSh]”hŒ Description”…”�”}”(hjáSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÝSubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K(hjFSubhì)�”}”(hŒzDetermines the number of entries in sg that are required to meet the supplied length, taking into account chaining as well”h]”hŒzDetermines the number of entries in sg that are required to meet the supplied length, taking into account chaining as well”…”�”}”(hjõSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K(hjFSubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjTh]”hŒReturn”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K+hjFSubhì)�”}”(hŒ:the number of sg entries needed, negative error on failure”h]”hŒ:the number of sg entries needed, negative error on failure”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K,hjFSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_nents_for_dma (C function)”Œc.sg_nents_for_dma”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒNint sg_nents_for_dma (struct scatterlist *sgl, unsigned int sglen, size_t len)”h]”j{)�”}”(hŒMint sg_nents_for_dma(struct scatterlist *sgl, unsigned int sglen, size_t len)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjKTh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjGTh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KDubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZTh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjGTh²hh³jYTh´KDubjó)�”}”(hŒsg_nents_for_dma”h]”j§)�”}”(hŒsg_nents_for_dma”h]”hŒsg_nents_for_dma”…”�”}”(hjlTh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjhTubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjGTh²hh³jYTh´KDubj)�”}”(hŒ9(struct scatterlist *sgl, unsigned int sglen, size_t len)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjˆTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„Tubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Th²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj„Tubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj¦Th²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj£Tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¨TŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjnTsbŒc.sg_nents_for_dma”†”asbuh1hhj„Tubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆTh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj„Tubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÔTh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj„Tubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjáTh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj„Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj€Tubj)�”}”(hŒunsigned int sglen”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjúTh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjöTubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöTubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjöTubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Uh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöTubj§)�”}”(hŒsglen”h]”hŒsglen”…”�”}”(hj2Uh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjöTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj€Tubj)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjNUh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjKUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jPUŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÂTŒc.sg_nents_for_dma”†”asbuh1hhjGUubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlUh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjGUubj§)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjzUh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjGUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj€Tubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjGTh²hh³jYTh´KDubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjCTh²hh³jYTh´KDubah}”(h]”j>Tah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jYTh´KDhj@Th²hubj)�”}”(hhh]”hì)�”}”(hŒ6return the count of DMA-capable entries in scatterlist”h]”hŒ6return the count of DMA-capable entries in scatterlist”…”�”}”(hj¤Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KDhj¡Uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@Th²hh³jYTh´KDubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j¼Uj0j¼Uj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX–**Parameters** ``struct scatterlist *sgl`` The scatterlist ``unsigned int sglen`` The current number of entries ``size_t len`` The maximum length of DMA-capable block **Description** Determines the number of entries in **sgl** which would be permitted in DMA-capable transfer if list had been split accordingly, taking into account chaining as well. **Return** the number of sgl entries needed”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÆUh]”hŒ Parameters”…”�”}”(hjÈUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÄUubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KHhjÀUubjU)�”}”(hhh]”(jZ)�”}”(hŒ,``struct scatterlist *sgl`` The scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjåUh]”hŒstruct scatterlist *sgl”…”�”}”(hjçUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjãUubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KEhjßUubjz)�”}”(hhh]”hì)�”}”(hŒThe scatterlist”h]”hŒThe scatterlist”…”�”}”(hjþUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³júUh´KEhjûUubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjßUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³júUh´KEhjÜUubjZ)�”}”(hŒ5``unsigned int sglen`` The current number of entries ”h]”(j`)�”}”(hŒ``unsigned int sglen``”h]”jæ)�”}”(hjVh]”hŒunsigned int sglen”…”�”}”(hj Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KFhjVubjz)�”}”(hhh]”hì)�”}”(hŒThe current number of entries”h]”hŒThe current number of entries”…”�”}”(hj7Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j3Vh´KFhj4Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j3Vh´KFhjÜUubjZ)�”}”(hŒ7``size_t len`` The maximum length of DMA-capable block ”h]”(j`)�”}”(hŒ``size_t len``”h]”jæ)�”}”(hjWVh]”hŒ size_t len”…”�”}”(hjYVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjUVubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KGhjQVubjz)�”}”(hhh]”hì)�”}”(hŒ'The maximum length of DMA-capable block”h]”hŒ'The maximum length of DMA-capable block”…”�”}”(hjpVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jlVh´KGhjmVubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjQVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jlVh´KGhjÜUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjÀUubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj’Vh]”hŒ Description”…”�”}”(hj”Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KIhjÀUubhì)�”}”(hŒ¦Determines the number of entries in **sgl** which would be permitted in DMA-capable transfer if list had been split accordingly, taking into account chaining as well.”h]”(hŒ$Determines the number of entries in ”…”�”}”(hj¨Vh²hh³Nh´Nubj?)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hj°Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¨VubhŒ{ which would be permitted in DMA-capable transfer if list had been split accordingly, taking into account chaining as well.”…”�”}”(hj¨Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KIhjÀUubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjËVh]”hŒReturn”…”�”}”(hjÍVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÉVubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KMhjÀUubhì)�”}”(hŒ the number of sgl entries needed”h]”hŒ the number of sgl entries needed”…”�”}”(hjáVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KNhjÀUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_last (C function)”Œ c.sg_last”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒJstruct scatterlist * sg_last (struct scatterlist *sgl, unsigned int nents)”h]”j{)�”}”(hŒHstruct scatterlist *sg_last(struct scatterlist *sgl, unsigned int nents)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Wh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj Wh²hh³jWh´K^ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj/Wh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj,Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j1WŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_last”sbŒ c.sg_last”†”asbuh1hhj Wh²hh³jWh´K^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPWh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj Wh²hh³jWh´K^ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj^Wh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj Wh²hh³jWh´K^ubjó)�”}”(hŒsg_last”h]”j§)�”}”(hjMWh]”hŒsg_last”…”�”}”(hjoWh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjkWubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj Wh²hh³jWh´K^ubj)�”}”(hŒ-(struct scatterlist *sgl, unsigned int nents)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŠWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†Wubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Wh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj†Wubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj¨Wh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jªWŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jKWŒ c.sg_last”†”asbuh1hhj†Wubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆWh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj†Wubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÔWh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj†Wubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjáWh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj†Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj‚Wubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjúWh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjöWubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöWubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjöWubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Xh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöWubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj2Xh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjöWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj‚Wubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj Wh²hh³jWh´K^ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjWh²hh³jWh´K^ubah}”(h]”jWah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jWh´K^hjWh²hubj)�”}”(hhh]”hì)�”}”(hŒ+return the last scatterlist entry in a list”h]”hŒ+return the last scatterlist entry in a list”…”�”}”(hj\Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K^hjYXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjWh²hh³jWh´K^ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jtXj0jtXj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX **Parameters** ``struct scatterlist *sgl`` First entry in the scatterlist ``unsigned int nents`` Number of entries in the scatterlist **Description** Should only be used casually, it (currently) scans the entire list to get the last entry. Note that the **sgl** pointer passed in need not be the first one, the important bit is that **nents** denotes the number of entries that exist from **sgl**.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj~Xh]”hŒ Parameters”…”�”}”(hj€Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj|Xubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KbhjxXubjU)�”}”(hhh]”(jZ)�”}”(hŒ;``struct scatterlist *sgl`` First entry in the scatterlist ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj�Xh]”hŒstruct scatterlist *sgl”…”�”}”(hjŸXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj›Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K_hj—Xubjz)�”}”(hhh]”hì)�”}”(hŒFirst entry in the scatterlist”h]”hŒFirst entry in the scatterlist”…”�”}”(hj¶Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j²Xh´K_hj³Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj—Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j²Xh´K_hj”XubjZ)�”}”(hŒ<``unsigned int nents`` Number of entries in the scatterlist ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hjÖXh]”hŒunsigned int nents”…”�”}”(hjØXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÔXubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K`hjÐXubjz)�”}”(hhh]”hì)�”}”(hŒ$Number of entries in the scatterlist”h]”hŒ$Number of entries in the scatterlist”…”�”}”(hjïXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jëXh´K`hjìXubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÐXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jëXh´K`hj”Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjxXubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjYh]”hŒ Description”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KbhjxXubjt$)�”}”(hŒøShould only be used casually, it (currently) scans the entire list to get the last entry. Note that the **sgl** pointer passed in need not be the first one, the important bit is that **nents** denotes the number of entries that exist from **sgl**.”h]”(hì)�”}”(hŒYShould only be used casually, it (currently) scans the entire list to get the last entry.”h]”hŒYShould only be used casually, it (currently) scans the entire list to get the last entry.”…”�”}”(hj+Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kbhj'Yubhì)�”}”(hŒ�Note that the **sgl** pointer passed in need not be the first one, the important bit is that **nents** denotes the number of entries that exist from **sgl**.”h]”(hŒNote that the ”…”�”}”(hj:Yh²hh³Nh´Nubj?)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hjBYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:YubhŒH pointer passed in need not be the first one, the important bit is that ”…”�”}”(hj:Yh²hh³Nh´Nubj?)�”}”(hŒ **nents**”h]”hŒnents”…”�”}”(hjTYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:YubhŒ/ denotes the number of entries that exist from ”…”�”}”(hj:Yh²hh³Nh´Nubj?)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hjfYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:YubhŒ.”…”�”}”(hj:Yh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kehj'Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j9Yh´KbhjxXubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_init_table (C function)”Œc.sg_init_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ@void sg_init_table (struct scatterlist *sgl, unsigned int nents)”h]”j{)�”}”(hŒ?void sg_init_table(struct scatterlist *sgl, unsigned int nents)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¥Yh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¡Yh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Yh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¡Yh²hh³j³Yh´Kyubjó)�”}”(hŒ sg_init_table”h]”j§)�”}”(hŒ sg_init_table”h]”hŒ sg_init_table”…”�”}”(hjÆYh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÂYubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj¡Yh²hh³j³Yh´Kyubj)�”}”(hŒ-(struct scatterlist *sgl, unsigned int nents)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjâYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞYubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïYh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÞYubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjýYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jZŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjÈYsbŒc.sg_init_table”†”asbuh1hhjÞYubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÞYubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj.Zh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjÞYubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj;Zh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÞYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÚYubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjTZh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjPZubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbZh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjPZubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjpZh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjPZubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Zh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjPZubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjŒZh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjPZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjÚYubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj¡Yh²hh³j³Yh´Kyubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj�Yh²hh³j³Yh´Kyubah}”(h]”j˜Yah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j³Yh´KyhjšYh²hubj)�”}”(hhh]”hì)�”}”(hŒInitialize SG table”h]”hŒInitialize SG table”…”�”}”(hj¶Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kyhj³Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjšYh²hh³j³Yh´Kyubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÎZj0jÎZj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒà**Parameters** ``struct scatterlist *sgl`` The SG table ``unsigned int nents`` Number of entries in table **Notes** If this is part of a chained sg table, sg_mark_end() should be used only on the last table part.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjØZh]”hŒ Parameters”…”�”}”(hjÚZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÖZubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K}hjÒZubjU)�”}”(hhh]”(jZ)�”}”(hŒ)``struct scatterlist *sgl`` The SG table ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj÷Zh]”hŒstruct scatterlist *sgl”…”�”}”(hjùZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjõZubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KzhjñZubjz)�”}”(hhh]”hì)�”}”(hŒ The SG table”h]”hŒ The SG table”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j [h´Kzhj [ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjñZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j [h´KzhjîZubjZ)�”}”(hŒ2``unsigned int nents`` Number of entries in table ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj0[h]”hŒunsigned int nents”…”�”}”(hj2[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj.[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K{hj*[ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in table”h]”hŒNumber of entries in table”…”�”}”(hjI[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jE[h´K{hjF[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj*[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jE[h´K{hjîZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjÒZubhì)�”}”(hŒ **Notes**”h]”j?)�”}”(hjk[h]”hŒNotes”…”�”}”(hjm[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hji[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K}hjÒZubjt$)�”}”(hŒ`If this is part of a chained sg table, sg_mark_end() should be used only on the last table part.”h]”hì)�”}”(hŒ`If this is part of a chained sg table, sg_mark_end() should be used only on the last table part.”h]”hŒ`If this is part of a chained sg table, sg_mark_end() should be used only on the last table part.”…”�”}”(hj…[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K}hj�[ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j“[h´K}hjÒZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_init_one (C function)”Œ c.sg_init_one”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒOvoid sg_init_one (struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”j{)�”}”(hŒNvoid sg_init_one(struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjº[h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¶[h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KŠubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ[h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¶[h²hh³jÈ[h´KŠubjó)�”}”(hŒ sg_init_one”h]”j§)�”}”(hŒ sg_init_one”h]”hŒ sg_init_one”…”�”}”(hjÛ[h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj×[ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj¶[h²hh³jÈ[h´KŠubj)�”}”(hŒ>(struct scatterlist *sg, const void *buf, unsigned int buflen)”h]”(j)�”}”(hŒstruct scatterlist *sg”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj÷[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó[ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjó[ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j\Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjÝ[sbŒ c.sg_init_one”†”asbuh1hhjó[ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjó[ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjC\h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjó[ubj§)�”}”(hŒsg”h]”hŒsg”…”�”}”(hjP\h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjó[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjï[ubj)�”}”(hŒconst void *buf”h]”(j�)�”}”(hjh]”hŒconst”…”�”}”(hji\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hje\ubj6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj„\h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hje\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hje\ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhje\ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj­\h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hje\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjï[ubj)�”}”(hŒunsigned int buflen”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆ\h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÂ\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÂ\ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjâ\h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÂ\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð\h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÂ\ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjþ\h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÂ\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjï[ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj¶[h²hh³jÈ[h´KŠubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj²[h²hh³jÈ[h´KŠubah}”(h]”j­[ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÈ[h´KŠhj¯[h²hubj)�”}”(hhh]”hì)�”}”(hŒ!Initialize a single entry sg list”h]”hŒ!Initialize a single entry sg list”…”�”}”(hj(]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KŠhj%]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¯[h²hh³jÈ[h´KŠubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j@]j0j@]j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒˆ**Parameters** ``struct scatterlist *sg`` SG entry ``const void *buf`` Virtual address for IO ``unsigned int buflen`` IO length”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjJ]h]”hŒ Parameters”…”�”}”(hjL]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjH]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KŽhjD]ubjU)�”}”(hhh]”(jZ)�”}”(hŒ$``struct scatterlist *sg`` SG entry ”h]”(j`)�”}”(hŒ``struct scatterlist *sg``”h]”jæ)�”}”(hji]h]”hŒstruct scatterlist *sg”…”�”}”(hjk]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjg]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K‹hjc]ubjz)�”}”(hhh]”hì)�”}”(hŒSG entry”h]”hŒSG entry”…”�”}”(hj‚]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j~]h´K‹hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjc]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j~]h´K‹hj`]ubjZ)�”}”(hŒ+``const void *buf`` Virtual address for IO ”h]”(j`)�”}”(hŒ``const void *buf``”•h]”jæ)�”}”(hj¢]h]”hŒconst void *buf”…”�”}”(hj¤]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KŒhjœ]ubjz)�”}”(hhh]”hì)�”}”(hŒVirtual address for IO”h]”hŒVirtual address for IO”…”�”}”(hj»]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j·]h´KŒhj¸]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjœ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j·]h´KŒhj`]ubjZ)�”}”(hŒ!``unsigned int buflen`` IO length”h]”(j`)�”}”(hŒ``unsigned int buflen``”h]”jæ)�”}”(hjÛ]h]”hŒunsigned int buflen”…”�”}”(hjÝ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÙ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KŽhjÕ]ubjz)�”}”(hhh]”hì)�”}”(hŒ IO length”h]”hŒ IO length”…”�”}”(hjô]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K�hjñ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÕ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jð]h´KŽhj`]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjD]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ__sg_free_table (C function)”Œc.__sg_free_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ�void __sg_free_table (struct sg_table *table, unsigned int max_ents, unsigned int nents_first_chunk, sg_free_fn *free_fn, unsigned int num_ents)”h]”j{)�”}”(hŒ�void __sg_free_table(struct sg_table *table, unsigned int max_ents, unsigned int nents_first_chunk, sg_free_fn *free_fn, unsigned int num_ents)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5^h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj1^h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¸ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD^h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj1^h²hh³jC^h´K¸ubjó)�”}”(hŒ__sg_free_table”h]”j§)�”}”(hŒ__sg_free_table”h]”hŒ__sg_free_table”…”�”}”(hjV^h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjR^ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj1^h²hh³jC^h´K¸ubj)�”}”(hŒ{(struct sg_table *table, unsigned int max_ents, unsigned int nents_first_chunk, sg_free_fn *free_fn, unsigned int num_ents)”h]”(j)�”}”(hŒstruct sg_table *table”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjr^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn^ubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j’^Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjX^sbŒc.__sg_free_table”†”asbuh1hhjn^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°^h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjn^ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¾^h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjn^ubj§)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjË^h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjn^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjj^ubj)�”}”(hŒunsigned int max_ents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjä^h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjà^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò^h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjà^ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjà^ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjà^ubj§)�”}”(hŒmax_ents”h]”hŒmax_ents”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjà^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjj^ubj)�”}”(hŒunsigned int nents_first_chunk”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj5_h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj1_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC_h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj1_ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjQ_h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj1_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj__h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj1_ubj§)�”}”(hŒnents_first_chunk”h]”hŒnents_first_chunk”…”�”}”(hjm_h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj1_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjj^ubj)�”}”(hŒsg_free_fn *free_fn”h]”(h)�”}”(hhh]”j§)�”}”(hŒ sg_free_fn”h]”hŒ sg_free_fn”…”�”}”(hj‰_h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj†_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j‹_Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j¬^Œc.__sg_free_table”†”asbuh1hhj‚_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§_h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‚_ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjµ_h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj‚_ubj§)�”}”(hŒfree_fn”h]”hŒfree_fn”…”�”}”(hjÂ_h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‚_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjj^ubj)�”}”(hŒunsigned int num_ents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÛ_h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj×_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé_h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj×_ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj÷_h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj×_ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj×_ubj§)�”}”(hŒnum_ents”h]”hŒnum_ents”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj×_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjj^ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj1^h²hh³jC^h´K¸ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj-^h²hh³jC^h´K¸ubah}”(h]”j(^ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jC^h´K¸hj*^h²hubj)�”}”(hhh]”hì)�”}”(hŒ!Free a previously mapped sg table”h]”hŒ!Free a previously mapped sg table”…”�”}”(hj=`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¸hj:`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*^h²hh³jC^h´K¸ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jU`j0jU`j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXP**Parameters** ``struct sg_table *table`` The sg table header to use ``unsigned int max_ents`` The maximum number of entries per single scatterlist ``unsigned int nents_first_chunk`` Number of entries int the (preallocated) first scatterlist chunk, 0 means no such preallocated first chunk ``sg_free_fn *free_fn`` Free function ``unsigned int num_ents`` Number of entries in the table **Description** Free an sg table previously allocated and setup with __sg_alloc_table(). The **max_ents** value must be identical to that previously used with __sg_alloc_table().”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj_`h]”hŒ Parameters”…”�”}”(hja`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj]`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¼hjY`ubjU)�”}”(hhh]”(jZ)�”}”(hŒ6``struct sg_table *table`` The sg table header to use ”h]”(j`)�”}”(hŒ``struct sg_table *table``”h]”jæ)�”}”(hj~`h]”hŒstruct sg_table *table”…”�”}”(hj€`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj|`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¹hjx`ubjz)�”}”(hhh]”hì)�”}”(hŒThe sg table header to use”h]”hŒThe sg table header to use”…”�”}”(hj—`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j“`h´K¹hj”`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjx`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j“`h´K¹hju`ubjZ)�”}”(hŒO``unsigned int max_ents`` The maximum number of entries per single scatterlist ”h]”(j`)�”}”(hŒ``unsigned int max_ents``”h]”jæ)�”}”(hj·`h]”hŒunsigned int max_ents”…”�”}”(hj¹`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjµ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kºhj±`ubjz)�”}”(hhh]”hì)�”}”(hŒ4The maximum number of entries per single scatterlist”h]”hŒ4The maximum number of entries per single scatterlist”…”�”}”(hjÐ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÌ`h´KºhjÍ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj±`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÌ`h´Kºhju`ubjZ)�”}”(hŒŽ``unsigned int nents_first_chunk`` Number of entries int the (preallocated) first scatterlist chunk, 0 means no such preallocated first chunk ”h]”(j`)�”}”(hŒ"``unsigned int nents_first_chunk``”h]”jæ)�”}”(hjð`h]”hŒunsigned int nents_first_chunk”…”�”}”(hjò`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjî`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¼hjê`ubjz)�”}”(hhh]”hì)�”}”(hŒjNumber of entries int the (preallocated) first scatterlist chunk, 0 means no such preallocated first chunk”h]”hŒjNumber of entries int the (preallocated) first scatterlist chunk, 0 means no such preallocated first chunk”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K»hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjê`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jah´K¼hju`ubjZ)�”}”(hŒ&``sg_free_fn *free_fn`` Free function ”h]”(j`)�”}”(hŒ``sg_free_fn *free_fn``”h]”jæ)�”}”(hj*ah]”hŒsg_free_fn *free_fn”…”�”}”(hj,ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj(aubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K½hj$aubjz)�”}”(hhh]”hì)�”}”(hŒ Free function”h]”hŒ Free function”…”�”}”(hjCah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j?ah´K½hj@aubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj$aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j?ah´K½hju`ubjZ)�”}”(hŒ9``unsigned int num_ents`` Number of entries in the table ”h]”(j`)�”}”(hŒ``unsigned int num_ents``”h]”jæ)�”}”(hjcah]”hŒunsigned int num_ents”…”�”}”(hjeah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjaaubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´K¾hj]aubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in the table”h]”hŒNumber of entries in the table”…”�”}”(hj|ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jxah´K¾hjyaubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj]aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jxah´K¾hju`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjY`ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjžah]”hŒ Description”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjœaubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KÀhjY`ubjt$)�”}”(hŒ£Free an sg table previously allocated and setup with __sg_alloc_table(). The **max_ents** value must be identical to that previously used with __sg_alloc_table().”h]”hì)�”}”(hŒ£Free an sg table previously allocated and setup with __sg_alloc_table(). The **max_ents** value must be identical to that previously used with __sg_alloc_table().”h]”(hŒNFree an sg table previously allocated and setup with __sg_alloc_table(). The ”…”�”}”(hj¸ah²hh³Nh´Nubj?)�”}”(hŒ **max_ents**”h]”hŒmax_ents”…”�”}”(hjÀah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¸aubhŒI value must be identical to that previously used with __sg_alloc_table().”…”�”}”(hj¸ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KÀhj´aubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jØah´KÀhjY`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ!sg_free_append_table (C function)”Œc.sg_free_append_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ9void sg_free_append_table (struct sg_append_table *table)”h]”j{)�”}”(hŒ8void sg_free_append_table(struct sg_append_table *table)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÿah²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjûah²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kòubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjûah²hh³j bh´Kòubjó)�”}”(hŒsg_free_append_table”h]”j§)�”}”(hŒsg_free_append_table”h]”hŒsg_free_append_table”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjbubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjûah²hh³j bh´Kòubj)�”}”(hŒ(struct sg_append_table *table)”h]”j)�”}”(hŒstruct sg_append_table *table”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjhjßbubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´KöhjÛbubjU)�”}”(hhh]”jZ)�”}”(hŒC``struct sg_append_table *table`` The mapped sg append table header”h]”(j`)�”}”(hŒ!``struct sg_append_table *table``”h]”jæ)�”}”(hjch]”hŒstruct sg_append_table *table”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjþbubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Køhjúbubjz)�”}”(hhh]”hì)�”}”(hŒ!The mapped sg append table header”h]”hŒ!The mapped sg append table header”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kóhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjúbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jch´Køhj÷bubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjÛbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_free_table (C function)”Œc.sg_free_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ+void sg_free_table (struct sg_table *table)”h]”j{)�”}”(hŒ*void sg_free_table(struct sg_table *table)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjZch²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjVch²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kÿubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjich²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjVch²hh³jhch´Kÿubjó)�”}”(hŒ sg_free_table”h]”j§)�”}”(hŒ sg_free_table”h]”hŒ sg_free_table”…”�”}”(hj{ch²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjwcubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjVch²hh³jhch´Kÿubj)�”}”(hŒ(struct sg_table *table)”h]”j)�”}”(hŒstruct sg_table *table”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj—ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“cubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤ch²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj“cubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjµch²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj²cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j·cŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj}csbŒc.sg_free_table”†”asbuh1hhj“cubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕch²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj“cubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjãch²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj“cubj§)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjðch²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj“cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj�cubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjVch²hh³jhch´Kÿubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjRch²hh³jhch´Kÿubah}”(h]”jMcah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jhch´KÿhjOch²hubj)�”}”(hhh]”hì)�”}”(hŒ$Free a previously allocated sg table”h]”hŒ$Free a previously allocated sg table”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Kÿhjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjOch²hh³jhch´Kÿubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j2dj0j2dj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒG**Parameters** ``struct sg_table *table`` The mapped sg table header”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj:dubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj6dubjU)�”}”(hhh]”jZ)�”}”(hŒ5``struct sg_table *table`` The mapped sg table header”h]”(j`)�”}”(hŒ``struct sg_table *table``”h]”jæ)�”}”(hj[dh]”hŒstruct sg_table *table”…”�”}”(hj]dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjYdubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MhjUdubjz)�”}”(hhh]”hì)�”}”(hŒThe mapped sg table header”h]”hŒThe mapped sg table header”…”�”}”(hjtdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjqdubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjUdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jpdh´MhjRdubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj6dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ__sg_alloc_table (C function)”Œc.__sg_alloc_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒÀint __sg_alloc_table (struct sg_table *table, unsigned int nents, unsigned int max_ents, struct scatterlist *first_chunk, unsigned int nents_first_chunk, gfp_t gfp_mask, sg_alloc_fn *alloc_fn)”h]”j{)�”}”(hŒ¿int __sg_alloc_table(struct sg_table *table, unsigned int nents, unsigned int max_ents, struct scatterlist *first_chunk, unsigned int nents_first_chunk, gfp_t gfp_mask, sg_alloc_fn *alloc_fn)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjµdh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj±dh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄdh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±dh²hh³jÃdh´M ubjó)�”}”(hŒ__sg_alloc_table”h]”j§)�”}”(hŒ__sg_alloc_table”h]”hŒ__sg_alloc_table”…”�”}”(hjÖdh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÒdubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj±dh²hh³jÃdh´M ubj)�”}”(hŒ«(struct sg_table *table, unsigned int nents, unsigned int max_ents, struct scatterlist *first_chunk, unsigned int nents_first_chunk, gfp_t gfp_mask, sg_alloc_fn *alloc_fn)”h]”(j)�”}”(hŒstruct sg_table *table”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjòdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîdubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿdh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjîdubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jeŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjØdsbŒc.__sg_alloc_table”†”asbuh1hhjîdubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0eh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjîdubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj>eh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjîdubj§)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjKeh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjîdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjdeh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj`eubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjreh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj`eubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj€eh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj`eubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽeh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj`eubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjœeh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj`eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒunsigned int max_ents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjµeh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj±eubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃeh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±eubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÑeh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj±eubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßeh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj±eubj§)�”}”(hŒmax_ents”h]”hŒmax_ents”…”�”}”(hjíeh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj±eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒstruct scatterlist *first_chunk”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjfubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj$fh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj!fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j&fŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j,eŒc.__sg_alloc_table”†”asbuh1hhjfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBfh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjfubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjPfh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjfubj§)�”}”(hŒ first_chunk”h]”hŒ first_chunk”…”�”}”(hj]fh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒunsigned int nents_first_chunk”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjvfh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjrfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„fh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjrfubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj’fh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjrfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjrfubj§)�”}”(hŒnents_first_chunk”h]”hŒnents_first_chunk”…”�”}”(hj®fh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjrfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÊfh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÇfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÌfŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j,eŒc.__sg_alloc_table”†”asbuh1hhjÃfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèfh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÃfubj§)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjöfh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÃfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubj)�”}”(hŒsg_alloc_fn *alloc_fn”h]”(h)�”}”(hhh]”j§)�”}”(hŒ sg_alloc_fn”h]”hŒ sg_alloc_fn”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jgŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j,eŒc.__sg_alloc_table”†”asbuh1hhj gubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0gh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj gubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj>gh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj gubj§)�”}”(hŒalloc_fn”h]”hŒalloc_fn”…”�”}”(hjKgh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjêdubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj±dh²hh³jÃdh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj­dh²hh³jÃdh´M ubah}”(h]”j¨dah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÃdh´M hjªdh²hubj)�”}”(hhh]”hì)�”}”(hŒ8Allocate and initialize an sg table with given allocator”h]”hŒ8Allocate and initialize an sg table with given allocator”…”�”}”(hjugh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M hjrgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjªdh²hh³jÃdh´M ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j�gj0j�gj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX³**Parameters** ``struct sg_table *table`` The sg table header to use ``unsigned int nents`` Number of entries in sg list ``unsigned int max_ents`` The maximum number of entries the allocator returns per call ``struct scatterlist *first_chunk`` first SGL if preallocated (may be ``NULL``) ``unsigned int nents_first_chunk`` Number of entries in the (preallocated) first scatterlist chunk, 0 means no such preallocated chunk provided by user ``gfp_t gfp_mask`` GFP allocation mask ``sg_alloc_fn *alloc_fn`` Allocator to use **Description** This function returns a **table** **nents** long. The allocator is defined to return scatterlist chunks of maximum size **max_ents**. Thus if **nents** is bigger than **max_ents**, the scatterlists will be chained in units of **max_ents**. **Notes** If this function returns non-0 (eg failure), the caller must call __sg_free_table() to cleanup any leftover allocations.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj—gh]”hŒ Parameters”…”�”}”(hj™gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj•gubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj‘gubjU)�”}”(hhh]”(jZ)�”}”(hŒ6``struct sg_table *table`` The sg table header to use ”h]”(j`)�”}”(hŒ``struct sg_table *table``”h]”jæ)�”}”(hj¶gh]”hŒstruct sg_table *table”…”�”}”(hj¸gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj´gubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M hj°gubjz)�”}”(hhh]”hì)�”}”(hŒThe sg table header to use”h]”hŒThe sg table header to use”…”�”}”(hjÏgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jËgh´M hjÌgubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj°gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jËgh´M hj­gubjZ)�”}”(hŒ4``unsigned int nents`` Number of entries in sg list ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hjïgh]”hŒunsigned int nents”…”�”}”(hjñgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjígubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M hjégubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in sg list”h]”hŒNumber of entries in sg list”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jhh´M hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjégubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jhh´M hj­gubjZ)�”}”(hŒW``unsigned int max_ents`` The maximum number of entries the allocator returns per call ”h]”(j`)�”}”(hŒ``unsigned int max_ents``”h]”jæ)�”}”(hj(hh]”hŒunsigned int max_ents”…”�”}”(hj*hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj&hubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj"hubjz)�”}”(hhh]”hì)�”}”(hŒhubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj"hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j=hh´Mhj­gubjZ)�”}”(hŒP``struct scatterlist *first_chunk`` first SGL if preallocated (may be ``NULL``) ”h]”(j`)�”}”(hŒ#``struct scatterlist *first_chunk``”h]”jæ)�”}”(hjahh]”hŒstruct scatterlist *first_chunk”…”�”}”(hjchh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj_hubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj[hubjz)�”}”(hhh]”hì)�”}”(hŒ+first SGL if preallocated (may be ``NULL``)”h]”(hŒ"first SGL if preallocated (may be ”…”�”}”(hjzhh²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj‚hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjzhubhŒ)”…”�”}”(hjzhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jvhh´Mhjwhubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj[hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jvhh´Mhj­gubjZ)�”}”(hŒ˜``unsigned int nents_first_chunk`` Number of entries in the (preallocated) first scatterlist chunk, 0 means no such preallocated chunk provided by user ”h]”(j`)�”}”(hŒ"``unsigned int nents_first_chunk``”h]”jæ)�”}”(hj¬hh]”hŒunsigned int nents_first_chunk”…”�”}”(hj®hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjªhubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj¦hubjz)�”}”(hhh]”hì)�”}”(hŒtNumber of entries in the (preallocated) first scatterlist chunk, 0 means no such preallocated chunk provided by user”h]”hŒtNumber of entries in the (preallocated) first scatterlist chunk, 0 means no such preallocated chunk provided by user”…”�”}”(hjÅhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MhjÂhubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¦hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÁhh´Mhj­gubjZ)�”}”(hŒ'``gfp_t gfp_mask`` GFP allocation mask ”h]”(j`)�”}”(hŒ``gfp_t gfp_mask``”h]”jæ)�”}”(hjæhh]”hŒgfp_t gfp_mask”…”�”}”(hjèhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjähubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjàhubjz)�”}”(hhh]”hì)�”}”(hŒGFP allocation mask”h]”hŒGFP allocation mask”…”�”}”(hjÿhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jûhh´Mhjühubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjàhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jûhh´Mhj­gubjZ)�”}”(hŒ+``sg_alloc_fn *alloc_fn`` Allocator to use ”h]”(j`)�”}”(hŒ``sg_alloc_fn *alloc_fn``”h]”jæ)�”}”(hjih]”hŒsg_alloc_fn *alloc_fn”…”�”}”(hj!ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjiubjz)�”}”(hhh]”hì)�”}”(hŒAllocator to use”h]”hŒAllocator to use”…”�”}”(hj8ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j4ih´Mhj5iubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j4ih´Mhj­gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj‘gubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjZih]”hŒ Description”…”�”}”(hj\ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjXiubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj‘gubjt$)�”}”(hŒðThis function returns a **table** **nents** long. The allocator is defined to return scatterlist chunks of maximum size **max_ents**. Thus if **nents** is bigger than **max_ents**, the scatterlists will be chained in units of **max_ents**. ”h]”hì)�”}”(hŒïThis function returns a **table** **nents** long. The allocator is defined to return scatterlist chunks of maximum size **max_ents**. Thus if **nents** is bigger than **max_ents**, the scatterlists will be chained in units of **max_ents**.”h]”(hŒThis function returns a ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **table**”h]”hŒtable”…”�”}”(hj|ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒ ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **nents**”h]”hŒnents”…”�”}”(hjŽih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒM long. The allocator is defined to return scatterlist chunks of maximum size ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **max_ents**”h]”hŒmax_ents”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒ . Thus if ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **nents**”h]”hŒnents”…”�”}”(hj²ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒ is bigger than ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **max_ents**”h]”hŒmax_ents”…”�”}”(hjÄih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒ/, the scatterlists will be chained in units of ”…”�”}”(hjtih²hh³Nh´Nubj?)�”}”(hŒ **max_ents**”h]”hŒmax_ents”…”�”}”(hjÖih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjtiubhŒ.”…”�”}”(hjtih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjpiubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jîih´Mhj‘gubhì)�”}”(hŒ **Notes**”h]”j?)�”}”(hj÷ih]”hŒNotes”…”�”}”(hjùih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjõiubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj‘gubjt$)�”}”(hŒxIf this function returns non-0 (eg failure), the caller must call __sg_free_table() to cleanup any leftover allocations.”h]”hì)�”}”(hŒxIf this function returns non-0 (eg failure), the caller must call __sg_free_table() to cleanup any leftover allocations.”h]”hŒxIf this function returns non-0 (eg failure), the caller must call __sg_free_table() to cleanup any leftover allocations.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj jubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jjh´Mhj‘gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_alloc_table (C function)”Œc.sg_alloc_table”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒOint sg_alloc_table (struct sg_table *table, unsigned int nents, gfp_t gfp_mask)”h]”j{)�”}”(hŒNint sg_alloc_table(struct sg_table *table, unsigned int nents, gfp_t gfp_mask)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjFjh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjBjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Moubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjBjh²hh³jTjh´Moubjó)�”}”(hŒsg_alloc_table”h]”j§)�”}”(hŒsg_alloc_table”h]”hŒsg_alloc_table”…”�”}”(hjgjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjcjubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjBjh²hh³jTjh´Moubj)�”}”(hŒ<(struct sg_table *table, unsigned int nents, gfp_t gfp_mask)”h]”(j)�”}”(hŒstruct sg_table *table”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjƒjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjjubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj¡jh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjžjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j£jŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjijsbŒc.sg_alloc_table”†”asbuh1hhjjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjjubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÏjh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjjubj§)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjÜjh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj{jubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjõjh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjñjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjñjubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjñjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjñjubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj-kh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjñjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj{jubj)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjIkh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjFkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jKkŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j½jŒc.sg_alloc_table”†”asbuh1hhjBkubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgkh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjBkubj§)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjukh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjBkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj{jubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjBjh²hh³jTjh´Moubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj>jh²hh³jTjh´Moubah}”(h]”j9jah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jTjh´Mohj;jh²hubj)�”}”(hhh]”hì)�”}”(hŒ#Allocate and initialize an sg table”h]”hŒ#Allocate and initialize an sg table”…”�”}”(hjŸkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mohjœkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj;jh²hh³jTjh´Moubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j·kj0j·kj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX7**Parameters** ``struct sg_table *table`` The sg table header to use ``unsigned int nents`` Number of entries in sg list ``gfp_t gfp_mask`` GFP allocation mask **Description** Allocate and initialize an sg table. If **nents** is larger than SG_MAX_SINGLE_ALLOC a chained sg table will be setup.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÁkh]”hŒ Parameters”…”�”}”(hjÃkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¿kubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mshj»kubjU)�”}”(hhh]”(jZ)�”}”(hŒ6``struct sg_table *table`` The sg table header to use ”h]”(j`)�”}”(hŒ``struct sg_table *table``”h]”jæ)�”}”(hjàkh]”hŒstruct sg_table *table”…”�”}”(hjâkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÞkubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MphjÚkubjz)�”}”(hhh]”hì)�”}”(hŒThe sg table header to use”h]”hŒThe sg table header to use”…”�”}”(hjùkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jõkh´Mphjökubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÚkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jõkh´Mphj×kubjZ)�”}”(hŒ4``unsigned int nents`` Number of entries in sg list ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hjlh]”hŒunsigned int nents”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mqhjlubjz)�”}”(hhh]”hì)�”}”(hŒNumber of entries in sg list”h]”hŒNumber of entries in sg list”…”�”}”(hj2lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j.lh´Mqhj/lubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j.lh´Mqhj×kubjZ)�”}”(hŒ'``gfp_t gfp_mask`` GFP allocation mask ”h]”(j`)�”}”(hŒ``gfp_t gfp_mask``”h]”jæ)�”}”(hjRlh]”hŒgfp_t gfp_mask”…”�”}”(hjTlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjPlubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MrhjLlubjz)�”}”(hhh]”hì)�”}”(hŒGFP allocation mask”h]”hŒGFP allocation mask”…”�”}”(hjklh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jglh´Mrhjhlubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjLlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jglh´Mrhj×kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj»kubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj�lh]”hŒ Description”…”�”}”(hj�lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj‹lubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mthj»kubjt$)�”}”(hŒvAllocate and initialize an sg table. If **nents** is larger than SG_MAX_SINGLE_ALLOC a chained sg table will be setup.”h]”hì)�”}”(hŒvAllocate and initialize an sg table. If **nents** is larger than SG_MAX_SINGLE_ALLOC a chained sg table will be setup.”h]”(hŒ(Allocate and initialize an sg table. If ”…”�”}”(hj§lh²hh³Nh´Nubj?)�”}”(hŒ **nents**”h]”hŒnents”…”�”}”(hj¯lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj§lubhŒE is larger than SG_MAX_SINGLE_ALLOC a chained sg table will be setup.”…”�”}”(hj§lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mthj£lubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jÇlh´Mthj»kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ-sg_alloc_append_table_from_pages (C function)”Œ"c.sg_alloc_append_table_from_pages”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒàint sg_alloc_append_table_from_pages (struct sg_append_table *sgt_append, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, unsigned int left_pages, gfp_t gfp_mask)”h]”j{)�”}”(hŒßint sg_alloc_append_table_from_pages(struct sg_append_table *sgt_append, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, unsigned int left_pages, gfp_t gfp_mask)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjîlh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjêlh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M­ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýlh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjêlh²hh³jülh´M­ubjó)�”}”(hŒ sg_alloc_append_table_from_pages”h]”j§)�”}”(hŒ sg_alloc_append_table_from_pages”h]”hŒ sg_alloc_append_table_from_pages”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj mubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjêlh²hh³jülh´M­ubj)�”}”(hŒ»(struct sg_append_table *sgt_append, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, unsigned int left_pages, gfp_t gfp_mask)”h]”(j)�”}”(hŒ"struct sg_append_table *sgt_append”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj+mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8mh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj'mubh)�”}”(hhh]”j§)�”}”(hŒsg_append_table”h]”hŒsg_append_table”…”�”}”(hjImh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjFmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jKmŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjmsbŒ"c.sg_alloc_append_table_from_pages”†”asbuh1hhj'mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjimh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj'mubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjwmh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj'mubj§)�”}”(hŒ sgt_append”h]”hŒ sgt_append”…”�”}”(hj„mh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj'mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒstruct page **pages”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªmh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj™mubh)�”}”(hhh]”j§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj»mh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¸mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j½mŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jemŒ"c.sg_alloc_append_table_from_pages”†”asbuh1hhj™mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙmh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj™mubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjçmh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj™mubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjômh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj™mubj§)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj™mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒunsigned int n_pages”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjnubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(nh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjnubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj6nh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjnubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDnh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjnubj§)�”}”(hŒn_pages”h]”hŒn_pages”…”�”}”(hjRnh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒunsigned int offset”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjknh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjgnubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjynh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjgnubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj‡nh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjgnubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•nh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjgnubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj£nh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjgnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒunsigned long size”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¼nh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¸nubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊnh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸nubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¸nubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjænh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¸nubj§)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjônh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¸nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒunsigned int max_segment”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj oubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj oubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj)oh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj oubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7oh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj oubj§)�”}”(hŒ max_segment”h]”hŒ max_segment”…”�”}”(hjEoh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒunsigned int left_pages”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^oh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjZoubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjloh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjZoubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjzoh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjZoubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆoh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjZoubj§)�”}”(hŒ left_pages”h]”hŒ left_pages”…”�”}”(hj–oh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjZoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubj)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj²oh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¯oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j´oŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jemŒ"c.sg_alloc_append_table_from_pages”†”asbuh1hhj«oubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐoh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj«oubj§)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjÞoh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj«oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj#mubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjêlh²hh³jülh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjælh²hh³jülh´M­ubah}”(h]”jálah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jülh´M­hjãlh²hubj)�”}”(hhh]”hì)�”}”(hŒAAllocate and initialize an append sg table from an array of pages”h]”hŒAAllocate and initialize an append sg table from an array of pages”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M­hjph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjãlh²hh³jülh´M­ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j pj0j pj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXú**Parameters** ``struct sg_append_table *sgt_append`` The sg append table to use ``struct page **pages`` Pointer to an array of page pointers ``unsigned int n_pages`` Number of pages in the pages array ``unsigned int offset`` Offset from start of the first page to the start of a buffer ``unsigned long size`` Number of valid bytes in the buffer (after offset) ``unsigned int max_segment`` Maximum size of a scatterlist element in bytes ``unsigned int left_pages`` Left pages caller have to set after this call ``gfp_t gfp_mask`` GFP allocation mask **Description** In the first call it allocate and initialize an sg table from a list of pages, else reuse the scatterlist from sgt_append. Contiguous ranges of the pages are squashed into a single scatterlist entry up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_append_table **Return** 0 on success, negative error on failure **Notes** If this function returns non-0 (eg failure), the caller must call sg_free_append_table() to cleanup any leftover allocations. In the fist call, sgt_append must by initialized.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj*ph]”hŒ Parameters”…”�”}”(hj,ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj(pubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M±hj$pubjU)�”}”(hhh]”(jZ)�”}”(hŒB``struct sg_append_table *sgt_append`` The sg append table to use ”h]”(j`)�”}”(hŒ&``struct sg_append_table *sgt_append``”h]”jæ)�”}”(hjIph]”hŒ"struct sg_append_table *sgt_append”…”�”}”(hjKph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjGpubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¯hjCpubjz)�”}”(hhh]”hì)�”}”(hŒThe sg append table to use”h]”hŒThe sg append table to use”…”�”}”(hjbph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j^ph´M¯hj_pubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjCpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j^ph´M¯hj@pubjZ)�”}”(hŒ=``struct page **pages`` Pointer to an array of page pointers ”h]”(j`)�”}”(hŒ``struct page **pages``”h]”jæ)�”}”(hj‚ph]”hŒstruct page **pages”…”�”}”(hj„ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj€pubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M°hj|pubjz)�”}”(hhh]”hì)�”}”(hŒ$Pointer to an array of page pointers”h]”hŒ$Pointer to an array of page pointers”…”�”}”(hj›ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j—ph´M°hj˜pubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj|pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j—ph´M°hj@pubjZ)�”}”(hŒ<``unsigned int n_pages`` Number of pages in the pages array ”h]”(j`)�”}”(hŒ``unsigned int n_pages``”h]”jæ)�”}”(hj»ph]”hŒunsigned int n_pages”…”�”}”(hj½ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¹pubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M±hjµpubjz)�”}”(hhh]”hì)�”}”(hŒ"Number of pages in the pages array”h]”hŒ"Number of pages in the pages array”…”�”}”(hjÔph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÐph´M±hjÑpubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjµpubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÐph´M±hj@pubjZ)�”}”(hŒU``unsigned int offset`` Offset from start of the first page to the start of a buffer ”h]”(j`)�”}”(hŒ``unsigned int offset``”h]”jæ)�”}”(hjôph]”hŒunsigned int offset”…”�”}”(hjöph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjòpubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M²hjîpubjz)�”}”(hhh]”hì)�”}”(hŒhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¸hj$pubjt$)�”}”(hX¡In the first call it allocate and initialize an sg table from a list of pages, else reuse the scatterlist from sgt_append. Contiguous ranges of the pages are squashed into a single scatterlist entry up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_append_table ”h]”hì)�”}”(hX In the first call it allocate and initialize an sg table from a list of pages, else reuse the scatterlist from sgt_append. Contiguous ranges of the pages are squashed into a single scatterlist entry up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_append_table”h]”(hŒëIn the first call it allocate and initialize an sg table from a list of pages, else reuse the scatterlist from sgt_append. Contiguous ranges of the pages are squashed into a single scatterlist entry up to the maximum size specified in ”…”�”}”(hj-rh²hh³Nh´Nubj?)�”}”(hŒ**max_segment**”h]”hŒ max_segment”…”�”}”(hj5rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj-rubhŒ¦. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_append_table”…”�”}”(hj-rh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¸hj)rubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jMrh´M¸hj$pubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjVrh]”hŒReturn”…”�”}”(hjXrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjTrubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¿hj$pubhì)�”}”(hŒ'0 on success, negative error on failure”h]”hŒ'0 on success, negative error on failure”…”�”}”(hjlrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÀhj$pubhì)�”}”(hŒ **Notes**”h]”j?)�”}”(hj}rh]”hŒNotes”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj{rubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÂhj$pubjt$)�”}”(hŒ°If this function returns non-0 (eg failure), the caller must call sg_free_append_table() to cleanup any leftover allocations. In the fist call, sgt_append must by initialized.”h]”(hì)�”}”(hŒ}If this function returns non-0 (eg failure), the caller must call sg_free_append_table() to cleanup any leftover allocations.”h]”hŒ}If this function returns non-0 (eg failure), the caller must call sg_free_append_table() to cleanup any leftover allocations.”…”�”}”(hj—rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÃhj“rubhì)�”}”(hŒ1In the fist call, sgt_append must by initialized.”h]”hŒ1In the fist call, sgt_append must by initialized.”…”�”}”(hj¦rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÆhj“rubeh}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j¥rh´MÃhj$pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ.sg_alloc_table_from_pages_segment (C function)”Œ#c.sg_alloc_table_from_pages_segment”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒºint sg_alloc_table_from_pages_segment (struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, gfp_t gfp_mask)”h]”j{)�”}”(hŒ¹int sg_alloc_table_from_pages_segment(struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, gfp_t gfp_mask)”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÛrh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj×rh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M/ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêrh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj×rh²hh³jérh´M/ubjó)�”}”(hŒ!sg_alloc_table_from_pages_segment”h]”j§)�”}”(hŒ!sg_alloc_table_from_pages_segment”h]”hŒ!sg_alloc_table_from_pages_segment”…”�”}”(hjürh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjørubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj×rh²hh³jérh´M/ubj)�”}”(hŒ”(struct sg_table *sgt, struct page **pages, unsigned int n_pages, unsigned int offset, unsigned long size, unsigned int max_segment, gfp_t gfp_mask)”h]”(j)�”}”(hŒstruct sg_table *sgt”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%sh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjsubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hj6sh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj3subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j8sŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjþrsbŒ#c.sg_alloc_table_from_pages_segment”†”asbuh1hhjsubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVsh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjsubjâ)�”•}”(hjåh]”hŒ*”…”�”}”(hjdsh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjsubj§)�”}”(hŒsgt”h]”hŒsgt”…”�”}”(hjqsh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒstruct page **pages”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjŠsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†subj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—sh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj†subh)�”}”(hhh]”j§)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¨sh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jªsŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jRsŒ#c.sg_alloc_table_from_pages_segment”†”asbuh1hhj†subj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆsh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj†subjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÔsh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj†subjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjásh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj†subj§)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjîsh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj†subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒunsigned int n_pages”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjtubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjtubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj#th²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjtubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1th²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjtubj§)�”}”(hŒn_pages”h]”hŒn_pages”…”�”}”(hj?th²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒunsigned int offset”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjXth²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjTtubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfth²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjTtubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjtth²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjTtubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚th²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjTtubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj�th²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjTtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒunsigned long size”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj©th²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥tubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·th²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥tubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÅth²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥tubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓth²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥tubj§)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjáth²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒunsigned int max_segment”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjúth²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjötubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjötubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjötubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$uh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjötubj§)�”}”(hŒ max_segment”h]”hŒ max_segment”…”�”}”(hj2uh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjötubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubj)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjNuh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjKuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jPuŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jRsŒ#c.sg_alloc_table_from_pages_segment”†”asbuh1hhjGuubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjluh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjGuubj§)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjzuh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjGuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjsubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj×rh²hh³jérh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÓrh²hh³jérh´M/ubah}”(h]”jÎrah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jérh´M/hjÐrh²hubj)�”}”(hhh]”hì)�”}”(hŒUAllocate and initialize an sg table from an array of pages and given maximum segment.”h]”hŒUAllocate and initialize an sg table from an array of pages and given maximum segment.”…”�”}”(hj¤uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M/hj¡uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÐrh²hh³jérh´M/ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j¼uj0j¼uj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX‘**Parameters** ``struct sg_table *sgt`` The sg table header to use ``struct page **pages`` Pointer to an array of page pointers ``unsigned int n_pages`` Number of pages in the pages array ``unsigned int offset`` Offset from start of the first page to the start of a buffer ``unsigned long size`` Number of valid bytes in the buffer (after offset) ``unsigned int max_segment`` Maximum size of a scatterlist element in bytes ``gfp_t gfp_mask`` GFP allocation mask **Description** Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table. **Return** 0 on success, negative error on failure”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÆuh]”hŒ Parameters”…”�”}”(hjÈuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÄuubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M3hjÀuubjU)�”}”(hhh]”(jZ)�”}”(hŒ4``struct sg_table *sgt`` The sg table header to use ”h]”(j`)�”}”(hŒ``struct sg_table *sgt``”h]”jæ)�”}”(hjåuh]”hŒstruct sg_table *sgt”…”�”}”(hjçuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjãuubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M2hjßuubjz)�”}”(hhh]”hì)�”}”(hŒThe sg table header to use”h]”hŒThe sg table header to use”…”�”}”(hjþuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³júuh´M2hjûuubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjßuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³júuh´M2hjÜuubjZ)�”}”(hŒ=``struct page **pages`` Pointer to an array of page pointers ”h]”(j`)�”}”(hŒ``struct page **pages``”h]”jæ)�”}”(hjvh]”hŒstruct page **pages”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M3hjvubjz)�”}”(hhh]”hì)�”}”(hŒ$Pointer to an array of page pointers”h]”hŒ$Pointer to an array of page pointers”…”�”}”(hj7vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j3vh´M3hj4vubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j3vh´M3hjÜuubjZ)�”}”(hŒ<``unsigned int n_pages`` Number of pages in the pages array ”h]”(j`)�”}”(hŒ``unsigned int n_pages``”h]”jæ)�”}”(hjWvh]”hŒunsigned int n_pages”…”�”}”(hjYvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjUvubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M4hjQvubjz)�”}”(hhh]”hì)�”}”(hŒ"Number of pages in the pages array”h]”hŒ"Number of pages in the pages array”…”�”}”(hjpvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jlvh´M4hjmvubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjQvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jlvh´M4hjÜuubjZ)�”}”(hŒU``unsigned int offset`` Offset from start of the first page to the start of a buffer ”h]”(j`)�”}”(hŒ``unsigned int offset``”h]”jæ)�”}”(hj�vh]”hŒunsigned int offset”…”�”}”(hj’vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjŽvubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M5hjŠvubjz)�”}”(hhh]”hì)�”}”(hŒhjtwubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M:hjÀuubjt$)�”}”(hXYAllocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array. The returned sg table is released by sg_free_table. ”h]”(hì)�”}”(hX#Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node up to the maximum size specified in **max_segment**. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array.”h]”(hŒ©Allocate and initialize an sg table from a list of pages. Contiguous ranges of the pages are squashed into a single scatterlist node up to the maximum size specified in ”…”�”}”(hj�wh²hh³Nh´Nubj?)�”}”(hŒ**max_segment**”h]”hŒ max_segment”…”�”}”(hj˜wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�wubhŒk. A user may provide an offset at a start and a size of valid data in a buffer specified by the page array.”…”�”}”(hj�wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M:hjŒwubhì)�”}”(hŒ3The returned sg table is released by sg_free_table.”h]”hŒ3The returned sg table is released by sg_free_table.”…”�”}”(hj±wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M?hjŒwubeh}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j°wh´M:hjÀuubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjÈwh]”hŒReturn”…”�”}”(hjÊwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÆwubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MAhjÀuubhì)�”}”(hŒ'0 on success, negative error on failure”h]”hŒ'0 on success, negative error on failure”…”�”}”(hjÞwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MBhjÀuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsgl_alloc_order (C function)”Œc.sgl_alloc_order”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ…struct scatterlist * sgl_alloc_order (unsigned long long length, unsigned int order, bool chainable, gfp_t gfp, unsigned int *nent_p)”h]”j{)�”}”(hŒƒstruct scatterlist *sgl_alloc_order(unsigned long long length, unsigned int order, bool chainable, gfp_t gfp, unsigned int *nent_p)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj xh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj xh²hh³jxh´M\ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj,xh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj)xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j.xŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsgl_alloc_order”sbŒc.sgl_alloc_order”†”asbuh1hhj xh²hh³jxh´M\ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMxh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj xh²hh³jxh´M\ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj[xh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj xh²hh³jxh´M\ubjó)�”}”(hŒsgl_alloc_order”h]”j§)�”}”(hjJxh]”hŒsgl_alloc_order”…”�”}”(hjlxh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjhxubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj xh²hh³jxh´M\ubj)�”}”(hŒ`(unsigned long long length, unsigned int order, bool chainable, gfp_t gfp, unsigned int *nent_p)”h]”(j)�”}”(hŒunsigned long long length”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‡xh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjƒxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•xh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƒxubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj£xh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjƒxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±xh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƒxubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¿xh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjƒxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍxh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjƒxubj§)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjÛxh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjƒxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjxubj)�”}”(hŒunsigned int order”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjôxh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjðxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjðxubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjðxubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjðxubj§)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj,yh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjðxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjxubj)�”}”(hŒbool chainable”h]”(j6)�”}”(hjå5h]”hŒbool”…”�”}”(hjEyh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjAyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjAyubj§)�”}”(hŒ chainable”h]”hŒ chainable”…”�”}”(hj`yh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjAyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjxubj)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj|yh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjyyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j~yŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jHxŒc.sgl_alloc_order”†”asbuh1hhjuyubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjuyubj§)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj¨yh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjuyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjxubj)�”}”(hŒunsigned int *nent_p”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÁyh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj½yubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj½yubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÝyh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj½yubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëyh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj½yubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjùyh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj½yubj§)�”}”(hŒnent_p”h]”hŒnent_p”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj½yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjxubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj xh²hh³jxh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjxh²hh³jxh´M\ubah}”(h]”jxah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jxh´M\hjxh²hubj)�”}”(hhh]”hì)�”}”(hŒ$allocate a scatterlist and its pages”h]”hŒ$allocate a scatterlist and its pages”…”�”}”(hj0zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M\hj-zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxh²hh³jxh´M\ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jHzj0jHzj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXì**Parameters** ``unsigned long long length`` Length in bytes of the scatterlist. Must be at least one ``unsigned int order`` Second argument for alloc_pages() ``bool chainable`` Whether or not to allocate an extra element in the scatterlist for scatterlist chaining purposes ``gfp_t gfp`` Memory allocation flags ``unsigned int *nent_p`` [out] Number of entries in the scatterlist that have pages **Return** A pointer to an initialized scatterlist or ``NULL`` upon failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjRzh]”hŒ Parameters”…”�”}”(hjTzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjPzubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M`hjLzubjU)�”}”(hhh]”(jZ)�”}”(hŒW``unsigned long long length`` Length in bytes of the scatterlist. Must be at least one ”h]”(j`)�”}”(hŒ``unsigned long long length``”h]”jæ)�”}”(hjqzh]”hŒunsigned long long length”…”�”}”(hjszh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjozubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M]hjkzubjz)�”}”(hhh]”hì)�”}”(hŒ8Length in bytes of the scatterlist. Must be at least one”h]”hŒ8Length in bytes of the scatterlist. Must be at least one”…”�”}”(hjŠzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j†zh´M]hj‡zubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjkzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j†zh´M]hjhzubjZ)�”}”(hŒ9``unsigned int order`` Second argument for alloc_pages() ”h]”(j`)�”}”(hŒ``unsigned int order``”h]”jæ)�”}”(hjªzh]”hŒunsigned int order”…”�”}”(hj¬zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¨zubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M^hj¤zubjz)�”}”(hhh]”hì)�”}”(hŒ!Second argument for alloc_pages()”h]”hŒ!Second argument for alloc_pages()”…”�”}”(hjÃzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¿zh´M^hjÀzubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¤zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¿zh´M^hjhzubjZ)�”}”(hŒt``bool chainable`` Whether or not to allocate an extra element in the scatterlist for scatterlist chaining purposes ”h]”(j`)�”}”(hŒ``bool chainable``”h]”jæ)�”}”(hjãzh]”hŒbool chainable”…”�”}”(hjåzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjázubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M`hjÝzubjz)�”}”(hhh]”hì)�”}”(hŒ`Whether or not to allocate an extra element in the scatterlist for scatterlist chaining purposes”h]”hŒ`Whether or not to allocate an extra element in the scatterlist for scatterlist chaining purposes”…”�”}”(hjüzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M_hjùzubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÝzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jøzh´M`hjhzubjZ)�”}”(hŒ&``gfp_t gfp`` Memory allocation flags ”h]”(j`)�”}”(hŒ ``gfp_t gfp``”h]”jæ)�”}”(hj{h]”hŒ gfp_t gfp”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mahj{ubjz)�”}”(hhh]”hì)�”}”(hŒMemory allocation flags”h]”hŒMemory allocation flags”…”�”}”(hj6{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j2{h´Mahj3{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j2{h´MahjhzubjZ)�”}”(hŒT``unsigned int *nent_p`` [out] Number of entries in the scatterlist that have pages ”h]”(j`)�”}”(hŒ``unsigned int *nent_p``”h]”jæ)�”}”(hjV{h]”hŒunsigned int *nent_p”…”�”}”(hjX{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjT{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MbhjP{ubjz)�”}”(hhh]”hì)�”}”(hŒ:[out] Number of entries in the scatterlist that have pages”h]”hŒ:[out] Number of entries in the scatterlist that have pages”…”�”}”(hjo{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jk{h´Mbhjl{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjP{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jk{h´Mbhjhzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjLzubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hj‘{h]”hŒReturn”…”�”}”(hj“{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MdhjLzubhì)�”}”(hŒAA pointer to an initialized scatterlist or ``NULL`` upon failure.”h]”(hŒ+A pointer to an initialized scatterlist or ”…”�”}”(hj§{h²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¯{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj§{ubhŒ upon failure.”…”�”}”(hj§{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MdhjLzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsgl_alloc (C function)”Œ c.sgl_alloc”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ[struct scatterlist * sgl_alloc (unsigned long long length, gfp_t gfp, unsigned int *nent_p)”h]”j{)�”}”(hŒYstruct scatterlist *sgl_alloc(unsigned long long length, gfp_t gfp, unsigned int *nent_p)”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjè{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä{h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö{h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjä{h²hh³jõ{h´M”ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j |Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒ sgl_alloc”sbŒ c.sgl_alloc”†”asbuh1hhjä{h²hh³jõ{h´M”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjä{h²hh³jõ{h´M”ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj6|h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjä{h²hh³jõ{h´M”ubjó)�”}”(hŒ sgl_alloc”h]”j§)�”}”(hj%|h]”hŒ sgl_alloc”…”�”}”(hjG|h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjC|ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjä{h²hh³jõ{h´M”ubj)�”}”(hŒ<(unsigned long long length, gfp_t gfp, unsigned int *nent_p)”h]”(j)�”}”(hŒunsigned long long length”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjb|h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj^|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^|ubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj~|h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj^|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^|ubj6)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjš|h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj^|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj^|ubj§)�”}”(hŒlength”h]”hŒlength”…”�”}”(hj¶|h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj^|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjZ|ubj)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j§)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÒ|h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÏ|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÔ|Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j#|Œ c.sgl_alloc”†”asbuh1hhjË|ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð|h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjË|ubj§)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjþ|h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjË|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjZ|ubj)�”}”(hŒunsigned int *nent_p”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj}ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%}h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj3}h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj}ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA}h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj}ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjO}h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj}ubj§)�”}”(hŒnent_p”h]”hŒnent_p”…”�”}”(hj\}h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjZ|ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjä{h²hh³jõ{h´M”ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjà{h²hh³jõ{h´M”ubah}”(h]”jÛ{ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jõ{h´M”hjÝ{h²hubj)�”}”(hhh]”hì)�”}”(hŒ$allocate a scatterlist and its pages”h]”hŒ$allocate a scatterlist and its pages”…”�”}”(hj†}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M”hjƒ}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝ{h²hh³jõ{h´M”ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jž}j0jž}j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX**Parameters** ``unsigned long long length`` Length in bytes of the scatterlist ``gfp_t gfp`` Memory allocation flags ``unsigned int *nent_p`` [out] Number of entries in the scatterlist **Return** A pointer to an initialized scatterlist or ``NULL`` upon failure.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj¨}h]”hŒ Parameters”…”�”}”(hjª}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj¦}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M˜hj¢}ubjU)�”}”(hhh]”(jZ)�”}”(hŒA``unsigned long long length`` Length in bytes of the scatterlist ”h]”(j`)�”}”(hŒ``unsigned long long length``”h]”jæ)�”}”(hjÇ}h]”hŒunsigned long long length”…”�”}”(hjÉ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÅ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M•hjÁ}ubjz)�”}”(hhh]”hì)�”}”(hŒ"Length in bytes of the scatterlist”h]”hŒ"Length in bytes of the scatterlist”…”�”}”(hjà}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÜ}h´M•hjÝ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÁ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÜ}h´M•hj¾}ubjZ)�”}”(hŒ&``gfp_t gfp`` Memory allocation flags ”h]”(j`)�”}”(hŒ ``gfp_t gfp``”h]”jæ)�”}”(hj~h]”hŒ gfp_t gfp”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjþ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M–hjú}ubjz)�”}”(hhh]”hì)�”}”(hŒMemory allocation flags”h]”hŒMemory allocation flags”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j~h´M–hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjú}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j~h´M–hj¾}ubjZ)�”}”(hŒD``unsigned int *nent_p`` [out] Number of entries in the scatterlist ”h]”(j`)�”}”(hŒ``unsigned int *nent_p``”h]”jæ)�”}”(hj9~h]”hŒunsigned int *nent_p”…”�”}”(hj;~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj7~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M—hj3~ubjz)�”}”(hhh]”hì)�”}”(hŒ*[out] Number of entries in the scatterlist”h]”hŒ*[out] Number of entries in the scatterlist”…”�”}”(hjR~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jN~h´M—hjO~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj3~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jN~h´M—hj¾}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj¢}ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjt~h]”hŒReturn”…”�”}”(hjv~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjr~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M™hj¢}ubhì)�”}”(hŒAA pointer to an initialized scatterlist or ``NULL`` upon failure.”h]”(hŒ+A pointer to an initialized scatterlist or ”…”�”}”(hjŠ~h²hh³Nh´Nubjæ)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj’~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjŠ~ubhŒ upon failure.”…”�”}”(hjŠ~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M™hj¢}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsgl_free_n_order (C function)”Œc.sgl_free_n_order”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒEvoid sgl_free_n_order (struct scatterlist *sgl, int nents, int order)”h]”j{)�”}”(hŒDvoid sgl_free_n_order(struct scatterlist *sgl, int nents, int order)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjË~h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÇ~h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M£ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ~h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÇ~h²hh³jÙ~h´M£ubjó)�”}”(hŒsgl_free_n_order”h]”j§)�”}”(hŒsgl_free_n_order”h]”hŒsgl_free_n_order”…”�”}”(hjì~h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjè~ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÇ~h²hh³jÙ~h´M£ubj)�”}”(hŒ/(struct scatterlist *sgl, int nents, int order)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j(Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjî~sbŒc.sgl_free_n_order”†”asbuh1hhjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒ int nents”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjvubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjvubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubj)�”}”(hŒ int order”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj«ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj«ubj§)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÇ~h²hh³jÙ~h´M£ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÃ~h²hh³jÙ~h´M£ubah}”(h]”j¾~ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÙ~h´M£hjÀ~h²hubj)�”}”(hhh]”hì)�”}”(hŒ free a scatterlist and its pages”h]”hŒ free a scatterlist and its pages”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M£hjòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀ~h²hh³jÙ~h´M£ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j €j0j €j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXÜ**Parameters** ``struct scatterlist *sgl`` Scatterlist with one or more elements ``int nents`` Maximum number of elements to free ``int order`` Second argument for __free_pages() **Notes** - If several scatterlists have been chained and each chain element is freed separately then it's essential to set nents correctly to avoid that a page would get freed twice. - All pages in a chained scatterlist can be freed at once by setting **nents** to a high number.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj€h]”hŒ Parameters”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M§hj€ubjU)�”}”(hhh]”(jZ)�”}”(hŒB``struct scatterlist *sgl`` Scatterlist with one or more elements ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj6€h]”hŒstruct scatterlist *sgl”…”�”}”(hj8€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj4€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¤hj0€ubjz)�”}”(hhh]”hì)�”}”(hŒ%Scatterlist with one or more elements”h]”hŒ%Scatterlist with one or more elements”…”�”}”(hjO€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jK€h´M¤hjL€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj0€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jK€h´M¤hj-€ubjZ)�”}”(hŒ1``int nents`` Maximum number of elements to free ”h]”(j`)�”}”(hŒ ``int nents``”h]”jæ)�”}”(hjo€h]”hŒ int nents”…”�”}”(hjq€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjm€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¥hji€ubjz)�”}”(hhh]”hì)�”}”(hŒ"Maximum number of elements to free”h]”hŒ"Maximum number of elements to free”…”�”}”(hjˆ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j„€h´M¥hj…€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhji€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j„€h´M¥hj-€ubjZ)�”}”(hŒ1``int order`` Second argument for __free_pages() ”h]”(j`)�”}”(hŒ ``int order``”h]”jæ)�”}”(hj¨€h]”hŒ int order”…”�”}”(hjª€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¦€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¦hj¢€ubjz)�”}”(hhh]”hì)�”}”(hŒ"Second argument for __free_pages()”h]”hŒ"Second argument for __free_pages()”…”�”}”(hjÁ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j½€h´M¦hj¾€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¢€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j½€h´M¦hj-€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj€ubhì)�”}”(hŒ **Notes**”h]”j?)�”}”(hjã€h]”hŒNotes”…”�”}”(hjå€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjá€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¨hj€ubj6)�”}”(hhh]”(j;)�”}”(hŒ«If several scatterlists have been chained and each chain element is freed separately then it's essential to set nents correctly to avoid that a page would get freed twice.”h]”hì)�”}”(hŒ«If several scatterlists have been chained and each chain element is freed separately then it's essential to set nents correctly to avoid that a page would get freed twice.”h]”hŒ­If several scatterlists have been chained and each chain element is freed separately then it’s essential to set nents correctly to avoid that a page would get freed twice.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¨hjü€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjù€ubj;)�”}”(hŒ^All pages in a chained scatterlist can be freed at once by setting **nents** to a high number.”h]”hì)�”}”(hŒ^All pages in a chained scatterlist can be freed at once by setting **nents** to a high number.”h]”(hŒCAll pages in a chained scatterlist can be freed at once by setting ”…”�”}”(hj�h²hh³Nh´Nubj?)�”}”(hŒ **nents**”h]”hŒnents”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�ubhŒ to a high number.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M«hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjù€ubeh}”(h]”h ]”h"]”h$]”h&]”jœj�uh1j5h³j�h´M¨hj€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsgl_free_order (C function)”Œc.sgl_free_order”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ8void sgl_free_order (struct scatterlist *sgl, int order)”h]”j{)�”}”(hŒ7void sgl_free_order(struct scatterlist *sgl, int order)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjb�h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÁubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjb�h²hh³jt�h´MÁubjó)�”}”(hŒsgl_free_order”h]”j§)�”}”(hŒsgl_free_order”h]”hŒsgl_free_order”…”�”}”(hj‡�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjƒ�ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjb�h²hh³jt�h´MÁubj)�”}”(hŒ$(struct scatterlist *sgl, int order)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ�ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjÁ�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¾�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÃ�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj‰�sbŒc.sgl_free_order”†”asbuh1hhjŸ�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjŸ�ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjü�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŸ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj›�ubj)�”}”(hŒ int order”h]”(j6)�”}”(hŒint”h]”hŒint”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj‚ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#‚h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj‚ubj§)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj1‚h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj›�ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjb�h²hh³jt�h´MÁubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj^�h²hh³jt�h´MÁubah}”(h]”jY�ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jt�h´MÁhj[�h²hubj)�”}”(hhh]”hì)�”}”(hŒ free a scatterlist and its pages”h]”hŒ free a scatterlist and its pages”…”�”}”(hj[‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÁhjX‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj[�h²hh³jt�h´MÁubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/js‚j0js‚j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒ‡**Parameters** ``struct scatterlist *sgl`` Scatterlist with one or more elements ``int order`` Second argument for __free_pages()”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj}‚h]”hŒ Parameters”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj{‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÅhjw‚ubjU)�”}”(hhh]”(jZ)�”}”(hŒB``struct scatterlist *sgl`` Scatterlist with one or more elements ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjœ‚h]”hŒstruct scatterlist *sgl”…”�”}”(hjž‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjš‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÂhj–‚ubjz)�”}”(hhh]”hì)�”}”(hŒ%Scatterlist with one or more elements”h]”hŒ%Scatterlist with one or more elements”…”�”}”(hjµ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j±‚h´MÂhj²‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj–‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j±‚h´MÂhj“‚ubjZ)�”}”(hŒ0``int order`` Second argument for __free_pages()”h]”(j`)�”}”(hŒ ``int order``”h]”jæ)�”}”(hjÕ‚h]”hŒ int order”…”�”}”(hjׂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÓ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÄhjÏ‚ubjz)�”}”(hhh]”hì)�”}”(hŒ"Second argument for __free_pages()”h]”hŒ"Second argument for __free_pages()”…”�”}”(hjî‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÃhjë‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÏ‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jê‚h´MÄhj“‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjw‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsgl_free (C function)”Œ c.sgl_free”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ'void sgl_free (struct scatterlist *sgl)”h]”j{)�”}”(hŒ&void sgl_free(struct scatterlist *sgl)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj/ƒh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj+ƒh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÌubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>ƒh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj+ƒh²hh³j=ƒh´MÌubjó)�”}”(hŒsgl_free”h]”j§)�”}”(hŒsgl_free”h]”hŒsgl_free”…”�”}”(hjPƒh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjLƒubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj+ƒh²hh³j=ƒh´MÌubj)�”}”(hŒ(struct scatterlist *sgl)”h]”j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjlƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhƒubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyƒh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjhƒubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjŠƒh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‡ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jŒƒŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjRƒsbŒ c.sgl_free”†”asbuh1hhjhƒubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªƒh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjhƒubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¸ƒh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjhƒubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjŃh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjhƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjdƒubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj+ƒh²hh³j=ƒh´MÌubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj'ƒh²hh³j=ƒh´MÌubah}”(h]”j"ƒah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j=ƒh´MÌhj$ƒh²hubj)�”}”(hhh]”hì)�”}”(hŒ free a scatterlist and its pages”h]”hŒ free a scatterlist and its pages”…”�”}”(hjïƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÌhjìƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj$ƒh²hh³j=ƒh´MÌubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j„j0j„j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒS**Parameters** ``struct scatterlist *sgl`` Scatterlist with one or more elements”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj„h]”hŒ Parameters”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÐhj „ubjU)�”}”(hhh]”jZ)�”}”(hŒA``struct scatterlist *sgl`` Scatterlist with one or more elements”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj0„h]”hŒstruct scatterlist *sgl”…”�”}”(hj2„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj.„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÒhj*„ubjz)�”}”(hhh]”hì)�”}”(hŒ%Scatterlist with one or more elements”h]”hŒ%Scatterlist with one or more elements”…”�”}”(hjI„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÍhjF„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj*„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jE„h´MÒhj'„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj „ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_miter_start (C function)”Œc.sg_miter_start”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒtvoid sg_miter_start (struct sg_mapping_iter *miter, struct scatterlist *sgl, unsigned int nents, unsigned int flags)”h]”j{)�”}”(hŒsvoid sg_miter_start(struct sg_mapping_iter *miter, struct scatterlist *sgl, unsigned int nents, unsigned int flags)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠ„h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj†„h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™„h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj†„h²hh³j˜„h´Mubjó)�”}”(hŒsg_miter_start”h]”j§)�”}”(hŒsg_miter_start”h]”hŒsg_miter_start”…”�”}”(hj«„h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj§„ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj†„h²hh³j˜„h´Mubj)�”}”(hŒ`(struct sg_mapping_iter *miter, struct scatterlist *sgl, unsigned int nents, unsigned int flags)”h]”(j)�”}”(hŒstruct sg_mapping_iter *miter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÇ„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ„h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÄubh)�”}”(hhh]”j§)�”}”(hŒsg_mapping_iter”h]”hŒsg_mapping_iter”…”�”}”(hjå„h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjâ„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j焌modname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj­„sbŒc.sg_miter_start”†”asbuh1hhjÄubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÄubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjÄubj§)�”}”(hŒmiter”h]”hŒmiter”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj¿„ubj)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj9…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF…h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj5…ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjW…h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjT…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jY…Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j…Œc.sg_miter_start”†”asbuh1hhj5…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju…h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj5…ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjƒ…h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj5…ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj5…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj¿„ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj©…h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·…h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥…ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÅ…h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ…h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥…ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjá…h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj¿„ubj)�”}”(hŒunsigned int flags”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjú…h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjö…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjö…ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjö…ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$†h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjö…ubj§)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj2†h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjö…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj¿„ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj†„h²hh³j˜„h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj‚„h²hh³j˜„h´Mubah}”(h]”j}„ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j˜„h´Mhj„h²hubj)�”}”(hhh]”hì)�”}”(hŒ&start mapping iteration over a sg list”h]”hŒ&start mapping iteration over a sg list”…”�”}”(hj\†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MhjY†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj„h²hh³j˜„h´Mubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jt†j0jt†j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX4**Parameters** ``struct sg_mapping_iter *miter`` sg mapping iter to be started ``struct scatterlist *sgl`` sg list to iterate over ``unsigned int nents`` number of sg entries ``unsigned int flags`` sg iterator flags **Description** Starts mapping iterator **miter**. **Context** Don't care.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj~†h]”hŒ Parameters”…”�”}”(hj€†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj|†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjx†ubjU)�”}”(hhh]”(jZ)�”}”(hŒ@``struct sg_mapping_iter *miter`` sg mapping iter to be started ”h]”(j`)�”}”(hŒ!``struct sg_mapping_iter *miter``”h]”jæ)�”}”(hj�†h]”hŒstruct sg_mapping_iter *miter”…”�”}”(hjŸ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj›†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj—†ubjz)�”}”(hhh]”hì)�”}”(hŒsg mapping iter to be started”h]”hŒsg mapping iter to be started”…”�”}”(hj¶†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j²†h´Mhj³†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj—†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j²†h´Mhj”†ubjZ)�”}”(hŒ4``struct scatterlist *sgl`` sg list to iterate over ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjÖ†h]”hŒstruct scatterlist *sgl”…”�”}”(hj؆h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÔ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MhjІubjz)�”}”(hhh]”hì)�”}”(hŒsg list to iterate over”h]”hŒsg list to iterate over”…”�”}”(hjï†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jë†h´Mhjì†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjІubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jë†h´Mhj”†ubjZ)�”}”(hŒ,``unsigned int nents`` number of sg entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj‡h]”hŒunsigned int nents”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj ‡ubjz)�”}”(hhh]”hì)�”}”(hŒnumber of sg entries”h]”hŒnumber of sg entries”…”�”}”(hj(‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j$‡h´Mhj%‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj ‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j$‡h´Mhj”†ubjZ)�”}”(hŒ)``unsigned int flags`` sg iterator flags ”h]”(j`)�”}”(hŒ``unsigned int flags``”h]”jæ)�”}”(hjH‡h]”hŒunsigned int flags”…”�”}”(hjJ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjF‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MhjB‡ubjz)�”}”(hhh]”hì)�”}”(hŒsg iterator flags”h]”hŒsg iterator flags”…”�”}”(hja‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j]‡h´Mhj^‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjB‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j]‡h´Mhj”†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjx†ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjƒ‡h]”hŒ Description”…”�”}”(hj…‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjx†ubjt$)�”}”(hŒ#Starts mapping iterator **miter**. ”h]”hì)�”}”(hŒ"Starts mapping iterator **miter**.”h]”(hŒStarts mapping iterator ”…”�”}”(hj�‡h²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hj¥‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�‡ubhŒ.”…”�”}”(hj�‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj™‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j½‡h´Mhjx†ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hjƇh]”hŒContext”…”�”}”(hjȇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjćubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjx†ubhì)�”}”(hŒ Don't care.”h]”hŒ Don’t care.”…”�”}”(hj܇h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjx†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_miter_skip (C function)”Œc.sg_miter_skip”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ@bool sg_miter_skip (struct sg_mapping_iter *miter, off_t offset)”h]”j{)�”}”(hŒ?bool sg_miter_skip(struct sg_mapping_iter *miter, off_t offset)”h]”(j6)�”}”(hjå5h]”hŒbool”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjˆh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MEubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjˆh²hh³jˆh´MEubjó)�”}”(hŒ sg_miter_skip”h]”j§)�”}”(hŒ sg_miter_skip”h]”hŒ sg_miter_skip”…”�”}”(hj+ˆh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj'ˆubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjˆh²hh³jˆh´MEubj)�”}”(hŒ-(struct sg_mapping_iter *miter, off_t offset)”h]”(j)�”}”(hŒstruct sg_mapping_iter *miter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjGˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCˆubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTˆh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjCˆubh)�”}”(hhh]”j§)�”}”(hŒsg_mapping_iter”h]”hŒsg_mapping_iter”…”�”}”(hjeˆh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjbˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jgˆŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj-ˆsbŒc.sg_miter_skip”†”asbuh1hhjCˆubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…ˆh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjCˆubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj“ˆh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjCˆubj§)�”}”(hŒmiter”h]”hŒmiter”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjCˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj?ˆubj)�”}”(hŒ off_t offset”h]”(h)�”}”(hhh]”j§)�”}”(hŒoff_t”h]”hŒoff_t”…”�”}”(hj¼ˆh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¹ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¾ˆŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j�ˆŒc.sg_miter_skip”†”asbuh1hhjµˆubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚˆh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjµˆubj§)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjèˆh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjµˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj?ˆubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjˆh²hh³jˆh´MEubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjˆh²hh³jˆh´MEubah}”(h]”jþ‡ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jˆh´MEhjˆh²hubj)�”}”(hhh]”hì)�”}”(hŒreposition mapping iterator”h]”hŒreposition mapping iterator”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MEhj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjˆh²hh³jˆh´MEubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j*‰j0j*‰j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXË**Parameters** ``struct sg_mapping_iter *miter`` sg mapping iter to be skipped ``off_t offset`` number of bytes to plus the current location **Description** Sets the offset of **miter** to its current location plus **offset** bytes. If mapping iterator **miter** has been proceeded by sg_miter_next(), this stops **miter**. **Context** Don't care. **Return** true if **miter** contains the valid mapping. false if end of sg list is reached.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj4‰h]”hŒ Parameters”…”�”}”(hj6‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj2‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MIhj.‰ubjU)�”}”(hhh]”(jZ)�”}”(hŒ@``struct sg_mapping_iter *miter`` sg mapping iter to be skipped ”h]”(j`)�”}”(hŒ!``struct sg_mapping_iter *miter``”h]”jæ)�”}”(hjS‰h]”hŒstruct sg_mapping_iter *miter”…”�”}”(hjU‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjQ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MFhjM‰ubjz)�”}”(hhh]”hì)�”}”(hŒsg mapping iter to be skipped”h]”hŒsg mapping iter to be skipped”…”�”}”(hjl‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jh‰h´MFhji‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjM‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jh‰h´MFhjJ‰ubjZ)�”}”(hŒ>``off_t offset`` number of bytes to plus the current location ”h]”(j`)�”}”(hŒ``off_t offset``”h]”jæ)�”}”(hjŒ‰h]”hŒ off_t offset”…”�”}”(hjމh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjЉubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MGhj†‰ubjz)�”}”(hhh]”hì)�”}”(hŒ,number of bytes to plus the current location”h]”hŒ,number of bytes to plus the current location”…”�”}”(hj¥‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¡‰h´MGhj¢‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj†‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¡‰h´MGhjJ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj.‰ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjljh]”hŒ Description”…”�”}”(hjɉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjʼnubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MIhj.‰ubjt$)�”}”(hŒ§Sets the offset of **miter** to its current location plus **offset** bytes. If mapping iterator **miter** has been proceeded by sg_miter_next(), this stops **miter**. ”h]”hì)�”}”(hŒ¦Sets the offset of **miter** to its current location plus **offset** bytes. If mapping iterator **miter** has been proceeded by sg_miter_next(), this stops **miter**.”h]”(hŒSets the offset of ”…”�”}”(hjá‰h²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hjé‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjá‰ubhŒ to its current location plus ”…”�”}”(hjá‰h²hh³Nh´Nubj?)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjû‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjá‰ubhŒ bytes. If mapping iterator ”…”�”}”(hjá‰h²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjá‰ubhŒ3 has been proceeded by sg_miter_next(), this stops ”…”�”}”(hjá‰h²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjá‰ubhŒ.”…”�”}”(hjá‰h²hh³Nh´Nubeh}”(h]”h ]”•h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MIhj݉ubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j7Šh´MIhj.‰ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hj@Šh]”hŒContext”…”�”}”(hjBŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj>Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MMhj.‰ubhì)�”}”(hŒ Don't care.”h]”hŒ Don’t care.”…”�”}”(hjVŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MNhj.‰ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hjgŠh]”hŒReturn”…”�”}”(hjiŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjeŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MPhj.‰ubhì)�”}”(hŒRtrue if **miter** contains the valid mapping. false if end of sg list is reached.”h]”(hŒtrue if ”…”�”}”(hj}Šh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hj…Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj}ŠubhŒA contains the valid mapping. false if end of sg list is reached.”…”�”}”(hj}Šh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MQhj.‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_miter_next (C function)”Œc.sg_miter_next”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ2bool sg_miter_next (struct sg_mapping_iter *miter)”h]”j{)�”}”(hŒ1bool sg_miter_next(struct sg_mapping_iter *miter)”h]”(j6)�”}”(hjå5h]”hŒbool”…”�”}”(hj¾Šh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjºŠh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mjubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌŠh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjºŠh²hh³jËŠh´Mjubjó)�”}”(hŒ sg_miter_next”h]”j§)�”}”(hŒ sg_miter_next”h]”hŒ sg_miter_next”…”�”}”(hjÞŠh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÚŠubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjºŠh²hh³jËŠh´Mjubj)�”}”(hŒ(struct sg_mapping_iter *miter)”h]”j)�”}”(hŒstruct sg_mapping_iter *miter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjúŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöŠubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöŠubh)�”}”(hhh]”j§)�”}”(hŒsg_mapping_iter”h]”hŒsg_mapping_iter”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j‹Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀjàŠsbŒc.sg_miter_next”†”asbuh1hhjöŠubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8‹h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjöŠubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjF‹h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjöŠubj§)�”}”(hŒmiter”h]”hŒmiter”…”�”}”(hjS‹h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjöŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjòŠubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjºŠh²hh³jËŠh´Mjubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj¶Šh²hh³jËŠh´Mjubah}”(h]”j±Šah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jËŠh´Mjhj³Šh²hubj)�”}”(hhh]”hì)�”}”(hŒ,proceed mapping iterator to the next mapping”h]”hŒ,proceed mapping iterator to the next mapping”…”�”}”(hj}‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mjhjz‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj³Šh²hh³jËŠh´Mjubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j•‹j0j•‹j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hXÕ**Parameters** ``struct sg_mapping_iter *miter`` sg mapping iter to proceed **Description** Proceeds **miter** to the next mapping. **miter** should have been started using sg_miter_start(). On successful return, **miter->page**, **miter->addr** and **miter->length** point to the current mapping. **Context** May sleep if !SG_MITER_ATOMIC && !SG_MITER_LOCAL. **Return** true if **miter** contains the next mapping. false if end of sg list is reached.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjŸ‹h]”hŒ Parameters”…”�”}”(hj¡‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj�‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mnhj™‹ubjU)�”}”(hhh]”jZ)�”}”(hŒ=``struct sg_mapping_iter *miter`` sg mapping iter to proceed ”h]”(j`)�”}”(hŒ!``struct sg_mapping_iter *miter``”h]”jæ)�”}”(hj¾‹h]”hŒstruct sg_mapping_iter *miter”…”�”}”(hjÀ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¼‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mkhj¸‹ubjz)�”}”(hhh]”hì)�”}”(hŒsg mapping iter to proceed”h]”hŒsg mapping iter to proceed”…”�”}”(hj׋h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÓ‹h´MkhjÔ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¸‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÓ‹h´Mkhjµ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThj™‹ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjù‹h]”hŒ Description”…”�”}”(hjû‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj÷‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mmhj™‹ubjt$)�”}”(hŒÐProceeds **miter** to the next mapping. **miter** should have been started using sg_miter_start(). On successful return, **miter->page**, **miter->addr** and **miter->length** point to the current mapping. ”h]”hì)�”}”(hŒÏProceeds **miter** to the next mapping. **miter** should have been started using sg_miter_start(). On successful return, **miter->page**, **miter->addr** and **miter->length** point to the current mapping.”h]”(hŒ Proceeds ”…”�”}”(hjŒh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒubhŒ to the next mapping. ”…”�”}”(hjŒh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hj-Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒubhŒI should have been started using sg_miter_start(). On successful return, ”…”�”}”(hjŒh²hh³Nh´Nubj?)�”}”(hŒ**miter->page**”h]”hŒ miter->page”…”�”}”(hj?Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒubhŒ, ”…”�”}”(hjŒh²hh³Nh´Nubj?)�”}”(hŒ**miter->addr**”h]”hŒ miter->addr”…”�”}”(hjQŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒubhŒ and ”…”�”}”(hjŒh²hh³Nh´Nubj?)�”}”(hŒ**miter->length**”h]”hŒ miter->length”…”�”}”(hjcŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒubhŒ point to the current mapping.”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MmhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³j{Œh´Mmhj™‹ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hj„Œh]”hŒContext”…”�”}”(hj†Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj‚Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mqhj™‹ubhì)�”}”(hŒ1May sleep if !SG_MITER_ATOMIC && !SG_MITER_LOCAL.”h]”hŒ1May sleep if !SG_MITER_ATOMIC && !SG_MITER_LOCAL.”…”�”}”(hjšŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mrhj™‹ubhì)�”}”(hŒ **Return**”h]”j?)�”}”(hj«Œh]”hŒReturn”…”�”}”(hj­Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj©Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mthj™‹ubhì)�”}”(hŒQtrue if **miter** contains the next mapping. false if end of sg list is reached.”h]”(hŒtrue if ”…”�”}”(hjÁŒh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hjÉŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÁŒubhŒ@ contains the next mapping. false if end of sg list is reached.”…”�”}”(hjÁŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Muhj™‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_miter_stop (C function)”Œc.sg_miter_stop”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ2void sg_miter_stop (struct sg_mapping_iter *miter)”h]”j{)�”}”(hŒ1void sg_miter_stop(struct sg_mapping_iter *miter)”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjþŒh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjþŒh²hh³j�h´M“ubjó)�”}”(hŒ sg_miter_stop”h]”j§)�”}”(hŒ sg_miter_stop”h]”hŒ sg_miter_stop”…”�”}”(hj#�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjþŒh²hh³j�h´M“ubj)�”}”(hŒ(struct sg_mapping_iter *miter)”h]”j)�”}”(hŒstruct sg_mapping_iter *miter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj?�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj;�ubh)�”}”(hhh]”j§)�”}”(hŒsg_mapping_iter”h]”hŒsg_mapping_iter”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjZ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j_�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀj%�sbŒc.sg_miter_stop”†”asbuh1hhj;�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj;�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj;�ubj§)�”}”(hŒmiter”h]”hŒmiter”…”�”}”(hj˜�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj;�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj7�ubah}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjþŒh²hh³j�h´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjúŒh²hh³j�h´M“ubah}”(h]”jõŒah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j�h´M“hj÷Œh²hubj)�”}”(hhh]”hì)�”}”(hŒstop mapping iteration”h]”hŒstop mapping iteration”…”�”}”(hjÂ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M“hj¿�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj÷Œh²hh³j�h´M“ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÚ�j0jÚ�j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX**Parameters** ``struct sg_mapping_iter *miter`` sg mapping iter to be stopped **Description** Stops mapping iterator **miter**. **miter** should have been started using sg_miter_start(). A stopped iteration can be resumed by calling sg_miter_next() on it. This is useful when resources (kmap) need to be released during iteration. **Context** Don't care otherwise.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjä�h]”hŒ Parameters”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjâ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M—hjÞ�ubjU)�”}”(hhh]”jZ)�”}”(hŒ@``struct sg_mapping_iter *miter`` sg mapping iter to be stopped ”h]”(j`)�”}”(hŒ!``struct sg_mapping_iter *miter``”h]”jæ)�”}”(hjŽh]”hŒstruct sg_mapping_iter *miter”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M”hjý�ubjz)�”}”(hhh]”hì)�”}”(hŒsg mapping iter to be stopped”h]”hŒsg mapping iter to be stopped”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŽh´M”hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjý�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jŽh´M”hjú�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jThjÞ�ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj>Žh]”hŒ Description”…”�”}”(hj@Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj<Žubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M–hjÞ�ubjt$)�”}”(hŒðStops mapping iterator **miter**. **miter** should have been started using sg_miter_start(). A stopped iteration can be resumed by calling sg_miter_next() on it. This is useful when resources (kmap) need to be released during iteration. ”h]”hì)�”}”(hŒïStops mapping iterator **miter**. **miter** should have been started using sg_miter_start(). A stopped iteration can be resumed by calling sg_miter_next() on it. This is useful when resources (kmap) need to be released during iteration.”h]”(hŒStops mapping iterator ”…”�”}”(hjXŽh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hj`Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjXŽubhŒ. ”…”�”}”(hjXŽh²hh³Nh´Nubj?)�”}”(hŒ **miter**”h]”hŒmiter”…”�”}”(hjrŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjXŽubhŒÃ should have been started using sg_miter_start(). A stopped iteration can be resumed by calling sg_miter_next() on it. This is useful when resources (kmap) need to be released during iteration.”…”�”}”(hjXŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M–hjTŽubah}”(h]”h ]”h"]”h$]”h&]”uh1js$h³jŠŽh´M–hjÞ�ubhì)�”}”(hŒ **Context**”h]”j?)�”}”(hj“Žh]”hŒContext”…”�”}”(hj•Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj‘Žubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M›hjÞ�ubhì)�”}”(hŒDon't care otherwise.”h]”hŒDon’t care otherwise.”…”�”}”(hj©Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MœhjÞ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_copy_buffer (C function)”Œc.sg_copy_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒysize_t sg_copy_buffer (struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip, bool to_buffer)”h]”j{)�”}”(hŒxsize_t sg_copy_buffer(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip, bool to_buffer)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÛŽh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjØŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jÝŽŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_copy_buffer”sbŒc.sg_copy_buffer”†”asbuh1hhjÔŽh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¼ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýŽh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÔŽh²hh³jüŽh´M¼ubjó)�”}”(hŒsg_copy_buffer”h]”j§)�”}”(hjùŽh]”hŒsg_copy_buffer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj �ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÔŽh²hh³jüŽh´M¼ubj)�”}”(hŒc(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip, bool to_buffer)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj&�ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjH�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjE�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jJ�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j÷ŽŒc.sg_copy_buffer”†”asbuh1hhj&�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj&�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj&�ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj&�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjš�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj–�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj–�ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj–�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj–�ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj–�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubj)�”}”(hŒ void *buf”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjë�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjç�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjç�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjç�ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjç�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj-�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j2�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j÷ŽŒc.sg_copy_buffer”†”asbuh1hhj)�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj)�ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hj\�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj)�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubj)�”}”(hŒ off_t skip”h]”(h)�”}”(hhh]”j§)�”}”(hŒoff_t”h]”hŒoff_t”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hju�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jz�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j÷ŽŒc.sg_copy_buffer”†”asbuh1hhjq�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjq�ubj§)�”}”(hŒskip”h]”hŒskip”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjq�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubj)�”}”(hŒbool to_buffer”h]”(j6)�”}”(hjå5h]”hŒbool”…”�”}”(hj½�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¹�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¹�ubj§)�”}”(hŒ to_buffer”h]”hŒ to_buffer”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¹�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj"�ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÔŽh²hh³jüŽh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÐŽh²hh³jüŽh´M¼ubah}”(h]”jËŽah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jüŽh´M¼hjÍŽh²hubj)�”}”(hhh]”hì)�”}”(hŒ0Copy data between a linear buffer and an SG list”h]”hŒ0Copy data between a linear buffer and an SG list”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¼hjÿ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÍŽh²hh³jüŽh´M¼ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j‘j0j‘j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX£**Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``void *buf`` Where to copy from ``size_t buflen`` The number of bytes to copy ``off_t skip`` Number of bytes to skip before copying ``bool to_buffer`` transfer direction (true == from an sg list to a buffer, false == from a buffer to an sg list) **Description** Returns the number of copied bytes.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hj$‘h]”hŒ Parameters”…”�”}”(hj&‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj"‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÀhj‘ubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjC‘h]”hŒstruct scatterlist *sgl”…”�”}”(hjE‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjA‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M½hj=‘ubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj\‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jX‘h´M½hjY‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj=‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jX‘h´M½hj:‘ubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj|‘h]”hŒunsigned int nents”…”�”}”(hj~‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjz‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¾hjv‘ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hj•‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‘‘h´M¾hj’‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjv‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j‘‘h´M¾hj:‘ubjZ)�”}”(hŒ!``void *buf`` Where to copy from ”h]”(j`)�”}”(hŒ ``void *buf``”h]”jæ)�”}”(hjµ‘h]”hŒ void *buf”…”�”}”(hj·‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj³‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M¿hj¯‘ubjz)�”}”(hhh]”hì)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hjΑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÊ‘h´M¿hjË‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¯‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÊ‘h´M¿hj:‘ubjZ)�”}”(hŒ.``size_t buflen`` The number of bytes to copy ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hjî‘h]”hŒ size_t buflen”…”�”}”(hjð‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjì‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÀhjè‘ubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j’h´MÀhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjè‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j’h´MÀhj:‘ubjZ)�”}”(hŒ6``off_t skip`` Number of bytes to skip before copying ”h]”(j`)�”}”(hŒ``off_t skip``”h]”jæ)�”}”(hj'’h]”hŒ off_t skip”…”�”}”(hj)’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj%’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÁhj!’ubjz)�”}”(hhh]”hì)�”}”(hŒ&Number of bytes to skip before copying”h]”hŒ&Number of bytes to skip before copying”…”�”}”(hj@’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j<’h´MÁhj=’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj!’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j<’h´MÁhj:‘ubjZ)�”}”(hŒr``bool to_buffer`` transfer direction (true == from an sg list to a buffer, false == from a buffer to an sg list) ”h]”(j`)�”}”(hŒ``bool to_buffer``”h]”jæ)�”}”(hj`’h]”hŒbool to_buffer”…”�”}”(hjb’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj^’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÃhjZ’ubjz)�”}”(hhh]”hì)�”}”(hŒ^transfer direction (true == from an sg list to a buffer, false == from a buffer to an sg list)”h]”hŒ^transfer direction (true == from an sg list to a buffer, false == from a buffer to an sg list)”…”�”}”(hjy’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÂhjv’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjZ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³ju’h´MÃhj:‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj‘ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjœ’h]”hŒ Description”…”�”}”(hjž’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjš’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÅhj‘ubhì)�”}”(hŒ#Returns the number of copied bytes.”h]”hŒ#Returns the number of copied bytes.”…”�”}”(hj²’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MÄhj‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ sg_copy_from_buffer (C function)”Œc.sg_copy_from_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒhsize_t sg_copy_from_buffer (struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen)”h]”j{)�”}”(hŒgsize_t sg_copy_from_buffer(struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjä’h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjá’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jæ’Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_copy_from_buffer”sbŒc.sg_copy_from_buffer”†”asbuh1hhjÝ’h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Míubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÝ’h²hh³j“h´Míubjó)�”}”(hŒsg_copy_from_buffer”h]”j§)�”}”(hj“h]”hŒsg_copy_from_buffer”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj“ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjÝ’h²hh³j“h´Míubj)�”}”(hŒM(struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj3“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@“h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj/“ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjQ“h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjN“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jS“Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j“Œc.sg_copy_from_buffer”†”asbuh1hhj/“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo“h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj/“ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj}“h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj/“ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjŠ“h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj/“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj+“ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj£“h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjŸ“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±“h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ“ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj¿“h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjŸ“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ“h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjŸ“ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjÛ“h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjŸ“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj+“ubj)�”}”(hŒconst void *buf”h]”(j�)�”}”(hjh]”hŒconst”…”�”}”(hjô“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjð“ubj6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjð“ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjð“ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj+”h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjð“ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj8”h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjð“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj+“ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjT”h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjQ”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jV”Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j“Œc.sg_copy_from_buffer”†”asbuh1hhjM”ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr”h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjM”ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hj€”h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjM”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj+“ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjÝ’h²hh³j“h´Míubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÙ’h²hh³j“h´Míubah}”(h]”jÔ’ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j“h´MíhjÖ’h²hubj)�”}”(hhh]”hì)�”}”(hŒ'Copy from a linear buffer to an SG list”h]”hŒ'Copy from a linear buffer to an SG list”…”�”}”(hjª”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Míhj§”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖ’h²hh³j“h´Míubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/j”j0j”j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒù**Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``const void *buf`` Where to copy from ``size_t buflen`` The number of bytes to copy **Description** Returns the number of copied bytes.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjÌ”h]”hŒ Parameters”…”�”}”(hjΔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÊ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MñhjÆ”ubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjë”h]”hŒstruct scatterlist *sgl”…”�”}”(hjí”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjé”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mîhjå”ubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j•h´Mîhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjå”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j•h´Mîhjâ”ubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj$•h]”hŒunsigned int nents”…”�”}”(hj&•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj"•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mïhj•ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hj=•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j9•h´Mïhj:•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j9•h´Mïhjâ”ubjZ)�”}”(hŒ'``const void *buf`` Where to copy from ”h]”(j`)�”}”(hŒ``const void *buf``”h]”jæ)�”}”(hj]•h]”hŒconst void *buf”…”�”}”(hj_•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj[•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MðhjW•ubjz)�”}”(hhh]”hì)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hjv•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jr•h´Mðhjs•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjW•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jr•h´Mðhjâ”ubjZ)�”}”(hŒ.``size_t buflen`` The number of bytes to copy ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hj–•h]”hŒ size_t buflen”…”�”}”(hj˜•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj”•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mñhj�•ubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hj¯•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j«•h´Mñhj¬•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj�•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j«•h´Mñhjâ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjÆ”ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjÑ•h]”hŒ Description”…”�”}”(hjÓ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjÏ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MóhjÆ”ubhì)�”}”(hŒ#Returns the number of copied bytes.”h]”hŒ#Returns the number of copied bytes.”…”�”}”(hjç•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MòhjÆ”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_copy_to_buffer (C function)”Œc.sg_copy_to_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ`size_t sg_copy_to_buffer (struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen)”h]”j{)�”}”(hŒ_size_t sg_copy_to_buffer(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j–Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_copy_to_buffer”sbŒc.sg_copy_to_buffer”†”asbuh1hhj–h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mþubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;–h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj–h²hh³j:–h´Mþubjó)�”}”(hŒsg_copy_to_buffer”h]”j§)�”}”(hj7–h]”hŒsg_copy_to_buffer”…”�”}”(hjM–h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjI–ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj–h²hh³j:–h´Mþubj)�”}”(hŒG(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjh–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjd–ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju–h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjd–ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj†–h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjƒ–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jˆ–Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j5–Œc.sg_copy_to_buffer”†”asbuh1hhjd–ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤–h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjd–ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj²–h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjd–ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj¿–h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjd–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj`–ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjØ–h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÔ–ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ–h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÔ–ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjô–h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjÔ–ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÔ–ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÔ–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj`–ubj)�”}”(hŒ void *buf”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj)—h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj%—ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj%—ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjE—h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj%—ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjR—h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj%—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj`–ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjn—h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjk—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jp—Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j5–Œc.sg_copy_to_buffer”†”asbuh1hhjg—ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ—h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjg—ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjš—h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjg—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj`–ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj–h²hh³j:–h´Mþubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj–h²hh³j:–h´Mþubah}”(h]”j –ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j:–h´Mþhj –h²hubj)�”}”(hhh]”hì)�”}”(hŒ'Copy from an SG list to a linear buffer”h]”hŒ'Copy from an SG list to a linear buffer”…”�”}”(hjÄ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MþhjÁ—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj –h²hh³j:–h´Mþubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÜ—j0jÜ—j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hŒñ**Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``void *buf`` Where to copy to ``size_t buflen`` The number of bytes to copy **Description** Returns the number of copied bytes.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjæ—h]”hŒ Parameters”…”�”}”(hjè—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjä—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjà—ubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj˜h]”hŒstruct scatterlist *sgl”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mÿhjÿ—ubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j˜h´Mÿhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjÿ—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j˜h´Mÿhjü—ubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj>˜h]”hŒunsigned int nents”…”�”}”(hj@˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj<˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj8˜ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hjW˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jS˜h´MhjT˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj8˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jS˜h´Mhjü—ubjZ)�”}”(hŒ``void *buf`` Where to copy to ”h]”(j`)�”}”(hŒ ``void *buf``”h]”jæ)�”}”(hjw˜h]”hŒ void *buf”…”�”}”(hjy˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhju˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjq˜ubjz)�”}”(hhh]”hì)�”}”(hŒWhere to copy to”h]”hŒWhere to copy to”…”�”}”(hj�˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŒ˜h´Mhj�˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjq˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jŒ˜h´Mhjü—ubjZ)�”}”(hŒ.``size_t buflen`` The number of bytes to copy ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hj°˜h]”hŒ size_t buflen”…”�”}”(hj²˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj®˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjª˜ubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hjɘh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jŘh´MhjƘubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjª˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jŘh´Mhjü—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjà—ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hjë˜h]”hŒ Description”…”�”}”(hjí˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjé˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjà—ubhì)�”}”(hŒ#Returns the number of copied bytes.”h]”hŒ#Returns the number of copied bytes.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjà—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒ!sg_pcopy_from_buffer (C function)”Œc.sg_pcopy_from_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒusize_t sg_pcopy_from_buffer (struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen, off_t skip)”h]”j{)�”}”(hŒtsize_t sg_pcopy_from_buffer(struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen, off_t skip)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj3™h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj0™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j5™Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_pcopy_from_buffer”sbŒc.sg_pcopy_from_buffer”†”asbuh1hhj,™h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU™h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj,™h²hh³jT™h´Mubjó)�”}”(hŒsg_pcopy_from_buffer”h]”j§)�”}”(hjQ™h]”hŒsg_pcopy_from_buffer”…”�”}”(hjg™h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjc™ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj,™h²hh³jT™h´Mubj)�”}”(hŒY(struct scatterlist *sgl, unsigned int nents, const void *buf, size_t buflen, off_t skip)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj‚™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj~™ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¢™Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jO™Œc.sg_pcopy_from_buffer”†”asbuh1hhj~™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾™h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj~™ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjÌ™h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj~™ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hjÙ™h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj~™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjz™ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjò™h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjî™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjî™ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjî™ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjî™ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj*šh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjî™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjz™ubj)�”}”(hŒconst void *buf”h]”(j�)�”}”(hjh]”hŒconst”…”�”}”(hjCšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?šubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPšh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?šubj6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^šh²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj?šubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlšh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?šubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjzšh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj?šubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj‡šh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj?šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjz™ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj£šh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¥šŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jO™Œc.sg_pcopy_from_buffer”†”asbuh1hhjœšubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁšh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjœšubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjÏšh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjœšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjz™ubj)�”}”(hŒ off_t skip”h]”(h)�”}”(hhh]”j§)�”}”(hŒoff_t”h]”hŒoff_t”…”�”}”(hjëšh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjèšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j회modname”NŒ classname”NjÄjÇ)�”}”jÊ]”jO™Œc.sg_pcopy_from_buffer”†”asbuh1hhjäšubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjäšubj§)�”}”(hŒskip”h]”hŒskip”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjäšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjz™ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj,™h²hh³jT™h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj(™h²hh³jT™h´Mubah}”(h]”j#™ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jT™h´Mhj%™h²hubj)�”}”(hhh]”hì)�”}”(hŒ'Copy from a linear buffer to an SG list”h]”hŒ'Copy from a linear buffer to an SG list”…”�”}”(hjA›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj>›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj%™h²hh³jT™h´Mubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jY›j0jY›j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX2**Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``const void *buf`` Where to copy from ``size_t buflen`` The number of bytes to copy ``off_t skip`` Number of bytes to skip before copying **Description** Returns the number of copied bytes.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjc›h]”hŒ Parameters”…”�”}”(hje›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hja›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj]›ubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hj‚›h]”hŒstruct scatterlist *sgl”…”�”}”(hj„›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj€›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj|›ubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj››h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j—›h´Mhj˜›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj|›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j—›h´Mhjy›ubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj»›h]”hŒunsigned int nents”…”�”}”(hj½›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¹›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjµ›ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hjÔ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jЛh´MhjÑ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjµ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jЛh´Mhjy›ubjZ)�”}”(hŒ'``const void *buf`` Where to copy from ”h]”(j`)�”}”(hŒ``const void *buf``”h]”jæ)�”}”(hjô›h]”hŒconst void *buf”…”�”}”(hjö›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjò›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhjî›ubjz)�”}”(hhh]”hì)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j œh´Mhj œubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjî›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j œh´Mhjy›ubjZ)�”}”(hŒ.``size_t buflen`` The number of bytes to copy ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hj-œh]”hŒ size_t buflen”…”�”}”(hj/œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj+œubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj'œubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hjFœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jBœh´MhjCœubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj'œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jBœh´Mhjy›ubjZ)�”}”(hŒ6``off_t skip`` Number of bytes to skip before copying ”h]”(j`)�”}”(hŒ``off_t skip``”h]”jæ)�”}”(hjfœh]”hŒ off_t skip”…”�”}”(hjhœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjdœubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj`œubjz)�”}”(hhh]”hì)�”}”(hŒ&Number of bytes to skip before copying”h]”hŒ&Number of bytes to skip before copying”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j{œh´Mhj|œubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj`œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j{œh´Mhjy›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThj]›ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj¡œh]”hŒ Description”…”�”}”(hj£œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŸœubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj]›ubhì)�”}”(hŒ#Returns the number of copied bytes.”h]”hŒ#Returns the number of copied bytes.”…”�”}”(hj·œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhj]›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_pcopy_to_buffer (C function)”Œc.sg_pcopy_to_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒmsize_t sg_pcopy_to_buffer (struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip)”h]”j{)�”}”(hŒlsize_t sg_pcopy_to_buffer(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjéœh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjæœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j뜌modname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_pcopy_to_buffer”sbŒc.sg_pcopy_to_buffer”†”asbuh1hhjâœh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M!ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjâœh²hh³j �h´M!ubjó)�”}”(hŒsg_pcopy_to_buffer”h]”j§)�”}”(hj�h]”hŒsg_pcopy_to_buffer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj�ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhjâœh²hh³j �h´M!ubj)�”}”(hŒS(struct scatterlist *sgl, unsigned int nents, void *buf, size_t buflen, off_t skip)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj4�ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjS�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jX�Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j�Œc.sg_pcopy_to_buffer”†”asbuh1hhj4�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj4�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj4�ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj4�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj0�ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¨�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¤�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¤�ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¤�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¤�ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¤�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj0�ubj)�”}”(hŒ void *buf”h]”(j6)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hjõ�ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjõ�ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjõ�ubj§)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj"žh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjõ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj0�ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj>žh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj;žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j@žŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j�Œc.sg_pcopy_to_buffer”†”asbuh1hhj7žubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\žh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj7žubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjjžh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj7žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj0�ubj)�”}”(hŒ off_t skip”h]”(h)�”}”(hhh]”j§)�”}”(hŒoff_t”h]”hŒoff_t”…”�”}”(hj†žh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjƒžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jˆžŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j�Œc.sg_pcopy_to_buffer”†”asbuh1hhjžubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤žh²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjžubj§)�”}”(hŒskip”h]”hŒskip”…”�”}”(hj²žh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhj0�ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hjâœh²hh³j �h´M!ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjÞœh²hh³j �h´M!ubah}”(h]”jÙœah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j �h´M!hjÛœh²hubj)�”}”(hhh]”hì)�”}”(hŒ'Copy from an SG list to a linear buffer”h]”hŒ'Copy from an SG list to a linear buffer”…”�”}”(hjÜžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M!hjÙžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÛœh²hh³j �h´M!ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jôžj0jôžj1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX***Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``void *buf`` Where to copy to ``size_t buflen`` The number of bytes to copy ``off_t skip`` Number of bytes to skip before copying **Description** Returns the number of copied bytes.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjþžh]”hŒ Parameters”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjüžubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M%hjøžubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjŸh]”hŒstruct scatterlist *sgl”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M"hjŸubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj6Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j2Ÿh´M"hj3Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j2Ÿh´M"hjŸubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hjVŸh]”hŒunsigned int nents”…”�”}”(hjXŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjTŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M#hjPŸubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hjoŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jkŸh´M#hjlŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjPŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jkŸh´M#hjŸubjZ)�”}”(hŒ``void *buf`` Where to copy to ”h]”(j`)�”}”(hŒ ``void *buf``”h]”jæ)�”}”(hj�Ÿh]”hŒ void *buf”…”�”}”(hj‘Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj�Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M$hj‰Ÿubjz)�”}”(hhh]”hì)�”}”(hŒWhere to copy to”h]”hŒWhere to copy to”…”�”}”(hj¨Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¤Ÿh´M$hj¥Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj‰Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¤Ÿh´M$hjŸubjZ)�”}”(hŒ.``size_t buflen`` The number of bytes to copy ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hjÈŸh]”hŒ size_t buflen”…”�”}”(hjÊŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÆŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M%hjŸubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hjáŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÝŸh´M%hjÞŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÝŸh´M%hjŸubjZ)�”}”(hŒ6``off_t skip`` Number of bytes to skip before copying ”h]”(j`)�”}”(hŒ``off_t skip``”h]”jæ)�”}”(hj h]”hŒ off_t skip”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjÿŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M&hjûŸubjz)�”}”(hhh]”hì)�”}”(hŒ&Number of bytes to skip before copying”h]”hŒ&Number of bytes to skip before copying”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j h´M&hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjûŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j h´M&hjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjøžubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj< h]”hŒ Description”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M(hjøžubhì)�”}”(hŒ#Returns the number of copied bytes.”h]”hŒ#Returns the number of copied bytes.”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M'hjøžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒsg_zero_buffer (C function)”Œc.sg_zero_buffer”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ^size_t sg_zero_buffer (struct scatterlist *sgl, unsigned int nents, size_t buflen, off_t skip)”h]”j{)�”}”(hŒ]size_t sg_zero_buffer(struct scatterlist *sgl, unsigned int nents, size_t buflen, off_t skip)”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j† Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒsg_zero_buffer”sbŒc.sg_zero_buffer”†”asbuh1hhj} h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M3ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj} h²hh³j¥ h´M3ubjó)�”}”(hŒsg_zero_buffer”h]”j§)�”}”(hj¢ h]”hŒsg_zero_buffer”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj´ ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj} h²hh³j¥ h´M3ubj)�”}”(hŒH(struct scatterlist *sgl, unsigned int nents, size_t buflen, off_t skip)”h]”(j)�”}”(hŒstruct scatterlist *sgl”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÏ ubh)�”}”(hhh]”j§)�”}”(hŒ scatterlist”h]”hŒ scatterlist”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjî ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jó Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j  Œc.sg_zero_buffer”†”asbuh1hhjÏ ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjÏ ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjÏ ubj§)�”}”(hŒsgl”h]”hŒsgl”…”�”}”(hj*¡h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÏ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjË ubj)�”}”(hŒunsigned int nents”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjC¡h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj?¡ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ¡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?¡ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj_¡h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj?¡ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm¡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj?¡ubj§)�”}”(hŒnents”h]”hŒnents”…”�”}”(hj{¡h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj?¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjË ubj)�”}”(hŒ size_t buflen”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj—¡h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj”¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j™¡Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j  Œc.sg_zero_buffer”†”asbuh1hhj�¡ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ¡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj�¡ubj§)�”}”(hŒbuflen”h]”hŒbuflen”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦•^Yhj�¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjË ubj)�”}”(hŒ off_t skip”h]”(h)�”}”(hhh]”j§)�”}”(hŒoff_t”h]”hŒoff_t”…”�”}”(hjß¡h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÜ¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jᡌmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”j  Œc.sg_zero_buffer”†”asbuh1hhjØ¡ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý¡h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjØ¡ubj§)�”}”(hŒskip”h]”hŒskip”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjØ¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjË ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj} h²hh³j¥ h´M3ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhjy h²hh³j¥ h´M3ubah}”(h]”jt ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³j¥ h´M3hjv h²hubj)�”}”(hhh]”hì)�”}”(hŒZero-out a part of a SG list”h]”hŒZero-out a part of a SG list”…”�”}”(hj5¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M3hj2¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjv h²hh³j¥ h´M3ubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jM¢j0jM¢j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX **Parameters** ``struct scatterlist *sgl`` The SG list ``unsigned int nents`` Number of SG entries ``size_t buflen`` The number of bytes to zero out ``off_t skip`` Number of bytes to skip before zeroing **Description** Returns the number of bytes zeroed.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjW¢h]”hŒ Parameters”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjU¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M7hjQ¢ubjU)�”}”(hhh]”(jZ)�”}”(hŒ(``struct scatterlist *sgl`` The SG list ”h]”(j`)�”}”(hŒ``struct scatterlist *sgl``”h]”jæ)�”}”(hjv¢h]”hŒstruct scatterlist *sgl”…”�”}”(hjx¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjt¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M4hjp¢ubjz)�”}”(hhh]”hì)�”}”(hŒ The SG list”h]”hŒ The SG list”…”�”}”(hj�¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j‹¢h´M4hjŒ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjp¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j‹¢h´M4hjm¢ubjZ)�”}”(hŒ,``unsigned int nents`` Number of SG entries ”h]”(j`)�”}”(hŒ``unsigned int nents``”h]”jæ)�”}”(hj¯¢h]”hŒunsigned int nents”…”�”}”(hj±¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj­¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M5hj©¢ubjz)�”}”(hhh]”hì)�”}”(hŒNumber of SG entries”h]”hŒNumber of SG entries”…”�”}”(hjÈ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jÄ¢h´M5hjÅ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj©¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jÄ¢h´M5hjm¢ubjZ)�”}”(hŒ2``size_t buflen`` The number of bytes to zero out ”h]”(j`)�”}”(hŒ``size_t buflen``”h]”jæ)�”}”(hjè¢h]”hŒ size_t buflen”…”�”}”(hjê¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjæ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M6hjâ¢ubjz)�”}”(hhh]”hì)�”}”(hŒThe number of bytes to zero out”h]”hŒThe number of bytes to zero out”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jý¢h´M6hjþ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjâ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jý¢h´M6hjm¢ubjZ)�”}”(hŒ6``off_t skip`` Number of bytes to skip before zeroing ”h]”(j`)�”}”(hŒ``off_t skip``”h]”jæ)�”}”(hj!£h]”hŒ off_t skip”…”�”}”(hj#£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M7hj£ubjz)�”}”(hhh]”hì)�”}”(hŒ&Number of bytes to skip before zeroing”h]”hŒ&Number of bytes to skip before zeroing”…”�”}”(hj:£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j6£h´M7hj7£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j6£h´M7hjm¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjQ¢ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj\£h]”hŒ Description”…”�”}”(hj^£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjZ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M9hjQ¢ubhì)�”}”(hŒ#Returns the number of bytes zeroed.”h]”hŒ#Returns the number of bytes zeroed.”…”�”}”(hjr£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M8hjQ¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubj_)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jkŒextract_iter_to_sg (C function)”Œc.extract_iter_to_sg”hNt”auh1j^hj¼"h²hh³Nh´Nubjp)�”}”(hhh]”(ju)�”}”(hŒ™ssize_t extract_iter_to_sg (struct iov_iter *iter, size_t maxsize, struct sg_table *sgtable, unsigned int sg_max, iov_iter_extraction_t extraction_flags)”h]”j{)�”}”(hŒ˜ssize_t extract_iter_to_sg(struct iov_iter *iter, size_t maxsize, struct sg_table *sgtable, unsigned int sg_max, iov_iter_extraction_t extraction_flags)”h]”(h)�”}”(hhh]”j§)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj¤£h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¡£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¦£Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÍ)�”}”jÀŒextract_iter_to_sg”sbŒc.extract_iter_to_sg”†”asbuh1hhj�£h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mfubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ£h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj�£h²hh³jÅ£h´Mfubjó)�”}”(hŒextract_iter_to_sg”h]”j§)�”}”(hj£h]”hŒextract_iter_to_sg”…”�”}”(hjØ£h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjÔ£ubah}”(h]”h ]”(jj eh"]”h$]”h&]”j•j–uh1jòhj�£h²hh³jÅ£h´Mfubj)�”}”(hŒ~(struct iov_iter *iter, size_t maxsize, struct sg_table *sgtable, unsigned int sg_max, iov_iter_extraction_t extraction_flags)”h]”(j)�”}”(hŒstruct iov_iter *iter”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hjó£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï£ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjï£ubh)�”}”(hhh]”j§)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”j¤Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÀ£Œc.extract_iter_to_sg”†”asbuh1hhjï£ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/¤h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjï£ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hj=¤h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhjï£ubj§)�”}”(hŒiter”h]”hŒiter”…”�”}”(hjJ¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjï£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjë£ubj)�”}”(hŒsize_t maxsize”h]”(h)�”}”(hhh]”j§)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjf¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjc¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jh¤Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÀ£Œc.extract_iter_to_sg”†”asbuh1hhj_¤ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„¤h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj_¤ubj§)�”}”(hŒmaxsize”h]”hŒmaxsize”…”�”}”(hj’¤h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj_¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjë£ubj)�”}”(hŒstruct sg_table *sgtable”h]”(j�)�”}”(hj„h]”hŒstruct”…”�”}”(hj«¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§¤ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸¤h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§¤ubh)�”}”(hhh]”j§)�”}”(hŒsg_table”h]”hŒsg_table”…”�”}”(hjɤh²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjƤubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jˤŒmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÀ£Œc.extract_iter_to_sg”†”asbuh1hhj§¤ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç¤h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj§¤ubjâ)�”}”(hjåh]”hŒ*”…”�”}”(hjõ¤h²hh³Nh´Nubah}”(h]”h ]”jîah"]”h$]”h&]”uh1jáhj§¤ubj§)�”}”(hŒsgtable”h]”hŒsgtable”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj§¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjë£ubj)�”}”(hŒunsigned int sg_max”h]”(j6)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)¥h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥ubj6)�”}”(hŒint”h]”hŒint”…”�”}”(hj7¥h²hh³Nh´Nubah}”(h]”h ]”jBah"]”h$]”h&]”uh1j5hj¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE¥h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hj¥ubj§)�”}”(hŒsg_max”h]”hŒsg_max”…”�”}”(hjS¥h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjë£ubj)�”}”(hŒ&iov_iter_extraction_t extraction_flags”h]”(h)�”}”(hhh]”j§)�”}”(hŒiov_iter_extraction_t”h]”hŒiov_iter_extraction_t”…”�”}”(hjo¥h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjl¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j¾Œreftype”jÀŒ reftarget”jq¥Œmodname”NŒ classname”NjÄjÇ)�”}”jÊ]”jÀ£Œc.extract_iter_to_sg”†”asbuh1hhjh¥ubj“)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¥h²hh³Nh´Nubah}”(h]”h ]”jŸah"]”h$]”h&]”uh1j’hjh¥ubj§)�”}”(hŒextraction_flags”h]”hŒextraction_flags”…”�”}”(hj›¥h²hh³Nh´Nubah}”(h]”h ]”j³ah"]”h$]”h&]”uh1j¦hjh¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj•j–uh1jhjë£ubeh}”(h]”h ]”h"]”h$]”h&]”j•j–uh1j hj�£h²hh³jÅ£h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”j•j–jÿˆuh1jzjjhj™£h²hh³jÅ£h´Mfubah}”(h]”j”£ah ]”(jjeh"]”h$]”h&]”j ˆj )j huh1jth³jÅ£h´Mfhj–£h²hubj)�”}”(hhh]”hì)�”}”(hŒ3Extract pages from an iterator and add to an sglist”h]”hŒ3Extract pages from an iterator and add to an sglist”…”�”}”(hjÅ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´MfhjÂ¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj–£h²hh³jÅ£h´Mfubeh}”(h]”h ]”(j¾Œfunction”eh"]”h$]”h&]”j.j¾j/jÝ¥j0jÝ¥j1‰j2‰j3‰uh1joh²hhj¼"h³Nh´Nubj5)�”}”(hX¨**Parameters** ``struct iov_iter *iter`` The iterator to extract from ``size_t maxsize`` The amount of iterator to copy ``struct sg_table *sgtable`` The scatterlist table to fill in ``unsigned int sg_max`` Maximum number of elements in **sgtable** that may be filled ``iov_iter_extraction_t extraction_flags`` Flags to qualify the request **Description** Extract the page fragments from the given amount of the source iterator and add them to a scatterlist that refers to all of those bits, to a maximum addition of **sg_max** elements. The pages referred to by UBUF- and IOVEC-type iterators are extracted and pinned; BVEC-, KVEC-, FOLIOQ- and XARRAY-type are extracted but aren't pinned; DISCARD-type is not supported. No end mark is placed on the scatterlist; that's left to the caller. **extraction_flags** can have ITER_ALLOW_P2PDMA set to request peer-to-peer DMA be allowed on the pages extracted. If successful, **sgtable->nents** is updated to include the number of elements added and the number of bytes added is returned. **sgtable->orig_nents** is left unaltered. The iov_iter_extract_mode() function should be used to query how cleanup should be performed.”h]”(hì)�”}”(hŒ**Parameters**”h]”j?)�”}”(hjç¥h]”hŒ Parameters”…”�”}”(hjé¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjå¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mjhjá¥ubjU)�”}”(hhh]”(jZ)�”}”(hŒ7``struct iov_iter *iter`` The iterator to extract from ”h]”(j`)�”}”(hŒ``struct iov_iter *iter``”h]”jæ)�”}”(hj¦h]”hŒstruct iov_iter *iter”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mghj¦ubjz)�”}”(hhh]”hì)�”}”(hŒThe iterator to extract from”h]”hŒThe iterator to extract from”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j¦h´Mghj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j¦h´Mghjý¥ubjZ)�”}”(hŒ2``size_t maxsize`` The amount of iterator to copy ”h]”(j`)�”}”(hŒ``size_t maxsize``”h]”jæ)�”}”(hj?¦h]”hŒsize_t maxsize”…”�”}”(hjA¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj=¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mhhj9¦ubjz)�”}”(hhh]”hì)�”}”(hŒThe amount of iterator to copy”h]”hŒThe amount of iterator to copy”…”�”}”(hjX¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jT¦h´MhhjU¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj9¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jT¦h´Mhhjý¥ubjZ)�”}”(hŒ>``struct sg_table *sgtable`` The scatterlist table to fill in ”h]”(j`)�”}”(hŒ``struct sg_table *sgtable``”h]”jæ)�”}”(hjx¦h]”hŒstruct sg_table *sgtable”…”�”}”(hjz¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjv¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mihjr¦ubjz)�”}”(hhh]”hì)�”}”(hŒ The scatterlist table to fill in”h]”hŒ The scatterlist table to fill in”…”�”}”(hj‘¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j�¦h´Mihjަubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjr¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j�¦h´Mihjý¥ubjZ)�”}”(hŒU``unsigned int sg_max`` Maximum number of elements in **sgtable** that may be filled ”h]”(j`)�”}”(hŒ``unsigned int sg_max``”h]”jæ)�”}”(hj±¦h]”hŒunsigned int sg_max”…”�”}”(hj³¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhj¯¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mjhj«¦ubjz)�”}”(hhh]”hì)�”}”(hŒhjʦubhŒ that may be filled”…”�”}”(hjʦh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³jƦh´MjhjǦubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhj«¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³jƦh´Mjhjý¥ubjZ)�”}”(hŒH``iov_iter_extraction_t extraction_flags`` Flags to qualify the request ”h]”(j`)�”}”(hŒ*``iov_iter_extraction_t extraction_flags``”h]”jæ)�”}”(hjü¦h]”hŒ&iov_iter_extraction_t extraction_flags”…”�”}”(hjþ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jåhjú¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j_h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mkhjö¦ubjz)�”}”(hhh]”hì)�”}”(hŒFlags to qualify the request”h]”hŒFlags to qualify the request”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³j§h´Mkhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjö¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jYh³j§h´Mkhjý¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jThjá¥ubhì)�”}”(hŒ**Description**”h]”j?)�”}”(hj7§h]”hŒ Description”…”�”}”(hj9§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj5§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mmhjá¥ubhì)�”}”(hŒµExtract the page fragments from the given amount of the source iterator and add them to a scatterlist that refers to all of those bits, to a maximum addition of **sg_max** elements.”h]”(hŒ¡Extract the page fragments from the given amount of the source iterator and add them to a scatterlist that refers to all of those bits, to a maximum addition of ”…”�”}”(hjM§h²hh³Nh´Nubj?)�”}”(hŒ **sg_max**”h]”hŒsg_max”…”�”}”(hjU§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjM§ubhŒ elements.”…”�”}”(hjM§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mlhjá¥ubhì)�”}”(hŒ·The pages referred to by UBUF- and IOVEC-type iterators are extracted and pinned; BVEC-, KVEC-, FOLIOQ- and XARRAY-type are extracted but aren't pinned; DISCARD-type is not supported.”h]”hŒ¹The pages referred to by UBUF- and IOVEC-type iterators are extracted and pinned; BVEC-, KVEC-, FOLIOQ- and XARRAY-type are extracted but aren’t pinned; DISCARD-type is not supported.”…”�”}”(hjn§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mphjá¥ubhì)�”}”(hŒDNo end mark is placed on the scatterlist; that's left to the caller.”h]”hŒFNo end mark is placed on the scatterlist; that’s left to the caller.”…”�”}”(hj}§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mthjá¥ubhì)�”}”(hŒr**extraction_flags** can have ITER_ALLOW_P2PDMA set to request peer-to-peer DMA be allowed on the pages extracted.”h]”(j?)�”}”(hŒ**extraction_flags**”h]”hŒextraction_flags”…”�”}”(hj�§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hjŒ§ubhŒ^ can have ITER_ALLOW_P2PDMA set to request peer-to-peer DMA be allowed on the pages extracted.”…”�”}”(hjŒ§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Mvhjá¥ubhì)�”}”(hŒ«If successful, **sgtable->nents** is updated to include the number of elements added and the number of bytes added is returned. **sgtable->orig_nents** is left unaltered.”h]”(hŒIf successful, ”…”�”}”(hj©§h²hh³Nh´Nubj?)�”}”(hŒ**sgtable->nents**”h]”hŒsgtable->nents”…”�”}”(hj±§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj©§ubhŒ` is updated to include the number of elements added and the number of bytes added is returned. ”…”�”}”(hj©§h²hh³Nh´Nubj?)�”}”(hŒ**sgtable->orig_nents**”h]”hŒsgtable->orig_nents”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j>hj©§ubhŒ is left unaltered.”…”�”}”(hj©§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´Myhjá¥ubhì)�”}”(hŒ]The iov_iter_extract_mode() function should be used to query how cleanup should be performed.”h]”hŒ]The iov_iter_extract_mode() function should be used to query how cleanup should be performed.”…”�”}”(hjܧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hëh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/dma-api:868: ./lib/scatterlist.c”h´M}hjá¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1j4hj¼"h²hh³Nh´Nubeh}”(h]”Œfunctions-and-structures”ah ]”h"]”Œfunctions and structures”ah$]”h&]”uh1hµhjäh²hh³hÊh´Maubeh}”(h]”Œ)part-iii-debug-drivers-use-of-the-dma-api”ah ]”h"]”Œ+part iii - debug drivers use of the dma api”ah$]”h&]”uh1hµhh·h²hh³hÊh´MÔubeh}”(h]”Œ,dynamic-dma-mapping-using-the-generic-device”ah ]”h"]”Œ,dynamic dma mapping using the generic device”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”j‘Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j,¨Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j¨j¨jqjnj.j+jojljÊjÇj9j6jŒj‰jájÞjÿ§jü§j÷§jô§uŒ nametypes”}”(j¨‰jq‰j.‰jo‰jʉj9‰jŒ‰já‰jÿ§‰j÷§‰uh}”(j¨h·jnj?j+jtjlj1jmjvjvj{j j# jÍ jÒ jJjOjXj]jÙjÞjÇjrj6jÍj‰j<jÞj�jü§jäjô§j¼"jÙ"jÞ"j³$j¸$jç&jì&j/*j4*je-jj-jà/jå/jÁ2jÆ2jL4jQ4jÖ5jÛ5ja7jf7jì8jñ8jv:j{:j<j<j‹=j�=j)?j.?jÁ@jÆ@j¦Bj«Bj-Gj2GjÃHjÈHj1Jj6JjæKjëKjœMj¡MjOjOj”Pj™PjRjRj>TjCTjWjWj˜Yj�Yj­[j²[j(^j-^jòaj÷ajMcjRcj¨dj­dj9jj>jjáljæljÎrjÓrjxjxjÛ{jà{j¾~jÃ~jY�j^�j"ƒj'ƒj}„j‚„jþ‡jˆj±Šj¶ŠjõŒjúŒjËŽjÐŽjÔ’jÙ’j –j–j#™j(™jÙœjÞœjt jy j”£j™£uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.