BOOLEAN WriteProtected;\r
\r
UINT64 NumberOfBlocks;\r
+ UINT32 BlockSize;\r
\r
EMU_BLOCK_IO_PROTOCOL EmuBlockIo;\r
EFI_BLOCK_IO_MEDIA *Media;\r
}\r
#endif\r
\r
- } else if (fstatfs (Private->fd, &buf) == 0) {\r
- //\r
- // Works for files, not devices\r
- //\r
- Private->Media->BlockSize = buf.f_bsize;\r
- Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize;\r
+ } else {\r
+ Private->Media->BlockSize = Private->BlockSize;\r
Private->NumberOfBlocks = DivU64x32 (FileSize, Private->Media->BlockSize);\r
Private->Media->LastBlock = Private->NumberOfBlocks - 1;\r
+ \r
+ if (fstatfs (Private->fd, &buf) == 0) {\r
+ Private->Media->OptimalTransferLengthGranularity = buf.f_iosize/buf.f_bsize;\r
+ }\r
} \r
\r
DEBUG ((EFI_D_INIT, "%HEmuOpenBlock: opened %a%N\n", Private->Filename));\r
Private->Signature = EMU_BLOCK_IO_PRIVATE_SIGNATURE;\r
Private->Thunk = This;\r
CopyMem (&Private->EmuBlockIo, &gEmuBlockIoProtocol, sizeof (gEmuBlockIoProtocol));\r
- Private->fd = -1;\r
+ Private->fd = -1;\r
+ Private->BlockSize = 512;\r
\r
Private->Filename = StdDupUnicodeToAscii (This->ConfigString);\r
if (Private->Filename == NULL) {\r
if (*Str == 'O' || *Str == 'W') {\r
Private->WriteProtected = (BOOLEAN) (*Str == 'O');\r
}\r
+ if (*Str == ':') {\r
+ Private->BlockSize = strtol (++Str, NULL, 0);\r
+ break;\r
+ }\r
}\r
}\r
\r