cdvdgigaherz: Change signs

Avoid some unnecessary casting.
This commit is contained in:
Jonathan Li 2016-11-11 17:51:19 +00:00 committed by Gregory Hainaut
parent 008fea5d89
commit 23f48e07ed
5 changed files with 43 additions and 54 deletions

View File

@ -113,7 +113,6 @@ bool weAreInNewDiskCB = false;
std::unique_ptr<IOCtlSrc> src; std::unique_ptr<IOCtlSrc> src;
char throwaway[2352];
extern s32 prefetch_last_lba; extern s32 prefetch_last_lba;
extern s32 prefetch_last_mode; extern s32 prefetch_last_mode;
@ -122,6 +121,8 @@ extern s32 prefetch_last_mode;
void keepAliveThread() void keepAliveThread()
{ {
u8 throwaway[2352];
printf(" * CDVD: KeepAlive thread started...\n"); printf(" * CDVD: KeepAlive thread started...\n");
std::unique_lock<std::mutex> guard(s_keepalive_lock); std::unique_lock<std::mutex> guard(s_keepalive_lock);
@ -236,11 +237,11 @@ EXPORT s32 CALLBACK CDVDgetDualInfo(s32 *dualType, u32 *_layer1start)
} }
int lastReadInNewDiskCB = 0; int lastReadInNewDiskCB = 0;
char directReadSectorBuffer[2448]; u8 directReadSectorBuffer[2448];
EXPORT s32 CALLBACK CDVDreadSector(u8 *buffer, u32 lsn, int mode) EXPORT s32 CALLBACK CDVDreadSector(u8 *buffer, u32 lsn, int mode)
{ {
return cdvdDirectReadSector(lsn, mode, (char *)buffer); return cdvdDirectReadSector(lsn, mode, buffer);
} }
EXPORT s32 CALLBACK CDVDreadTrack(u32 lsn, int mode) EXPORT s32 CALLBACK CDVDreadTrack(u32 lsn, int mode)
@ -263,12 +264,10 @@ EXPORT u8 *CALLBACK CDVDgetBuffer()
{ {
if (lastReadInNewDiskCB) { if (lastReadInNewDiskCB) {
lastReadInNewDiskCB = 0; lastReadInNewDiskCB = 0;
return (u8 *)directReadSectorBuffer; return directReadSectorBuffer;
} }
u8 *s = (u8 *)cdvdGetSector(csector, cmode); return cdvdGetSector(csector, cmode);
return s;
} }
// return can be NULL (for async modes) // return can be NULL (for async modes)

View File

@ -24,6 +24,7 @@
#include <cstdio> #include <cstdio>
#include <cstring> #include <cstring>
#include <algorithm>
#include <memory> #include <memory>
#include <mutex> #include <mutex>
#include <string> #include <string>
@ -83,8 +84,8 @@ public:
u32 GetSectorCount() const; u32 GetSectorCount() const;
const std::vector<toc_entry> &ReadTOC() const; const std::vector<toc_entry> &ReadTOC() const;
bool ReadSectors2048(u32 sector, u32 count, char *buffer) const; bool ReadSectors2048(u32 sector, u32 count, u8 *buffer) const;
bool ReadSectors2352(u32 sector, u32 count, char *buffer) const; bool ReadSectors2352(u32 sector, u32 count, u8 *buffer) const;
u32 GetLayerBreakAddress() const; u32 GetLayerBreakAddress() const;
s32 GetMediaType() const; s32 GetMediaType() const;
void SetSpindleSpeed(bool restore_defaults) const; void SetSpindleSpeed(bool restore_defaults) const;
@ -114,8 +115,8 @@ bool cdvdStartThread();
void cdvdStopThread(); void cdvdStopThread();
s32 cdvdRequestSector(u32 sector, s32 mode); s32 cdvdRequestSector(u32 sector, s32 mode);
s32 cdvdRequestComplete(); s32 cdvdRequestComplete();
char *cdvdGetSector(s32 sector, s32 mode); u8 *cdvdGetSector(u32 sector, s32 mode);
s32 cdvdDirectReadSector(s32 first, s32 mode, char *buffer); s32 cdvdDirectReadSector(u32 first, s32 mode, u8 *buffer);
s32 cdvdGetMediaType(); s32 cdvdGetMediaType();
s32 cdvdRefreshData(); s32 cdvdRefreshData();
void cdvdParseTOC(); void cdvdParseTOC();

View File

