Completed mutual exclusion support.
@@ -44,10 +44,17 @@ | ||
44 | 44 | /*===========================================================================*/ |
45 | 45 | |
46 | 46 | /* Forward declarations required by mmc_vmt.*/ |
47 | +static bool mmc_is_card_inserted(void *instance); | |
48 | +static bool mmc_is_write_protected(void *instance); | |
49 | +static bool mmc_connect(void *instance); | |
50 | +static bool mmc_disconnect(void *instance); | |
51 | +static bool mmc_connect(void *instance); | |
47 | 52 | static bool mmc_read(void *instance, uint32_t startblk, |
48 | 53 | uint8_t *buffer, uint32_t n); |
49 | 54 | static bool mmc_write(void *instance, uint32_t startblk, |
50 | 55 | const uint8_t *buffer, uint32_t n); |
56 | +static bool mmc_sync(void *instance); | |
57 | +static bool mmc_get_info(void *instance, BlockDeviceInfo *bdip); | |
51 | 58 | |
52 | 59 | /** |
53 | 60 | * @brief Virtual methods table. |
@@ -54,14 +61,14 @@ | ||
54 | 61 | */ |
55 | 62 | static const struct mmc_spi_driver_vmt mmc_vmt = { |
56 | 63 | (size_t)0, |
57 | - (bool (*)(void *))mmc_lld_is_card_inserted, | |
58 | - (bool (*)(void *))mmc_lld_is_write_protected, | |
59 | - (bool (*)(void *))mmcConnect, | |
60 | - (bool (*)(void *))mmcDisconnect, | |
64 | + mmc_is_card_inserted, | |
65 | + mmc_is_write_protected, | |
66 | + mmc_connect, | |
67 | + mmc_disconnect, | |
61 | 68 | mmc_read, |
62 | 69 | mmc_write, |
63 | - (bool (*)(void *))mmcSync, | |
64 | - (bool (*)(void *, BlockDeviceInfo *))mmcGetInfo | |
70 | + mmc_sync, | |
71 | + mmc_get_info | |
65 | 72 | }; |
66 | 73 | |
67 | 74 | /** |
@@ -96,6 +103,74 @@ | ||
96 | 103 | /* Driver local functions. */ |
97 | 104 | /*===========================================================================*/ |
98 | 105 | |
106 | +static bool mmc_is_card_inserted(void *instance) { | |
107 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
108 | + bool err; | |
109 | + | |
110 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
111 | + spiAcquireBus(mmcp->config->spip); | |
112 | +#endif | |
113 | + | |
114 | + err = mmcIsCardInserted(mmcp); | |
115 | + | |
116 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
117 | + spiReleaseBus(mmcp->config->spip); | |
118 | +#endif | |
119 | + | |
120 | + return err; | |
121 | +} | |
122 | + | |
123 | +static bool mmc_is_write_protected(void *instance) { | |
124 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
125 | + bool err; | |
126 | + | |
127 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
128 | + spiAcquireBus(mmcp->config->spip); | |
129 | +#endif | |
130 | + | |
131 | + err = mmcIsCardInserted(mmcp); | |
132 | + | |
133 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
134 | + spiReleaseBus(mmcp->config->spip); | |
135 | +#endif | |
136 | + | |
137 | + return err; | |
138 | +} | |
139 | + | |
140 | +static bool mmc_connect(void *instance) { | |
141 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
142 | + bool err; | |
143 | + | |
144 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
145 | + spiAcquireBus(mmcp->config->spip); | |
146 | +#endif | |
147 | + | |
148 | + err = mmcConnect(mmcp); | |
149 | + | |
150 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
151 | + spiReleaseBus(mmcp->config->spip); | |
152 | +#endif | |
153 | + | |
154 | + return err; | |
155 | +} | |
156 | + | |
157 | +static bool mmc_disconnect(void *instance) { | |
158 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
159 | + bool err; | |
160 | + | |
161 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
162 | + spiAcquireBus(mmcp->config->spip); | |
163 | +#endif | |
164 | + | |
165 | + err = mmcDisconnect(mmcp); | |
166 | + | |
167 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
168 | + spiReleaseBus(mmcp->config->spip); | |
169 | +#endif | |
170 | + | |
171 | + return err; | |
172 | +} | |
173 | + | |
99 | 174 | static bool mmc_read(void *instance, uint32_t startblk, |
100 | 175 | uint8_t *buffer, uint32_t n) { |
101 | 176 | MMCDriver *mmcp = (MMCDriver *)instance; |
@@ -168,6 +243,32 @@ | ||
168 | 243 | return err; |
169 | 244 | } |
170 | 245 | |
246 | +static bool mmc_sync(void *instance) { | |
247 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
248 | + bool err; | |
249 | + | |
250 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
251 | + spiAcquireBus(mmcp->config->spip); | |
252 | +#endif | |
253 | + | |
254 | + err = mmcSync(mmcp); | |
255 | + | |
256 | +#if MMC_USE_MUTUAL_EXCLUSION == TRUE | |
257 | + spiReleaseBus(mmcp->config->spip); | |
258 | +#endif | |
259 | + | |
260 | + return err; | |
261 | +} | |
262 | + | |
263 | +static bool mmc_get_info(void *instance, BlockDeviceInfo *bdip) { | |
264 | + MMCDriver *mmcp = (MMCDriver *)instance; | |
265 | + bool err; | |
266 | + | |
267 | + err = mmcGetInfo(mmcp, bdip); | |
268 | + | |
269 | + return err; | |
270 | +} | |
271 | + | |
171 | 272 | /** |
172 | 273 | * @brief Calculate the MMC standard CRC-7 based on a lookup table. |
173 | 274 | * |