From e2ac9bc57f5375b72e3c33f22cc0a55ddefc00f5 Mon Sep 17 00:00:00 2001 From: leslie Date: Sun, 15 Jun 2008 10:28:18 +0800 Subject: [PATCH] nagra: map cycle tweaks --- systems/nagra/nagra2-0101.c | 4 ++-- systems/nagra/nagra2-0501.c | 2 +- systems/nagra/nagra2-4101.c | 2 +- systems/nagra/nagra2.c | 9 ++++++--- systems/nagra/nagra2.h | 3 ++- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/systems/nagra/nagra2-0101.c b/systems/nagra/nagra2-0101.c index 0ae84ce..0e4f4b6 100644 --- a/systems/nagra/nagra2-0101.c +++ b/systems/nagra/nagra2-0101.c @@ -126,7 +126,7 @@ private: // void MakePrime(BIGNUM *n, unsigned char *residues); protected: - bool Map(int f, unsigned char *data, int l); + virtual bool Map(int f, unsigned char *data, int l); }; const unsigned char cMap0101::primes[] = { @@ -378,7 +378,7 @@ protected: virtual void Stepper(void); virtual void TimerHandler(unsigned int num); virtual void AddMapCycles(unsigned int num); - virtual unsigned int MapCycles(void) { return Cycles(); } + virtual unsigned int CpuCycles(void) { return Cycles(); } public: cN2Prov0101(int Id, int Flags); virtual bool PostProcAU(int id, unsigned char *data); diff --git a/systems/nagra/nagra2-0501.c b/systems/nagra/nagra2-0501.c index c152661..3beac08 100644 --- a/systems/nagra/nagra2-0501.c +++ b/systems/nagra/nagra2-0501.c @@ -27,7 +27,7 @@ class cMap0501 : public cMapCore { protected: - bool Map(int f, unsigned char *data, int l); + virtual bool Map(int f, unsigned char *data, int l); }; bool cMap0501::Map(int f, unsigned char *data, int l) diff --git a/systems/nagra/nagra2-4101.c b/systems/nagra/nagra2-4101.c index 35a45f3..2154985 100644 --- a/systems/nagra/nagra2-4101.c +++ b/systems/nagra/nagra2-4101.c @@ -27,7 +27,7 @@ class cMap4101 : public cMapCore { protected: - bool Map(int f, unsigned char *data, int l); + virtual bool Map(int f, unsigned char *data, int l); }; bool cMap4101::Map(int f, unsigned char *data, int l) diff --git a/systems/nagra/nagra2.c b/systems/nagra/nagra2.c index 025d0fd..cc5a424 100644 --- a/systems/nagra/nagra2.c +++ b/systems/nagra/nagra2.c @@ -669,15 +669,18 @@ void cMapCore::DoMap(int f, unsigned char *data, int l) { PRINTF(L_SYS_MAP,"%04x: calling function %02X",mapid,f); cycles=0; - unsigned int startcycles=MapCycles(); + unsigned int startcycles=CpuCycles(); interrupted=false; interruptible=true; try { if(!Map(f,data,l) && !MapGeneric(f,data,l)) PRINTF(L_SYS_MAP,"%04x: unsupported call %02x",mapid,f); + if(cycles) { + unsigned int elapsed=CpuCycles()-startcycles; + if(cycles>elapsed) AddMapCycles(cycles-elapsed); + } } catch(int) { interrupted=true; } interruptible=false; - if(!interrupted && cycles) - AddMapCycles(MapCycles()-startcycles); + cycles=CpuCycles()-startcycles; } bool cMapCore::MapGeneric(int f, unsigned char *data, int l) diff --git a/systems/nagra/nagra2.h b/systems/nagra/nagra2.h index c7367a6..1d4f4ba 100644 --- a/systems/nagra/nagra2.h +++ b/systems/nagra/nagra2.h @@ -170,7 +170,8 @@ protected: bool Interruptible(void) { return interruptible; } bool Interrupted(void) { return interrupted; } virtual void AddMapCycles(unsigned int num) {} - virtual unsigned int MapCycles(void) { return 0; } + unsigned int MapCycles(void) { return cycles; } + virtual unsigned int CpuCycles(void) { return 0; } public: cMapCore(void); virtual ~cMapCore() {} -- 2.39.5