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
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 )
unsigned long long uint64_t
struct ena_llq_option stride
Descriptor strides.
struct ena_llq_option desc
Descriptor counts.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define GVE_IRQ_COUNT
Number of interrupt channels.
#define GVE_TX_FILL
Maximum number of transmit buffers.
#define GVE_RX_FILL
Maximum number of receive buffers.
#define GVE_QPL_MAX
Maximum number of pages per queue.
A Google Cloud MAC address.
struct in_addr in
Local IPv4 address.
uint8_t reserved[2]
Reserved.
Create receive queue command.
uint8_t reserved[6]
Reserved.
uint64_t desc
Descriptor ring address.
uint16_t bufsz
Packet buffer size.
uint64_t cmplt
Completion ring address.
uint16_t desc_count
Number of descriptor ring entries.
uint32_t qpl_id
Queue page list ID.
uint32_t notify_id
Notification channel ID.
uint16_t cmplt_count
Number of completion ring entries.
uint64_t res
Queue resources address.
struct gve_admin_header hdr
Header.
uint8_t reserved_a[4]
Reserved.
Create transmit queue command.
uint8_t reserved_b[4]
Reserved.
uint16_t cmplt_count
Number of completion ring entries.
uint16_t desc_count
Number of descriptor ring entries.
uint32_t qpl_id
Queue page list ID.
struct gve_admin_header hdr
Header.
uint32_t notify_id
Notification channel ID.
uint64_t desc
Descriptor ring address.
uint64_t res
Queue resources address.
uint64_t cmplt
Completion ring address.
uint8_t reserved_a[4]
Reserved.
uint32_t ver
Descriptor version.
struct gve_admin_header hdr
Header.
uint64_t addr
Descriptor buffer address.
uint32_t len
Descriptor maximum length.
Register page list command.
uint32_t count
Number of pages.
uint64_t addr
Address list address.
struct gve_admin_header hdr
Header.
struct gve_admin_header hdr
Header.
uint32_t prod
Producer counter.
union gve_admin_command * cmd
Commands.
struct dma_mapping map
DMA mapping.
A transmit or receive buffer descriptor.
uint64_t addr
Address (within queue page list address space)
uint16_t len
Total length (including this header)
uint16_t tx_count
Number of transmit queue entries.
uint16_t opt_count
Number of device options.
uint8_t reserved_b[2]
Reserved.
uint16_t counters
Number of event counters.
uint8_t opts[216]
Space for options.
struct google_mac mac
MAC address.
uint16_t rx_count
Number of receive queue entries.
uint16_t mtu
Maximum transmit unit.
uint8_t reserved_c[4]
Reserved.
uint8_t reserved_a[10]
Reserved.
uint8_t reserved_d[6]
Reserved.
An out-of-order receive completion.
uint8_t reserved_d[3]
Reserved.
uint16_t len
Length and generation bit.
uint8_t reserved_c[2]
Reserved.
uint8_t reserved_b[2]
Reserved.
uint8_t reserved_e[19]
Reserved.
uint8_t reserved_a[1]
Reserved.
An out-of-order receive descriptor.
uint8_t reserved_a[7]
Reserved.
struct gve_buffer buf
Buffer descriptor.
uint8_t reserved_b[16]
Reserved.
An out-of-order transmit completion.
uint8_t reserved_a[1]
Reserved.
uint8_t reserved_b[4]
Reserved.
struct gve_dqo_tx_tag tag
Tag.
uint8_t flags
Completion flags.
An out-of-order transmit descriptor.
uint16_t len
Length of this descriptor.
struct gve_dqo_tx_tag tag
Tag.
struct gve_buffer buf
Buffer descriptor.
uint8_t type
Descriptor type and flags.
uint8_t reserved_a[3]
Reserved.
An out-of-order transmit tag.
int8_t count
Number of descriptors covered by this completion.
uint8_t id
Buffer index within queue page list.
volatile uint32_t count
Number of events that have occurred.
struct gve_event * event
Event counters.
struct dma_mapping map
DMA mapping.
unsigned int count
Actual number of event counters.
An in-order receive completion descriptor.
uint8_t seq
Sequence number.
uint8_t reserved[60]
Reserved.
An in-order receive descriptor.
struct gve_buffer buf
Buffer descriptor.
An in-order transmit descriptor.
uint8_t reserved_a[2]
Reserved.
uint16_t total
Total length of this packet.
uint8_t count
Number of descriptors in this packet.
struct gve_buffer buf
Buffer descriptor.
uint16_t len
Length of this descriptor.
uint8_t reserved[60]
Reserved.
uint32_t db_idx
Interrupt doorbell index (within doorbell BAR)
struct dma_mapping map
DMA mapping.
volatile uint32_t * db[GVE_IRQ_COUNT]
Interrupt doorbells.
struct gve_irq * irq
Interrupt channels.
A Google Virtual Ethernet NIC.
uint8_t revision
PCI revision.
uint32_t options
Supported options.
struct gve_scratch scratch
Scratch buffer.
unsigned int mode
Operating mode.
void * cfg
Configuration registers.
struct gve_queue tx
Transmit queue.
struct io_buffer * tx_iobuf[GVE_TX_FILL]
Transmit I/O buffers (indexed by tag)
void * db
Doorbell registers.
struct net_device * netdev
Network device.
unsigned int seq
Receive sequence number.
struct gve_events events
Event counters.
struct pci_msix msix
Dummy MSI-X interrupt.
struct gve_irqs irqs
Interrupt channels.
uint32_t activity
Reset recovery recorded activity counter.
uint8_t rx_tag[GVE_RX_FILL]
Receive tag ring.
uint8_t tx_chain[GVE_TX_FILL]
Transmit tag chain.
uint8_t tx_tag[GVE_TX_FILL]
Transmit tag ring.
struct gve_admin admin
Admin queue.
unsigned int retries
Startup process retry counter.
struct process startup
Startup process.
struct retry_timer watchdog
Reset recovery watchdog timer.
struct gve_queue rx
Receive queue.
struct dma_device * dma
DMA device.
uint16_t len
Length (excluding this header)
uint32_t required
Required feature mask.
uint64_t addr[GVE_QPL_MAX]
Page address.
void * data
Page addresses.
struct dma_mapping map
Page mapping.
unsigned int count
Number of pages.
unsigned int id
Queue page list ID.
physaddr_t base
Queue page list base device address.
uint8_t cmplt
Completion ring stride.
uint8_t desc
Descriptor ring stride.
struct gve_queue_stride dqo
Out-of-order queue strides.
uint8_t destroy
Command to destroy queue.
void(* param)(struct gve_queue *queue, uint32_t qpl, union gve_admin_command *cmd)
Populate command parameters to create queue.
uint8_t fill
Maximum fill level.
uint8_t create
Command to create queue.
uint8_t irq
Interrupt channel.
uint32_t qpl
Queue page list ID.
struct gve_queue_stride gqi
In-order queue strides.
struct dma_mapping desc_map
Descriptor mapping.
struct gve_gqi_tx_descriptor * gqi
In-order transmit descriptors.
const struct gve_queue_type * type
Queue type.
struct gve_queue_stride stride
Queue strides.
volatile uint32_t * db
Doorbell register.
uint32_t prod
Producer counter.
union gve_queue::@117017247352056152311271245151320066373212175207 cmplt
Completion ring.
struct gve_qpl qpl
Queue page list.
unsigned int count
Number of descriptors (must be a power of two)
struct gve_resources * res
Queue resources.
struct dma_mapping res_map
Queue resources mapping.
unsigned int fill
Maximum fill level (must be a power of two)
uint32_t done
Completion counter.
struct dma_mapping cmplt_map
Completion mapping.
struct gve_dqo_tx_descriptor * dqo
Out-of-order transmit descriptors.
struct gve_event * event
Event counter.
uint32_t cons
Consumer counter.
uint32_t db_idx
Descriptor doorbell index (within doorbell BAR)
uint8_t reserved[56]
Reserved.
uint32_t evt_idx
Event counter index (within event counter array)
Scratch buffer for admin queue commands.
struct dma_mapping map
DMA mapping.
union gve_scratch::@025171361064105355267231004351370162360052020120 * buf
Buffer contents.
struct gve_pages pages
Page address list.
struct gve_device_descriptor desc
Device descriptor.
struct gve_admin_simple simple
Simple command.
struct gve_admin_describe desc
Describe device.
struct gve_admin_register reg
Register page list.
struct gve_admin_create_tx create_tx
Create transmit queue.
struct gve_admin_configure conf
Configure device resources.
struct gve_admin_create_rx create_rx
Create receive queue.
struct gve_admin_header hdr
Header.
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.