Skip to content

Commit d4d990c

Browse files
committed
Split alarm functions into system_alarm.c
1 parent cbd139d commit d4d990c

File tree

4 files changed

+227
-164
lines changed

4 files changed

+227
-164
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ OGCOBJ := \
137137
lwp_watchdog.o lwp_wkspace.o lwp_objmgr.o lwp_heap.o sys_state.o \
138138
exception_handler.o exception.o irq.o irq_handler.o semaphore.o \
139139
video_asm.o video.o pad.o dvd.o exi.o mutex.o arqueue.o arqmgr.o \
140-
cache_asm.o system.o system_asm.o cond.o \
140+
cache_asm.o system.o system_alarm.o system_asm.o cond.o \
141141
gx.o gu.o gu_psasm.o audio.o cache.o decrementer.o \
142142
message.o card.o aram.o depackrnc.o decrementer_handler.o \
143143
depackrnc1.o dsp.o si.o tpl.o ipc.o ogc_crt0.o \

libogc/mic.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ distribution.
3535
#include "processor.h"
3636
#include "exi.h"
3737
#include "lwp.h"
38-
#include "lwp_watchdog.h"
3938
#include "system.h"
40-
#include "semaphore.h"
39+
#include "timesupp.h"
4140

4241
#include "mic.h"
4342

libogc/system.c

Lines changed: 4 additions & 161 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ distribution.
5555
#include "lwp_priority.h"
5656
#include "lwp_watchdog.h"
5757
#include "lwp_wkspace.h"
58-
#include "lwp_objmgr.h"
59-
#include "lwp_config.h"
6058
#include "libversion.h"
6159

6260
#define SYSMEM1_SIZE 0x01800000
@@ -78,14 +76,6 @@ distribution.
7876
#define DSPCR_PIINT 0x0002 // assert DSP PI interrupt
7977
#define DSPCR_RES 0x0001 // reset DSP
8078

81-
#define LWP_OBJTYPE_SYSWD 7
82-
83-
#define LWP_CHECK_SYSWD(hndl) \
84-
{ \
85-
if(((hndl)==SYS_WD_NULL) || (LWP_OBJTYPE(hndl)!=LWP_OBJTYPE_SYSWD)) \
86-
return NULL; \
87-
}
88-
8979
#define _SHIFTL(v, s, w) \
9080
((u32) (((u32)(v) & ((0x01 << (w)) - 1)) << (s)))
9181
#define _SHIFTR(v, s, w) \
@@ -99,17 +89,6 @@ struct _sramcntrl {
9989
s32 sync;
10090
} sramcntrl ATTRIBUTE_ALIGN(32);
10191

