Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-dev by
targets/TARGET_Realtek/TARGET_AMEBA/sdk/os/os_dep/device_lock.c@167:e84263d55307, 2017-06-21 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Jun 21 17:46:44 2017 +0100
- Revision:
- 167:e84263d55307
This updates the lib to the mbed lib v 145
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 167:e84263d55307 | 1 | /* |
AnnaBridge | 167:e84263d55307 | 2 | * Routines to access hardware |
AnnaBridge | 167:e84263d55307 | 3 | * |
AnnaBridge | 167:e84263d55307 | 4 | * Copyright (c) 2013 Realtek Semiconductor Corp. |
AnnaBridge | 167:e84263d55307 | 5 | * |
AnnaBridge | 167:e84263d55307 | 6 | * This module is a confidential and proprietary property of RealTek and |
AnnaBridge | 167:e84263d55307 | 7 | * possession or use of this module requires written permission of RealTek. |
AnnaBridge | 167:e84263d55307 | 8 | */ |
AnnaBridge | 167:e84263d55307 | 9 | |
AnnaBridge | 167:e84263d55307 | 10 | #include "osdep_service.h" |
AnnaBridge | 167:e84263d55307 | 11 | #include "device_lock.h" |
AnnaBridge | 167:e84263d55307 | 12 | |
AnnaBridge | 167:e84263d55307 | 13 | //------------------------------------------------------ |
AnnaBridge | 167:e84263d55307 | 14 | #define DEVICE_MUTEX_IS_INIT(device) (mutex_init & (1<<device)) |
AnnaBridge | 167:e84263d55307 | 15 | #define DEVICE_MUTEX_SET_INIT(device) (mutex_init |= (1<<device)) |
AnnaBridge | 167:e84263d55307 | 16 | #define DEVICE_MUTEX_CLR_INIT(device) (mutex_init &= (~(1<<device))) |
AnnaBridge | 167:e84263d55307 | 17 | |
AnnaBridge | 167:e84263d55307 | 18 | static u32 mutex_init = 0; |
AnnaBridge | 167:e84263d55307 | 19 | static _mutex device_mutex[RT_DEV_LOCK_MAX]; |
AnnaBridge | 167:e84263d55307 | 20 | |
AnnaBridge | 167:e84263d55307 | 21 | //====================================================== |
AnnaBridge | 167:e84263d55307 | 22 | static void device_mutex_init(RT_DEV_LOCK_E device) |
AnnaBridge | 167:e84263d55307 | 23 | { |
AnnaBridge | 167:e84263d55307 | 24 | if(!DEVICE_MUTEX_IS_INIT(device)){ |
AnnaBridge | 167:e84263d55307 | 25 | _lock lock; |
AnnaBridge | 167:e84263d55307 | 26 | _irqL irqL; |
AnnaBridge | 167:e84263d55307 | 27 | rtw_enter_critical(&lock, &irqL); |
AnnaBridge | 167:e84263d55307 | 28 | if(!DEVICE_MUTEX_IS_INIT(device)){ |
AnnaBridge | 167:e84263d55307 | 29 | rtw_mutex_init(&device_mutex[device]); |
AnnaBridge | 167:e84263d55307 | 30 | DEVICE_MUTEX_SET_INIT(device); |
AnnaBridge | 167:e84263d55307 | 31 | } |
AnnaBridge | 167:e84263d55307 | 32 | rtw_exit_critical(&lock, &irqL); |
AnnaBridge | 167:e84263d55307 | 33 | } |
AnnaBridge | 167:e84263d55307 | 34 | } |
AnnaBridge | 167:e84263d55307 | 35 | |
AnnaBridge | 167:e84263d55307 | 36 | //====================================================== |
AnnaBridge | 167:e84263d55307 | 37 | static void device_mutex_free(RT_DEV_LOCK_E device) |
AnnaBridge | 167:e84263d55307 | 38 | { |
AnnaBridge | 167:e84263d55307 | 39 | if(DEVICE_MUTEX_IS_INIT(device)){ |
AnnaBridge | 167:e84263d55307 | 40 | _lock lock; |
AnnaBridge | 167:e84263d55307 | 41 | _irqL irqL; |
AnnaBridge | 167:e84263d55307 | 42 | rtw_enter_critical(&lock, &irqL); |
AnnaBridge | 167:e84263d55307 | 43 | if(!DEVICE_MUTEX_IS_INIT(device)){ |
AnnaBridge | 167:e84263d55307 | 44 | rtw_mutex_free(&device_mutex[device]); |
AnnaBridge | 167:e84263d55307 | 45 | DEVICE_MUTEX_CLR_INIT(device); |
AnnaBridge | 167:e84263d55307 | 46 | } |
AnnaBridge | 167:e84263d55307 | 47 | rtw_exit_critical(&lock, &irqL); |
AnnaBridge | 167:e84263d55307 | 48 | } |
AnnaBridge | 167:e84263d55307 | 49 | } |
AnnaBridge | 167:e84263d55307 | 50 | |
AnnaBridge | 167:e84263d55307 | 51 | //====================================================== |
AnnaBridge | 167:e84263d55307 | 52 | void device_mutex_lock(RT_DEV_LOCK_E device) |
AnnaBridge | 167:e84263d55307 | 53 | { |
AnnaBridge | 167:e84263d55307 | 54 | device_mutex_init(device); |
AnnaBridge | 167:e84263d55307 | 55 | while(rtw_mutex_get_timeout(&device_mutex[device], 10000)<0) |
AnnaBridge | 167:e84263d55307 | 56 | printf("device lock timeout: %d\n", device); |
AnnaBridge | 167:e84263d55307 | 57 | } |
AnnaBridge | 167:e84263d55307 | 58 | |
AnnaBridge | 167:e84263d55307 | 59 | //====================================================== |
AnnaBridge | 167:e84263d55307 | 60 | void device_mutex_unlock(RT_DEV_LOCK_E device) |
AnnaBridge | 167:e84263d55307 | 61 | { |
AnnaBridge | 167:e84263d55307 | 62 | device_mutex_init(device); |
AnnaBridge | 167:e84263d55307 | 63 | rtw_mutex_put(&device_mutex[device]); |
AnnaBridge | 167:e84263d55307 | 64 | } |