Few bugs fixed.
@@ -216,9 +216,11 @@ | ||
216 | 216 | |
217 | 217 | void sb_api_vrq_setwt(struct port_extctx *ectxp) { |
218 | 218 | sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p; |
219 | + uint32_t m; | |
219 | 220 | |
221 | + m = ectxp->r0; | |
220 | 222 | ectxp->r0 = sbp->vrq_wtmask; |
221 | - sbp->vrq_wtmask |= ectxp->r0; | |
223 | + sbp->vrq_wtmask |= m; | |
222 | 224 | |
223 | 225 | vrq_check_trigger(sbp, ectxp); |
224 | 226 | } |
@@ -225,16 +227,20 @@ | ||
225 | 227 | |
226 | 228 | void sb_api_vrq_clrwt(struct port_extctx *ectxp) { |
227 | 229 | sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p; |
230 | + uint32_t m; | |
228 | 231 | |
232 | + m = ectxp->r0; | |
229 | 233 | ectxp->r0 = sbp->vrq_wtmask; |
230 | - sbp->vrq_wtmask &= ~ectxp->r0; | |
234 | + sbp->vrq_wtmask &= ~m; | |
231 | 235 | } |
232 | 236 | |
233 | 237 | void sb_api_vrq_seten(struct port_extctx *ectxp) { |
234 | 238 | sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p; |
239 | + uint32_t m; | |
235 | 240 | |
241 | + m = ectxp->r0; | |
236 | 242 | ectxp->r0 = sbp->vrq_enmask; |
237 | - sbp->vrq_enmask |= ectxp->r0; | |
243 | + sbp->vrq_enmask |= m; | |
238 | 244 | |
239 | 245 | vrq_check_trigger(sbp, ectxp); |
240 | 246 | } |
@@ -241,9 +247,11 @@ | ||
241 | 247 | |
242 | 248 | void sb_api_vrq_clren(struct port_extctx *ectxp) { |
243 | 249 | sb_class_t *sbp = (sb_class_t *)chThdGetSelfX()->ctx.syscall.p; |
250 | + uint32_t m; | |
244 | 251 | |
252 | + m = ectxp->r0; | |
245 | 253 | ectxp->r0 = sbp->vrq_enmask; |
246 | - sbp->vrq_enmask &= ~ectxp->r0; | |
254 | + sbp->vrq_enmask &= ~m; | |
247 | 255 | } |
248 | 256 | |
249 | 257 | void sb_api_vrq_disable(struct port_extctx *ectxp) { |
@@ -191,6 +191,13 @@ | ||
191 | 191 | "r" (r2), "r" (r3) : "memory") |
192 | 192 | /** @} */ |
193 | 193 | |
194 | +/** | |
195 | + * @brief VRQ return pseudo-instruction. | |
196 | + * | |
197 | + * @api | |
198 | + */ | |
199 | +#define __sb_vrq_return() __syscall0(255) | |
200 | + | |
194 | 201 | /*===========================================================================*/ |
195 | 202 | /* External declarations. */ |
196 | 203 | /*===========================================================================*/ |
@@ -839,41 +846,53 @@ | ||
839 | 846 | /** |
840 | 847 | * @brief VRQ @p setwt pseudo-instruction. |
841 | 848 | * |
849 | + * @param[in] m VRQs mask | |
850 | + * | |
842 | 851 | * @api |
843 | 852 | */ |
844 | -static inline void __sb_vrq_setwt(void) { | |
853 | +static inline uint32_t __sb_vrq_setwt(uint32_t m) { | |
845 | 854 | |
846 | - __syscall0(248); | |
855 | + __syscall1r(248, m); | |
856 | + return r0; | |
847 | 857 | } |
848 | 858 | |
849 | 859 | /** |
850 | 860 | * @brief VRQ @p clrwt pseudo-instruction. |
851 | 861 | * |
862 | + * @param[in] m VRQs mask | |
863 | + * | |
852 | 864 | * @api |
853 | 865 | */ |
854 | -static inline void __sb_vrq_clrwt(void) { | |
866 | +static inline uint32_t __sb_vrq_clrwt(uint32_t m) { | |
855 | 867 | |
856 | - __syscall0(249); | |
868 | + __syscall1r(249, m); | |
869 | + return r0; | |
857 | 870 | } |
858 | 871 | |
859 | 872 | /** |
860 | 873 | * @brief VRQ @p seten pseudo-instruction. |
861 | 874 | * |
875 | + * @param[in] m VRQs mask | |
876 | + * | |
862 | 877 | * @api |
863 | 878 | */ |
864 | -static inline void __sb_vrq_seten(void) { | |
879 | +static inline uint32_t __sb_vrq_seten(uint32_t m) { | |
865 | 880 | |
866 | - __syscall0(250); | |
881 | + __syscall1r(250, m); | |
882 | + return r0; | |
867 | 883 | } |
868 | 884 | |
869 | 885 | /** |
870 | 886 | * @brief VRQ @p clren pseudo-instruction. |
871 | 887 | * |
888 | + * @param[in] m VRQs mask | |
889 | + * | |
872 | 890 | * @api |
873 | 891 | */ |
874 | -static inline void __sb_vrq_clren(void) { | |
892 | +static inline uint32_t __sb_vrq_clren(uint32_t m) { | |
875 | 893 | |
876 | - __syscall0(251); | |
894 | + __syscall1r(251, m); | |
895 | + return r0; | |
877 | 896 | } |
878 | 897 | |
879 | 898 | /** |
@@ -907,16 +926,6 @@ | ||
907 | 926 | return r0; |
908 | 927 | } |
909 | 928 | |
910 | -/** | |
911 | - * @brief VRQ return pseudo-instruction. | |
912 | - * | |
913 | - * @api | |
914 | - */ | |
915 | -static inline void __sb_vrq_return(void) { | |
916 | - | |
917 | - __syscall0(255); | |
918 | -} | |
919 | - | |
920 | 929 | #endif /* SBUSER_H */ |
921 | 930 | |
922 | 931 | /** @} */ |