#ifndef _INTELXLVF_H #define _INTELXLVF_H /** @file * * Intel 40 Gigabit Ethernet virtual function network card driver * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include "intelxl.h" /** BAR size */ #define INTELXLVF_BAR_SIZE 0x10000 /** Transmit Queue Tail Register */ #define INTELXLVF_QTX_TAIL 0x00000 /** Receive Queue Tail Register */ #define INTELXLVF_QRX_TAIL 0x02000 /** VF Interrupt Zero Dynamic Control Register */ #define INTELXLVF_VFINT_DYN_CTL0 0x5c00 /** VF Admin Queue register block */ #define INTELXLVF_ADMIN 0x6000 /** Admin Command Queue Base Address Low Register (offset) */ #define INTELXLVF_ADMIN_CMD_BAL 0x1c00 /** Admin Command Queue Base Address High Register (offset) */ #define INTELXLVF_ADMIN_CMD_BAH 0x1800 /** Admin Command Queue Length Register (offset) */ #define INTELXLVF_ADMIN_CMD_LEN 0x0800 /** Admin Command Queue Head Register (offset) */ #define INTELXLVF_ADMIN_CMD_HEAD 0x0400 /** Admin Command Queue Tail Register (offset) */ #define INTELXLVF_ADMIN_CMD_TAIL 0x2400 /** Admin Event Queue Base Address Low Register (offset) */ #define INTELXLVF_ADMIN_EVT_BAL 0x0c00 /** Admin Event Queue Base Address High Register (offset) */ #define INTELXLVF_ADMIN_EVT_BAH 0x0000 /** Admin Event Queue Length Register (offset) */ #define INTELXLVF_ADMIN_EVT_LEN 0x2000 /** Admin Event Queue Head Register (offset) */ #define INTELXLVF_ADMIN_EVT_HEAD 0x1400 /** Admin Event Queue Tail Register (offset) */ #define INTELXLVF_ADMIN_EVT_TAIL 0x1000 /** Maximum time to wait for a VF admin request to complete */ #define INTELXLVF_ADMIN_MAX_WAIT_MS 2000 /** VF Reset Status Register */ #define INTELXLVF_VFGEN_RSTAT 0x8800 #define INTELXLVF_VFGEN_RSTAT_VFR_STATE(x) ( (x) & 0x3 ) #define INTELXLVF_VFGEN_RSTAT_VFR_STATE_ACTIVE 0x2 /** Maximum time to wait for reset to complete */ #define INTELXLVF_RESET_MAX_WAIT_MS 1000 /** * Initialise descriptor ring * * @v ring Descriptor ring * @v count Number of descriptors * @v len Length of a single descriptor * @v tail Tail register offset */ static inline __attribute__ (( always_inline)) void intelxlvf_init_ring ( struct intelxl_ring *ring, unsigned int count, size_t len, unsigned int tail ) { ring->len = ( count * len ); ring->tail = tail; } #endif /* _INTELXLVF_H */