Jeff Fan [Tue, 7 Jan 2014 06:24:16 +0000 (06:24 +0000)]
MtrrDebugPrintAllMtrrs() should loop until the max physical address is reached.
GetMemoryCacheTypeFromMtrrType () should return the default memory type instead of UC type for MTRR_CACHE_INVALID_TYPE.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15053 6f19259b-4bc3-4df7-8a09-765794883524
Laszlo Ersek [Fri, 3 Jan 2014 19:57:36 +0000 (19:57 +0000)]
OvmfPkg: QemuFwCfgLib: implement for SEC
The QemuFwCfgSecLib library instance
- is stateless,
- has no library constructor,
- is available to SEC client code,
- must be queried with QemuFwCfgIsAvailable() before use,
- is restricted to SEC in order to limit the explicit querying
requirement. (There is no current user.)
The current implementation of QemuFwCfgLib is:
- stateful
- implicitly initialized in the library constructor.
OVMF's SEC runs from read-only memory/flash. When the library is linked
into a SEC binary (which currently never happens), the
"mQemuFwCfgSupported" global variable becomes read-only, making the
library non-functional.
Extract the stateful, implicitly initialized library implementation into a
separate file, making room for a stateless, explicitly queried
implementation that's usable in SEC. Restrict the stateful implementation
to the current, non-SEC clients.
This internal function allows separation of library-internal and
for-clients external availability of fw_cfg.
The interface contract of QemuFwCfgIsAvailable() is changed so that now it
may modify fw_cfg state. All current users are compliant with the new
contract.
Jeff Fan [Fri, 27 Dec 2013 08:10:37 +0000 (08:10 +0000)]
Update HostSequenceNo for Command packet instead for Response packet.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15026 6f19259b-4bc3-4df7-8a09-765794883524
Jeff Fan [Fri, 27 Dec 2013 06:14:25 +0000 (06:14 +0000)]
Remove Debug message output from UpdateMailboxContent(), it may cause Mailbox locker nested issue.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15025 6f19259b-4bc3-4df7-8a09-765794883524
Laszlo Ersek [Thu, 26 Dec 2013 20:44:29 +0000 (20:44 +0000)]
OvmfPkg: PlatformPei: reuse PublishPeiMemory() in MemDetect()
Although SVN r14944 ("OvmfPkg: introduce PublishPeiMemory") copied a big
chunk of code from MemDetect(), calling the new PublishPeiMemory()
function in MemDetect() could not have replaced the original code in the
latter. However, with the help of the previous patch, we can do it now.
Shumin Qiu [Wed, 25 Dec 2013 00:55:33 +0000 (00:55 +0000)]
Fix ECC errors:1.Update the comments in function headers to follow the Doxygen special documentation. 2.Make the first line of text in a comment block end with a period. 3.Update the member variable name for SHELL_OPERATION_TYPES to follow the rules "Must contain lower case characters". 4. Return type of a function should exist and in the first line.
Jaben Carsey [Fri, 20 Dec 2013 22:33:01 +0000 (22:33 +0000)]
ShellPkg: fix DmpStore for deleting
This change allows DmpStore command to delete all variables whereas before it would stop after a single deletion due to looping errors. It uses a recursive function and deletes the last item returned from GetNextVariableName() first and then goes "backwards" to the first items.
Jeff Fan [Fri, 20 Dec 2013 05:49:15 +0000 (05:49 +0000)]
Only save HostSequenceNo for new command in Debug Timer handler.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15013 6f19259b-4bc3-4df7-8a09-765794883524
Jeff Fan [Fri, 20 Dec 2013 05:42:41 +0000 (05:42 +0000)]
1. Only dump CPU Context and CpuDeadLoop () for CPU exception.
2. mEnabledInterruptNum is total enabled interrupt number, InterruptType should less than mEnabledInterruptNum.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15012 6f19259b-4bc3-4df7-8a09-765794883524
Jaben Carsey [Thu, 19 Dec 2013 16:05:34 +0000 (16:05 +0000)]
ShellPkg: Refactor the RunCommand API
This almost completely splits the RunCommand API into sub-routines.
- the ProcessCommandLineToFinal API handles replacing the a found alias and any found environment variables. This will redirect "-?" to "help", if necessary. Upon return, the command line is complete and finalized. It may still have redirection in it, and those will get chopped off later (but no further modifications occur).
- the SetupAndRunCommandOrFile API handles updating and then later restoring StdIn, StdOut, and StdErr (and removing their information from the command line). It will call into RunCommandOrFile.
- the RunCommandOrFile API divides the logic to RunInternalCommand, RunScriptFile, or running an .EFI file directly.
- the RunInternalCommand API handles updating and then restoring Argc and Argv. It will run the internal command in between.
- the SetLastError API handles updating of the environment variable "lasterror"
- the DoHelpUpdateArgcArgv was changed to DoHelpUpdate and now works on the raw command line and not the argc/argv. This allows the processing to be moved earlier.
Note this change has the following positive side effects (this eliminates unnecessary step):
- Argc/Argv are only updated for internal commands (as they are library based)
- no Argv/Argc/StdIn/StdOut/StdErr processing is done for file system changes.
- The ProcessCommandLineToFinal API exists and it's critical to the ability to correctly pre-process split ("|") command lines ahead of time to verify their correctness.
Laszlo Ersek [Wed, 18 Dec 2013 19:57:46 +0000 (19:57 +0000)]
OvmfPkg: VirtioBlkInit(): expose virtio-blk topology in BlockIo
UEFI spec virtio spec
======================================= =================================
LowestAlignedLba EFI_LBA (UINT64) alignment_offset u8
+-------------------------------------- +--------------------------------
| first LBA that is aligned to a | offset of first aligned
| physical block boundary (SCSI | logical block
| definition)
LogicalBlocksPerPhysicalBlock UINT32 physical_block_exp u8
+-------------------------------------- +--------------------------------
| number of logical blocks per | # of logical blocks per
| physical block [...] does not contain | physical block (log2)
| an exponential value
OptimalTransferLengthGranularity UINT32 opt_io_size le32
+-------------------------------------- +--------------------------------
| optimal transfer length granularity | optimal (suggested maximum) I/O
| as a number of logical blocks [...] A | size in blocks
| value of 0 means there is no reported
| optimal transfer length granularity
Based on
<https://tools.oasis-open.org/version-control/browse/wsvn/virtio/virtio-v1.0-wd01-part1-specification.txt?rev=159>,
which is the last text format revision.
Laszlo Ersek [Wed, 18 Dec 2013 19:57:18 +0000 (19:57 +0000)]
OvmfPkg: IndustryStandard/VirtioBlk: add extra horizontal whitespace
We're going to introduce a new macro and a new VIRTIO_BLK_CONFIG member
that need realignment of existing definitions and comments. Separate out
the whitespace changes in this patch.
Ruiyu Ni [Wed, 18 Dec 2013 05:51:22 +0000 (05:51 +0000)]
Rollback the change to EFI_BOOT_KEY_DATA structure since UEFI Spec adds the clarification that bitfields are ordered such that bit 0 is the least significant bit.
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15000 6f19259b-4bc3-4df7-8a09-765794883524
The shell was failing to correctly parse up to the space only for “run (1 3)” and also losing the space for “in ” a b” c” for loop initialization. This fixes for initialization to be correct.
When QemuFlashWrite() is asked to write a range that includes the last
byte of the LBA, then the byte that the function uses to switch the flash
device back to read mode (ROMD mode in KVM speak) actually falls out of
the LBA.
Normally this doesn't cause visible problems. However, if the variable
store and the firmware code are backed by separate flash devices, as
implemented by
[Qemu-devel] [PATCH v2] hw/i386/pc_sysfw: support two flash drives
http://thread.gmane.org/gmane.comp.emulators.qemu/243678
plus
[edk2] [edk2 PATCH] OvmfPkg: split the variable store to a separate file
http://thread.gmane.org/gmane.comp.bios.tianocore.devel/5045/focus=5046
then the READ_ARRAY_CMD not only reaches a different LBA, it reaches a
different qemu device. This results in a guest reboot soon after.
Fix this by ensuring that we always stay within the LBA just written when
issuing READ_ARRAY_CMD.
Star Zeng [Mon, 16 Dec 2013 01:34:01 +0000 (01:34 +0000)]
MdeModulePkg CapsuleRuntimeDxe: Get PcdMaxSizeNonPopulateCapsule and PcdMaxSizePopulateCapsule by PcdGet32 in EntryPoint.
PcdMaxSizeNonPopulateCapsule and PcdMaxSizePopulateCapsule are declared to support Dynamic, but used by FixedPcdGet32 in CapsuleRuntimeDxe.
QueryCapsuleCapabilities is a runtime interface and PCD protocol can’t be used in runtime environment.
Chris Ruffin [Sun, 15 Dec 2013 20:47:39 +0000 (20:47 +0000)]
OvmfPkg/QemuVideoDxe: child handles should have open parent protocol BY_CHILD_CONTROLLER
The QemuVideoDxe driver creates child controller handles, so it is acting
as a hybrid bus driver. The child handles should open the parent's bus
protocol BY_CHILD_CONTROLLER to properly maintain the protocol usage count.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Chris Ruffin <chris.ruffin@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14987 6f19259b-4bc3-4df7-8a09-765794883524
Fix the non-blocking behavior for connect. The behavior was correct if the code polled the connect routine but was not correct when using select to complete the asynchronous request. This change fixes the select case by moving where some of the operations performed upon the connection completion.
Signed-off-by: lpleahy leroy.p.leahy@intel.com Reviewed-by: Daniel Moura oxesoft@gmail.com
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14984 6f19259b-4bc3-4df7-8a09-765794883524
Olivier Martin [Fri, 13 Dec 2013 12:05:01 +0000 (12:05 +0000)]
ArmPlatformPkg/ArmFvpDxe: Added Virtio Block support
Right now the ARM Platform driver does not do much, but
I expect to move most platform specific code into platform
specific driver in the future.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- ensure / document that the VIRTIO_BLK_DEVICE_PATH structure must be
packed
- fix whitespace damage in definition of "mVirtioBlockDevicePath"
- the platform driver is added to all platform DSC and FDF files in the
previous patch; this patch focuses on virtio only
Olivier Martin [Fri, 13 Dec 2013 12:03:55 +0000 (12:03 +0000)]
ArmPlatformPkg/ArmVExpressPkg: Added the empty 'ArmFvpDxe' platform UEFI driver
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- For uniformity, add the empty driver to
ArmVExpress-RTSM-AEMv8Ax4-foundation.* too in this patch, not just
ArmVExpress-RTSM-AEMv8Ax4.*. V4 added the empty driver to
ArmVExpress-RTSM-AEMv8Ax4-foundation.* not sooner than the next patch,
fusing it with other (= virtio) functionality. Let's split these changes
cleanly.
Jeff Fan [Fri, 13 Dec 2013 06:15:50 +0000 (06:15 +0000)]
Check Context before use it.
Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14979 6f19259b-4bc3-4df7-8a09-765794883524
S3RestoreConfig2() can optionally stack-switch to the SMM S3 Resume Entry
Point and ask it to transfer to S3ResumeExecuteBootScript().
Similarly, S3ResumeExecuteBootScript() stack-switches explicitly to the
boot script executor, and asks it to transfer to S3ResumeBootOs().
Currently the stack pointers specified for the SMM S3 Resume Entry Point
and the boot script executor to use for returning are derived from
addresses of the first local variables in S3RestoreConfig2() and
S3ResumeExecuteBootScript(), respectively.
Since (theoretically) the stack grows down as local variables are defined
and functions are called, the idea is presumably to allow the respective
callee to overwrite the caller's local variables. (The callees in
question can never return normally, only by explicit stack switching.)
Taking the address of "Status" is less portable than optimal however.
Compilers are free to juggle local variables at build time as they
please, including order and alignment on the stack. For example, when the
code is built for 64-bit PEI with gcc-4.8.2, the address of "Status"
trips up the alignment assertion in SwitchStack().
Let's align the address of "Status" down to CPU_STACK_ALIGNMENT
explicitly. If a compiler ensures such alignment and places "Status" at
the highest address automatically, then this change has no effect.
Otherwise, we'll prepare ReturnStackPointer values that (a) are correctly
aligned, (b) preserve the same amount or more (but never less) from the
caller's local variables than before, which should be safe.
Olivier Martin [Wed, 11 Dec 2013 16:58:22 +0000 (16:58 +0000)]
OvmfPkg: Make the VirtIo devices use the new VIRTIO_DEVICE_PROTOCOL
This change replaces the accesses to the PCI bus from the Block, Scsi and Net drivers by
the use of the new VIRTIO_DEVICE_PROTOCOL protocol that abstracts the transport layer.
It means these drivers can be used on PCI and MMIO transport layer.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- VirtioFlush(): update comment block in VirtioLib.[hc]; error code is
propagated from VirtIo->SetQueueNotify().
- VirtioBlkInit(): jump to Failed label if SetPageSize() fails
- VirtioBlkInit(): fixup comment, and add error handling, near
SetQueueNum() call
- VirtioBlkDriverBindingStart(): remove redundant (always false) check for
a subsystem device ID different from VIRTIO_SUBSYSTEM_BLOCK_DEVICE;
VirtioBlkDriverBindingSupported() handles it already
- VirtioNetGetFeatures(): update stale comment block
- VirtioNetGetFeatures(): retrieve MAC address byte for byte (open-coded
loop)
- VirtioNetDriverBindingStart(): remove redundant (always false) check for
a subsystem device ID different from VIRTIO_SUBSYSTEM_NETWORK_CARD;
VirtioNetDriverBindingSupported() handles it already
- VirtioNetInitRing(): call SetQueueNum() and SetQueueAlign() for proper
MMIO operation
- VirtioNetInitialize(): fix destination error label for when
SetPageSize() fails
- VirtioScsi.c: fix comment block of VIRTIO_CFG_WRITE()/VIRTIO_CFG_READ()
- VirtioScsiInit(): fix destination error label for when SetPageSize()
fails
- VirtioScsiInit(): call SetQueueNum() and SetQueueAlign() for proper MMIO
operation
Olivier Martin [Wed, 11 Dec 2013 16:57:59 +0000 (16:57 +0000)]
OvmfPkg/VirtioMmioDeviceLib: Implement VIRTIO_DEVICE_PROTOCOL for VirtIo Devices over MMIO
Why is the virtio-mmio implementation of the protocol a library,
instead of a driver binary?
The UEFI driver model would encourage to create a virtio-mmio driver
instead of a library. But the reasons why I created a library are:
- A virtio-mmio driver would imply an additional protocol that would
probably have a single attribute field:
- There is no (easy) way to scan the available VirtIo devices on a
platform. So, the UEFI firmware for this platform would need a driver
to produce instances for every virtio devices it wants to expose in
UEFI. A single call to a helper library (ie: VirtioMmioDeviceLib)
make the porting easier.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- typo fix in VirtioMmioInstallDevice() comment block
- plug MmioDevice leak in VirtioMmioUninstallDevice()
- return EFI_INVALID_PARAMETER in VirtioMmioGetQueueAddress() if
QueueAddress is NULL
- VirtioMmioSetQueueSize(): fix return value (it's a status code)
- VirtioMmioSetPageSize(): check against EFI_PAGE_SIZE with "if" plus
EFI_UNSUPPORTED, rather than ASSERT()
- VirtioMmioDeviceWrite(), VirtioMmioDeviceRead(): remove redundant
(FieldSize > 8) checks
- VirtioMmioDeviceLib.inf: drop UefiDriverEntryPoint library dependency
Olivier Martin [Wed, 11 Dec 2013 16:57:49 +0000 (16:57 +0000)]
OvmfPkg/VirtioPciDeviceDxe: Implement VIRTIO_DEVICE_PROTOCOL for VirtIo Devices over PCI
This change implements the VIRTIO_DEVICE_PROTOCOL for the PCI transport
layer.
The VirtIo device drivers will interact with the PCI-based VirtIo devices
through this protocol implementation.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- updated comment block on VirtioPciDeviceRead()
- return EFI_UNSUPPORTED instead of failed ASSERT() in
VirtioPciSetPageSize()
- VirtioPciIoRead(): restore the original requirement that FieldSize equal
BufferSize exactly (not only divide it). The looping added in v4 did not
match the comment block, and the only place that used it in v4 (ie.
VirtioNetGetFeatures()) needs an open-coded loop anyway (will be done in
a later part of v5).
This protocol introduces an abstraction to access the VirtIo
Configuration and Device spaces.
The registers in these spaces are located at a different offset and have
a different width whether the transport layer is either PCI or MMIO. This
protocol would also allow to support VirtIo PCI devices with MSI-X
capability in a transparent way (Device space is at a different offset
when a PCIe device has MSI-X capability).
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com>
v5:
- add disclaimer (two instances) about the protocol being work in progress