summaryrefslogtreecommitdiff
path: root/firmware/drivers/ata.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/ata.c')
-rw-r--r--firmware/drivers/ata.c50
1 files changed, 2 insertions, 48 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index e067235d95..56b303da8d 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -95,52 +95,6 @@ static unsigned short identify_info[SECTOR_SIZE/2];
95 95
96#ifdef MAX_PHYS_SECTOR_SIZE 96#ifdef MAX_PHYS_SECTOR_SIZE
97 97
98/** This is temporary **/
99/* Define the mutex functions to use the special hack object */
100#define mutex_init ata_spin_init
101#define mutex_lock ata_spin_lock
102#define mutex_unlock ata_spin_unlock
103
104void ata_spin_init(struct mutex *m)
105{
106 m->thread = NULL;
107 m->locked = 0;
108 m->count = 0;
109#if CONFIG_CORELOCK == SW_CORELOCK
110 corelock_init(&m->cl);
111#endif
112}
113
114void ata_spin_lock(struct mutex *m)
115{
116 struct thread_entry *current = thread_get_current();
117
118 if (current == m->thread)
119 {
120 m->count++;
121 return;
122 }
123
124 while (test_and_set(&m->locked, 1, &m->cl))
125 yield();
126
127 m->thread = current;
128}
129
130void ata_spin_unlock(struct mutex *m)
131{
132 if (m->count > 0)
133 {
134 m->count--;
135 return;
136 }
137
138 m->thread = NULL;
139 test_and_set(&m->locked, 0, &m->cl);
140}
141
142/****/
143
144struct sector_cache_entry { 98struct sector_cache_entry {
145 bool inuse; 99 bool inuse;
146 unsigned long sectornum; /* logical sector */ 100 unsigned long sectornum; /* logical sector */
@@ -163,7 +117,7 @@ STATICIRAM int wait_for_bsy(void)
163 long timeout = current_tick + HZ*30; 117 long timeout = current_tick + HZ*30;
164 while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) { 118 while (TIME_BEFORE(current_tick, timeout) && (ATA_STATUS & STATUS_BSY)) {
165 last_disk_activity = current_tick; 119 last_disk_activity = current_tick;
166 priority_yield(); 120 yield();
167 } 121 }
168 122
169 if (TIME_BEFORE(current_tick, timeout)) 123 if (TIME_BEFORE(current_tick, timeout))
@@ -185,7 +139,7 @@ STATICIRAM int wait_for_rdy(void)
185 while (TIME_BEFORE(current_tick, timeout) && 139 while (TIME_BEFORE(current_tick, timeout) &&
186 !(ATA_ALT_STATUS & STATUS_RDY)) { 140 !(ATA_ALT_STATUS & STATUS_RDY)) {
187 last_disk_activity = current_tick; 141 last_disk_activity = current_tick;
188 priority_yield(); 142 yield();
189 } 143 }
190 144
191 if (TIME_BEFORE(current_tick, timeout)) 145 if (TIME_BEFORE(current_tick, timeout))