iPXE
Data Structures | Macros | Functions | Variables
intelvf.h File Reference

Intel 10/100/1000 virtual function network card driver. More...

#include "intel.h"

Go to the source code of this file.

Data Structures

struct  intelvf_msg_mac
 MAC address mailbox message. More...
 
struct  intelvf_msg_version
 Version number mailbox message. More...
 
struct  intelvf_msg_mtu
 MTU mailbox message. More...
 
struct  intelvf_msg_queues
 Queue configuration mailbox message (API v1.1+ only) More...
 
struct  intelvf_msg_raw
 Raw mailbox message. More...
 
union  intelvf_msg
 Mailbox message. More...
 

Macros

#define INTELVF_BAR_SIZE   ( 16 * 1024 )
 Intel VF BAR size. More...
 
#define INTELVF_MBCTRL   0x0c40UL
 Mailbox Control Register. More...
 
#define INTELVF_MBCTRL_REQ   0x00000001UL
 Request for PF ready. More...
 
#define INTELVF_MBCTRL_ACK   0x00000002UL
 PF message received. More...
 
#define INTELVF_MBCTRL_VFU   0x00000004UL
 Buffer taken by VF. More...
 
#define INTELVF_MBCTRL_PFU   0x00000008UL
 Buffer taken to PF. More...
 
#define INTELVF_MBCTRL_PFSTS   0x00000010UL
 PF wrote a message. More...
 
#define INTELVF_MBCTRL_PFACK   0x00000020UL
 PF acknowledged message. More...
 
#define INTELVF_MBCTRL_RSTI   0x00000040UL
 PF reset in progress. More...
 
#define INTELVF_MBCTRL_RSTD   0x00000080UL
 PF reset complete. More...
 
#define INTELVF_MBMEM   0x0800UL
 Mailbox Memory Register Base. More...
 
#define INTELVF_MSG_TYPE_RESET   0x00000001UL
 Reset mailbox message. More...
 
#define INTELVF_MSG_TYPE_SET_MAC   0x00000002UL
 Set MAC address mailbox message. More...
 
#define INTELVF_MSG_TYPE_SET_MTU   0x00000005UL
 Set MTU mailbox message. More...
 
#define INTELVF_MSG_TYPE_GET_QUEUES   0x00000009UL
 Get queue configuration message. More...
 
#define INTELVF_MSG_TYPE_CONTROL   0x00000100UL
 Control ("ping") mailbox message. More...
 
#define INTELVF_MSG_TYPE_MASK   0x0000ffffUL
 Message type mask. More...
 
#define INTELVF_MSG_NACK   0x40000000UL
 Message NACK flag. More...
 
#define INTELVF_MSG_ACK   0x80000000UL
 Message ACK flag. More...
 
#define INTELVF_MSG_RESPONSE   ( INTELVF_MSG_ACK | INTELVF_MSG_NACK )
 Message is a response. More...
 
#define INTELVF_MBOX_MAX_WAIT_MS   500
 Maximum time to wait for mailbox message. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
struct intelvf_msg_mac __attribute__ ((packed))
 
int intelvf_mbox_msg (struct intel_nic *intel, union intelvf_msg *msg)
 Send/receive mailbox message. More...
 
int intelvf_mbox_poll (struct intel_nic *intel)
 Poll mailbox. More...
 
int intelvf_mbox_wait (struct intel_nic *intel)
 Wait for PF reset to complete. More...
 
int intelvf_mbox_reset (struct intel_nic *intel, uint8_t *hw_addr)
 Send reset message and get initial MAC address. More...
 
int intelvf_mbox_set_mac (struct intel_nic *intel, const uint8_t *ll_addr)
 Send set MAC address message. More...
 
int intelvf_mbox_set_mtu (struct intel_nic *intel, size_t mtu)
 Send set MTU message. More...
 

Variables

uint32_t hdr
 Message header. More...
 
uint8_t mac [ETH_ALEN]
 MAC address. More...
 
uint8_t reserved [(-ETH_ALEN) &0x3]
 Alignment padding. More...
 
uint32_t version
 API version. More...
 