102-
typedef struct _alarm_st
103-
{
104-
lwp_obj object;
105-
wd_cntrl alarm;
106-
u64 ticks;
107-
u64 periodic;
108-
u64 start_per;
109-
alarmcallback alarmhandler;
110-
void *cb_arg;
111-
} alarm_st;
112-
11392
typedef struct _yay0header {
11493
unsigned int id ATTRIBUTE_PACKED;
11594
unsigned int dec_size ATTRIBUTE_PACKED;
@@ -125,7 +104,6 @@ static sys_fontheader *sys_fontdata = NULL;
125104

126105
static lwp_queue sys_reset_func_queue;
127106
static u32 system_initialized = 0;
128-
static lwp_objinfo sys_alarm_objects;
129107

130108
static void *__sysarena1lo = NULL;
131109
static void *__sysarena1hi = NULL;
@@ -160,9 +138,9 @@ static s32 __sram_sync(void);
160138
static s32 __sram_writecallback(s32 chn,s32 dev);
161139
static s32 __mem_onreset(s32 final);
162140

163-
extern void __lwp_thread_coreinit(void);
164-
extern void __lwp_sysinit(void);
165-
extern void __heap_init(void);
141+
extern void __lwp_thread_coreinit(void);
142+
extern void __lwp_sysinit(void);
143+
extern void __lwp_syswd_init(void);
166144
extern void __exception_init(void);
167145
extern void __exception_closeall(void);
168146
extern void __systemcall_init(void);
@@ -174,7 +152,6 @@ extern void __lwp_sema_init(void);
174152
extern void __exi_init(void);
175153
extern void __si_init(void);
176154
extern void __irq_init(void);
177-
extern void __lwp_start_multitasking(void);
178155
extern void __memlock_init(void);
179156
extern void __libc_init(int);
180157

@@ -247,18 +224,6 @@ static sys_resetinfo mem_resetinfo = {
247224
static const char *__sys_versiondate;
248225
static const char *__sys_versionbuild;
249226

250-
static __inline__ alarm_st* __lwp_syswd_open(syswd_t wd)
251-
{
252-
LWP_CHECK_SYSWD(wd);
253-
return (alarm_st*)__lwp_objmgr_get(&sys_alarm_objects,LWP_OBJMASKID(wd));
254-
}
255-
256-
static __inline__ void __lwp_syswd_free(alarm_st *alarm)
257-
{
258-
__lwp_objmgr_close(&sys_alarm_objects,&alarm->object);
259-
__lwp_objmgr_free(&sys_alarm_objects,&alarm->object);
260-
}
261-
262227
static void (*reload)(void) = (void(*)(void))0x80001800;
263228

264229
static bool __stub_found(void)
@@ -301,20 +266,6 @@ void __syscall_exit(int rc)
301266
#endif
302267
}
303268

304-
static alarm_st* __lwp_syswd_allocate(void)
305-
{
306-
alarm_st *alarm;
307-
308-
__lwp_thread_dispatchdisable();
309-
alarm = (alarm_st*)__lwp_objmgr_allocate(&sys_alarm_objects);
310-
if(alarm) {
311-
__lwp_objmgr_open(&sys_alarm_objects,&alarm->object);
312-
return alarm;
313-
}
314-
__lwp_thread_dispatchenable();
315-
return NULL;
316-
}
317-
318269
static s32 __mem_onreset(s32 final)
319270
{
320271
if(final==TRUE) {
@@ -324,22 +275,6 @@ static s32 __mem_onreset(s32 final)
324275
return 1;
325276
}
326277

327-
static void __sys_alarmhandler(void *arg)
328-
{
329-
alarm_st *alarm;
330-
syswd_t thealarm = (syswd_t)arg;
331-
332-
if(thealarm==SYS_WD_NULL || LWP_OBJTYPE(thealarm)!=LWP_OBJTYPE_SYSWD) return;
333-
334-
__lwp_thread_dispatchdisable();
335-
alarm = (alarm_st*)__lwp_objmgr_getnoprotection(&sys_alarm_objects,LWP_OBJMASKID(thealarm));
336-
if(alarm) {
337-
if(alarm->periodic) __lwp_wd_insert_ticks(&alarm->alarm,alarm->periodic);
338-
if(alarm->alarmhandler) alarm->alarmhandler(thealarm,alarm->cb_arg);
339-
}
340-
__lwp_thread_dispatchunnest();
341-
}
342-
343278
#if defined(HW_DOL)
344279
void __SYS_DoHotReset(u32 reset_code)
345280
{
@@ -1082,7 +1017,7 @@ void SYS_Init(void)
10821017
#endif
10831018
__lwp_wkspace_init(KERNEL_HEAP);
10841019
__lwp_queue_init_empty(&sys_reset_func_queue);
1085-
__lwp_objmgr_initinfo(&sys_alarm_objects,LWP_MAX_WATCHDOGS,sizeof(alarm_st));
1020+
__lwp_syswd_init();
10861021
__sys_state_init();
10871022
__lwp_priority_init();
10881023
__lwp_watchdog_init();
@@ -1665,98 +1600,6 @@ void SYS_GetFontTexel(s32 c,void *image,s32 pos,s32 stride,s32 *width)
16651600
*width = sys_fontwidthtab[c];
16661601
}
16671602

1668-
s32 SYS_CreateAlarm(syswd_t *thealarm)
1669-
{
1670-
alarm_st *alarm;
1671-
1672-
alarm = __lwp_syswd_allocate();
1673-
if(!alarm) return -1;
1674-
1675-
alarm->alarmhandler = NULL;
1676-
alarm->ticks = 0;
1677-
alarm->start_per = 0;
1678-
alarm->periodic = 0;
1679-
1680-
*thealarm = (LWP_OBJMASKTYPE(LWP_OBJTYPE_SYSWD)|LWP_OBJMASKID(alarm->object.id));
1681-
__lwp_thread_dispatchenable();
1682-
return 0;
1683-
}
1684-
1685-
s32 SYS_SetAlarm(syswd_t thealarm,const struct timespec *tp,alarmcallback cb,void *cbarg)
1686-
{
1687-
alarm_st *alarm;
1688-
1689-
alarm = __lwp_syswd_open(thealarm);
1690-
if(!alarm) return -1;
1691-
1692-
alarm->cb_arg = cbarg;
1693-
alarm->alarmhandler = cb;
1694-
alarm->ticks = __lwp_wd_calc_ticks(tp);
1695-
1696-
alarm->periodic = 0;
1697-
alarm->start_per = 0;
1698-
1699-
__lwp_wd_initialize(&alarm->alarm,__sys_alarmhandler,alarm->object.id,(void*)thealarm);
1700-
__lwp_wd_insert_ticks(&alarm->alarm,alarm->ticks);
1701-
__lwp_thread_dispatchenable();
1702-
return 0;
1703-
}
1704-
1705-
s32 SYS_SetPeriodicAlarm(syswd_t thealarm,const struct timespec *tp_start,const struct timespec *tp_period,alarmcallback cb,void *cbarg)
1706-
{
1707-
alarm_st *alarm;
1708-
1709-
alarm = __lwp_syswd_open(thealarm);
1710-
if(!alarm) return -1;
1711-
1712-
alarm->start_per = __lwp_wd_calc_ticks(tp_start);
1713-
alarm->periodic = __lwp_wd_calc_ticks(tp_period);
1714-
alarm->alarmhandler = cb;
1715-
alarm->cb_arg = cbarg;
1716-
1717-
alarm->ticks = 0;
1718-
1719-
__lwp_wd_initialize(&alarm->alarm,__sys_alarmhandler,alarm->object.id,(void*)thealarm);
1720-
__lwp_wd_insert_ticks(&alarm->alarm,alarm->start_per);
1721-
__lwp_thread_dispatchenable();
1722-
return 0;
1723-
}
1724-
1725-
s32 SYS_RemoveAlarm(syswd_t thealarm)
1726-
{
1727-
alarm_st *alarm;
1728-
1729-
alarm = __lwp_syswd_open(thealarm);
1730-
if(!alarm) return -1;
1731-
1732-
alarm->alarmhandler = NULL;
1733-
alarm->ticks = 0;
1734-
alarm->periodic = 0;
1735-
alarm->start_per = 0;
1736-
1737-
__lwp_wd_remove_ticks(&alarm->alarm);
1738-
__lwp_syswd_free(alarm);
1739-
__lwp_thread_dispatchenable();
1740-
return 0;
1741-
}
1742-
1743-
s32 SYS_CancelAlarm(syswd_t thealarm)
1744-
{
1745-
alarm_st *alarm;
1746-
1747-
alarm = __lwp_syswd_open(thealarm);
1748-
if(!alarm) return -1;
1749-
1750-
alarm->alarmhandler = NULL;
1751-
alarm->ticks = 0;
1752-
alarm->periodic = 0;
1753-
alarm->start_per = 0;
1754-
1755-
__lwp_wd_remove_ticks(&alarm->alarm);
1756-
__lwp_thread_dispatchenable();
1757-
return 0;
1758-
}
1759-
17601603
resetcallback SYS_SetResetCallback(resetcallback cb)
17611604
{
17621605
u32 level;

0 commit comments

Comments
 (0)