@@ -66,7 +66,7 @@ struct eventhook {
6666 s32 fd ;
6767 u32 event_code ;
6868 stmcallback callback ;
69- u32 state ; /* 0: unset, 1: set, 2: release */
69+ enum { EVENTHOOK_UNSET = 0 , EVENTHOOK_SET } state ;
7070};
7171
7272static struct eventhook __stm_eventhook ;
@@ -92,7 +92,7 @@ s32 __STM_SetEventHook(void)
9292{
9393 s32 ret ;
9494
95- if (__stm_eventhook .state == 1 )
95+ if (__stm_eventhook .state == EVENTHOOK_SET )
9696 return 0 ;
9797
9898 if (__stm_eventhook .fd < 0 ) {
@@ -107,7 +107,7 @@ s32 __STM_SetEventHook(void)
107107 {
108108 ret = IOS_IoctlAsync (__stm_eventhook .fd , IOCTL_STM_EVENTHOOK , NULL , 0 , & __stm_eventhook .event_code , sizeof (u32 ), __STMEventCallback , & __stm_eventhook );
109109 if (ret == 0 )
110- __stm_eventhook .state = 1 ;
110+ __stm_eventhook .state = EVENTHOOK_SET ;
111111 }
112112 IRQ_Restore (level );
113113
@@ -116,46 +116,44 @@ s32 __STM_SetEventHook(void)
116116
117117s32 __STM_ReleaseEventHook (void )
118118{
119- s32 ret = STM_ENOHANDLER , fd ;
119+ s32 ret , fd ;
120120
121121 STM_printf ("Release\n" );
122122
123- if ( __stm_eventhook . state == 1 ) {
124- ret = fd = IOS_Open ( "/dev/stm/immediate" , 0 );
125- if ( ret >= 0 ) {
126- __stm_eventhook . state = 2 ;
127- ret = IOS_Ioctl ( fd , IOCTL_STM_RELEASE_EH , NULL , 0 , NULL , 0 ) ;
128- IOS_Close ( fd );
129- } else {
130- STM_printf ( "Open /dev/stm/immediate failed {%i}\n" , ret );
131- }
123+ ret = fd = IOS_Open ( "/dev/stm/immediate" , 0 );
124+ if ( ret >= 0 ) {
125+ ret = IOS_Ioctl ( fd , IOCTL_STM_RELEASE_EH , NULL , 0 , NULL , 0 );
126+ if ( ret == IPC_ENOENT )
127+ ret = STM_ENOHANDLER ;
128+
129+ IOS_Close ( fd );
130+ } else {
131+ STM_printf ( "Open /dev/stm/immediate failed {%i}\n" , ret );
132132 }
133- else if (__stm_eventhook .fd >= 0 ) {
134- ret = IOS_Close (__stm_eventhook .fd );
133+
134+ if (__stm_eventhook .fd >= 0 ) {
135+ IOS_Close (__stm_eventhook .fd );
135136 __stm_eventhook .fd = -1 ;
136137 }
137138
138-
139139 return ret ;
140140}
141141
142142static s32 __STMEventCallback (s32 result , void * usrdata )
143143{
144- __stm_eventhook .state = 0 ;
145-
146- if (__stm_eventhook .state == 2 ) {
147- /* Release. event_code will probably be 0. */
148- result = IOS_Close (__stm_eventhook .fd );
149- __stm_eventhook .fd = -1 ;
150- }
144+ __stm_eventhook .state = EVENTHOOK_UNSET ;
151145
152- else if (result < 0 ) {
146+ if (result < 0 ) {
153147 STM_printf ("STM eventhook error (%i), was it already registered?\n" , result );
148+ return result ;
154149 }
155150
156- else {
157- STM_printf ("STM eventhook handler, event=%08x\n" , __stm_eventhook .event_code );
151+ STM_printf ("event=%08x\n" , __stm_eventhook .event_code );
158152
153+ if (__stm_eventhook .event_code == 0 ) { // Release
154+ return 0 ;
155+ }
156+ else {
159157 if (__stm_eventhook .callback )
160158 __stm_eventhook .callback (__stm_eventhook .event_code );
161159
0 commit comments