uint32_t mtu
 Maximum packet size. More...
 
uint32_t tx
 Maximum number of transmit queues. More...
 
uint32_t rx
 Maximum number of receive queues. More...
 
uint32_t vlan_thing
 VLAN hand-waving thing. More...
 
uint32_t dflt
 Default queue. More...
 
uint32_t dword [0]
 Raw dwords. More...
 
union intelvf_msg __attribute__
 

Detailed Description

Intel 10/100/1000 virtual function network card driver.

Definition in file intelvf.h.

Macro Definition Documentation

◆ INTELVF_BAR_SIZE

#define INTELVF_BAR_SIZE   ( 16 * 1024 )

Intel VF BAR size.

Definition at line 15 of file intelvf.h.

◆ INTELVF_MBCTRL

#define INTELVF_MBCTRL   0x0c40UL

Mailbox Control Register.

Definition at line 18 of file intelvf.h.

◆ INTELVF_MBCTRL_REQ

#define INTELVF_MBCTRL_REQ   0x00000001UL

Request for PF ready.

Definition at line 19 of file intelvf.h.

◆ INTELVF_MBCTRL_ACK

#define INTELVF_MBCTRL_ACK   0x00000002UL

PF message received.

Definition at line 20 of file intelvf.h.

◆ INTELVF_MBCTRL_VFU

#define INTELVF_MBCTRL_VFU   0x00000004UL

Buffer taken by VF.

Definition at line 21 of file intelvf.h.

◆ INTELVF_MBCTRL_PFU

#define INTELVF_MBCTRL_PFU   0x00000008UL

Buffer taken to PF.

Definition at line 22 of file intelvf.h.

◆ INTELVF_MBCTRL_PFSTS

#define INTELVF_MBCTRL_PFSTS   0x00000010UL

PF wrote a message.

Definition at line 23 of file intelvf.h.

◆ INTELVF_MBCTRL_PFACK

#define INTELVF_MBCTRL_PFACK   0x00000020UL

PF acknowledged message.

Definition at line 24 of file intelvf.h.

◆ INTELVF_MBCTRL_RSTI

#define INTELVF_MBCTRL_RSTI   0x00000040UL

PF reset in progress.

Definition at line 25 of file intelvf.h.

◆ INTELVF_MBCTRL_RSTD

#define INTELVF_MBCTRL_RSTD   0x00000080UL

PF reset complete.

Definition at line 26 of file intelvf.h.

◆ INTELVF_MBMEM

#define INTELVF_MBMEM   0x0800UL

Mailbox Memory Register Base.

Definition at line 29 of file intelvf.h.

◆ INTELVF_MSG_TYPE_RESET

#define INTELVF_MSG_TYPE_RESET   0x00000001UL

Reset mailbox message.

Definition at line 32 of file intelvf.h.

◆ INTELVF_MSG_TYPE_SET_MAC

#define INTELVF_MSG_TYPE_SET_MAC   0x00000002UL

Set MAC address mailbox message.

Definition at line 35 of file intelvf.h.

◆ INTELVF_MSG_TYPE_SET_MTU

#define INTELVF_MSG_TYPE_SET_MTU   0x00000005UL

Set MTU mailbox message.

Definition at line 38 of file intelvf.h.

◆ INTELVF_MSG_TYPE_GET_QUEUES

#define INTELVF_MSG_TYPE_GET_QUEUES   0x00000009UL

Get queue configuration message.

Definition at line 41 of file intelvf.h.

◆ INTELVF_MSG_TYPE_CONTROL

#define INTELVF_MSG_TYPE_CONTROL   0x00000100UL

Control ("ping") mailbox message.

Definition at line 44 of file intelvf.h.

◆ INTELVF_MSG_TYPE_MASK

#define INTELVF_MSG_TYPE_MASK   0x0000ffffUL

Message type mask.

Definition at line 47 of file intelvf.h.

◆ INTELVF_MSG_NACK

#define INTELVF_MSG_NACK   0x40000000UL

Message NACK flag.

Definition at line 50 of file intelvf.h.

