FreeCalypso > hg > fc-tourmaline
comparison src/cs/drivers/drv_app/ffs/board/task.h @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /****************************************************************************** | |
2 * Flash File System (ffs) | |
3 * Idea, design and coding by Mads Meisner-Jensen, mmj@ti.com | |
4 * | |
5 * ffs task | |
6 * | |
7 * $Id: task.h 1.23.1.17 Wed, 29 Oct 2003 12:54:27 +0100 tsj $ | |
8 * | |
9 ******************************************************************************/ | |
10 | |
11 #if (TARGET == 1) | |
12 #include "ffs.cfg" | |
13 #include "rvf/rvf_api.h" | |
14 #endif | |
15 | |
16 #include "ffs/ffs.h" | |
17 | |
18 | |
19 #define OS_FREE(addr) rvf_free_buf(addr) | |
20 #define OS_MAIL_WAIT(event) rvf_wait(event, 0) | |
21 #define OS_MAIL_READ() rvf_read_mbox(RVF_TASK_MBOX_0) | |
22 #define OS_MAIL_SEND(dest, data) rvf_send_msg(dest, data); | |
23 #define OS_DELAY(time) rvf_delay(time) | |
24 #define OS_CREATE_TASK rvf_create_task | |
25 | |
26 #define OS_OK RV_OK | |
27 #define OS_TASK_MBOX_0 RVF_TASK_MBOX_0 | |
28 #define OS_MAIL_EVENT_MASK RVF_TASK_MBOX_0_EVT_MASK | |
29 #define T_OS_MB_ID T_RVF_MB_ID | |
30 | |
31 /****************************************************************************** | |
32 * Globals | |
33 ******************************************************************************/ | |
34 | |
35 extern T_OS_MB_ID ffs_mb_id; | |
36 extern UINT16 ffs_addr_id; | |
37 void ffs_task(void); | |
38 | |
39 /****************************************************************************** | |
40 * Macros | |
41 ******************************************************************************/ | |
42 | |
43 #define MSG_ALLOC(mail) if ((rvf_get_buf(ffs_mb_id, sizeof(struct ffs_req_s), \ | |
44 (T_RVF_BUFFER*) &mail)) == RVF_RED) { \ | |
45 return EFFS_MEMORY; \ | |
46 } | |
47 | |
48 #define MSG_SEND(mail) if (rvf_send_msg(ffs_addr_id, mail)) { \ | |
49 return EFFS_MSGSEND; \ | |
50 } | |
51 | |
52 | |
53 #define FFS_BLOCKING_CALL_BEGIN() \ | |
54 int result, error; \ | |
55 struct ffs_blocking_s fb; \ | |
56 T_RVF_MUTEX mutex; \ | |
57 if ((error = ffs_b_begin(&fb, &mutex, &result)) < 0) \ | |
58 return error; | |
59 | |
60 // The result variable contains the output from the ffs_xx_b() | |
61 // function. After the requested task has been executed is the contents in | |
62 // result replaced with the output from that task | |
63 #define FFS_BLOCKING_CALL_END() \ | |
64 if ((error = ffs_b_end(&mutex, result)) < 0) \ | |
65 return error; | |
66 | |
67 /****************************************************************************** | |
68 * Target Platform Abstraction Functions | |
69 ******************************************************************************/ | |
70 | |
71 req_id_t request_id_get(void); | |
72 void *target_malloc(unsigned int size); | |
73 | |
74 | |
75 /****************************************************************************** | |
76 * Types | |
77 ******************************************************************************/ | |
78 | |
79 // In and output variables to blocking functions | |
80 struct ffs_blocking_s { | |
81 int *result; | |
82 T_RVF_MUTEX *mutex; | |
83 }; | |
84 | |
85 // Structure of operation request mail sent from targetffs.c to FFS task. | |
86 struct ffs_req_s { | |
87 T_RV_HDR header; | |
88 const char *path; | |
89 char *src; | |
90 int size; | |
91 uint16 value16; | |
92 req_id_t request_id; | |
93 char cmd; | |
94 fd_t fdi; | |
95 T_RV_RETURN *cp; | |
96 struct ffs_blocking_s *fb; | |
97 }; | |
98 | |
99 // NOTEME: should we use the indices from tmffs.h instead? | |
100 typedef enum FFS_REQ_CMD { | |
101 NOP = 0, | |
102 PREFORMAT, | |
103 FORMAT, | |
104 FILE_WRITE, | |
105 REMOVE, | |
106 RENAME, | |
107 MKDIR, | |
108 SYMLINK, | |
109 FCONTROL, | |
110 OPEN, | |
111 WRITE, | |
112 CLOSE, | |
113 SEEK, | |
114 TRUNC, | |
115 FTRUNC, | |
116 FDATASYNC | |
117 } ffs_req_e; | |
118 | |
119 effs_t task_file_write(struct ffs_req_s *req); | |
120 effs_t task_symlink(struct ffs_req_s *req); | |
121 effs_t task_format(struct ffs_req_s *req); | |
122 effs_t task_preformat(struct ffs_req_s *req); | |
123 effs_t task_mkdir(struct ffs_req_s *req); | |
124 effs_t task_remove(struct ffs_req_s *req); | |
125 effs_t task_fcontrol(struct ffs_req_s *req); | |
126 effs_t task_rename(struct ffs_req_s *p); | |
127 fd_t task_open(struct ffs_req_s *req); | |
128 int task_write(struct ffs_req_s *req); | |
129 effs_t task_close(struct ffs_req_s *req); | |
130 int task_seek(struct ffs_req_s *req); | |
131 effs_t task_trunc(struct ffs_req_s *req); | |
132 effs_t task_ftrunc(struct ffs_req_s *req); | |
133 effs_t task_fdatasync(struct ffs_req_s *req); | |
134 | |
135 effs_t ffs_b_begin(struct ffs_blocking_s *fb, T_RVF_MUTEX *mutex, int *result); | |
136 effs_t ffs_b_end(T_RVF_MUTEX *mutex, int result); | |
137 void target_free(void *buf); | |
138 |