PS2SDK
PS2 Homebrew Libraries
defs.h
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # Copyright (c) 2003 Marcus R. Brown <mrbrown@0xd6.org>
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
16 #ifndef __DEFS_H__
17 #define __DEFS_H__
18 
19 #include <types.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #ifndef NULL
26 #define NULL ((void *)0)
27 #endif
28 
29 #ifndef ALIGN
30 #define ALIGN(x, align) (((x)+((align)-1))&~((align)-1))
31 #endif
32 
33 #define PHYSADDR(a) (((u32)(a)) & 0x1fffffff)
34 
35 #define KSEG1 0xa0000000
36 #define KSEG1ADDR(a) ((__typeof__(a))(((u32)(a) & 0x1fffffff) | KSEG1))
37 
38 #if !defined(USE_GP_REGISTER)
39 #define USE_GP_REGISTER 1
40 #endif
41 
42 static __inline__ void SetGP(void *gp)
43 {
44  register void *gpReg __asm__("gp");
45 
46  gpReg = gp;
47  __asm__ __volatile__(" " ::"r"(gpReg));
48 }
49 
50 extern void *_gp;
51 
52 static __inline__ void *GetGP(void)
53 {
54  register void *gpReg __asm__("gp");
55 
56  __asm__ __volatile__(" " : "=r"(gpReg));
57  return gpReg;
58 }
59 
60 static __inline__ void *ChangeGP(void *gp)
61 {
62  void *OldGP;
63 
64  OldGP = GetGP();
65  SetGP(gp);
66 
67  return OldGP;
68 }
69 
70 #define SetModuleGP() ChangeGP(&_gp)
71 
72 static inline void *iop_memcpy(void *dest, const void *src, int size)
73 {
74  u8 *d = (u8 *)dest, *s = (u8 *)src;
75 
76  while (size--)
77  *d++ = *s++;
78  return dest;
79 }
80 
81 #ifdef __cplusplus
82 }
83 #endif
84 
85 #endif /* __DEFS_H__ */
_gp
void * _gp