sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftargetA/translations/zh_CN/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/zh_TW/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/it_IT/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/ja_JP/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/ko_KR/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/pt_BR/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftargetA/translations/sp_SP/networking/device_drivers/ethernet/google/gvemodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh[/var/lib/git/docbuild/linux/Documentation/networking/device_drivers/ethernet/google/gve.rsthKubhsection)}(hhh](htitle)}(h>Linux kernel driver for Compute Engine Virtual Ethernet (gve):h]h>Linux kernel driver for Compute Engine Virtual Ethernet (gve):}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hSupported Hardwareh]hSupported Hardware}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(htThe GVE driver binds to a single PCI device id used by the virtual Ethernet device found in some Compute Engine VMs.h]htThe GVE driver binds to a single PCI device id used by the virtual Ethernet device found in some Compute Engine VMs.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubhtable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]h)}(hFieldh]hField}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj4ubah}(h]h ]h"]h$]h&]uh1j2hj/ubj3)}(hhh]h)}(hValueh]hValue}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjKubah}(h]h ]h"]h$]h&]uh1j2hj/ubj3)}(hhh]h)}(hCommentsh]hComments}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjbubah}(h]h ]h"]h$]h&]uh1j2hj/ubeh}(h]h ]h"]h$]h&]uh1j-hj*ubah}(h]h ]h"]h$]h&]uh1j(hjubhtbody)}(hhh](j.)}(hhh](j3)}(hhh]h)}(h Vendor IDh]h Vendor ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(h`0x1AE0`h]htitle_reference)}(hjh]h0x1AE0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(hGoogleh]hGoogle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1j-hjubj.)}(hhh](j3)}(hhh]h)}(h Device IDh]h Device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(h`0x0042`h]j)}(hjh]h0x0042}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1j-hjubj.)}(hhh](j3)}(hhh]h)}(h Sub-vendor IDh]h Sub-vendor ID}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1j2hj,ubj3)}(hhh]h)}(h`0x1AE0`h]j)}(hjKh]h0x1AE0}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1j2hj,ubj3)}(hhh]h)}(hGoogleh]hGoogle}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjfubah}(h]h ]h"]h$]h&]uh1j2hj,ubeh}(h]h ]h"]h$]h&]uh1j-hjubj.)}(hhh](j3)}(hhh]h)}(h Sub-device IDh]h Sub-device ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(h`0x0058`h]j)}(hjh]h0x0058}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1j-hjubj.)}(hhh](j3)}(hhh]h)}(h Revision IDh]h Revision ID}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(h`0x0`h]j)}(hjh]h0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1j-hjubj.)}(hhh](j3)}(hhh]h)}(h Device Classh]h Device Class}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(h`0x200`h]j)}(hj4h]h0x200}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1j2hjubj3)}(hhh]h)}(hEtherneth]hEthernet}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjOubah}(h]h ]h"]h$]h&]uh1j2hjubeh}(h]h ]h"]h$]h&]uh1j-hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubeh}(h]supported-hardwareah ]h"]supported hardwareah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hPCI Barsh]hPCI Bars}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe gVNIC PCI device exposes three 32-bit memory BARS: - Bar0 - Device configuration and status registers. - Bar1 - MSI-X vector table - Bar2 - IRQ, RX and TX doorbellsh]hThe gVNIC PCI device exposes three 32-bit memory BARS: - Bar0 - Device configuration and status registers. - Bar1 - MSI-X vector table - Bar2 - IRQ, RX and TX doorbells}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]pci-barsah ]h"]pci barsah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hDevice Interactionsh]hDevice Interactions}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK$ubhdefinition_list)}(hhh]hdefinition_list_item)}(hXSThe driver interacts with the device in the following ways: - Registers - A block of MMIO registers - See gve_register.h for more detail - Admin Queue - See description below - Reset - At any time the device can be reset - Interrupts - See supported interrupts below - Transmit and Receive Queues - See description below h](hterm)}(h;The driver interacts with the device in the following ways:h]h;The driver interacts with the device in the following ways:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK0hjubh definition)}(hhh]h bullet_list)}(hhh](h list_item)}(hLRegisters - A block of MMIO registers - See gve_register.h for more detailh]j)}(hhh]j)}(hJRegisters - A block of MMIO registers - See gve_register.h for more detailh](j)}(h Registersh]h Registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK'hjubj)}(hhh]j)}(hhh](j)}(hA block of MMIO registersh]h)}(hjh]hA block of MMIO registers}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h"See gve_register.h for more detailh]h)}(hjh]h"See gve_register.h for more detail}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1jhhhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK'hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h$Admin Queue - See description belowh]j)}(hhh]j)}(h#Admin Queue - See description belowh](j)}(h Admin Queueh]h Admin Queue}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK)hjZubj)}(hhh]j)}(hhh]j)}(hSee description belowh]h)}(hjth]hSee description below}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK*hjrubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]j9j:uh1jhhhK*hjlubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhhhK)hjWubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h,Reset - At any time the device can be reseth]j)}(hhh]j)}(h+Reset - At any time the device can be reseth](j)}(hReseth]hReset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK+hjubj)}(hhh]j)}(hhh]j)}(h#At any time the device can be reseth]h)}(hjh]h#At any time the device can be reset}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j9j:uh1jhhhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h,Interrupts - See supported interrupts belowh]j)}(hhh]j)}(h+Interrupts - See supported interrupts belowh](j)}(h Interruptsh]h Interrupts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK-hjubj)}(hhh]j)}(hhh]j)}(hSee supported interrupts belowh]h)}(hjh]hSee supported interrupts below}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]j9j:uh1jhhhK.hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK-hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h5Transmit and Receive Queues - See description below h]j)}(hhh]j)}(h4Transmit and Receive Queues - See description below h](j)}(hTransmit and Receive Queuesh]hTransmit and Receive Queues}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK0hjVubj)}(hhh]j)}(hhh]j)}(hSee description below h]h)}(hSee description belowh]hSee description below}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK0hjnubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]j9j:uh1jhhhK0hjhubah}(h]h ]h"]h$]h&]uh1jhjVubeh}(h]h ]h"]h$]h&]uh1jhhhK0hjSubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j9j:uh1jhhhK&hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhhhK0hjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubh)}(hhh](h)}(hDescriptor Formatsh]hDescriptor Formats}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK3ubh)}(hGVE supports two descriptor formats: GQI and DQO. These two formats have entirely different descriptors, which will be described below.h]hGVE supports two descriptor formats: GQI and DQO. These two formats have entirely different descriptors, which will be described below.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK4hjhhubeh}(h]descriptor-formatsah ]h"]descriptor formatsah$]h&]uh1hhjhhhhhK3ubh)}(hhh](h)}(hAddressing Modeh]hAddressing Mode}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK8ubh)}(hGVE supports two addressing modes: QPL and RDA. QPL ("queue-page-list") mode communicates data through a set of pre-registered pages.h]hGVE supports two addressing modes: QPL and RDA. QPL (“queue-page-list”) mode communicates data through a set of pre-registered pages.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK9hjhhubh)}(hFor RDA ("raw DMA addressing") mode, the set of pages is dynamic. Therefore, the packet buffers can be anywhere in guest memory.h]hFor RDA (“raw DMA addressing”) mode, the set of pages is dynamic. Therefore, the packet buffers can be anywhere in guest memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK=hjhhubeh}(h]addressing-modeah ]h"]addressing modeah$]h&]uh1hhjhhhhhK8ubh)}(hhh](h)}(h Registersh]h Registers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKAubh)}(hAll registers are MMIO.h]hAll registers are MMIO.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKBhjhhubh)}(hThe registers are used for initializing and configuring the device as well as querying device status in response to management interrupts.h]hThe registers are used for initializing and configuring the device as well as querying device status in response to management interrupts.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhjhhubeh}(h] registersah ]h"] registersah$]h&]uh1hhjhhhhhKAubh)}(hhh](h)}(h Endiannessh]h Endianness}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhhhhhKHubj)}(hhh](j)}(h6Admin Queue messages and registers are all Big Endian.h]h)}(hjch]h6Admin Queue messages and registers are all Big Endian.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjaubah}(h]h ]h"]h$]h&]uh1jhj^hhhhhNubj)}(h6GQI descriptors and datapath registers are Big Endian.h]h)}(hjzh]h6GQI descriptors and datapath registers are Big Endian.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjxubah}(h]h ]h"]h$]h&]uh1jhj^hhhhhNubj)}(h:DQO descriptors and datapath registers are Little Endian. h]h)}(h9DQO descriptors and datapath registers are Little Endian.h]h9DQO descriptors and datapath registers are Little Endian.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhjubah}(h]h ]h"]h$]h&]uh1jhj^hhhhhNubeh}(h]h ]h"]h$]h&]j9j:uh1jhhhKIhjMhhubeh}(h] endiannessah ]h"] endiannessah$]h&]uh1hhjhhhhhKHubh)}(hhh](h)}(hAdmin Queue (AQ)h]hAdmin Queue (AQ)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKNubh)}(hXHThe Admin Queue is a PAGE_SIZE memory block, treated as an array of AQ commands, used by the driver to issue commands to the device and set up resources.The driver and the device maintain a count of how many commands have been submitted and executed. To issue AQ commands, the driver must do the following (with proper locking):h]hXHThe Admin Queue is a PAGE_SIZE memory block, treated as an array of AQ commands, used by the driver to issue commands to the device and set up resources.The driver and the device maintain a count of how many commands have been submitted and executed. To issue AQ commands, the driver must do the following (with proper locking):}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjhhubhenumerated_list)}(hhh](j)}(h;Copy new commands into next available slots in the AQ arrayh]h)}(hjh]h;Copy new commands into next available slots in the AQ array}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKUhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h2Increment its counter by he number of new commandsh]h)}(hjh]h2Increment its counter by he number of new commands}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hlinux kernel driver for compute engine virtual ethernet (gve):ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksj2footnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jjjjj j jjjjjJjGjjjTjQj{jxj j jjjjjjtransmitNreceiveNj j u nametypes}(j jjj jjjJjjTj{j jjjj j j uh}(j hjhjjj jjjjjjGjjjMjQjjxjWj j~jjjjjjjkjJjjrj jjT j3 jz jY u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j KsRparse_messages](hsystem_message)}(hhh]h)}(h+Duplicate implicit target name: "transmit".h]h/Duplicate implicit target name: “transmit”.}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jT alevelKtypeINFOsourcehnjlineKuh1j hj3 hhhhhKubj )}(hhh]h)}(h*Duplicate implicit target name: "receive".h]h.Duplicate implicit target name: “receive”.}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj; ubah}(h]h ]h"]h$]h&]jz alevelKtypej8 sourcehnjlineKuh1j hjY hhhhhKubetransform_messages] transformerN include_log] decorationNhhub.