Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
09160d7c
Commit
09160d7c
authored
Jan 25, 2008
by
Jesper Nilsson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CRIS v32: Move vcs_hook to machine specific directory.
These files are different for ETRAX FS and ARTPEC-3.
parent
538380da
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
66 additions
and
70 deletions
+66
-70
arch/cris/arch-v32/mach-fs/vcs_hook.c
arch/cris/arch-v32/mach-fs/vcs_hook.c
+62
-66
arch/cris/arch-v32/mach-fs/vcs_hook.h
arch/cris/arch-v32/mach-fs/vcs_hook.h
+4
-4
No files found.
arch/cris/arch-v32/mach-fs/vcs_hook.c
View file @
09160d7c
/*
* Call simulator hook. This is the part running in the
* simulated program.
*/
// $Id: vcs_hook.c,v 1.2 2003/08/12 12:01:06 starvik Exp $
//
// Call simulator hook. This is the part running in the
// simulated program.
//
#include "vcs_hook.h"
#include <stdarg.h>
#include <asm/arch-v32/hwregs/reg_map.h>
#include <asm/arch-v32/hwregs/intr_vect_defs.h>
#define HOOK_TRIG_ADDR 0xb7000000
/* hook cvlog model reg address */
#define HOOK_MEM_BASE_ADDR 0xa0000000
/* csp4 (shared mem) base addr */
#define HOOK_TRIG_ADDR 0xb7000000
/* hook cvlog model reg address */
#define HOOK_MEM_BASE_ADDR 0xa0000000
/* csp4 (shared mem) base addr */
#define HOOK_DATA(offset) ((unsigned *)HOOK_MEM_BASE_ADDR)[offset]
#define VHOOK_DATA(offset) ((volatile unsigned *)HOOK_MEM_BASE_ADDR)[offset]
#define HOOK_TRIG(funcid) \
do { \
*((unsigned *) HOOK_TRIG_ADDR) = funcid; \
} while (0)
#define HOOK_DATA_BYTE(offset) ((unsigned char *)HOOK_MEM_BASE_ADDR)[offset]
#define HOOK_DATA(offset) ((unsigned*) HOOK_MEM_BASE_ADDR)[offset]
#define VHOOK_DATA(offset) ((volatile unsigned*) HOOK_MEM_BASE_ADDR)[offset]
#define HOOK_TRIG(funcid) do { *((unsigned *) HOOK_TRIG_ADDR) = funcid; } while(0)
#define HOOK_DATA_BYTE(offset) ((unsigned char*) HOOK_MEM_BASE_ADDR)[offset]
int
hook_call
(
unsigned
id
,
unsigned
pcnt
,
...)
{
va_list
ap
;
unsigned
i
;
unsigned
ret
;
// ------------------------------------------------------------------ hook_call
int
hook_call
(
unsigned
id
,
unsigned
pcnt
,
...)
{
va_list
ap
;
unsigned
i
;
unsigned
ret
;
#ifdef USING_SOS
PREEMPT_OFF_SAVE
();
PREEMPT_OFF_SAVE
();
#endif
/* pass parameters */
HOOK_DATA
(
0
)
=
id
;
// pass parameters
HOOK_DATA
(
0
)
=
id
;
/* Have to make hook_print_str a special case since we call with a
*
parameter of byte type. Should perhaps be a separate
*
hook_call. */
/* Have to make hook_print_str a special case since we call with a
parameter of byte type. Should perhaps be a separate
hook_call. */
if
(
id
==
hook_print_str
)
{
int
i
;
char
*
str
;
if
(
id
==
hook_print_str
)
{
int
i
;
char
*
str
;
HOOK_DATA
(
1
)
=
pcnt
;
HOOK_DATA
(
1
)
=
pcnt
;
va_start
(
ap
,
pcnt
);
str
=
(
char
*
)
va_arg
(
ap
,
unsigned
);
va_start
(
ap
,
pcnt
);
str
=
(
char
*
)
va_arg
(
ap
,
unsigned
);
for
(
i
=
0
;
i
!=
pcnt
;
i
++
)
HOOK_DATA_BYTE
(
8
+
i
)
=
str
[
i
];
for
(
i
=
0
;
i
!=
pcnt
;
i
++
)
{
HOOK_DATA_BYTE
(
8
+
i
)
=
str
[
i
];
}
HOOK_DATA_BYTE
(
8
+
i
)
=
0
;
/* null byte */
}
else
{
va_start
(
ap
,
pcnt
);
for
(
i
=
1
;
i
<=
pcnt
;
i
++
)
HOOK_DATA
(
i
)
=
va_arg
(
ap
,
unsigned
);
va_end
(
ap
);
}
HOOK_DATA_BYTE
(
8
+
i
)
=
0
;
/* null byte */
}
else
{
va_start
(
ap
,
pcnt
);
for
(
i
=
1
;
i
<=
pcnt
;
i
++
)
HOOK_DATA
(
i
)
=
va_arg
(
ap
,
unsigned
);
va_end
(
ap
);
}
// read from mem to make sure data has propagated to memory before trigging
*
((
volatile
unsigned
*
)
HOOK_MEM_BASE_ADDR
);
/* read from mem to make sure data has propagated to memory before
* trigging */
ret
=
*
((
volatile
unsigned
*
)
HOOK_MEM_BASE_ADDR
);
// trigger hook
HOOK_TRIG
(
id
);
/* trigger hook */
HOOK_TRIG
(
id
);
// wait for call to finish
while
(
VHOOK_DATA
(
0
)
>
0
)
{}
/* wait for call to finish */
while
(
VHOOK_DATA
(
0
)
>
0
)
;
// extract return value
/* extract return value */
ret
=
VHOOK_DATA
(
1
);
ret
=
VHOOK_DATA
(
1
);
#ifdef USING_SOS
PREEMPT_RESTORE
();
PREEMPT_RESTORE
();
#endif
return
ret
;
return
ret
;
}
unsigned
hook_buf
(
unsigned
i
)
unsigned
hook_buf
(
unsigned
i
)
{
return
(
HOOK_DATA
(
i
));
return
(
HOOK_DATA
(
i
));
}
void
print_str
(
const
char
*
str
)
{
int
i
;
/* find null at end of string */
for
(
i
=
1
;
str
[
i
];
i
++
)
;
hook_call
(
hook_print_str
,
i
,
str
);
void
print_str
(
const
char
*
str
)
{
int
i
;
for
(
i
=
1
;
str
[
i
];
i
++
);
/* find null at end of string */
hook_call
(
hook_print_str
,
i
,
str
);
}
void
CPU_KICK_DOG
(
void
)
{
(
void
)
hook_call
(
hook_kick_dog
,
0
);
// --------------------------------------------------------------- CPU_KICK_DOG
void
CPU_KICK_DOG
(
void
)
{
(
void
)
hook_call
(
hook_kick_dog
,
0
);
}
void
CPU_WATCHDOG_TIMEOUT
(
unsigned
t
)
{
(
void
)
hook_call
(
hook_dog_timeout
,
1
,
t
);
// ------------------------------------------------------- CPU_WATCHDOG_TIMEOUT
void
CPU_WATCHDOG_TIMEOUT
(
unsigned
t
)
{
(
void
)
hook_call
(
hook_dog_timeout
,
1
,
t
);
}
arch/cris/arch-v32/mach-fs/vcs_hook.h
View file @
09160d7c
/
*
* Call simulator hook functions
*/
/
/ $Id: vcs_hook.h,v 1.1 2003/08/12 12:01:06 starvik Exp $
//
// Call simulator hook functions
#ifndef HOOK_H
#define HOOK_H
int
hook_call
(
unsigned
id
,
unsigned
pcnt
,
...);
int
hook_call
(
unsigned
id
,
unsigned
pcnt
,
...);
enum
hook_ids
{
hook_debug_on
=
1
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment