|
@@ -402,7 +402,9 @@ static EFIAPI VOID nii_block ( UINT64 unique_id, UINT32 acquire ) {
|
402
|
402
|
*/
|
403
|
403
|
static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
|
404
|
404
|
size_t cpb_len, void *db, size_t db_len ) {
|
|
405
|
+ EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
405
|
406
|
PXE_CDB cdb;
|
|
407
|
+ UINTN tpl;
|
406
|
408
|
|
407
|
409
|
/* Prepare command descriptor block */
|
408
|
410
|
memset ( &cdb, 0, sizeof ( cdb ) );
|
|
@@ -414,6 +416,9 @@ static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
|
414
|
416
|
cdb.DBsize = db_len;
|
415
|
417
|
cdb.IFnum = nii->nii->IfNum;
|
416
|
418
|
|
|
419
|
+ /* Raise task priority level */
|
|
420
|
+ tpl = bs->RaiseTPL ( TPL_CALLBACK );
|
|
421
|
+
|
417
|
422
|
/* Issue command */
|
418
|
423
|
DBGC2 ( nii, "NII %s issuing %02x:%04x ifnum %d%s%s\n",
|
419
|
424
|
nii->dev.name, cdb.OpCode, cdb.OpFlags, cdb.IFnum,
|
|
@@ -424,6 +429,9 @@ static int nii_issue_cpb_db ( struct nii_nic *nii, unsigned int op, void *cpb,
|
424
|
429
|
DBGC2_HD ( nii, db, db_len );
|
425
|
430
|
nii->issue ( ( intptr_t ) &cdb );
|
426
|
431
|
|
|
432
|
+ /* Restore task priority level */
|
|
433
|
+ bs->RestoreTPL ( tpl );
|
|
434
|
+
|
427
|
435
|
/* Check completion status */
|
428
|
436
|
if ( cdb.StatCode != PXE_STATCODE_SUCCESS )
|
429
|
437
|
return -cdb.StatCode;
|