Internal routine
*/
+#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4035) // re-enable below
+#endif
ULONG
//__fastcall
}
+#ifdef _MSC_VER
#pragma warning(pop) // re-enable warning #4035
+#endif
/*
WCacheInsertRangeToList() inserts values laying in range described
Internal routine
*/
#define WCacheGetModFlag(block_array, i) \
- (((UCHAR)(block_array[i].Sector)) & WCACHE_FLAG_MODIFIED)
+ (*((PULONG)&(block_array[i].Sector)) & WCACHE_FLAG_MODIFIED)
#if 0
/*
// ULONG BS = Cache->BlockSize;
// ULONG PS = BS << Cache->PacketSizeSh; // packet size (bytes)
ULONG PSs = Cache->PacketSize;
- ULONG try_count = 0;
+// ULONG try_count = 0;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
ULONG FreeFrameCount = 0;
// PVOID addr;
try_count = 0;
}
#else
+/*
if(Cache->FrameList[frame].UpdateCount) {
try_count = MAX_TRIES_FOR_NA;
} else {
try_count = 0;
}
+*/
#endif
if(FreeFrameCount)
BrutePoint();
return STATUS_DRIVER_INTERNAL_ERROR;
}
- status = WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
+ WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
WCacheRemoveRangeFromList(List, &(Cache->BlockCount), firstLba, Cache->BlocksPerFrame);
WCacheRemoveRangeFromList(Cache->CachedModifiedBlocksList, &(Cache->WriteCount), firstLba, Cache->BlocksPerFrame);
// remove(flush) packet
while((Cache->BlockCount + WCacheGetSortedListIndex(Cache->BlockCount, List, ReqLba) +
BCount - WCacheGetSortedListIndex(Cache->BlockCount, List, ReqLba+BCount)) > Cache->MaxBlocks) {
- try_count = 0;
+// try_count = 0;
//Try_Another_Block:
ASSERT(Cache->FrameCount <= Cache->MaxFrames);
ASSERT(FALSE);
return STATUS_DRIVER_INTERNAL_ERROR;
}
- status = WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
+ WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
WCacheRemoveRangeFromList(List, &(Cache->BlockCount), Lba, PSs);
WCacheRemoveRangeFromList(Cache->CachedModifiedBlocksList, &(Cache->WriteCount), Lba, PSs);
// check if frame is empty
ULONG firstPos;
ULONG lastPos;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
// remove(flush) some frames
while(Cache->FrameCount) {
BrutePoint();
return STATUS_DRIVER_INTERNAL_ERROR;
}
- status = WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
+ WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, TRUE);
WCacheRemoveRangeFromList(List, &(Cache->BlockCount), firstLba, Cache->BlocksPerFrame);
WCacheRemoveRangeFromList(Cache->CachedModifiedBlocksList, &(Cache->WriteCount), firstLba, Cache->BlocksPerFrame);
ULONG firstPos;
ULONG lastPos;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
// flush frames
while(Cache->WriteCount) {
BrutePoint();
return STATUS_DRIVER_INTERNAL_ERROR;
}
- status = WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, FALSE);
+ WCacheFlushBlocksRAM(Cache, Context, block_array, List, firstPos, lastPos, FALSE);
WCacheRemoveRangeFromList(Cache->CachedModifiedBlocksList, &(Cache->WriteCount), firstLba, Cache->BlocksPerFrame);
}
lba_t firstLba;
lba_t* List = Cache->CachedBlocksList;
lba_t Lba;
- ULONG firstPos;
- ULONG lastPos;
+// ULONG firstPos;
+// ULONG lastPos;
ULONG BSh = Cache->BlockSizeSh;
ULONG BS = Cache->BlockSize;
ULONG PS = BS << Cache->PacketSizeSh; // packet size (bytes)
ULONG PSs = Cache->PacketSize;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
ULONG ReadBytes;
PW_CACHE_ASYNC FirstWContext = NULL;
PW_CACHE_ASYNC PrevWContext = NULL;
Lba = List[0] & ~(PSs-1);
frame = Lba >> Cache->BlocksPerFrameSh;
firstLba = frame << Cache->BlocksPerFrameSh;
- firstPos = WCacheGetSortedListIndex(Cache->BlockCount, List, Lba);
- lastPos = WCacheGetSortedListIndex(Cache->BlockCount, List, Lba+PSs);
+// firstPos = WCacheGetSortedListIndex(Cache->BlockCount, List, Lba);
+// lastPos = WCacheGetSortedListIndex(Cache->BlockCount, List, Lba+PSs);
block_array = Cache->FrameList[frame].Frame;
if(!block_array) {
BrutePoint();
return;
}
- status = WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
+ WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
Lba, BSh, BS, PS, PSs, &ReadBytes, TRUE, ASYNC_STATE_NONE);
// free memory
lba_t firstLba;
lba_t* List = Cache->CachedModifiedBlocksList;
lba_t Lba;
- ULONG firstPos;
- ULONG lastPos;
+// ULONG firstPos;
+// ULONG lastPos;
ULONG BSh = Cache->BlockSizeSh;
ULONG BS = Cache->BlockSize;
ULONG PS = BS << Cache->PacketSizeSh; // packet size (bytes)
ULONG PSs = Cache->PacketSize;
ULONG BFs = Cache->BlocksPerFrameSh;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
ULONG ReadBytes;
PW_CACHE_ASYNC FirstWContext = NULL;
PW_CACHE_ASYNC PrevWContext = NULL;
Lba = List[0] & ~(PSs-1);
frame = Lba >> BFs;
firstLba = frame << BFs;
- firstPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba);
- lastPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba+PSs);
+// firstPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba);
+// lastPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba+PSs);
block_array = Cache->FrameList[frame].Frame;
if(!block_array) {
BrutePoint();
continue;;
}
// queue modify request
- status = WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
+ WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
Lba, BSh, BS, PS, PSs, &ReadBytes, TRUE, ASYNC_STATE_NONE);
// clear MODIFIED flag for queued blocks
WCacheRemoveRangeFromList(List, &(Cache->WriteCount), Lba, PSs);
lba_t firstLba;
lba_t* List = Cache->CachedModifiedBlocksList;
lba_t Lba;
- ULONG firstPos;
- ULONG lastPos;
+// ULONG firstPos;
+// ULONG lastPos;
ULONG BSh = Cache->BlockSizeSh;
ULONG BS = Cache->BlockSize;
ULONG PS = BS << Cache->PacketSizeSh; // packet size (bytes)
ULONG PSs = Cache->PacketSize;
ULONG BFs = Cache->BlocksPerFrameSh;
PW_CACHE_ENTRY block_array;
- OSSTATUS status;
+// OSSTATUS status;
ULONG ReadBytes;
PW_CACHE_ASYNC FirstWContext = NULL;
PW_CACHE_ASYNC PrevWContext = NULL;
for(Lba = _Lba & ~(PSs-1);Lba < lim ; Lba += PSs) {
frame = Lba >> BFs;
firstLba = frame << BFs;
- firstPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba);
- lastPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba+PSs);
+// firstPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba);
+// lastPos = WCacheGetSortedListIndex(Cache->WriteCount, List, Lba+PSs);
block_array = Cache->FrameList[frame].Frame;
if(!block_array) {
// not cached block may be requested for flush
continue;
}
// queue modify request
- status = WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
+ WCacheUpdatePacket(Cache, Context, &FirstWContext, &PrevWContext, block_array, firstLba,
Lba, BSh, BS, PS, PSs, &ReadBytes, TRUE, ASYNC_STATE_NONE);
// clear MODIFIED flag for queued blocks
WCacheRemoveRangeFromList(List, &(Cache->WriteCount), Lba, PSs);