This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit 49f0c27a4a2c7e5359b9e2d7d19053e712a710f3
Author: Jerzy Kasenberg <[email protected]>
AuthorDate: Mon Jun 23 19:56:29 2025 +0200

    tinyusb/msc_fat_view: Use link table macros
    
    This package had some macros to access link tables
    that package utilizes.
    
    Now local version are replaced with global macros
    
    Signed-off-by: Jerzy Kasenberg <[email protected]>
    Signed-off-by: Jerzy Kasenberg <[email protected]>
---
 .../include/msc_fat_view/msc_fat_view.h            | 72 +++++++---------------
 hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c     |  7 ++-
 2 files changed, 26 insertions(+), 53 deletions(-)

diff --git a/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h 
b/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h
index 88aaa7af3..dcf8dfffe 100644
--- a/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h
+++ b/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h
@@ -22,6 +22,7 @@
 
 #include <inttypes.h>
 #include <stdbool.h>
+#include <os/link_tables.h>
 
 #define SECTOR_SIZE                 512
 
@@ -89,62 +90,33 @@ void msc_fat_view_media_eject(void);
  */
 void msc_fat_view_media_insert(void);
 
-/* Section name for root entries */
-#define ROOT_DIR_SECTION __attribute__((section(".msc_fat_view_root_entry"), 
used))
-
-/* Section name for write handlers */
-#define WRITE_HANDLER_SECTION 
__attribute__((section(".msc_fat_view_write_handlers"), used))
-
 /**
  * Macro to add static root entries
  */
-#define ROOT_DIR_ENTRY(entry, file_name, attr, size_fun, read_fun, write_fun, 
delete_fun, valid_fun) \
-    file_entry_t entry = {                         \
-        .name = file_name,                         \
-        .attributes = attr,                        \
-        .size = size_fun,                          \
-        .read_sector = read_fun,                   \
-        .write_sector = write_fun,                 \
-        .delete_entry = delete_fun,                \
-        .valid = valid_fun,                        \
-    };                                             \
-    file_entry_t *const entry ## _ptr ROOT_DIR_SECTION = &entry;
+#define ROOT_DIR_ENTRY(entry, file_name, attr, size_fun, read_fun, write_fun, \
+                       delete_fun, valid_fun)                                 \
+    file_entry_t entry = {                                                    \
+        .name = file_name,                                                    \
+        .attributes = attr,                                                   \
+        .size = size_fun,                                                     \
+        .read_sector = read_fun,                                              \
+        .write_sector = write_fun,                                            \
+        .delete_entry = delete_fun,                                           \
+        .valid = valid_fun,                                                   \
+    };                                                                        \
+    LINK_TABLE_ELEMENT_REF(msc_fat_view_root_entry, entry, entry)
 
 /**
  * Macro to add static write handlers
  */
-#define MSC_FAT_VIEW_WRITE_HANDLER(entry, _write_sector, _file_written) \
-    msc_fat_view_write_handler_t entry = {                      \
-        .write_sector = _write_sector,                          \
-        .file_written = _file_written,                          \
-    };                                                          \
-    msc_fat_view_write_handler_t *const entry ## _ptr WRITE_HANDLER_SECTION = 
&entry;
-
-#define TABLE_START(table) __ ## table ## _start__
-#define TABLE_END(table) __ ## table ## _end__
-
-/**
- * Simple inline loop for link table tables
- *
- * @param table - name of table as defined in pkg.link_tables: section
- * @param type - type of element in table
- * @param fun - function to call for each element of the table.
- *              Function should have prototype like this: void fun(type 
*element)
- */
-#define FOR_EACH_ENTRY(type, table, fun)           \
-    {                                              \
-        extern type const TABLE_START(table)[];    \
-        extern type const TABLE_END(table)[];      \
-        type *entry;                               \
-        for (entry = (type *)TABLE_START(table);   \
-             entry != TABLE_END(table); ++entry) { \
-            fun(entry);                            \
-        }                                          \
-    }
-
-#define FOR_TABLE(type, e, table)                  \
-    extern type const TABLE_START(table)[];        \
-    extern type const TABLE_END(table)[];          \
-    for (type *e = (type *)TABLE_START(table); e != TABLE_END(table); ++e)
+#define MSC_FAT_VIEW_WRITE_HANDLER(entry, _write_sector, _file_written)       \
+    msc_fat_view_write_handler_t entry = {                                    \
+        .write_sector = _write_sector,                                        \
+        .file_written = _file_written,                                        \
+    };                                                                        \
+    LINK_TABLE_ELEMENT_REF(msc_fat_view_write_handlers, entry, entry)
+
+LINK_TABLE(file_entry_t *, msc_fat_view_root_entry)
+LINK_TABLE(msc_fat_view_write_handler_t *, msc_fat_view_write_handlers)
 
 #endif /* __MSC_FAT_VIEW_H__ */
diff --git a/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c 
b/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c
index d77b94718..83decb292 100644
--- a/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c
+++ b/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c
@@ -36,6 +36,7 @@
 #include <console/console.h>
 #include <stream/stream.h>
 #include "coredump_files.h"
+#include <os/link_tables.h>
 
 #if MYNEWT_VAL(BOOT_LOADER)
 #define BOOT_LOADER     1
@@ -1191,7 +1192,7 @@ msc_fat_view_write_unallocated_sector(uint32_t sector, 
uint8_t *buffer)
             return 512;
         }
     }
-    FOR_TABLE(msc_fat_view_write_handler_t *, p, msc_fat_view_write_handlers) {
+    LINK_TABLE_FOREACH(p, msc_fat_view_write_handlers) {
         if (*p == current_write_handler) {
             continue;
         }
@@ -1238,7 +1239,7 @@ msc_fat_view_write_normal_sector(uint32_t sector, uint8_t 
*buffer)
 }
 
 static void
-add_dir_entry(file_entry_t **entry)
+add_dir_entry(file_entry_t *const *entry)
 {
     if ((*entry)->valid == NULL || (*entry)->valid(*entry) == 
MSC_FAT_VIEW_FILE_ENTRY_VALID) {
         msc_fat_view_add_dir_entry(*entry);
@@ -1258,7 +1259,7 @@ init_disk_data(void)
     if (MYNEWT_VAL(MSC_FAT_VIEW_DROP_IMAGE_HERE)) {
         msc_fat_view_add_dir_entry(&drop_image_here);
     }
-    FOR_EACH_ENTRY(file_entry_t *, msc_fat_view_root_entry, add_dir_entry);
+    LINK_TABLE_FOREACH_CALL(msc_fat_view_root_entry, add_dir_entry);
 
     if (MYNEWT_VAL(MSC_FAT_VIEW_COREDUMP_FILES)) {
         msc_fat_view_add_coredumps();

Reply via email to