◆ INTELVF_MSG_ACK

#define INTELVF_MSG_ACK   0x80000000UL

Message ACK flag.

Definition at line 53 of file intelvf.h.

◆ INTELVF_MSG_RESPONSE

#define INTELVF_MSG_RESPONSE   ( INTELVF_MSG_ACK | INTELVF_MSG_NACK )

Message is a response.

Definition at line 56 of file intelvf.h.

◆ INTELVF_MBOX_MAX_WAIT_MS

#define INTELVF_MBOX_MAX_WAIT_MS   500

Maximum time to wait for mailbox message.

This is a policy decision.

Definition at line 148 of file intelvf.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ __attribute__()

struct intelvf_msg_mac __attribute__ ( (packed)  )

◆ intelvf_mbox_msg()

int intelvf_mbox_msg ( struct intel_nic intel,
union intelvf_msg msg 
)

Send/receive mailbox message.

Parameters
intelIntel device
msgMessage buffer
Return values
rcReturn status code

Definition at line 151 of file intelvf.c.

151  {
152  struct intel_mailbox *mbox = &intel->mbox;
153  uint32_t ctrl;
154  uint32_t seen = 0;
155  unsigned int i;
156 
157  /* Sanity check */
158  assert ( ! ( msg->hdr & INTELVF_MSG_RESPONSE ) );
159 
160  /* Handle mailbox */
161  for ( i = 0 ; i < INTELVF_MBOX_MAX_WAIT_MS ; i++ ) {
162 
163  /* Attempt to claim mailbox, if we have not yet sent
164  * our message.
165  */
166  if ( ! ( seen & INTELVF_MBCTRL_VFU ) )
167  writel ( INTELVF_MBCTRL_VFU, intel->regs + mbox->ctrl );
168 
169  /* Get mailbox status and record observed flags */
170  ctrl = readl ( intel->regs + mbox->ctrl );
171  seen |= ctrl;
172 
173  /* If a reset is in progress, clear VFU and abort */
174  if ( ctrl & INTELVF_MBCTRL_RSTI ) {
175  writel ( 0, intel->regs + mbox->ctrl );
176  return -EPIPE;
177  }
178 
179  /* Write message to mailbox, if applicable. This
180  * potentially overwrites a message sent by the PF (if
181  * the PF has simultaneously released PFU (thus
182  * allowing our VFU) and asserted PFSTS), but that
183  * doesn't really matter since there are no
184  * unsolicited PF->VF messages that require the actual
185  * message content to be observed.
186  */
187  if ( ctrl & INTELVF_MBCTRL_VFU )
188  intelvf_mbox_write ( intel, msg );
189 
190  /* Read message from mailbox, if applicable. */
191  if ( ( seen & INTELVF_MBCTRL_VFU ) &&
192  ( seen & INTELVF_MBCTRL_PFACK ) &&
193  ( ctrl & INTELVF_MBCTRL_PFSTS ) )
194  intelvf_mbox_read ( intel, msg );
195 
196  /* Acknowledge received message (if applicable),
197  * release VFU lock, and send message (if applicable).
198  */
199  ctrl = ( ( ( ctrl & INTELVF_MBCTRL_PFSTS ) ?
200  INTELVF_MBCTRL_ACK : 0 ) |
201  ( ( ctrl & INTELVF_MBCTRL_VFU ) ?
202  INTELVF_MBCTRL_REQ : 0 ) );
203  writel ( ctrl, intel->regs + mbox->ctrl );
204 
205  /* Exit successfully if we have received a response */
206  if ( msg->hdr & INTELVF_MSG_RESPONSE ) {
207 
208  /* Sanity check */
209  assert ( seen & INTELVF_MBCTRL_VFU );
210  assert ( seen & INTELVF_MBCTRL_PFACK );
211  assert ( seen & INTELVF_MBCTRL_PFSTS );
212 
213  return 0;
214  }
215 
216  /* Delay */
217  mdelay ( 1 );
218  }
219 
220  DBGC ( intel, "INTEL %p timed out waiting for mailbox (seen %08x)\n",
221  intel, seen );
222  return -ETIMEDOUT;
223 }
void * regs
Registers.
Definition: intel.h:280
static void intelvf_mbox_write(struct intel_nic *intel, const union intelvf_msg *msg)
Write message to mailbox.
Definition: intelvf.c:53
struct intel_mailbox mbox
Mailbox.
Definition: intel.h:296
#define EPIPE
Broken pipe.
Definition: errno.h:619
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
#define DBGC(...)
Definition: compiler.h:505
#define INTELVF_MBCTRL_PFACK
PF acknowledged message.
Definition: intelvf.h:24
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
Definition: golan.c:120
#define INTELVF_MBCTRL_REQ
Request for PF ready.
Definition: intelvf.h:19
#define INTELVF_MBCTRL_PFSTS
PF wrote a message.
Definition: intelvf.h:23
An Intel virtual function mailbox.
Definition: intel.h:255
#define INTELVF_MBCTRL_ACK
PF message received.
Definition: intelvf.h:20
#define INTELVF_MSG_RESPONSE
Message is a response.
Definition: intelvf.h:56
unsigned int uint32_t
Definition: stdint.h:12
#define INTELVF_MBCTRL_RSTI
PF reset in progress.
Definition: intelvf.h:25
#define INTELVF_MBCTRL_VFU
Buffer taken by VF.
Definition: intelvf.h:21
#define INTELVF_MBOX_MAX_WAIT_MS
Maximum time to wait for mailbox message.
Definition: intelvf.h:148
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
static unsigned int ctrl
Definition: intel.h:270
static void intelvf_mbox_read(struct intel_nic *intel, union intelvf_msg *msg)
Read message from mailbox.
Definition: intelvf.c:74
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:669
static void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition: settings_ui.c:285

