/* * Copyright (c) 1999, 2000 * Intel Corporation. * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. All advertising materials mentioning features or use of this software must * display the following acknowledgement: * * This product includes software developed by Intel Corporation and its * contributors. * * 4. Neither the name of Intel Corporation or its contributors may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #ifndef _RAMDISK_H_ #define _RAMDISK_H_ #pragma pack(1) /* RAM disk device path structure. * Will use Vendor Messaging Device Path. */ typedef struct sRAM_DISK_DEVICE_PATH { EFI_DEVICE_PATH Header; EFI_GUID Guid; UINT8 DiskId[8]; EFI_DEVICE_PATH EndDevicePath; } RAM_DISK_DEVICE_PATH; /* FAT16 boot sector definition */ typedef struct sBOOTSEC { UINT8 BS_jmpBoot[3]; UINT8 BS_OEMName[8]; UINT16 BPB_BytsPerSec; UINT8 BPB_SecPerClus; UINT16 BPB_RsvdSecCnt; UINT8 BPB_NumFATs; UINT16 BPB_RootEntCnt; UINT16 BPB_TotSec16; UINT8 BPB_Media; UINT16 BPB_FATSz16; UINT16 BPB_SecPerTrk; UINT16 BPB_NumHeads; UINT32 BPB_HiddSec; UINT32 BPB_TotSec32; UINT8 BS_DrvNum; UINT8 BS_Reserved1; UINT8 BS_BootSig; UINT32 BS_VolID; UINT8 BS_VolLab[11]; UINT8 BS_FilSysType[8]; UINT8 BS_Code[448]; UINT16 BS_Sig; } BOOTSEC; #pragma pack() /* structure for total sectors to cluster size lookup */ typedef struct sFAT16TABLE { UINTN size; UINT8 spc; } FAT16TABLE; #define PBLOCK_DEVICE_SIGNATURE SIGNATURE_32('r', 'd', 's', 'k') /* Ramdisk device info structure */ typedef struct sRAM_DISKDEV { UINTN Signature; EFI_HANDLE Handle; EFI_PHYSICAL_ADDRESS Start; EFI_BLOCK_IO BlkIo; EFI_BLOCK_IO_MEDIA Media; EFI_DEVICE_PATH *DevicePath; } RAM_DISK_DEV; /* Macro finds the device info structure given a ramdisk BlkIo interface */ #define RAM_DISK_FROM_THIS(a) CR(a,RAM_DISK_DEV,BlkIo,PBLOCK_DEVICE_SIGNATURE) /* Prototypes */ EFI_STATUS InitializeRamDiskDriver( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable); STATIC VOID FormatRamdisk( IN VOID* pStart, IN UINT32 Size); STATIC EFI_STATUS RamDiskReadBlocks( IN EFI_BLOCK_IO *This, IN UINT32 MediaId, IN EFI_LBA LBA, IN UINTN BufferSize, OUT VOID *Buffer); STATIC EFI_STATUS RamDiskWriteBlocks( IN EFI_BLOCK_IO *This, IN UINT32 MediaId, IN EFI_LBA LBA, IN UINTN BufferSize, IN VOID *Buffer); STATIC EFI_STATUS RamDiskFlushBlocks( IN EFI_BLOCK_IO *This); #endif