+++ /dev/null
-/** @file\r
-Private include file for IsaFloppyPei PEIM.\r
-\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#ifndef _RECOVERY_FLOPPY_H_\r
-#define _RECOVERY_FLOPPY_H_\r
-\r
-#include <Ppi/BlockIo.h>\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/PeimEntryPoint.h>\r
-#include <Library/PeiServicesLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/ReportStatusCodeLib.h>\r
-#include <Library/TimerLib.h>\r
-#include <Library/IoLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PcdLib.h>\r
-\r
-#include "Fdc.h"\r
-\r
-\r
-//\r
-// Some PC AT Compatible Device definitions\r
-//\r
-//\r
-// 8237 DMA registers\r
-//\r
-#define R_8237_DMA_BASE_CA_CH0 0x00\r
-#define R_8237_DMA_BASE_CA_CH1 0x02\r
-#define R_8237_DMA_BASE_CA_CH2 0x04\r
-#define R_8237_DMA_BASE_CA_CH3 0xd6\r
-#define R_8237_DMA_BASE_CA_CH5 0xc4\r
-#define R_8237_DMA_BASE_CA_CH6 0xc8\r
-#define R_8237_DMA_BASE_CA_CH7 0xcc\r
-\r
-#define R_8237_DMA_BASE_CC_CH0 0x01\r
-#define R_8237_DMA_BASE_CC_CH1 0x03\r
-#define R_8237_DMA_BASE_CC_CH2 0x05\r
-#define R_8237_DMA_BASE_CC_CH3 0xd7\r
-#define R_8237_DMA_BASE_CC_CH5 0xc6\r
-#define R_8237_DMA_BASE_CC_CH6 0xca\r
-#define R_8237_DMA_BASE_CC_CH7 0xce\r
-\r
-#define R_8237_DMA_MEM_LP_CH0 0x87\r
-#define R_8237_DMA_MEM_LP_CH1 0x83\r
-#define R_8237_DMA_MEM_LP_CH2 0x81\r
-#define R_8237_DMA_MEM_LP_CH3 0x82\r
-#define R_8237_DMA_MEM_LP_CH5 0x8B\r
-#define R_8237_DMA_MEM_LP_CH6 0x89\r
-#define R_8237_DMA_MEM_LP_CH7 0x8A\r
-\r
-\r
-#define R_8237_DMA_COMMAND_CH0_3 0x08\r
-#define R_8237_DMA_COMMAND_CH4_7 0xd0\r
-#define B_8237_DMA_COMMAND_GAP 0x10\r
-#define B_8237_DMA_COMMAND_CGE 0x04\r
-\r
-\r
-#define R_8237_DMA_STA_CH0_3 0x09\r
-#define R_8237_DMA_STA_CH4_7 0xd2\r
-\r
-#define R_8237_DMA_WRSMSK_CH0_3 0x0a\r
-#define R_8237_DMA_WRSMSK_CH4_7 0xd4\r
-#define B_8237_DMA_WRSMSK_CMS 0x04\r
-\r
-\r
-#define R_8237_DMA_CHMODE_CH0_3 0x0b\r
-#define R_8237_DMA_CHMODE_CH4_7 0xd6\r
-#define V_8237_DMA_CHMODE_DEMAND 0x00\r
-#define V_8237_DMA_CHMODE_SINGLE 0x40\r
-#define V_8237_DMA_CHMODE_CASCADE 0xc0\r
-#define B_8237_DMA_CHMODE_DECREMENT 0x20\r
-#define B_8237_DMA_CHMODE_INCREMENT 0x00\r
-#define B_8237_DMA_CHMODE_AE 0x10\r
-#define V_8237_DMA_CHMODE_VERIFY 0\r
-#define V_8237_DMA_CHMODE_IO2MEM 0x04\r
-#define V_8237_DMA_CHMODE_MEM2IO 0x08\r
-\r
-#define R_8237_DMA_CBPR_CH0_3 0x0c\r
-#define R_8237_DMA_CBPR_CH4_7 0xd8\r
-\r
-#define R_8237_DMA_MCR_CH0_3 0x0d\r
-#define R_8237_DMA_MCR_CH4_7 0xda\r
-\r
-#define R_8237_DMA_CLMSK_CH0_3 0x0e\r
-#define R_8237_DMA_CLMSK_CH4_7 0xdc\r
-\r
-#define R_8237_DMA_WRMSK_CH0_3 0x0f\r
-#define R_8237_DMA_WRMSK_CH4_7 0xde\r
-\r
-///\r
-/// ISA memory range\r
-///\r
-#define ISA_MAX_MEMORY_ADDRESS 0x1000000\r
-\r
-//\r
-// Macro for time delay & interval\r
-//\r
-#define STALL_1_SECOND 1000000\r
-#define STALL_1_MSECOND 1000\r
-#define FDC_CHECK_INTERVAL 50\r
-\r
-#define FDC_SHORT_DELAY 50\r
-#define FDC_MEDIUM_DELAY 100\r
-#define FDC_LONG_DELAY 4000\r
-#define FDC_RESET_DELAY 2000\r
-#define FDC_RECALIBRATE_DELAY 250000\r
-\r
-typedef enum {\r
- FdcType360K360K = 0,\r
- FdcType360K1200K,\r
- FdcType1200K1200K,\r
- FdcType720K720K,\r
- FdcType720K1440K,\r
- FdcType1440K1440K,\r
- FdcType720K2880K,\r
- FdcType1440K2880K,\r
- FdcType2880K2880K\r
-} FDC_DISKET_TYPE;\r
-\r
-typedef struct {\r
- UINT8 Register;\r
- UINT8 Value;\r
-} PEI_DMA_TABLE;\r
-\r
-typedef struct {\r
- UINT8 DevPos;\r
- UINT8 Pcn;\r
- BOOLEAN MotorOn;\r
- BOOLEAN NeedRecalibrate;\r
- FDC_DISKET_TYPE Type;\r
- EFI_PEI_BLOCK_IO_MEDIA MediaInfo;\r
-} PEI_FLOPPY_DEVICE_INFO;\r
-\r
-#define FDC_BLK_IO_DEV_SIGNATURE SIGNATURE_32 ('F', 'b', 'i', 'o')\r
-\r
-typedef struct {\r
- UINTN Signature;\r
- EFI_PEI_RECOVERY_BLOCK_IO_PPI FdcBlkIo;\r
- EFI_PEI_PPI_DESCRIPTOR PpiDescriptor;\r
- UINTN DeviceCount;\r
- PEI_FLOPPY_DEVICE_INFO DeviceInfo[2];\r
-} FDC_BLK_IO_DEV;\r
-\r
-#define PEI_RECOVERY_FDC_FROM_BLKIO_THIS(a) CR (a, FDC_BLK_IO_DEV, FdcBlkIo, FDC_BLK_IO_DEV_SIGNATURE)\r
-\r
-//\r
-// PEI Recovery Block I/O PPI\r
-//\r
-\r
-/**\r
- Get the number of FDC devices.\r
-\r
- This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.GetNumberOfBlockDevices.\r
- It get the number of FDC devices in the system.\r
-\r
- @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
- @param This Pointer to this PPI instance.\r
- @param NumberBlockDevices Pointer to the the number of FDC devices for output.\r
-\r
- @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.\r
- @retval EFI_INVALID_PARAMETER Parameter This is NULL.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FdcGetNumberOfBlockDevices (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
- OUT UINTN *NumberBlockDevices\r
- );\r
-\r
-/**\r
- Get the specified media information.\r
-\r
- This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.GetBlockDeviceMediaInfo.\r
- It gets the specified media information.\r
-\r
- @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
- @param This Pointer to this PPI instance.\r
- @param DeviceIndex Index of FDC device to get information.\r
- @param MediaInfo Pointer to the media info buffer for output.\r
-\r
- @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.\r
- @retval EFI_INVALID_PARAMETER Parameter This is NULL.\r
- @retval EFI_INVALID_PARAMETER Parameter MediaInfo is NULL.\r
- @retval EFI_INVALID_PARAMETER DeviceIndex is not valid.\r
- @retval EFI_DEVICE_ERROR FDC device does not exist or has errors.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FdcGetBlockDeviceMediaInfo (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
- IN UINTN DeviceIndex,\r
- OUT EFI_PEI_BLOCK_IO_MEDIA *MediaInfo\r
- );\r
-\r
-/**\r
- Get the requested number of blocks from the specified FDC device.\r
-\r
- This function implements EFI_PEI_RECOVERY_BLOCK_IO_PPI.ReadBlocks.\r
- It reads the requested number of blocks from the specified FDC device.\r
-\r
- @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
- @param This Pointer to this PPI instance.\r
- @param DeviceIndex Index of FDC device to get information.\r
- @param StartLba The start LBA to read from.\r
- @param BufferSize The size of range to read.\r
- @param Buffer Buffer to hold the data read from FDC.\r
-\r
- @retval EFI_SUCCESS Number of FDC devices is retrieved successfully.\r
- @retval EFI_INVALID_PARAMETER Parameter This is NULL.\r
- @retval EFI_INVALID_PARAMETER Parameter Buffer is NULL.\r
- @retval EFI_INVALID_PARAMETER Parameter BufferSize cannot be divided by block size of FDC device.\r
- @retval EFI_NO_MEDIA No media present.\r
- @retval EFI_DEVICE_ERROR FDC device has error.\r
- @retval Others Fail to read blocks.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FdcReadBlocks (\r
- IN EFI_PEI_SERVICES **PeiServices,\r
- IN EFI_PEI_RECOVERY_BLOCK_IO_PPI *This,\r
- IN UINTN DeviceIndex,\r
- IN EFI_PEI_LBA StartLba,\r
- IN UINTN BufferSize,\r
- OUT VOID *Buffer\r
- );\r
-\r
-#endif\r