Gordon Craig / mbed-dev

Fork of mbed-dev by mbed official

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?

UserRevisionLine numberNew 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 }