References assert(), ctrl, DBGC, EPIPE, ETIMEDOUT, INTELVF_MBCTRL_ACK, INTELVF_MBCTRL_PFACK, INTELVF_MBCTRL_PFSTS, INTELVF_MBCTRL_REQ, INTELVF_MBCTRL_RSTI, INTELVF_MBCTRL_VFU, INTELVF_MBOX_MAX_WAIT_MS, intelvf_mbox_read(), intelvf_mbox_write(), INTELVF_MSG_RESPONSE, intel_nic::mbox, mdelay(), msg(), readl(), intel_nic::regs, and writel().

Referenced by intelvf_mbox_reset(), intelvf_mbox_set_mac(), intelvf_mbox_set_mtu(), intelxvf_mbox_queues(), and intelxvf_mbox_version().

◆ intelvf_mbox_poll()

int intelvf_mbox_poll ( struct intel_nic intel)

Poll mailbox.

Parameters
intelIntel device
Return values
rcReturn status code

Note that polling the mailbox may fail if the underlying PF is reset.

Definition at line 98 of file intelvf.c.

98  {
99  struct intel_mailbox *mbox = &intel->mbox;
100  union intelvf_msg msg;
101  uint32_t ctrl;
102 
103  /* Get mailbox status */
104  ctrl = readl ( intel->regs + mbox->ctrl );
105 
106  /* Fail if a reset is in progress */
107  if ( ctrl & INTELVF_MBCTRL_RSTI )
108  return -EPIPE;
109 
110  /* Acknowledge (and ignore) any received messages */
111  if ( ctrl & INTELVF_MBCTRL_PFSTS ) {
112  intelvf_mbox_read ( intel, &msg );
113  writel ( INTELVF_MBCTRL_ACK, intel->regs + mbox->ctrl );
114  }
115 
116  return 0;
117 }
void * regs
Registers.
Definition: intel.h:280
struct intel_mailbox mbox
Mailbox.
Definition: intel.h:296
#define EPIPE
Broken pipe.
Definition: errno.h:619
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
Mailbox message.
Definition: intelvf.h:129
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
Definition: golan.c:120
#define INTELVF_MBCTRL_PFSTS
PF wrote a message.
Definition: intelvf.h:23
An Intel virtual function mailbox.
Definition: intel.h:255
#define INTELVF_MBCTRL_ACK
PF message received.
Definition: intelvf.h:20
unsigned int uint32_t
Definition: stdint.h:12
#define INTELVF_MBCTRL_RSTI
PF reset in progress.
Definition: intelvf.h:25
static unsigned int ctrl
Definition: intel.h:270
static void intelvf_mbox_read(struct intel_nic *intel, union intelvf_msg *msg)
Read message from mailbox.
Definition: intelvf.c:74
static void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition: settings_ui.c:285

