aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/net/intelxl.c
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2019-04-24 13:00:12 +0100
committerMichael Brown <mcb30@ipxe.org>2019-04-27 20:25:59 +0100
commit17298d01211a8611b9206086fff04624297a4197 (patch)
tree117a333ea2ebee67c51a7ee34947ba0f8e1b97ad /src/drivers/net/intelxl.c
parent7b68c310f94af6466579a47dfbde38d90275f192 (diff)
downloadipxe-17298d01211a8611b9206086fff04624297a4197.tar.gz
[intelxl] Allow admin cookie to hold extended opcode and return code
The "send to PF" and "send to VF" admin queue descriptors (ab)use the cookie field to hold the extended opcode and return code values. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/intelxl.c')
-rw-r--r--src/drivers/net/intelxl.c10
1 files changed, 7 insertions, 3 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;