diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/net/intelxl.c | 10 | ||||
-rw-r--r-- | src/drivers/net/intelxl.h | 13 |
2 files changed, 16 insertions, 7 deletions
diff --git a/src/drivers/net/intelxl.c b/src/drivers/net/intelxl.c index a4dca5fb5..1cf5cad4b 100644 --- a/src/drivers/net/intelxl.c +++ b/src/drivers/net/intelxl.c @@ -313,8 +313,11 @@ static int intelxl_admin_command ( struct intelxl_nic *intelxl ) { tail = ( admin->index % INTELXL_ADMIN_NUM_DESC ); cmd = &admin->desc[ index % INTELXL_ADMIN_NUM_DESC ]; buf = &admin->buf[ index % INTELXL_ADMIN_NUM_DESC ]; - DBGC2 ( intelxl, "INTELXL %p admin command %#x opcode %#04x:\n", + DBGC2 ( intelxl, "INTELXL %p admin command %#x opcode %#04x", intelxl, index, le16_to_cpu ( cmd->opcode ) ); + if ( cmd->vopcode ) + DBGC2 ( intelxl, "/%#08x", le32_to_cpu ( cmd->vopcode ) ); + DBGC2 ( intelxl, ":\n" ); /* Sanity checks */ assert ( ! ( cmd->flags & cpu_to_le16 ( INTELXL_ADMIN_FL_DD ) ) ); @@ -329,8 +332,9 @@ static int intelxl_admin_command ( struct intelxl_nic *intelxl ) { cmd->params.buffer.low = cpu_to_le32 ( address & 0xffffffffUL ); } - /* Populate cookie */ - cmd->cookie = cpu_to_le32 ( index ); + /* Populate cookie, if not being (ab)used for VF opcode */ + if ( ! cmd->vopcode ) + cmd->cookie = cpu_to_le32 ( index ); /* Record cookie */ cookie = cmd->cookie; diff --git a/src/drivers/net/intelxl.h b/src/drivers/net/intelxl.h index 0175c1f9d..5067b8074 100644 --- a/src/drivers/net/intelxl.h +++ b/src/drivers/net/intelxl.h @@ -333,10 +333,15 @@ struct intelxl_admin_descriptor { uint16_t len; /** Return value */ uint16_t ret; - /** Cookie */ - uint32_t cookie; - /** Reserved */ - uint32_t reserved; + /** Opaque cookie / VF opcode */ + union { + /** Cookie */ + uint32_t cookie; + /** VF opcode */ + uint32_t vopcode; + }; + /** VF return value */ + int32_t vret; /** Parameters */ union intelxl_admin_params params; } __attribute__ (( packed )); |