-/*++\r
+/**@file\r
\r
-Copyright (c) 2006, 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
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
Module Name:\r
\r
the implementations of architectural protocols and the PCI Root\r
Bridge I/O Protocol.\r
\r
---*/\r
+**/\r
\r
#include <CpuDriver.h>\r
\r
#define IA32_MAX_IO_ADDRESS 0xFFFF\r
#define IA32_MAX_MEM_ADDRESS 0xFFFFFFFF\r
\r
-EFI_CPU_IO_PROTOCOL mCpuIoProtocol;\r
-\r
EFI_STATUS\r
CpuIoCheckAddressRange (\r
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
EFI_STATUS\r
EFIAPI\r
CpuMemoryServiceRead (\r
- IN EFI_CPU_IO_PROTOCOL *This,\r
+ IN EFI_CPU_IO2_PROTOCOL *This,\r
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
IN UINT64 Address,\r
IN UINTN Count,\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ if ((Width < 0) || (Width >= EfiCpuIoWidthMaximum)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
Status = CpuIoCheckAddressRange (Width, Address, Count, Buffer, IA32_MAX_MEM_ADDRESS);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
//\r
// Do nothing for Nt32 version\r
//\r
- return EFI_SUCCESS;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
CpuMemoryServiceWrite (\r
- IN EFI_CPU_IO_PROTOCOL *This,\r
+ IN EFI_CPU_IO2_PROTOCOL *This,\r
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
IN UINT64 Address,\r
IN UINTN Count,\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ if ((Width < 0) || (Width >= EfiCpuIoWidthMaximum)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
Status = CpuIoCheckAddressRange (Width, Address, Count, Buffer, IA32_MAX_MEM_ADDRESS);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
//\r
// Do nothing for Nt32 version\r
//\r
- return EFI_SUCCESS;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
CpuIoServiceRead (\r
- IN EFI_CPU_IO_PROTOCOL *This,\r
+ IN EFI_CPU_IO2_PROTOCOL *This,\r
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
IN UINT64 UserAddress,\r
IN UINTN Count,\r
\r
Address = (UINTN) UserAddress;\r
\r
- if (Width >= EfiCpuIoWidthMaximum) {\r
+ if ((Width < 0) || (Width >= EfiCpuIoWidthMaximum)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// Do nothing for Nt32 version\r
//\r
- return EFI_SUCCESS;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
CpuIoServiceWrite (\r
- IN EFI_CPU_IO_PROTOCOL *This,\r
+ IN EFI_CPU_IO2_PROTOCOL *This,\r
IN EFI_CPU_IO_PROTOCOL_WIDTH Width,\r
IN UINT64 UserAddress,\r
IN UINTN Count,\r
\r
Address = (UINTN) UserAddress;\r
\r
- if (Width >= EfiCpuIoWidthMaximum) {\r
+ if ((Width < 0) || (Width >= EfiCpuIoWidthMaximum)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
//\r
// Do nothing for Nt32 version\r
//\r
- return EFI_SUCCESS;\r
+ return EFI_UNSUPPORTED;\r
}\r
\r
\r
Count = 1;\r
}\r
\r
- Width = Width & 0x03;\r
- if (Address - 1 + (1 << Width) * Count > Limit) {\r
+ Width = (EFI_CPU_IO_PROTOCOL_WIDTH)(Width & 0x03);\r
+ if (Address - 1 + ((UINTN)1 << Width) * Count > Limit) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
- AlignMask = (1 << Width) - 1;\r
+ AlignMask = ((UINTN)1 << Width) - 1;\r
if ((UINTN) Buffer & AlignMask) {\r
return EFI_UNSUPPORTED;\r
}\r