]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Scsi/ScsiDisk/Dxe/ScsiDisk.c
Add some definitions for efi event in Uefi/UefiSpec.h to follow spec.
[mirror_edk2.git] / EdkModulePkg / Bus / Scsi / ScsiDisk / Dxe / ScsiDisk.c
index 4be2c388177f4e34e1f1a3210f593d6db8f4f1dd..9b3c01f8247e049f23376a41a03b350433482b7a 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
+Copyright (c) 2006 - 2007, Intel Corporation                                                         \r
 All rights reserved. This program and the accompanying materials                          \r
 are licensed and made available under the terms and conditions of the BSD License         \r
 which accompanies this distribution.  The full text of the license may be found at        \r
@@ -19,31 +19,6 @@ Abstract:
 \r
 #include "ScsiDisk.h"\r
 \r
-EFI_STATUS\r
-EFIAPI\r
-ScsiDiskDriverBindingSupported (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
-  );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ScsiDiskDriverBindingStart (\r
-  IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
-  IN EFI_HANDLE                   Controller,\r
-  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath\r
-  );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ScsiDiskDriverBindingStop (\r
-  IN  EFI_DRIVER_BINDING_PROTOCOL     *This,\r
-  IN  EFI_HANDLE                      Controller,\r
-  IN  UINTN                           NumberOfChildren,\r
-  IN  EFI_HANDLE                      *ChildHandleBuffer\r
-  );\r
-\r
 EFI_DRIVER_BINDING_PROTOCOL gScsiDiskDriverBinding = {\r
   ScsiDiskDriverBindingSupported,\r
   ScsiDiskDriverBindingStart,\r
@@ -357,17 +332,22 @@ Returns:
 {\r
   SCSI_DISK_DEV *ScsiDiskDevice;\r
   EFI_STATUS    Status;\r
+  EFI_TPL       OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   ScsiDiskDevice  = SCSI_DISK_DEV_FROM_THIS (This);\r
 \r
   Status          = ScsiDiskDevice->ScsiIo->ResetDevice (ScsiDiskDevice->ScsiIo);\r
 \r
   if (!ExtendedVerification) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   Status = ScsiDiskDevice->ScsiIo->ResetBus (ScsiDiskDevice->ScsiIo);\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
@@ -414,6 +394,7 @@ Returns:
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
+  EFI_TPL             OldTpl;\r
 \r
   MediaChange = FALSE;\r
   if (!Buffer) {\r
@@ -424,13 +405,16 @@ Returns:
     return EFI_SUCCESS;\r
   }\r
 \r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_THIS (This);\r
 \r
   if (!IsDeviceFixed (ScsiDiskDevice)) {\r
 \r
     Status = ScsiDiskDetectMedia (ScsiDiskDevice, FALSE, &MediaChange);\r
     if (EFI_ERROR (Status)) {\r
-      return EFI_DEVICE_ERROR;\r
+      Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
     }\r
 \r
     if (MediaChange) {\r
@@ -451,27 +435,33 @@ Returns:
   NumberOfBlocks  = BufferSize / BlockSize;\r
 \r
   if (!(Media->MediaPresent)) {\r
-    return EFI_NO_MEDIA;\r
+    Status = EFI_NO_MEDIA;\r
+    goto Done;\r
   }\r
 \r
   if (MediaId != Media->MediaId) {\r
-    return EFI_MEDIA_CHANGED;\r
+    Status = EFI_MEDIA_CHANGED;\r
+    goto Done;\r
   }\r
 \r
   if (BufferSize % BlockSize != 0) {\r
-    return EFI_BAD_BUFFER_SIZE;\r
+    Status = EFI_BAD_BUFFER_SIZE;\r
+    goto Done;\r
   }\r
 \r
   if (LBA > Media->LastBlock) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if ((LBA + NumberOfBlocks - 1) > Media->LastBlock) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
   \r
   //\r
@@ -480,6 +470,8 @@ Returns:
   //\r
   Status = ScsiDiskReadSectors (ScsiDiskDevice, Buffer, LBA, NumberOfBlocks);\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
@@ -526,6 +518,7 @@ Returns:
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
+  EFI_TPL             OldTpl;\r
 \r
   MediaChange = FALSE;\r
   if (!Buffer) {\r
@@ -536,13 +529,16 @@ Returns:
     return EFI_SUCCESS;\r
   }\r
 \r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_THIS (This);\r
 \r
   if (!IsDeviceFixed (ScsiDiskDevice)) {\r
 \r
     Status = ScsiDiskDetectMedia (ScsiDiskDevice, FALSE, &MediaChange);\r
     if (EFI_ERROR (Status)) {\r
-      return EFI_DEVICE_ERROR;\r
+      Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
     }\r
 \r
     if (MediaChange) {\r
@@ -563,27 +559,33 @@ Returns:
   NumberOfBlocks  = BufferSize / BlockSize;\r
 \r
   if (!(Media->MediaPresent)) {\r
-    return EFI_NO_MEDIA;\r
+    Status = EFI_NO_MEDIA;\r
+    goto Done;\r
   }\r
 \r
   if (MediaId != Media->MediaId) {\r
-    return EFI_MEDIA_CHANGED;\r
+    Status = EFI_MEDIA_CHANGED;\r
+    goto Done;\r
   }\r
 \r
   if (BufferSize % BlockSize != 0) {\r
-    return EFI_BAD_BUFFER_SIZE;\r
+    Status = EFI_BAD_BUFFER_SIZE;\r
+    goto Done;\r
   }\r
 \r
   if (LBA > Media->LastBlock) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if ((LBA + NumberOfBlocks - 1) > Media->LastBlock) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
 \r
   if ((Media->IoAlign > 1) && (((UINTN) Buffer & (Media->IoAlign - 1)) != 0)) {\r
-    return EFI_INVALID_PARAMETER;\r
+    Status = EFI_INVALID_PARAMETER;\r
+    goto Done;\r
   }\r
   //\r
   // if all the parameters are valid, then perform read sectors command\r
@@ -591,6 +593,9 @@ Returns:
   //\r
   Status = ScsiDiskWriteSectors (ScsiDiskDevice, Buffer, LBA, NumberOfBlocks);\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+  \r
   return Status;\r
 }\r
 \r
@@ -1614,11 +1619,9 @@ Returns:
   UINT8               MaxRetry;\r
   BOOLEAN             NeedRetry;\r
   EFI_SCSI_SENSE_DATA *SenseData;\r
-  UINT8               SenseDataLength;\r
   UINTN               NumberOfSenseKeys;\r
 \r
   SenseData         = NULL;\r
-  SenseDataLength   = 0;\r
   NumberOfSenseKeys = 0;\r
 \r
   Status            = EFI_SUCCESS;\r
@@ -1728,11 +1731,9 @@ Returns:
   UINT8               MaxRetry;\r
   BOOLEAN             NeedRetry;\r
   EFI_SCSI_SENSE_DATA *SenseData;\r
-  UINT8               SenseDataLength;\r
   UINTN               NumberOfSenseKeys;\r
 \r
   SenseData         = NULL;\r
-  SenseDataLength   = 0;\r
   NumberOfSenseKeys = 0;\r
 \r
   Status            = EFI_SUCCESS;\r