€•�²Œ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”Œ4/translations/zh_CN/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/zh_TW/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/it_IT/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ja_JP/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/ko_KR/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/pt_BR/driver-api/fpga/fpga-programming”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ4/translations/sp_SP/driver-api/fpga/fpga-programming”Œ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Œ"In-kernel API for FPGA Programming”h]”hŒ"In-kernel API for FPGA Programming”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒOverview”h]”hŒOverview”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hŒ¼The in-kernel API for FPGA programming is a combination of APIs from FPGA manager, bridge, and regions. The actual function used to trigger FPGA programming is fpga_region_program_fpga().”h]”hŒ¼The in-kernel API for FPGA programming is a combination of APIs from FPGA manager, bridge, and regions. The actual function used to trigger FPGA programming is fpga_region_program_fpga().”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)�”}”(hŒafpga_region_program_fpga() uses functionality supplied by the FPGA manager and bridges. It will:”h]”hŒafpga_region_program_fpga() uses functionality supplied by the FPGA manager and bridges. It will:”…”�”}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhŒ block_quote”“”)�”}”(hX* lock the region's mutex * lock the mutex of the region's FPGA manager * build a list of FPGA bridges if a method has been specified to do so * disable the bridges * program the FPGA using info passed in :c:expr:`fpga_region->info`. * re-enable the bridges * release the locks ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒlock the region's mutex”h]”hÝ)�”}”(hj h]”hŒlock the region’s mutex”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ+lock the mutex of the region's FPGA manager”h]”hÝ)�”}”(hj h]”hŒ-lock the mutex of the region’s FPGA manager”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒDbuild a list of FPGA bridges if a method has been specified to do so”h]”hÝ)�”}”(hj7h]”hŒDbuild a list of FPGA bridges if a method has been specified to do so”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒdisable the bridges”h]”hÝ)�”}”(hjNh]”hŒdisable the bridges”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒBprogram the FPGA using info passed in :c:expr:`fpga_region->info`.”h]”hÝ)�”}”(hjeh]”(hŒ&program the FPGA using info passed in ”…”�”}”(hjgh²hh³Nh´NubhŒ desc_inline”“”)�”}”(hŒfpga_region->info”h]”(h)�”}”(hhh]”hŒ desc_sig_name”“”)�”}”(hŒ fpga_region”h]”hŒ fpga_region”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jwhjtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”j{Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”sbuh1hhjpubhŒdesc_sig_operator”“”)�”}”(hŒ->”h]”hŒ->”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”Œo”ah"]”h$]”h&]”uh1j�hjpubjx)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjpubeh}”(h]”h ]”(Œc-expr”Œsig”Œ sig-inline”j�eh"]”h$]”h&]”uh1jnhjgubhŒ.”…”�”}”(hjgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒre-enable the bridges”h]”hÝ)�”}”(hj×h]”hŒre-enable the bridges”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒrelease the locks ”h]”hÝ)�”}”(hŒrelease the locks”h]”hŒrelease the locks”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1jh³hÊh´Khhüubah}”(h]”h ]”h"]”h$]”h&]”uh1húh³hÊh´KhhËh²hubhÝ)�”}”(hŒ˜The struct fpga_image_info specifies what FPGA image to program. It is allocated/freed by fpga_image_info_alloc() and freed with fpga_image_info_free()”h]”hŒ˜The struct fpga_image_info specifies what FPGA image to program. It is allocated/freed by fpga_image_info_alloc() and freed with fpga_image_info_free()”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubeh}”(h]”Œoverview”ah ]”h"]”Œoverview”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ%How to program an FPGA using a region”h]”hŒ%How to program an FPGA using a region”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj(h²hh³hÊh´KubhÝ)�”}”(hX0When the FPGA region driver probed, it was given a pointer to an FPGA manager driver so it knows which manager to use. The region also either has a list of bridges to control during programming or it has a pointer to a function that will generate that list. Here's some sample code of what to do next::”h]”hX1When the FPGA region driver probed, it was given a pointer to an FPGA manager driver so it knows which manager to use. The region also either has a list of bridges to control during programming or it has a pointer to a function that will generate that list. Here’s some sample code of what to do next:”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj(h²hubhŒ literal_block”“”)�”}”(hXs#include #include struct fpga_image_info *info; int ret; /* * First, alloc the struct with information about the FPGA image to * program. */ info = fpga_image_info_alloc(dev); if (!info) return -ENOMEM; /* Set flags as needed, such as: */ info->flags = FPGA_MGR_PARTIAL_RECONFIG; /* * Indicate where the FPGA image is. This is pseudo-code; you're * going to use one of these three. */ if (image is in a scatter gather table) { info->sgt = [your scatter gather table] } else if (image is in a buffer) { info->buf = [your image buffer] info->count = [image buffer size] } else if (image is in a firmware file) { info->firmware_name = devm_kstrdup(dev, firmware_name, GFP_KERNEL); } /* Add info to region and do the programming */ region->info = info; ret = fpga_region_program_fpga(region); /* Deallocate the image info if you're done with it */ region->info = NULL; fpga_image_info_free(info); if (ret) return ret; /* Now enumerate whatever hardware has appeared in the FPGA. */”h]”hXs#include #include struct fpga_image_info *info; int ret; /* * First, alloc the struct with information about the FPGA image to * program. */ info = fpga_image_info_alloc(dev); if (!info) return -ENOMEM; /* Set flags as needed, such as: */ info->flags = FPGA_MGR_PARTIAL_RECONFIG; /* * Indicate where the FPGA image is. This is pseudo-code; you're * going to use one of these three. */ if (image is in a scatter gather table) { info->sgt = [your scatter gather table] } else if (image is in a buffer) { info->buf = [your image buffer] info->count = [image buffer size] } else if (image is in a firmware file) { info->firmware_name = devm_kstrdup(dev, firmware_name, GFP_KERNEL); } /* Add info to region and do the programming */ region->info = info; ret = fpga_region_program_fpga(region); /* Deallocate the image info if you're done with it */ region->info = NULL; fpga_image_info_free(info); if (ret) return ret; /* Now enumerate whatever hardware has appeared in the FPGA. */”…”�”}”hjIsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jGh³hÊh´K"hj(h²hubeh}”(h]”Œ%how-to-program-an-fpga-using-a-region”ah ]”h"]”Œ%how to program an fpga using a region”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒAPI for programming an FPGA”h]”hŒAPI for programming an FPGA”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjah²hh³hÊh´KUubj)�”}”(hhh]”(j)�”}”(hŒ-fpga_region_program_fpga() - Program an FPGA”h]”hÝ)�”}”(hjwh]”hŒ-fpga_region_program_fpga() - Program an FPGA”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KWhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrh²hh³hÊh´Nubj)�”}”(hŒ9fpga_image_info() - Specifies what FPGA image to program”h]”hÝ)�”}”(hjŽh]”hŒ9fpga_image_info() - Specifies what FPGA image to program”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KXhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrh²hh³hÊh´Nubj)�”}”(hŒ=fpga_image_info_alloc() - Allocate an FPGA image info struct”h]”hÝ)�”}”(hj¥h]”hŒ=fpga_image_info_alloc() - Allocate an FPGA image info struct”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KYhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrh²hh³hÊh´Nubj)�”}”(hŒ9fpga_image_info_free() - Free an FPGA image info struct ”h]”hÝ)�”}”(hŒ8fpga_image_info_free() - Free an FPGA image info struct”h]”hŒ8fpga_image_info_free() - Free an FPGA image info struct”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KZhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrh²hh³hÊh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j j uh1jh³hÊh´KWhjah²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ%fpga_region_program_fpga (C function)”Œc.fpga_region_program_fpga”hNt”auh1jØhjah²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒ9int fpga_region_program_fpga (struct fpga_region *region)”h]”hŒdesc_signature_line”“”)�”}”(hŒ8int fpga_region_program_fpga(struct fpga_region *region)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1júhjöh²hh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KTubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j hjöh²hh³j h´KTubhŒ desc_name”“”)�”}”(hŒfpga_region_program_fpga”h]”jx)�”}”(hŒfpga_region_program_fpga”h]”hŒfpga_region_program_fpga”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jWjXuh1jhjöh²hh³j h´KTubhŒdesc_parameterlist”“”)�”}”(hŒ(struct fpga_region *region)”h]”hŒdesc_parameter”“”)�”}”(hŒstruct fpga_region *region”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jEhjAubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjAubh)�”}”(hhh]”jx)�”}”(hŒ fpga_region”h]”hŒ fpga_region”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j�Œreftype”j‘Œ reftarget”jiŒmodname”NŒ classname”Nj•j˜)�”}”j›]”j–Œ ASTIdentifier”“”)�”}”j‘j%sbŒc.fpga_region_program_fpga”†”asbuh1hhjAubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjAubhŒdesc_sig_punctuation”“”)�”}”(hj h]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j—hjAubjx)�”}”(hŒregion”h]”hŒregion”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjWjXuh1j?hj;ubah}”(h]”h ]”h"]”h$]”h&]”jWjXuh1j9hjöh²hh³j h´KTubeh}”(h]”h ]”h"]”h$]”h&]”jWjXŒ add_permalink”ˆuh1jôŒsphinx_line_type”Œ declarator”hjðh²hh³j h´KTubah}”(h]”jçah ]”(jÀŒ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jîh³j h´KThjëh²hubhŒ desc_content”“”)�”}”(hhh]”hÝ)�”}”(hŒ program FPGA”h]”hŒ program FPGA”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KThj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjëh²hh³j h´KTubeh}”(h]”h ]”(j�Œfunction”eh"]”h$]”h&]”Œdomain”j�Œobjtype”jòŒdesctype”jòŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jéh²hhjah³Nh´NubhŒ container”“”)�”}”(hXí**Parameters** ``struct fpga_region *region`` FPGA region **Description** Program an FPGA using fpga image info (region->info). If the region has a get_bridges function, the exclusive reference for the bridges will be held if programming succeeds. This is intended to prevent reprogramming the region until the caller considers it safe to do so. The caller will need to call fpga_bridges_put() before attempting to reprogram the region. **Return** 0 for success or negative error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KXhjþubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ+``struct fpga_region *region`` FPGA region ”h]”(hŒterm”“”)�”}”(hŒ``struct fpga_region *region``”h]”hŒliteral”“”)�”}”(hj+h]”hŒstruct fpga_region *region”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KVhj#ubhŒ definition”“”)�”}”(hhh]”hÝ)�”}”(hŒ FPGA region”h]”hŒ FPGA region”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBh´KVhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jBh´KVhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþubhÝ)�”}”(hŒ**Description**”h]”j)�”}”(hjjh]”hŒ Description”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KXhjþubhÝ)�”}”(hXkProgram an FPGA using fpga image info (region->info). If the region has a get_bridges function, the exclusive reference for the bridges will be held if programming succeeds. This is intended to prevent reprogramming the region until the caller considers it safe to do so. The caller will need to call fpga_bridges_put() before attempting to reprogram the region.”h]”hXkProgram an FPGA using fpga image info (region->info). If the region has a get_bridges function, the exclusive reference for the bridges will be held if programming succeeds. This is intended to prevent reprogramming the region until the caller considers it safe to do so. The caller will need to call fpga_bridges_put() before attempting to reprogram the region.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´KWhjþubhÝ)�”}”(hŒ **Return**”h]”j)�”}”(hj‘h]”hŒReturn”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´K^hjþubhÝ)�”}”(hŒ%0 for success or negative error code.”h]”hŒ%0 for success or negative error code.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œk/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:92: ./drivers/fpga/fpga-region.c”h´K_hjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjah²hh³Nh´NubhÝ)�”}”(hŒFPGA Manager flags”h]”hŒFPGA Manager flags”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K_hjah²hubhÝ)�”}”(hŒJFlags used in the :c:type:`fpga_image_info->flags ` field”h]”(hŒFlags used in the ”…”�”}”(hjËh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`fpga_image_info->flags `”h]”j.)�”}”(hjÕh]”hŒfpga_image_info->flags”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”(Œxref”j�Œc-type”eh"]”h$]”h&]”uh1j-hjÓubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ driver-api/fpga/fpga-programming”Œ refdomain”j�Œreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j•j˜)�”}”j›]”sbŒ reftarget”Œfpga_image_info”uh1hh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´K=hjËubhŒ field”…”�”}”(hjËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøh´K=hjah²hubhÝ)�”}”(hŒF``FPGA_MGR_PARTIAL_RECONFIG``: do partial reconfiguration if supported”h]”(j.)�”}”(hŒ``FPGA_MGR_PARTIAL_RECONFIG``”h]”hŒFPGA_MGR_PARTIAL_RECONFIG”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubhŒ): do partial reconfiguration if supported”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´K?hjah²hubhÝ)�”}”(hŒM``FPGA_MGR_EXTERNAL_CONFIG``: FPGA has been configured prior to Linux booting”h]”(j.)�”}”(hŒ``FPGA_MGR_EXTERNAL_CONFIG``”h]”hŒFPGA_MGR_EXTERNAL_CONFIG”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ubhŒ1: FPGA has been configured prior to Linux booting”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´KAhjah²hubhÝ)�”}”(hŒB``FPGA_MGR_ENCRYPTED_BITSTREAM``: indicates bitstream is encrypted”h]”(j.)�”}”(hŒ ``FPGA_MGR_ENCRYPTED_BITSTREAM``”h]”hŒFPGA_MGR_ENCRYPTED_BITSTREAM”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj=ubhŒ": indicates bitstream is encrypted”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´KChjah²hubhÝ)�”}”(hŒF``FPGA_MGR_BITSTREAM_LSB_FIRST``: SPI bitstream bit order is LSB first”h]”(j.)�”}”(hŒ ``FPGA_MGR_BITSTREAM_LSB_FIRST``”h]”hŒFPGA_MGR_BITSTREAM_LSB_FIRST”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjZubhŒ&: SPI bitstream bit order is LSB first”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´KEhjah²hubhÝ)�”}”(hŒ?``FPGA_MGR_COMPRESSED_BITSTREAM``: FPGA bitstream is compressed”h]”(j.)�”}”(hŒ!``FPGA_MGR_COMPRESSED_BITSTREAM``”h]”hŒFPGA_MGR_COMPRESSED_BITSTREAM”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjwubhŒ: FPGA bitstream is compressed”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œn/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:97: ./include/linux/fpga/fpga-mgr.h”h´KGhjah²hubjÙ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jåŒfpga_image_info (C struct)”Œc.fpga_image_info”hNt”auh1jØhjah²hh³Nh´Nubjê)�”}”(hhh]”(jï)�”}”(hŒfpga_image_info”h]”jõ)�”}”(hŒstruct fpga_image_info”h]”(jF)�”}”(hjIh]”hŒstruct”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jRah"]”h$]”h&]”uh1jEhj©h²hh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´Kubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj©h²hh³jºh´Kubj)�”}”(hŒfpga_image_info”h]”jx)�”}”(hj§h]”hŒfpga_image_info”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjÉubah}”(h]”h ]”(j4j5eh"]”h$]”h&]”jWjXuh1jhj©h²hh³jºh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jWjXjȈuh1jôjÉjÊhj¥h²hh³jºh´Kubah}”(h]”j ah ]”(jÀjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jîh³jºh´Khj¢h²hubjÖ)�”}”(hhh]”hÝ)�”}”(hŒ%information specific to an FPGA image”h]”hŒ%information specific to an FPGA image”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KRhjìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhj¢h²hh³jºh´Kubeh}”(h]”h ]”(j�Œstruct”eh"]”h$]”h&]”jöj�j÷jjøjjù‰jú‰jû‰uh1jéh²hhjah³Nh´Nubjý)�”}”(hXÌ**Definition**:: struct fpga_image_info { u32 flags; u32 enable_timeout_us; u32 disable_timeout_us; u32 config_complete_timeout_us; char *firmware_name; struct sg_table *sgt; const char *buf; size_t count; size_t header_size; size_t data_size; int region_id; struct device *dev; #ifdef CONFIG_OF; struct device_node *overlay; #endif; }; **Members** ``flags`` boolean flags as defined above ``enable_timeout_us`` maximum time to enable traffic through bridge (uSec) ``disable_timeout_us`` maximum time to disable traffic through bridge (uSec) ``config_complete_timeout_us`` maximum time for FPGA to switch to operating status in the write_complete op. ``firmware_name`` name of FPGA image firmware file ``sgt`` scatter/gather table containing FPGA image ``buf`` contiguous buffer containing FPGA image ``count`` size of buf ``header_size`` size of image header. ``data_size`` size of image data to be sent to the device. If not specified, whole image will be used. Header may be skipped in either case. ``region_id`` id of target region ``dev`` device that owns this ``overlay`` Device Tree overlay”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(j)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KVhj ubjH)�”}”(hXsstruct fpga_image_info { u32 flags; u32 enable_timeout_us; u32 disable_timeout_us; u32 config_complete_timeout_us; char *firmware_name; struct sg_table *sgt; const char *buf; size_t count; size_t header_size; size_t data_size; int region_id; struct device *dev; #ifdef CONFIG_OF; struct device_node *overlay; #endif; };”h]”hXsstruct fpga_image_info { u32 flags; u32 enable_timeout_us; u32 disable_timeout_us; u32 config_complete_timeout_us; char *firmware_name; struct sg_table *sgt; const char *buf; size_t count; size_t header_size; size_t data_size; int region_id; struct device *dev; #ifdef CONFIG_OF; struct device_node *overlay; #endif; };”…”�”}”hj,sbah}”(h]”h ]”h"]”h$]”h&]”jWjXuh1jGh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KXhj ubhÝ)�”}”(hŒ **Members**”h]”j)�”}”(hj=h]”hŒMembers”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´Kjhj ubj)�”}”(hhh]”(j")�”}”(hŒ)``flags`` boolean flags as defined above ”h]”(j()�”}”(hŒ ``flags``”h]”j.)�”}”(hj\h]”hŒflags”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KThjVubjD)�”}”(hhh]”hÝ)�”}”(hŒboolean flags as defined above”h]”hŒboolean flags as defined above”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqh´KThjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jqh´KThjSubj")�”}”(hŒK``enable_timeout_us`` maximum time to enable traffic through bridge (uSec) ”h]”(j()�”}”(hŒ``enable_timeout_us``”h]”j.)�”}”(hj•h]”hŒenable_timeout_us”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KUhj�ubjD)�”}”(hhh]”hÝ)�”}”(hŒ4maximum time to enable traffic through bridge (uSec)”h]”hŒ4maximum time to enable traffic through bridge (uSec)”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªh´KUhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jªh´KUhjSubj")�”}”(hŒM``disable_timeout_us`` maximum time to disable traffic through bridge (uSec) ”h]”(j()�”}”(hŒ``disable_timeout_us``”h]”j.)�”}”(hjÎh]”hŒdisable_timeout_us”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KVhjÈubjD)�”}”(hhh]”hÝ)�”}”(hŒ5maximum time to disable traffic through bridge (uSec)”h]”hŒ5maximum time to disable traffic through bridge (uSec)”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãh´KVhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jãh´KVhjSubj")�”}”(hŒm``config_complete_timeout_us`` maximum time for FPGA to switch to operating status in the write_complete op. ”h]”(j()�”}”(hŒ``config_complete_timeout_us``”h]”j.)�”}”(hjh]”hŒconfig_complete_timeout_us”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KXhjubjD)�”}”(hhh]”hÝ)�”}”(hŒMmaximum time for FPGA to switch to operating status in the write_complete op.”h]”hŒMmaximum time for FPGA to switch to operating status in the write_complete op.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KWhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jh´KXhjSubj")�”}”(hŒ3``firmware_name`` name of FPGA image firmware file ”h]”(j()�”}”(hŒ``firmware_name``”h]”j.)�”}”(hjAh]”hŒ firmware_name”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KYhj;ubjD)�”}”(hhh]”hÝ)�”}”(hŒ name of FPGA image firmware file”h]”hŒ name of FPGA image firmware file”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVh´KYhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jVh´KYhjSubj")�”}”(hŒ3``sgt`` scatter/gather table containing FPGA image ”h]”(j()�”}”(hŒ``sgt``”h]”j.)�”}”(hjzh]”hŒsgt”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KZhjtubjD)�”}”(hhh]”hÝ)�”}”(hŒ*scatter/gather table containing FPGA image”h]”hŒ*scatter/gather table containing FPGA image”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´KZhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³j�h´KZhjSubj")�”}”(hŒ0``buf`` contiguous buffer containing FPGA image ”h]”(j()�”}”(hŒ``buf``”h]”j.)�”}”(hj³h]”hŒbuf”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K[hj­ubjD)�”}”(hhh]”hÝ)�”}”(hŒ'contiguous buffer containing FPGA image”h]”hŒ'contiguous buffer containing FPGA image”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´K[hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jÈh´K[hjSubj")�”}”(hŒ``count`` size of buf ”h]”(j()�”}”(hŒ ``count``”h]”j.)�”}”(hjìh]”hŒcount”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K\hjæubjD)�”}”(hhh]”hÝ)�”}”(hŒ size of buf”h]”hŒ size of buf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´K\hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jh´K\hjSubj")�”}”(hŒ&``header_size`` size of image header. ”h]”(j()�”}”(hŒ``header_size``”h]”j.)�”}”(hj%h]”hŒ header_size”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K]hjubjD)�”}”(hhh]”hÝ)�”}”(hŒsize of image header.”h]”hŒsize of image header.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:h´K]hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³j:h´K]hjSubj")�”}”(hŒ�``data_size`` size of image data to be sent to the device. If not specified, whole image will be used. Header may be skipped in either case. ”h]”(j()�”}”(hŒ ``data_size``”h]”j.)�”}”(hj^h]”hŒ data_size”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K_hjXubjD)�”}”(hhh]”hÝ)�”}”(hŒ~size of image data to be sent to the device. If not specified, whole image will be used. Header may be skipped in either case.”h]”hŒ~size of image data to be sent to the device. If not specified, whole image will be used. Header may be skipped in either case.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K^hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jsh´K_hjSubj")�”}”(hŒ"``region_id`` id of target region ”h]”(j()�”}”(hŒ ``region_id``”h]”j.)�”}”(hj˜h]”hŒ region_id”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´K`hj’ubjD)�”}”(hhh]”hÝ)�”}”(hŒid of target region”h]”hŒid of target region”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­h´K`hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³j­h´K`hjSubj")�”}”(hŒ``dev`` device that owns this ”h]”(j()�”}”(hŒ``dev``”h]”j.)�”}”(hjÑh]”hŒdev”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´KahjËubjD)�”}”(hhh]”hÝ)�”}”(hŒdevice that owns this”h]”hŒdevice that owns this”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæh´Kahjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jæh´KahjSubj")�”}”(hŒ``overlay`` Device Tree overlay”h]”(j()�”}”(hŒ ``overlay``”h]”j.)�”}”(hj h]”hŒoverlay”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´Kahj ubjD)�”}”(hhh]”hÝ)�”}”(hŒDevice Tree overlay”h]”hŒDevice Tree overlay”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œo/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:100: ./include/linux/fpga/fpga-mgr.h”h´Kbhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³j h´KahjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjah²hh³Nh´NubjÙ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jåŒ"fpga_image_info_alloc (C function)”Œc.fpga_image_info_alloc”hNt”auh1jØhjah²hh³Nh´Nubjê)�”}”(hhh]”(jï)�”}”(hŒCstruct fpga_image_info * fpga_image_info_alloc (struct device *dev)”h]”jõ)�”}”(hŒAstruct fpga_image_info *fpga_image_info_alloc(struct device *dev)”h]”(jF)�”}”(hjIh]”hŒstruct”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”jRah"]”h$]”h&]”uh1jEhj` h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Khubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj` h²hh³jq h´Khubh)�”}”(hhh]”jx)�”}”(hŒfpga_image_info”h]”hŒfpga_image_info”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhj€ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j�Œreftype”j‘Œ reftarget”j… Œmodname”NŒ classname”Nj•j˜)�”}”j›]”j„)�”}”j‘Œfpga_image_info_alloc”sbŒc.fpga_image_info_alloc”†”asbuh1hhj` h²hh³jq h´Khubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj` h²hh³jq h´Khubj˜)�”}”(hj h]”hŒ*”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”j£ah"]”h$]”h&]”uh1j—hj` h²hh³jq h´Khubj)�”}”(hŒfpga_image_info_alloc”h]”jx)�”}”(hj¡ h]”hŒfpga_image_info_alloc”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhj¿ ubah}”(h]”h ]”(j4j5eh"]”h$]”h&]”jWjXuh1jhj` h²hh³jq h´Khubj:)�”}”(hŒ(struct device *dev)”h]”j@)�”}”(hŒstruct device *dev”h]”(jF)�”}”(hjIh]”hŒstruct”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”jRah"]”h$]”h&]”uh1jEhjÚ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÚ ubh)�”}”(hhh]”jx)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjù ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j�Œreftype”j‘Œ reftarget”jþ Œmodname”NŒ classname”Nj•j˜)�”}”j›]”jŸ Œc.fpga_image_info_alloc”†”asbuh1hhjÚ ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjÚ ubj˜)�”}”(hj h]”hŒ*”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j£ah"]”h$]”h&]”uh1j—hjÚ ubjx)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjÚ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjWjXuh1j?hjÖ ubah}”(h]”h ]”h"]”h$]”h&]”jWjXuh1j9hj` h²hh³jq h´Khubeh}”(h]”h ]”h"]”h$]”h&]”jWjXjȈuh1jôjÉjÊhj\ h²hh³jq h´Khubah}”(h]”jW ah ]”(jÀjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jîh³jq h´KhhjY h²hubjÖ)�”}”(hhh]”hÝ)�”}”(hŒ"Allocate an FPGA image info struct”h]”hŒ"Allocate an FPGA image info struct”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Khhj\ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjY h²hh³jq h´Khubeh}”(h]”h ]”(j�Œfunction”eh"]”h$]”h&]”jöj�j÷jw jøjw jù‰jú‰jû‰uh1jéh²hhjah³Nh´Nubjý)�”}”(hŒb**Parameters** ``struct device *dev`` owning device **Return** struct fpga_image_info or NULL”h]”(hÝ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj� h]”hŒ Parameters”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Klhj{ ubj)�”}”(hhh]”j")�”}”(hŒ%``struct device *dev`` owning device ”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³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Kihjš ubjD)�”}”(hhh]”hÝ)�”}”(hŒ owning device”h]”hŒ owning device”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ h´Kihj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChjš ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³jµ h´Kihj— ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ ubhÝ)�”}”(hŒ **Return**”h]”j)�”}”(hjÛ h]”hŒReturn”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Kkhj{ ubhÝ)�”}”(hŒstruct fpga_image_info or NULL”h]”hŒstruct fpga_image_info or NULL”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:103: ./drivers/fpga/fpga-mgr.c”h´Kkhj{ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjah²hh³Nh´NubjÙ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jåŒ!fpga_image_info_free (C function)”Œc.fpga_image_info_free”hNt”auh1jØhjah²hh³Nh´Nubjê)�”}”(hhh]”(jï)�”}”(hŒ8void fpga_image_info_free (struct fpga_image_info *info)”h]”jõ)�”}”(hŒ7void fpga_image_info_free(struct fpga_image_info *info)”h]”(jû)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1júhj h²hh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:106: ./drivers/fpga/fpga-mgr.c”h´K€ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hj h²hh³j. h´K€ubj)�”}”(hŒfpga_image_info_free”h]”jx)�”}”(hŒfpga_image_info_free”h]”hŒfpga_image_info_free”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhj= ubah}”(h]”h ]”(j4j5eh"]”h$]”h&]”jWjXuh1jhj h²hh³j. h´K€ubj:)�”}”(hŒ(struct fpga_image_info *info)”h]”j@)�”}”(hŒstruct fpga_image_info *info”h]”(jF)�”}”(hjIh]”hŒstruct”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”jRah"]”h$]”h&]”uh1jEhjY ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjY ubh)�”}”(hhh]”jx)�”}”(hŒfpga_image_info”h]”hŒfpga_image_info”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjx ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”j�Œreftype”j‘Œ reftarget”j} Œmodname”NŒ classname”Nj•j˜)�”}”j›]”j„)�”}”j‘jC sbŒc.fpga_image_info_free”†”asbuh1hhjY ubj )�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1j hjY ubj˜)�”}”(hj h]”hŒ*”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j£ah"]”h$]”h&]”uh1j—hjY ubjx)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”j„ah"]”h$]”h&]”uh1jwhjY ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjWjXuh1j?hjU ubah}”(h]”h ]”h"]”h$]”h&]”jWjXuh1j9hj h²hh³j. h´K€ubeh}”(h]”h ]”h"]”h$]”h&]”jWjXjȈuh1jôjÉjÊhj h²hh³j. h´K€ubah}”(h]”j ah ]”(jÀjÎeh"]”h$]”h&]”jÒˆjÓ)jÔhuh1jîh³j. h´K€hj h²hubjÖ)�”}”(hhh]”hÝ)�”}”(hŒFree an FPGA image info struct”h]”hŒFree an FPGA image info struct”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:106: ./drivers/fpga/fpga-mgr.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ø jøjø jù‰jú‰jû‰uh1jéh²hhjah³Nh´Nubjý)�”}”(hŒQ**Parameters** ``struct fpga_image_info *info`` FPGA image info struct to free”h]”(hÝ)�”}”(hŒ**Parameters**”h]”j)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:106: ./drivers/fpga/fpga-mgr.c”h´K„hjü ubj)�”}”(hhh]”j")�”}”(hŒ?``struct fpga_image_info *info`` FPGA image info struct to free”h]”(j()�”}”(hŒ ``struct fpga_image_info *info``”h]”j.)�”}”(hj! h]”hŒstruct fpga_image_info *info”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j-hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j'h³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:106: ./drivers/fpga/fpga-mgr.c”h´K†hj ubjD)�”}”(hhh]”hÝ)�”}”(hŒFPGA image info struct to free”h]”hŒFPGA image info struct to free”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œi/var/lib/git/docbuild/linux/Documentation/driver-api/fpga/fpga-programming:106: ./drivers/fpga/fpga-mgr.c”h´K�hj7 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jChj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j!h³j6 h´K†hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jühjah²hh³Nh´Nubeh}”(h]”Œapi-for-programming-an-fpga”ah ]”h"]”Œapi for programming an fpga”ah$]”h&]”uh1hµhh·h²hh³hÊh´KUubeh}”(h]”Œ"in-kernel-api-for-fpga-programming”ah ]”h"]”Œ"in-kernel api for fpga programming”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”Œentry”Œ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”}”(jo jl j%j"j^j[jg jd uŒ nametypes”}”(jo ‰j%‰j^‰jg ‰uh}”(jl h·j"hËj[j(jd jajçjðj j¥jW j\ 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.