summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/ata-nand-s5l8700.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8700/ata-nand-s5l8700.c')
-rw-r--r--firmware/target/arm/s5l8700/ata-nand-s5l8700.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/firmware/target/arm/s5l8700/ata-nand-s5l8700.c b/firmware/target/arm/s5l8700/ata-nand-s5l8700.c
index 8507001415..ad87d9ea73 100644
--- a/firmware/target/arm/s5l8700/ata-nand-s5l8700.c
+++ b/firmware/target/arm/s5l8700/ata-nand-s5l8700.c
@@ -30,30 +30,20 @@
30#include "ftl-target.h" 30#include "ftl-target.h"
31#include "nand-target.h" 31#include "nand-target.h"
32 32
33/* for compatibility */
34long last_disk_activity = -1;
35
36/** static, private data **/ 33/** static, private data **/
37static bool initialized = false; 34static bool initialized = false;
38 35
39static long nand_stack[20];
40
41/* API Functions */ 36/* API Functions */
42
43int nand_read_sectors(IF_MD2(int drive,) unsigned long start, int incount, 37int nand_read_sectors(IF_MD2(int drive,) unsigned long start, int incount,
44 void* inbuf) 38 void* inbuf)
45{ 39{
46 int rc = ftl_read(start, incount, inbuf); 40 return ftl_read(start, incount, inbuf);
47 last_disk_activity = current_tick;
48 return rc;
49} 41}
50 42
51int nand_write_sectors(IF_MD2(int drive,) unsigned long start, int count, 43int nand_write_sectors(IF_MD2(int drive,) unsigned long start, int count,
52 const void* outbuf) 44 const void* outbuf)
53{ 45{
54 int rc = ftl_write(start, count, outbuf); 46 return ftl_write(start, count, outbuf);
55 last_disk_activity = current_tick;
56 return rc;
57} 47}
58 48
59void nand_spindown(int seconds) 49void nand_spindown(int seconds)
@@ -73,7 +63,7 @@ void nand_sleepnow(void)
73 63
74void nand_spin(void) 64void nand_spin(void)
75{ 65{
76 last_disk_activity = current_tick; 66 nand_set_active();
77} 67}
78 68
79void nand_enable(bool on) 69void nand_enable(bool on)
@@ -93,40 +83,22 @@ void nand_get_info(IF_MD2(int drive,) struct storage_info *info)
93 83
94long nand_last_disk_activity(void) 84long nand_last_disk_activity(void)
95{ 85{
96 return last_disk_activity; 86 return nand_last_activity();
97} 87}
98 88
99#ifdef HAVE_STORAGE_FLUSH 89#ifdef HAVE_STORAGE_FLUSH
100int nand_flush(void) 90int nand_flush(void)
101{ 91{
102 last_disk_activity = current_tick;
103 int rc = ftl_sync(); 92 int rc = ftl_sync();
104 if (rc != 0) panicf("Failed to unmount flash: %X", rc); 93 if (rc != 0) panicf("Failed to unmount flash: %X", rc);
105 return rc; 94 return rc;
106} 95}
107#endif 96#endif
108 97
109static void nand_thread(void)
110{
111 while (1)
112 {
113 if (TIME_AFTER(current_tick, last_disk_activity + HZ / 5))
114 nand_power_down();
115 sleep(HZ / 10);
116 }
117}
118
119int nand_init(void) 98int nand_init(void)
120{ 99{
121 if (ftl_init()) return 1; 100 if (ftl_init()) return 1;
122 101
123 last_disk_activity = current_tick;
124
125 create_thread(nand_thread, nand_stack,
126 sizeof(nand_stack), 0, "nand"
127 IF_PRIO(, PRIORITY_USER_INTERFACE)
128 IF_COP(, CPU));
129
130 initialized = true; 102 initialized = true;
131 return 0; 103 return 0;
132} 104}