References ctrl, EPIPE, INTELVF_MBCTRL_ACK, INTELVF_MBCTRL_PFSTS, INTELVF_MBCTRL_RSTI, intelvf_mbox_read(), intel_nic::mbox, msg(), readl(), intel_nic::regs, and writel().

Referenced by intelvf_mbox_wait(), and intelxvf_poll().

◆ intelvf_mbox_wait()

int intelvf_mbox_wait ( struct intel_nic intel)

Wait for PF reset to complete.

Parameters
intelIntel device
Return values
rcReturn status code

Definition at line 125 of file intelvf.c.

125  {
126  unsigned int i;
127  int rc;
128 
129  /* Wait until a poll completes successfully */
130  for ( i = 0 ; i < INTELVF_MBOX_MAX_WAIT_MS ; i++ ) {
131 
132  /* Check for successful poll */
133  if ( ( rc = intelvf_mbox_poll ( intel ) ) == 0 )
134  return 0;
135 
136  /* Delay */
137  mdelay ( 1 );
138  }
139 
140  DBGC ( intel, "INTEL %p timed out waiting for reset\n", intel );
141  return -ETIMEDOUT;
142 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
#define INTELVF_MBOX_MAX_WAIT_MS
Maximum time to wait for mailbox message.
Definition: intelvf.h:148
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
Definition: timer.c:78
int intelvf_mbox_poll(struct intel_nic *intel)
Poll mailbox.
Definition: intelvf.c:98
#define ETIMEDOUT
Connection timed out.
Definition: errno.h:669

References DBGC, ETIMEDOUT, INTELVF_MBOX_MAX_WAIT_MS, intelvf_mbox_poll(), mdelay(), and rc.

◆ intelvf_mbox_reset()

int intelvf_mbox_reset ( struct intel_nic intel,
uint8_t hw_addr 
)

Send reset message and get initial MAC address.

Parameters
intelIntel device
hw_addrHardware address to fill in, or NULL
Return values
rcReturn status code

Definition at line 232 of file intelvf.c.

232  {
233  union intelvf_msg msg;
234  int rc;
235 
236  /* Send reset message */
237  memset ( &msg, 0, sizeof ( msg ) );
239  if ( ( rc = intelvf_mbox_msg ( intel, &msg ) ) != 0 ) {
240  DBGC ( intel, "INTEL %p reset failed: %s\n",
241  intel, strerror ( rc ) );
242  return rc;
243  }
244 
245  /* Check response */
246  if ( ( msg.hdr & INTELVF_MSG_TYPE_MASK ) != INTELVF_MSG_TYPE_RESET ) {
247  DBGC ( intel, "INTEL %p reset unexpected response:\n", intel );
248  DBGC_HDA ( intel, 0, &msg, sizeof ( msg ) );
249  return -EPROTO;
250  }
251 
252  /* Fill in MAC address, if applicable */
253  if ( hw_addr ) {
254  if ( msg.hdr & INTELVF_MSG_ACK ) {
255  memcpy ( hw_addr, msg.mac.mac, sizeof ( msg.mac.mac ) );
256  DBGC ( intel, "INTEL %p reset assigned MAC address "
257  "%s\n", intel, eth_ntoa ( hw_addr ) );
258  } else {
259  eth_random_addr ( hw_addr );
260  DBGC ( intel, "INTEL %p reset generated MAC address "
261  "%s\n", intel, eth_ntoa ( hw_addr ) );
262  }
263  }
264 
265  return 0;
266 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
Mailbox message.
Definition: intelvf.h:129
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DBGC_HDA(...)
Definition: compiler.h:506
#define EPROTO
Protocol error.
Definition: errno.h:624
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
#define INTELVF_MSG_ACK
Message ACK flag.
Definition: intelvf.h:53
int intelvf_mbox_msg(struct intel_nic *intel, union intelvf_msg *msg)
Send/receive mailbox message.
Definition: intelvf.c:151
const char * eth_ntoa(const void *ll_addr)
Transcribe Ethernet address.
Definition: ethernet.c:175
#define INTELVF_MSG_TYPE_MASK
Message type mask.
Definition: intelvf.h:47
#define INTELVF_MSG_TYPE_RESET
Reset mailbox message.
Definition: intelvf.h:32
void eth_random_addr(void *hw_addr)
Generate random Ethernet address.
Definition: ethernet.c:159
void * memset(void *dest, int character, size_t len) __nonnull
static void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition: settings_ui.c:285

References DBGC, DBGC_HDA, EPROTO, eth_ntoa(), eth_random_addr(), intelvf_mbox_msg(), INTELVF_MSG_ACK, INTELVF_MSG_TYPE_MASK, INTELVF_MSG_TYPE_RESET, memcpy(), memset(), msg(), rc, and strerror().

Referenced by intelxvf_open(), and intelxvf_probe().

◆ intelvf_mbox_set_mac()

int intelvf_mbox_set_mac ( struct intel_nic intel,
const uint8_t ll_addr 
)

Send set MAC address message.

Parameters
intelIntel device
ll_addrLink-layer address
Return values
rcReturn status code

Definition at line 275 of file intelvf.c.

275  {
276  union intelvf_msg msg;
277  int rc;
278 
279  /* Send set MAC address message */
280  memset ( &msg, 0, sizeof ( msg ) );
282  memcpy ( msg.mac.mac, ll_addr, sizeof ( msg.mac.mac ) );
283  if ( ( rc = intelvf_mbox_msg ( intel, &msg ) ) != 0 ) {
284  DBGC ( intel, "INTEL %p set MAC address failed: %s\n",
285  intel, strerror ( rc ) );
286  return rc;
287  }
288 
289  /* Check response */
291  DBGC ( intel, "INTEL %p set MAC address unexpected response:\n",
292  intel );
293  DBGC_HDA ( intel, 0, &msg, sizeof ( msg ) );
294  return -EPROTO;
295  }
296 
297  /* Check that we were allowed to set the MAC address */
298  if ( ! ( msg.hdr & INTELVF_MSG_ACK ) ) {
299  DBGC ( intel, "INTEL %p set MAC address refused\n", intel );
300  return -EPERM;
301  }
302 
303  return 0;
304 }
#define INTELVF_MSG_TYPE_SET_MAC
Set MAC address mailbox message.
Definition: intelvf.h:35
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
Mailbox message.
Definition: intelvf.h:129
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DBGC_HDA(...)
Definition: compiler.h:506
#define EPROTO
Protocol error.
Definition: errno.h:624
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
#define INTELVF_MSG_ACK
Message ACK flag.
Definition: intelvf.h:53
int intelvf_mbox_msg(struct intel_nic *intel, union intelvf_msg *msg)
Send/receive mailbox message.
Definition: intelvf.c:151
#define EPERM
Operation not permitted.
Definition: errno.h:614
#define INTELVF_MSG_TYPE_MASK
Message type mask.
Definition: intelvf.h:47
void * memset(void *dest, int character, size_t len) __nonnull
static void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition: settings_ui.c:285

References DBGC, DBGC_HDA, EPERM, EPROTO, intelvf_mbox_msg(), INTELVF_MSG_ACK, INTELVF_MSG_TYPE_MASK, INTELVF_MSG_TYPE_SET_MAC, memcpy(), memset(), msg(), rc, and strerror().

Referenced by intelxvf_open().

◆ intelvf_mbox_set_mtu()

int intelvf_mbox_set_mtu ( struct intel_nic intel,
size_t  mtu 
)

Send set MTU message.

Parameters
intelIntel device
mtuMaximum packet size
Return values
rcReturn status code

Definition at line 313 of file intelvf.c.

313  {
314  union intelvf_msg msg;
315  int rc;
316 
317  /* Send set MTU message */
318  memset ( &msg, 0, sizeof ( msg ) );
320  msg.mtu.mtu = mtu;
321  if ( ( rc = intelvf_mbox_msg ( intel, &msg ) ) != 0 ) {
322  DBGC ( intel, "INTEL %p set MTU failed: %s\n",
323  intel, strerror ( rc ) );
324  return rc;
325  }
326 
327  /* Check response */
329  DBGC ( intel, "INTEL %p set MTU unexpected response:\n",
330  intel );
331  DBGC_HDA ( intel, 0, &msg, sizeof ( msg ) );
332  return -EPROTO;
333  }
334 
335  /* Check that we were allowed to set the MTU */
336  if ( ! ( msg.hdr & INTELVF_MSG_ACK ) ) {
337  DBGC ( intel, "INTEL %p set MTU refused\n", intel );
338  return -EPERM;
339  }
340 
341  return 0;
342 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
#define DBGC(...)
Definition: compiler.h:505
Mailbox message.
Definition: intelvf.h:129
#define DBGC_HDA(...)
Definition: compiler.h:506
#define EPROTO
Protocol error.
Definition: errno.h:624
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:78
#define INTELVF_MSG_ACK
Message ACK flag.
Definition: intelvf.h:53
int intelvf_mbox_msg(struct intel_nic *intel, union intelvf_msg *msg)
Send/receive mailbox message.
Definition: intelvf.c:151
#define INTELVF_MSG_TYPE_SET_MTU
Set MTU mailbox message.
Definition: intelvf.h:38
#define EPERM
Operation not permitted.
Definition: errno.h:614
#define INTELVF_MSG_TYPE_MASK
Message type mask.
Definition: intelvf.h:47
uint32_t mtu
Maximum MTU.
Definition: ena.h:28
void * memset(void *dest, int character, size_t len) __nonnull
static void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
Definition: settings_ui.c:285

References DBGC, DBGC_HDA, EPERM, EPROTO, intelvf_mbox_msg(), INTELVF_MSG_ACK, INTELVF_MSG_TYPE_MASK, INTELVF_MSG_TYPE_SET_MTU, memset(), msg(), mtu, rc, and strerror().

Referenced by intelxvf_open().

Variable Documentation

◆ hdr

struct peerdist_msg_header hdr

◆ mac

MAC address.

Definition at line 14 of file intelvf.h.

◆ reserved

uint8_t reserved[(-ETH_ALEN) &0x3]

Alignment padding.

Definition at line 16 of file intelvf.h.

◆ version

uint32_t version

API version.

Definition at line 14 of file intelvf.h.

◆ mtu

uint32_t mtu

Maximum packet size.

Definition at line 14 of file intelvf.h.

◆ tx

u8 tx

◆ rx

u8 rx

◆ vlan_thing

uint32_t vlan_thing

VLAN hand-waving thing.

This is labelled IXGBE_VF_TRANS_VLAN in the Linux driver.

A comment in the Linux PF driver describes it as "notify VF of need for VLAN tag stripping, and correct queue". It will be filled with a non-zero value if the PF is enforcing the use of a single VLAN tag. It will also be filled with a non-zero value if the PF is using multiple traffic classes.

The Linux VF driver seems to treat this field as being simply the number of traffic classes, and gives it no VLAN-related interpretation.

If the PF is enforcing the use of a single VLAN tag for the VF, then the VLAN tag will be transparently inserted in transmitted packets (via the PFVMVIR register) but will still be visible in received packets. The Linux VF driver handles this unexpected VLAN tag by simply ignoring any unrecognised VLAN tags.

We choose to strip and ignore the VLAN tag if this field has a non-zero value.

Definition at line 42 of file intelvf.h.

Referenced by intelxvf_mbox_queues(), and intelxvf_open().

◆ dflt

uint32_t dflt

Default queue.

Definition at line 44 of file intelvf.h.

◆ dword

Raw dwords.

Definition at line 12 of file intelvf.h.

◆ __attribute__