@ -16,8 +16,16 @@
#include "CDVD.h" #include "CDVD.h"
#include <atomic> #include <atomic>
#include <condition_variable> #include <condition_variable>
#include <limits>
#include <thread> #include <thread>
struct SectorInfo
{
u32 lsn;
s32 mode;
u8 data[2352 * 16]; // we will read in blocks of 16 sectors
};
const s32 prefetch_max_blocks = 16; const s32 prefetch_max_blocks = 16;
s32 prefetch_mode = 0; s32 prefetch_mode = 0;
s32 prefetch_last_lba = 0; s32 prefetch_last_lba = 0;
@ -34,28 +42,21 @@ static std::mutex s_cache_lock;
static std::atomic<bool> cdvd_is_open; static std::atomic<bool> cdvd_is_open;
typedef struct
{
int lsn;
int mode;
char data[2352 * 16]; //we will read in blocks of 16 sectors
} SectorInfo;
//bits: 12 would use 1<<12 entries, or 4096*16 sectors ~ 128MB //bits: 12 would use 1<<12 entries, or 4096*16 sectors ~ 128MB
#define CACHE_SIZE 12 #define CACHE_SIZE 12
const s32 CacheSize = (1 << CACHE_SIZE); const u32 CacheSize = 1U << CACHE_SIZE;
SectorInfo Cache[CacheSize]; SectorInfo Cache[CacheSize];
bool threadRequestPending; bool threadRequestPending;
SectorInfo threadRequestInfo; SectorInfo threadRequestInfo;
u32 cdvdSectorHash(int lsn, int mode) u32 cdvdSectorHash(u32 lsn, s32 mode)
{ {
u32 t = 0; u32 t = 0;
int i = 32; int i = 32;
int m = CacheSize - 1; u32 m = CacheSize - 1;
while (i >= 0) { while (i >= 0) {
t ^= lsn & m; t ^= lsn & m;
@ -66,7 +67,7 @@ u32 cdvdSectorHash(int lsn, int mode)
return (t ^ mode) & m; return (t ^ mode) & m;
} }
void cdvdCacheUpdate(int lsn, int mode, char *data) void cdvdCacheUpdate(u32 lsn, s32 mode, u8 *data)
{ {
std::lock_guard<std::mutex> guard(s_cache_lock); std::lock_guard<std::mutex> guard(s_cache_lock);
u32 entry = cdvdSectorHash(lsn, mode); u32 entry = cdvdSectorHash(lsn, mode);
@ -76,7 +77,7 @@ void cdvdCacheUpdate(int lsn, int mode, char *data)
Cache[entry].mode = mode; Cache[entry].mode = mode;
} }
bool cdvdCacheFetch(int lsn, int mode, char *data) bool cdvdCacheFetch(u32 lsn, s32 mode, u8 *data)
{ {
std::lock_guard<std::mutex> guard(s_cache_lock); std::lock_guard<std::mutex> guard(s_cache_lock);
u32 entry = cdvdSectorHash(lsn, mode); u32 entry = cdvdSectorHash(lsn, mode);
@ -93,8 +94,8 @@ bool cdvdCacheFetch(int lsn, int mode, char *data)
void cdvdCacheReset() void cdvdCacheReset()
{ {
std::lock_guard<std::mutex> guard(s_cache_lock); std::lock_guard<std::mutex> guard(s_cache_lock);
for (int i = 0; i < CacheSize; i++) { for (u32 i = 0; i < CacheSize; i++) {
Cache[i].lsn = -1; Cache[i].lsn = std::numeric_limits<u32>::max();
Cache[i].mode = -1; Cache[i].mode = -1;
} }
} }
@ -161,11 +162,7 @@ void cdvdThread()
} }
if (threadRequestPending || prefetch_left) { if (threadRequestPending || prefetch_left) {
s32 count = 16; u32 count = std::min(16U, src->GetSectorCount() - info.lsn);
s32 left = src->GetSectorCount() - info.lsn;
if (left < count)
count = left;
for (int tries = 0; tries < 4; ++tries) { for (int tries = 0; tries < 4; ++tries) {
if (info.mode == CDVD_MODE_2048) { if (info.mode == CDVD_MODE_2048) {
@ -246,7 +243,7 @@ s32 cdvdRequestComplete()
return !threadRequestPending; return !threadRequestPending;
} }
s8 *cdvdGetSector(s32 sector, s32 mode) u8 *cdvdGetSector(u32 sector, s32 mode)
{ {
{ {
std::unique_lock<std::mutex> guard(s_request_lock); std::unique_lock<std::mutex> guard(s_request_lock);
@ -254,15 +251,13 @@ s8 *cdvdGetSector(s32 sector, s32 mode)
s_request_cv.wait_for(guard, std::chrono::milliseconds(10)); s_request_cv.wait_for(guard, std::chrono::milliseconds(10));
} }
s32 offset;
if (mode == CDVD_MODE_2048) { if (mode == CDVD_MODE_2048) {
offset = 2048 * (sector - threadRequestInfo.lsn); u32 offset = 2048 * (sector - threadRequestInfo.lsn);
return threadRequestInfo.data + offset; return threadRequestInfo.data + offset;
} }
offset = 2352 * (sector - threadRequestInfo.lsn); u32 offset = 2352 * (sector - threadRequestInfo.lsn);
s8 *data = threadRequestInfo.data + offset; u8 *data = threadRequestInfo.data + offset;
switch (mode) { switch (mode) {
case CDVD_MODE_2328: case CDVD_MODE_2328:
@ -273,21 +268,17 @@ s8 *cdvdGetSector(s32 sector, s32 mode)
return data; return data;
} }
s32 cdvdDirectReadSector(s32 first, s32 mode, char *buffer) s32 cdvdDirectReadSector(u32 first, s32 mode, u8 *buffer)
{ {
static char data[16 * 2352]; static u8 data[16 * 2352];
if ((u32)first >= src->GetSectorCount()) if (first >= src->GetSectorCount())
return -1; return -1;
s32 sector = first & (~15); //align to 16-sector block u32 sector = first & (~15); //align to 16-sector block
if (!cdvdCacheFetch(sector, mode, data)) { if (!cdvdCacheFetch(sector, mode, data)) {
s32 count = 16; u32 count = std::min(16U, src->GetSectorCount() - sector);
s32 left = src->GetSectorCount() - sector;
if (left < count)
count = left;
for (int tries = 0; tries < 4; ++tries) { for (int tries = 0; tries < 4; ++tries) {
if (mode == CDVD_MODE_2048) { if (mode == CDVD_MODE_2048) {
@ -302,16 +293,14 @@ s32 cdvdDirectReadSector(s32 first, s32 mode, char *buffer)
cdvdCacheUpdate(sector, mode, data); cdvdCacheUpdate(sector, mode, data);
} }
s32 offset;
if (mode == CDVD_MODE_2048) { if (mode == CDVD_MODE_2048) {
offset = 2048 * (first - sector); u32 offset = 2048 * (first - sector);
memcpy(buffer, data + offset, 2048); memcpy(buffer, data + offset, 2048);
return 0; return 0;
} }
offset = 2352 * (first - sector); u32 offset = 2352 * (first - sector);
s8 *bfr = data + offset; u8 *bfr = data + offset;
switch (mode) { switch (mode) {
case CDVD_MODE_2328: case CDVD_MODE_2328:

View File

@ -84,7 +84,7 @@ const std::vector<toc_entry> &IOCtlSrc::ReadTOC() const
return m_toc; return m_toc;
} }
bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, char *buffer) const bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, u8 *buffer) const
{ {
std::lock_guard<std::mutex> guard(m_lock); std::lock_guard<std::mutex> guard(m_lock);
@ -108,7 +108,7 @@ bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, char *buffer) const
return false; return false;
} }
bool IOCtlSrc::ReadSectors2352(u32 sector, u32 count, char *buffer) const bool IOCtlSrc::ReadSectors2352(u32 sector, u32 count, u8 *buffer) const
{ {
union union
{ {

View File

@ -111,7 +111,7 @@ const std::vector<toc_entry> &IOCtlSrc::ReadTOC() const
return m_toc; return m_toc;
} }
bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, char *buffer) const bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, u8 *buffer) const
{ {
std::lock_guard<std::mutex> guard(m_lock); std::lock_guard<std::mutex> guard(m_lock);
LARGE_INTEGER offset; LARGE_INTEGER offset;
@ -138,7 +138,7 @@ bool IOCtlSrc::ReadSectors2048(u32 sector, u32 count, char *buffer) const
return false; return false;
} }
bool IOCtlSrc::ReadSectors2352(u32 sector, u32 count, char *buffer) const bool IOCtlSrc::ReadSectors2352(u32 sector, u32 count, u8 *buffer) const
{ {
struct sptdinfo struct sptdinfo
{ {