42 #define GVE_PAGE_SIZE 0x1000 51 #define GVE_ALIGN GVE_PAGE_SIZE 54 #define GVE_CFG_BAR PCI_BASE_ADDRESS_0 61 #define GVE_CFG_SIZE 0x1000 64 #define GVE_CFG_DEVSTAT 0x0000 65 #define GVE_CFG_DEVSTAT_RESET 0x00000010UL 68 #define GVE_CFG_DRVSTAT 0x0004 69 #define GVE_CFG_DRVSTAT_RUN 0x00000001UL 72 #define GVE_RESET_MAX_WAIT_MS 500 75 #define GVE_CFG_ADMIN_PFN 0x0010 78 #define GVE_CFG_ADMIN_DB 0x0014 81 #define GVE_CFG_ADMIN_EVT 0x0018 84 #define GVE_CFG_VERSION 0x001f 87 #define GVE_CFG_ADMIN_BASE_HI 0x0020 90 #define GVE_CFG_ADMIN_BASE_LO 0x0024 93 #define GVE_CFG_ADMIN_LEN 0x0028 96 #define GVE_DB_BAR PCI_BASE_ADDRESS_2 113 #define GVE_ADMIN_STATUS_OK 0x00000001 124 #define GVE_ADMIN_DESCRIBE 0x0001 139 #define GVE_ADMIN_DESCRIBE_VER 1 190 #define GVE_OPT_GQI_RDA 0x02 193 #define GVE_OPT_GQI_QPL 0x03 196 #define GVE_OPT_DQO_RDA 0x04 199 #define GVE_OPT_DQO_QPL 0x07 202 #define GVE_ADMIN_CONFIGURE 0x0002 227 #define GVE_FORMAT( mode ) ( (mode) + 1 ) 230 #define GVE_ADMIN_REGISTER 0x0003 252 #define GVE_QPL_MAX 32 261 #define GVE_ADMIN_UNREGISTER 0x0004 264 #define GVE_ADMIN_CREATE_TX 0x0005 293 #define GVE_ADMIN_CREATE_RX 0x0006 326 #define GVE_ADMIN_DESTROY_TX 0x0007 329 #define GVE_ADMIN_DESTROY_RX 0x0008 332 #define GVE_ADMIN_DECONFIGURE 0x0009 366 #define GVE_ADMIN_COUNT ( GVE_PAGE_SIZE / sizeof ( union gve_admin_command ) ) 435 #define GVE_IRQ_COUNT 2 448 #define GVE_GQI_IRQ_DISABLE 0x40000000UL 451 #define GVE_DQO_IRQ_REARM 0x00000019UL 483 #define GVE_BUF_SIZE ( GVE_PAGE_SIZE / 2 ) 486 #define GVE_BUF_PER_PAGE ( GVE_PAGE_SIZE / GVE_BUF_SIZE ) 542 #define GVE_RAW_QPL 0xffffffff 549 #define GVE_TX_FILL 8 552 #define GVE_TX_QPL 0x18ae5458 580 #define GVE_GQI_TX_TYPE_START 0x00 583 #define GVE_GQI_TX_TYPE_CONT 0x20 618 #define GVE_DQO_TX_TYPE_PACKET 0x0c 621 #define GVE_DQO_TX_TYPE_LAST 0x20 636 #define GVE_DQO_TXF_PKT 0x10 639 #define GVE_DQO_TXF_GEN 0x80 648 #define GVE_RX_FILL 64 651 #define GVE_RX_QPL 0x18ae5258 663 #define GVE_GQI_RXF_ERROR 0x08 666 #define GVE_GQI_RXF_MORE 0x20 669 #define GVE_GQI_RX_SEQ_MASK 0x07 684 #define GVE_GQI_RX_PAD 2 721 #define GVE_DQO_RXS_ERROR 0x04 724 #define GVE_DQO_RXL_GEN 0x4000 727 #define GVE_DQO_RXF_LAST 0x02 903 #define GVE_MODE_QPL 0x01 904 #define GVE_MODE_DQO 0x02 907 #define GVE_ADMIN_MAX_WAIT_MS 500 910 #define GVE_RESET_MAX_RETRY 5 913 #define GVE_WATCHDOG_TIMEOUT ( 1 * TICKS_PER_SEC ) void * data
Page addresses.
uint8_t reserved_a[10]
Reserved.
uint16_t len
Total length (including this header)
Register page list command.
struct dma_device * dma
DMA device.
struct dma_mapping res_map
Queue resources mapping.
struct in_addr in
Local IPv4 address.
uint16_t desc_count
Number of descriptor ring entries.
uint16_t rx_count
Number of receive queue entries.
uint8_t reserved_a[4]
Reserved.
uint8_t reserved[60]
Reserved.
uint32_t count
Number of pages.
uint16_t len
Length and generation bit.
Create receive queue command.
uint32_t evt_idx
Event counter index (within event counter array)
uint8_t desc
Descriptor ring stride.
uint32_t required
Required feature mask.
uint16_t bufsz
Packet buffer size.
struct gve_queue_stride stride
Queue strides.
uint16_t opt_count
Number of device options.
struct dma_mapping map
DMA mapping.
unsigned int fill
Maximum fill level (must be a power of two)
struct gve_event * event
Event counters.
uint16_t len
Length of this descriptor.
uint32_t qpl_id
Queue page list ID.
physaddr_t base
Queue page list base device address.
struct gve_device_descriptor desc
Device descriptor.
uint64_t res
Queue resources address.
struct gve_resources * res
Queue resources.
struct gve_dqo_tx_tag tag
Tag.
volatile uint32_t * db
Doorbell register.
uint8_t reserved[60]
Reserved.
Create transmit queue command.
uint32_t db_idx
Descriptor doorbell index (within doorbell BAR)
uint16_t total
Total length of this packet.
uint16_t len
Length of this descriptor.
uint8_t seq
Sequence number.
uint64_t addr[GVE_QPL_MAX]
Page address.
struct gve_buffer buf
Buffer descriptor.
unsigned long long uint64_t
uint8_t flags
Completion flags.
union gve_queue::@53 desc
Descriptor ring.
uint32_t qpl
Queue page list ID.
struct gve_qpl qpl
Queue page list.
A transmit or receive buffer descriptor.
uint8_t rx_tag[GVE_RX_FILL]
Receive tag ring.
struct gve_admin_create_rx create_rx
Create receive queue.
uint8_t type
Descriptor type and flags.
uint8_t reserved_c[2]
Reserved.
struct gve_admin_register reg
Register page list.
struct gve_queue rx
Receive queue.
struct gve_dqo_tx_tag tag
Tag.
unsigned int mode
Operating mode.
struct gve_admin_header hdr
Header.
struct gve_queue tx
Transmit queue.
#define GVE_TX_FILL
Maximum number of transmit buffers.
uint8_t reserved[2]
Reserved.
uint8_t reserved_a[4]
Reserved.
struct gve_admin_create_tx create_tx
Create transmit queue.
struct gve_dqo_tx_descriptor * dqo
Out-of-order transmit descriptors.
struct dma_mapping map
Page mapping.
struct gve_queue_type::@59 stride
Queue strides.
uint8_t reserved[6]
Reserved.
uint32_t activity
Reset recovery recorded activity counter.
void * db
Doorbell registers.
struct retry_timer watchdog
Reset recovery watchdog timer.
uint32_t options
Supported options.
uint8_t opts[216]
Space for options.
struct dma_mapping map
DMA mapping.
struct process startup
Startup process.
#define GVE_RX_FILL
Maximum number of receive buffers.
uint64_t cmplt
Completion ring address.
uint8_t fill
Maximum fill level.
struct gve_gqi_rx_descriptor * gqi
In-order receive descriptors.
uint32_t cons
Consumer counter.
volatile uint32_t * db[GVE_IRQ_COUNT]
Interrupt doorbells.
uint8_t reserved_a[1]
Reserved.
uint32_t prod
Producer counter.
unsigned int count
Number of pages.
uint8_t reserved[56]
Reserved.
uint8_t reserved_e[19]
Reserved.
struct gve_dqo_rx_descriptor * dqo
Out-of-order receive descriptors.
struct gve_irqs irqs
Interrupt channels.
struct gve_admin_header hdr
Header.
uint8_t count
Number of descriptors in this packet.
volatile uint32_t count
Number of events that have occurred.
void * cfg
Configuration registers.
An out-of-order transmit tag.
struct google_mac mac
MAC address.
struct pci_msix msix
Dummy MSI-X interrupt.
struct gve_admin_describe desc
Describe device.
struct gve_admin_header hdr
Header.
uint32_t ver
Descriptor version.
uint16_t tx_count
Number of transmit queue entries.
union gve_queue::@53::@55 tx
Transmit descriptors.
uint8_t reserved_b[16]
Reserved.
uint8_t reserved_a[3]
Reserved.
uint8_t cmplt
Completion ring stride.
uint8_t reserved_a[7]
Reserved.
uint8_t tx_tag[GVE_TX_FILL]
Transmit tag ring.
A Google Virtual Ethernet NIC.
struct io_buffer * tx_iobuf[GVE_TX_FILL]
Transmit I/O buffers (indexed by tag)
uint8_t reserved_b[2]
Reserved.
uint8_t reserved_b[4]
Reserved.
An out-of-order receive descriptor.
struct gve_pages pages
Page address list.
An in-order receive descriptor.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
unsigned int seq
Receive sequence number.
uint16_t len
Length (excluding this header)
uint8_t reserved_a[2]
Reserved.
struct gve_gqi_tx_descriptor * gqi
In-order transmit descriptors.
struct gve_dqo_rx_completion * dqo
Out-of-order receive completions.
uint32_t done
Completion counter.
uint8_t destroy
Command to destroy queue.
#define GVE_QPL_MAX
Maximum number of pages per queue.
uint8_t reserved_b[2]
Reserved.
uint32_t qpl_id
Queue page list ID.
unsigned int id
Queue page list ID.
uint64_t addr
Descriptor buffer address.
uint64_t desc
Descriptor ring address.
An out-of-order transmit descriptor.
An in-order receive completion descriptor.
struct gve_admin_configure conf
Configure device resources.
An in-order transmit descriptor.
unsigned int count
Number of descriptors (must be a power of two)
uint32_t notify_id
Notification channel ID.
struct gve_events events
Event counters.
uint8_t reserved_d[3]
Reserved.
uint8_t reserved_d[6]
Reserved.
int8_t count
Number of descriptors covered by this completion.
#define GVE_IRQ_COUNT
Number of interrupt channels.
struct dma_mapping cmplt_map
Completion mapping.
union gve_scratch::@52 * buf
Buffer contents.
struct gve_buffer buf
Buffer descriptor.
uint64_t addr
Address (within queue page list address space)
uint8_t tx_chain[GVE_TX_FILL]
Transmit tag chain.
struct gve_event * event
Event counter.
unsigned int retries
Startup process retry counter.
union gve_queue::@53::@56 rx
Receive descriptors.
unsigned int count
Actual number of event counters.
struct gve_admin_header hdr
Header.
uint16_t cmplt_count
Number of completion ring entries.
uint64_t desc
Descriptor ring address.
uint8_t revision
PCI revision.
uint16_t desc_count
Number of descriptor ring entries.
A Google Cloud MAC address.
An out-of-order transmit completion.
struct gve_buffer buf
Buffer descriptor.
uint32_t len
Descriptor maximum length.
uint8_t reserved_a[1]
Reserved.
uint64_t res
Queue resources address.
uint32_t db_idx
Interrupt doorbell index (within doorbell BAR)
Scratch buffer for admin queue commands.
uint32_t notify_id
Notification channel ID.
struct gve_queue_stride gqi
In-order queue strides.
struct net_device * netdev
Network device.
struct gve_admin_header hdr
Header.
struct dma_mapping map
DMA mapping.
struct gve_irq * irq
Interrupt channels.
union gve_admin_command * cmd
Commands.
void(* param)(struct gve_queue *queue, uint32_t qpl, union gve_admin_command *cmd)
Populate command parameters to create queue.
struct dma_mapping desc_map
Descriptor mapping.
union gve_queue::@54 cmplt
Completion ring.
struct dma_mapping map
DMA mapping.
uint16_t counters
Number of event counters.
struct gve_admin_header hdr
Header.
const struct gve_queue_type * type
Queue type.
struct gve_dqo_tx_completion * dqo
Out-of-order transmit completions.
struct gve_admin admin
Admin queue.
An out-of-order receive completion.
uint32_t prod
Producer counter.
struct gve_buffer buf
Buffer descriptor.
uint8_t create
Command to create queue.
uint8_t reserved_b[4]
Reserved.
uint16_t cmplt_count
Number of completion ring entries.
uint8_t irq
Interrupt channel.
struct gve_queue_stride dqo
Out-of-order queue strides.
struct gve_scratch scratch
Scratch buffer.
uint8_t reserved_c[4]
Reserved.
uint64_t addr
Address list address.
struct gve_gqi_rx_completion * gqi
In-order receive completions.
uint64_t cmplt
Completion ring address.
struct gve_admin_simple simple
Simple command.
uint16_t mtu
Maximum transmit unit.
uint8_t id
Buffer index within queue page list.