Browse Source

[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>
tags/v1.20.1
Michael Brown 5 years ago
parent
commit
17298d0121
2 changed files with 16 additions and 7 deletions
  1. 7
    3
      src/drivers/net/intelxl.c
  2. 9
    4
      src/drivers/net/intelxl.h

+ 7
- 3
src/drivers/net/intelxl.c View File

313
 	tail = ( admin->index % INTELXL_ADMIN_NUM_DESC );
313
 	tail = ( admin->index % INTELXL_ADMIN_NUM_DESC );
314
 	cmd = &admin->desc[ index % INTELXL_ADMIN_NUM_DESC ];
314
 	cmd = &admin->desc[ index % INTELXL_ADMIN_NUM_DESC ];
315
 	buf = &admin->buf[ index % INTELXL_ADMIN_NUM_DESC ];
315
 	buf = &admin->buf[ index % INTELXL_ADMIN_NUM_DESC ];
316
-	DBGC2 ( intelxl, "INTELXL %p admin command %#x opcode %#04x:\n",
316
+	DBGC2 ( intelxl, "INTELXL %p admin command %#x opcode %#04x",
317
 		intelxl, index, le16_to_cpu ( cmd->opcode ) );
317
 		intelxl, index, le16_to_cpu ( cmd->opcode ) );
318
+	if ( cmd->vopcode )
319
+		DBGC2 ( intelxl, "/%#08x", le32_to_cpu ( cmd->vopcode ) );
320
+	DBGC2 ( intelxl, ":\n" );
318
 
321
 
319
 	/* Sanity checks */
322
 	/* Sanity checks */
320
 	assert ( ! ( cmd->flags & cpu_to_le16 ( INTELXL_ADMIN_FL_DD ) ) );
323
 	assert ( ! ( cmd->flags & cpu_to_le16 ( INTELXL_ADMIN_FL_DD ) ) );
329
 		cmd->params.buffer.low = cpu_to_le32 ( address & 0xffffffffUL );
332
 		cmd->params.buffer.low = cpu_to_le32 ( address & 0xffffffffUL );
330
 	}
333
 	}
331
 
334
 
332
-	/* Populate cookie */
333
-	cmd->cookie = cpu_to_le32 ( index );
335
+	/* Populate cookie, if not being (ab)used for VF opcode */
336
+	if ( ! cmd->vopcode )
337
+		cmd->cookie = cpu_to_le32 ( index );
334
 
338
 
335
 	/* Record cookie */
339
 	/* Record cookie */
336
 	cookie = cmd->cookie;
340
 	cookie = cmd->cookie;

+ 9
- 4
src/drivers/net/intelxl.h View File

333
 	uint16_t len;
333
 	uint16_t len;
334
 	/** Return value */
334
 	/** Return value */
335
 	uint16_t ret;
335
 	uint16_t ret;
336
-	/** Cookie */
337
-	uint32_t cookie;
338
-	/** Reserved */
339
-	uint32_t reserved;
336
+	/** Opaque cookie / VF opcode */
337
+	union {
338
+		/** Cookie */
339
+		uint32_t cookie;
340
+		/** VF opcode */
341
+		uint32_t vopcode;
342
+	};
343
+	/** VF return value */
344
+	int32_t vret;
340
 	/** Parameters */
345
 	/** Parameters */
341
 	union intelxl_admin_params params;
346
 	union intelxl_admin_params params;
342
 } __attribute__ (( packed ));
347
 } __attribute__ (( packed ));

Loading…
Cancel
Save