| Index: embios/trunk/target/ipodnano2g/clockgates.c |
| — | — | @@ -27,6 +27,8 @@ |
| 28 | 28 |
|
| 29 | 29 | void clockgate_enable(int gate, bool enable)
|
| 30 | 30 | {
|
| | 31 | + uint32_t mode = enter_critical_section();
|
| 31 | 32 | if (enable) PWRCON(gate >> 5) &= ~(1 << (gate & 0x1f));
|
| 32 | 33 | else PWRCON(gate >> 5) |= 1 << (gate & 0x1f);
|
| | 34 | + leave_critical_section(mode);
|
| 33 | 35 | }
|
| Index: embios/trunk/target/ipodnano2g/hwkeyaes.c |
| — | — | @@ -27,10 +27,14 @@ |
| 28 | 28 | #include "thread.h"
|
| 29 | 29 |
|
| 30 | 30 |
|
| | 31 | +struct mutex hwkeyaes_mutex;
|
| | 32 | +
|
| | 33 | +
|
| 31 | 34 | void hwkeyaes(enum hwkeyaes_direction direction, uint32_t keyidx, void* data, uint32_t size)
|
| 32 | 35 | {
|
| 33 | 36 | uint32_t ptr, i;
|
| 34 | 37 | uint32_t go = 1;
|
| | 38 | + mutex_lock(&hwkeyaes_mutex, TIMEOUT_BLOCK);
|
| 35 | 39 | PWRCON(1) &= ~0x400;
|
| 36 | 40 | AESTYPE = keyidx;
|
| 37 | 41 | AESUNKREG0 = 1;
|
| — | — | @@ -70,4 +74,5 @@ |
| 71 | 75 | }
|
| 72 | 76 | AESCONTROL = 0;
|
| 73 | 77 | PWRCON(1) |= 0x400;
|
| | 78 | + mutex_unlock(&hwkeyaes_mutex);
|
| 74 | 79 | }
|
| Index: embios/trunk/target/ipodnano2g/hmacsha1.c |
| — | — | @@ -27,10 +27,14 @@ |
| 28 | 28 | #include "thread.h"
|
| 29 | 29 |
|
| 30 | 30 |
|
| | 31 | +struct mutex hmacsha1_mutex;
|
| | 32 | +
|
| | 33 | +
|
| 31 | 34 | void hmacsha1(void* data, uint32_t size, void* result)
|
| 32 | 35 | {
|
| 33 | 36 | uint32_t ptr, i;
|
| 34 | 37 | uint32_t ctrl = 2;
|
| | 38 | + mutex_lock(&hmacsha1_mutex, TIMEOUT_BLOCK);
|
| 35 | 39 | PWRCON(1) &= ~4;
|
| 36 | 40 | for (ptr = 0; ptr < (size >> 2); ptr += 0x10)
|
| 37 | 41 | {
|
| — | — | @@ -41,4 +45,5 @@ |
| 42 | 46 | }
|
| 43 | 47 | for (i = 0; i < 5; i ++) ((uint32_t*)result)[i] = HASHRESULT[i];
|
| 44 | 48 | PWRCON(1) |= 4;
|
| | 49 | + mutex_unlock(&hmacsha1_mutex);
|
| 45 | 50 | }
|
| Index: embios/trunk/target/ipodnano2g/interrupt.c |
| — | — | @@ -132,8 +132,10 @@ |
| 133 | 133 |
|
| 134 | 134 | void interrupt_enable(int irq, bool state)
|
| 135 | 135 | {
|
| | 136 | + uint32_t mode = enter_critical_section();
|
| 136 | 137 | if (state) INTMSK |= 1 << irq;
|
| 137 | 138 | else INTMSK &= ~(1 << irq);
|
| | 139 | + leave_critical_section(mode);
|
| 138 | 140 | }
|
| 139 | 141 |
|
| 140 | 142 | void interrupt_set_handler(int irq, void* handler)
|
| Index: embios/trunk/target/ipodnano3g/clockgates.c |
| — | — | @@ -27,6 +27,8 @@ |
| 28 | 28 |
|
| 29 | 29 | void clockgate_enable(int gate, bool enable)
|
| 30 | 30 | {
|
| | 31 | + uint32_t mode = enter_critical_section();
|
| 31 | 32 | if (enable) PWRCON(gate >> 5) &= ~(1 << (gate & 0x1f));
|
| 32 | 33 | else PWRCON(gate >> 5) |= 1 << (gate & 0x1f);
|
| | 34 | + leave_critical_section(mode);
|
| 33 | 35 | }
|
| Index: embios/trunk/target/ipodnano3g/hwkeyaes.c |
| — | — | @@ -27,9 +27,13 @@ |
| 28 | 28 | #include "thread.h"
|
| 29 | 29 |
|
| 30 | 30 |
|
| | 31 | +struct mutex hwkeyaes_mutex;
|
| | 32 | +
|
| | 33 | +
|
| 31 | 34 | void hwkeyaes(enum hwkeyaes_direction direction, uint32_t keyidx, void* data, uint32_t size)
|
| 32 | 35 | {
|
| 33 | 36 | int i;
|
| | 37 | + mutex_lock(&hwkeyaes_mutex, TIMEOUT_BLOCK);
|
| 34 | 38 | clockgate_enable(10, true);
|
| 35 | 39 | for (i = 0; i < 4; i++) AESIV[i] = 0;
|
| 36 | 40 | AESUNKREG0 = 1;
|
| — | — | @@ -52,4 +56,5 @@ |
| 53 | 57 | invalidate_dcache();
|
| 54 | 58 | while (!(AESSTATUS & 0xf)) sleep(100);
|
| 55 | 59 | clockgate_enable(10, false);
|
| | 60 | + mutex_unlock(&hwkeyaes_mutex);
|
| 56 | 61 | }
|