aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Documentation/networking/device_drivers/google/gve.rst
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/networking/device_drivers/google/gve.rst')
-rw-r--r--Documentation/networking/device_drivers/google/gve.rst123
1 files changed, 0 insertions, 123 deletions
diff --git a/Documentation/networking/device_drivers/google/gve.rst b/Documentation/networking/device_drivers/google/gve.rst
deleted file mode 100644
index 793693cef6e3..000000000000
--- a/Documentation/networking/device_drivers/google/gve.rst
+++ /dev/null
@@ -1,123 +0,0 @@
-.. SPDX-License-Identifier: GPL-2.0+
-
-==============================================================
-Linux kernel driver for Compute Engine Virtual Ethernet (gve):
-==============================================================
-
-Supported Hardware
-===================
-The GVE driver binds to a single PCI device id used by the virtual
-Ethernet device found in some Compute Engine VMs.
-
-+--------------+----------+---------+
-|Field | Value | Comments|
-+==============+==========+=========+
-|Vendor ID | `0x1AE0` | Google |
-+--------------+----------+---------+
-|Device ID | `0x0042` | |
-+--------------+----------+---------+
-|Sub-vendor ID | `0x1AE0` | Google |
-+--------------+----------+---------+
-|Sub-device ID | `0x0058` | |
-+--------------+----------+---------+
-|Revision ID | `0x0` | |
-+--------------+----------+---------+
-|Device Class | `0x200` | Ethernet|
-+--------------+----------+---------+
-
-PCI Bars
-========
-The 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
-
-Device Interactions
-===================
-The 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
-
-Registers
----------
-All registers are MMIO and big endian.
-
-The registers are used for initializing and configuring the device as well as
-querying device status in response to management interrupts.
-
-Admin Queue (AQ)
-----------------
-The 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):
-
-1) Copy new commands into next available slots in the AQ array
-2) Increment its counter by he number of new commands
-3) Write the counter into the GVE_ADMIN_QUEUE_DOORBELL register
-4) Poll the ADMIN_QUEUE_EVENT_COUNTER register until it equals
- the value written to the doorbell, or until a timeout.
-
-The device will update the status field in each AQ command reported as
-executed through the ADMIN_QUEUE_EVENT_COUNTER register.
-
-Device Resets
--------------
-A device reset is triggered by writing 0x0 to the AQ PFN register.
-This causes the device to release all resources allocated by the
-driver, including the AQ itself.
-
-Interrupts
-----------
-The following interrupts are supported by the driver:
-
-Management Interrupt
-~~~~~~~~~~~~~~~~~~~~
-The management interrupt is used by the device to tell the driver to
-look at the GVE_DEVICE_STATUS register.
-
-The handler for the management irq simply queues the service task in
-the workqueue to check the register and acks the irq.
-
-Notification Block Interrupts
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The notification block interrupts are used to tell the driver to poll
-the queues associated with that interrupt.
-
-The handler for these irqs schedule the napi for that block to run
-and poll the queues.
-
-Traffic Queues
---------------
-gVNIC's queues are composed of a descriptor ring and a buffer and are
-assigned to a notification block.
-
-The descriptor rings are power-of-two-sized ring buffers consisting of
-fixed-size descriptors. They advance their head pointer using a __be32
-doorbell located in Bar2. The tail pointers are advanced by consuming
-descriptors in-order and updating a __be32 counter. Both the doorbell
-and the counter overflow to zero.
-
-Each queue's buffers must be registered in advance with the device as a
-queue page list, and packet data can only be put in those pages.
-
-Transmit
-~~~~~~~~
-gve maps the buffers for transmit rings into a FIFO and copies the packets
-into the FIFO before sending them to the NIC.
-
-Receive
-~~~~~~~
-The buffers for receive rings are put into a data ring that is the same
-length as the descriptor ring and the head and tail pointers advance over
-the rings together.