/* Populate descriptor */
cmd = intelxlvf_admin_command_descriptor ( intelxl );
cmd->vopcode = cpu_to_le32 ( INTELXLVF_ADMIN_GET_RESOURCES );
+ cmd->flags = cpu_to_le16 ( INTELXL_ADMIN_FL_RD | INTELXL_ADMIN_FL_BUF );
+ cmd->len = cpu_to_le16 ( sizeof ( buf->caps ) );
buf = intelxlvf_admin_command_buffer ( intelxl );
+ buf->caps.caps = cpu_to_le32 ( INTELXLVF_ADMIN_CAP_L2 );
/* Issue command */
if ( ( rc = intelxlvf_admin_command ( netdev ) ) != 0 )
return rc;
/* Parse response */
+ intelxl->caps = le32_to_cpu ( buf->res.caps );
intelxl->vsi = le16_to_cpu ( buf->res.vsi );
memcpy ( netdev->hw_addr, buf->res.mac, ETH_ALEN );
- DBGC ( intelxl, "INTELXL %p VSI %#04x\n", intelxl, intelxl->vsi );
+ DBGC ( intelxl, "INTELXL %p capabilities %#08x VSI %#04x\n",
+ intelxl, intelxl->caps, intelxl->vsi );
return 0;
}
#define INTELXLVF_ADMIN_API_MAJOR 1
/** Admin queue VF API minor version */
-#define INTELXLVF_ADMIN_API_MINOR 0
+#define INTELXLVF_ADMIN_API_MINOR 1
/** Admin Queue VF Reset opcode */
#define INTELXLVF_ADMIN_RESET 0x00000002
/** Admin Queue VF Get Resources opcode */
#define INTELXLVF_ADMIN_GET_RESOURCES 0x00000003
+/** Admin Queue VF Capabilities data buffer */
+struct intelxlvf_admin_capabilities_buffer {
+ /** Capabilities */
+ uint32_t caps;
+} __attribute__ (( packed ));
+
/** Admin Queue VF Get Resources data buffer */
struct intelxlvf_admin_get_resources_buffer {
+ /** Number of VSIs */
+ uint16_t vsis;
+ /** Number of queue pairs */
+ uint16_t qps;
+ /** Number of MSI-X vectors */
+ uint16_t vectors;
+ /** Maximum MTU */
+ uint16_t mtu;
+ /** Capabilities */
+ uint32_t caps;
/** Reserved */
- uint8_t reserved_a[20];
+ uint8_t reserved_a[8];
/** VSI switching element ID */
uint16_t vsi;
/** Reserved */
uint8_t mac[ETH_ALEN];
} __attribute__ (( packed ));
+/** Layer 2 capabilities (add/remove MAC, configure promiscuous mode) */
+#define INTELXLVF_ADMIN_CAP_L2 0x00000001
+
/** Admin Queue VF Status Change Event opcode */
#define INTELXLVF_ADMIN_STATUS 0x00000011
union intelxl_admin_buffer xl;
/** VF Version data buffer */
struct intelxlvf_admin_version_buffer ver;
+ /** VF Capabilities data buffer */
+ struct intelxlvf_admin_capabilities_buffer caps;
/** VF Get Resources data buffer */
struct intelxlvf_admin_get_resources_buffer res;
/** VF Status Change Event data buffer */