From 945b18b2b2595a7ab56be4e657bd1c5472436ee5 Mon Sep 17 00:00:00 2001 From: Rick Rongen Date: Sun, 7 Mar 2021 20:30:07 +0100 Subject: [PATCH] feat: rank drivers at compile time --- kernel/driver.h | 10 +- kernel/drivers/ide.c | 5 +- kernel/drivers/pci.c | 21 +- kernel/drivers/pci.h | 5 +- kernel/fs/blockdev.c | 16 - kernel/fs/blockdev.h | 5 +- kernel/fs/fat.c | 5 +- kernel/fs/mbr.c | 5 +- kernel/kernel.c | 4 - kernel/preprocessor_format_zero.h | 1236 +++++++++++++++++++++++++++++ linker.ld | 4 +- 11 files changed, 1254 insertions(+), 62 deletions(-) create mode 100644 kernel/preprocessor_format_zero.h diff --git a/kernel/driver.h b/kernel/driver.h index e324cca..2fdda68 100644 --- a/kernel/driver.h +++ b/kernel/driver.h @@ -5,16 +5,18 @@ #ifndef NEW_KERNEL_DRIVER_H #define NEW_KERNEL_DRIVER_H #include +#include #ifndef STRUCT_ALIGNMENT #define STRUCT_ALIGNMENT 16 #endif #define DRIVER_CAT(a, b) DRIVER_DUMMY() a ## _ ## b #define DRIVER_DUMMY() +#define SECT_NAME_(a,b) "." #a "." #b +#define SECT_NAME(a,b) SECT_NAME_(a, b) -#define GENERIC_DRIVER(drivername, data...) \ - static struct drivername DRIVER_CAT(drivername, __COUNTER__) \ - __attribute((__used__, __section__(#drivername))) \ - = { data } +#define GENERIC_DRIVER(drivername, order) \ + static struct drivername DRIVER_CAT(drivername, counter) \ + __attribute((__used__, __section__(SECT_NAME(drivername, FORMAT_3_ZERO(order))))) #endif //NEW_KERNEL_DRIVER_H diff --git a/kernel/drivers/ide.c b/kernel/drivers/ide.c index 80999fc..85ee9e9 100644 --- a/kernel/drivers/ide.c +++ b/kernel/drivers/ide.c @@ -671,10 +671,9 @@ uint8_t ide_access(uint8_t direction, uint8_t drive, uint32_t lba, uint8_t numse return result; } -PCI_DRIVER( +PCI_DRIVER(900) = { .name = "pci-ide", .description = "Default PCI IDE Driver", - .rank = 10000, // let other block_dev_drivers precede if they can .validatable = true, .initialisable = true, .match.class = PCI_CLASS_MASS_STORAGE, @@ -683,5 +682,5 @@ PCI_DRIVER( .mask.subclass = true, .validate = ide_pci_validate, .initialize = ide_pci_initialize, -); +}; diff --git a/kernel/drivers/pci.c b/kernel/drivers/pci.c index a52095e..071cc7d 100644 --- a/kernel/drivers/pci.c +++ b/kernel/drivers/pci.c @@ -13,7 +13,6 @@ #ifdef ENABLE_PCIPP #include -#include #endif @@ -192,21 +191,6 @@ void pci_check_bus(uint8_t bus) { } } -int pci_driver_compare(const void* a, const void* b) { - int rank_a = ((struct pci_driver *) a)->rank; - int rank_b = ((struct pci_driver *) b)->rank; - if (rank_a > rank_b) { - return 1; - } else if (rank_a < rank_b) { - return -1; - } - return 0; -} - -void pci_sort_drivers() { - qsort(DRIVER(0), NUM_DRIVERS, sizeof(struct pci_driver), pci_driver_compare); -} - void pci_scan() { if (last_pci_device_index != 0) { k_panics("Can only scan once!"); @@ -385,16 +369,15 @@ void pci_init_bar(pci_device *device, uint8_t bar_index) { } // internal drivers -PCI_DRIVER( +PCI_DRIVER(0) = { .name = "pci-secondary-bus", .description = "A PCI bus connected to the primary bus", - .rank = 0, // internal driver for PCI bus .match.class = PCI_CLASS_BRIDGE, .match.subclass = PCI_SUB_CLASS_PCI_PCI_BRIDGE_4, .mask.class = true, .mask.subclass = true, .direct_use = true, .use = pci_secondary_bus_use, -); +}; // todo https://wiki.osdev.org/Universal_Serial_Bus if i dare \ No newline at end of file diff --git a/kernel/drivers/pci.h b/kernel/drivers/pci.h index ba4f4d2..0617c46 100644 --- a/kernel/drivers/pci.h +++ b/kernel/drivers/pci.h @@ -96,7 +96,6 @@ typedef uint8_t (*pci_driver_initialize)(pci_device *); struct pci_driver { const char *name; const char *description; - uint16_t rank; struct { uint8_t class; uint8_t subclass; @@ -121,7 +120,7 @@ struct pci_driver { pci_driver_initialize initialize; } __attribute__((__aligned__(STRUCT_ALIGNMENT))); -#define PCI_DRIVER(data...) GENERIC_DRIVER(pci_driver, data) +#define PCI_DRIVER(order) GENERIC_DRIVER(pci_driver, order) typedef struct { uint32_t address; @@ -223,8 +222,6 @@ void pci_pretty_print(); #endif -void pci_sort_drivers(); - void pci_init_drivers(); void pci_scan(); diff --git a/kernel/fs/blockdev.c b/kernel/fs/blockdev.c index c486b27..5712746 100644 --- a/kernel/fs/blockdev.c +++ b/kernel/fs/blockdev.c @@ -9,7 +9,6 @@ #include #include #include -#include #include "blockdev.h" #define MAX_BLOCK_DEVS 64 @@ -80,21 +79,6 @@ void block_dev_scan() { } } -int block_dev_driver_comp(const void *a, const void *b) { - int rank_a = ((struct block_dev_driver *) a)->rank; - int rank_b = ((struct block_dev_driver *) b)->rank; - if (rank_a > rank_b) { - return 1; - } else if (rank_a < rank_b) { - return -1; - } - return 0; -} - -void block_dev_pre_init() { - qsort(DRIVER(0), NUM_DRIVERS, sizeof(struct block_dev_driver), block_dev_driver_comp); -} - void noreturn block_dev_task(void *data) { while (true) { semaphore_wait(block_semaphore); diff --git a/kernel/fs/blockdev.h b/kernel/fs/blockdev.h index 26ae7f4..dc4f32b 100644 --- a/kernel/fs/blockdev.h +++ b/kernel/fs/blockdev.h @@ -34,7 +34,6 @@ typedef uint8_t (*block_device_access)(const block_device *device, uint8_t direc struct block_dev_driver { char name[16]; - uint16_t rank; struct { uint8_t root_only: 1; } flags; @@ -42,7 +41,7 @@ struct block_dev_driver { block_device_driver_free free_device; } __attribute__((__aligned__(STRUCT_ALIGNMENT))); -#define BLOCK_DEV_DRIVER(data...) GENERIC_DRIVER(block_dev_driver, data) +#define BLOCK_DEV_DRIVER(order) GENERIC_DRIVER(block_dev_driver, order) typedef struct block_device { struct { @@ -65,8 +64,6 @@ uint8_t block_dev_register(block_device *device); void block_dev_free(block_device *device); -void block_dev_pre_init(); - void block_dev_start_task(); void block_dev_print_info(); diff --git a/kernel/fs/fat.c b/kernel/fs/fat.c index 61361eb..a1f1887 100644 --- a/kernel/fs/fat.c +++ b/kernel/fs/fat.c @@ -193,11 +193,10 @@ get_fat_table_value(uint8_t fat_type, const uint8_t *fat_table, uint32_t active_ return result; } -BLOCK_DEV_DRIVER( +BLOCK_DEV_DRIVER(900) = { .name = "fat", - .rank = 10000, .check_device = fat_check_device, .free_device = NULL, // todo -); +}; // steal validation code from here https://github.com/torvalds/linux/blob/fcadab740480e0e0e9fa9bd272acd409884d431a/fs/fat/inode.c#L1456 \ No newline at end of file diff --git a/kernel/fs/mbr.c b/kernel/fs/mbr.c index e1dd45a..1de233a 100644 --- a/kernel/fs/mbr.c +++ b/kernel/fs/mbr.c @@ -100,10 +100,9 @@ void mbr_read_from_ide(uint8_t ide_drive) { free(mbr_data); } -BLOCK_DEV_DRIVER( +BLOCK_DEV_DRIVER(200) = { .name = "mbr", - .rank = 100, .flags.root_only = 1, .check_device = mbr_check_device, .free_device = NULL, // todo -); +}; diff --git a/kernel/kernel.c b/kernel/kernel.c index f1b07e7..3962b71 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -30,7 +30,6 @@ void init_mmap(multiboot_info_t *multiboot_info) { } void init_pci_system() { - pci_sort_drivers(); pci_scan(); pci_init_drivers(); } @@ -60,9 +59,6 @@ void noreturn used kmain(multiboot_info_t *multiboot_info, uint32_t mb_name) { // identify cpu cpuidx_print_info(); - // pre init drivers - block_dev_pre_init(); - // enable interrupts __asm__ __volatile__("sti"); // start the timer diff --git a/kernel/preprocessor_format_zero.h b/kernel/preprocessor_format_zero.h new file mode 100644 index 0000000..7a3d208 --- /dev/null +++ b/kernel/preprocessor_format_zero.h @@ -0,0 +1,1236 @@ +#ifndef _PREPROCESSOR_FORMAT_ZERO_H +#define _PREPROCESSOR_FORMAT_ZERO_H +// Add leading zeros to numbers for use in macros +// Unfortunately it has to be done the long way +// Some numbers look like octals, assume they will be stringify somewhere + +// NOTE: Calling with more digits than expected will cause a compile error + +// Format two digit numbers, 5 --> 05, 15 --> 15 +#define FORMAT_2_ZERO(a) _FORMAT_2_ZERO_ ## a + +// Format three digit numbers, 5 --> 005, 15 --> 015, 215 --> 215 +#define FORMAT_3_ZERO(a) _FORMAT_3_ZERO_ ## a + + +#define _FORMAT_2_ZERO_0 00 +#define _FORMAT_2_ZERO_1 01 +#define _FORMAT_2_ZERO_2 02 +#define _FORMAT_2_ZERO_3 03 +#define _FORMAT_2_ZERO_4 04 +#define _FORMAT_2_ZERO_5 05 +#define _FORMAT_2_ZERO_6 06 +#define _FORMAT_2_ZERO_7 07 +#define _FORMAT_2_ZERO_8 08 +#define _FORMAT_2_ZERO_9 09 + +#define _FORMAT_2_ZERO_10 10 +#define _FORMAT_2_ZERO_11 11 +#define _FORMAT_2_ZERO_12 12 +#define _FORMAT_2_ZERO_13 13 +#define _FORMAT_2_ZERO_14 14 +#define _FORMAT_2_ZERO_15 15 +#define _FORMAT_2_ZERO_16 16 +#define _FORMAT_2_ZERO_17 17 +#define _FORMAT_2_ZERO_18 18 +#define _FORMAT_2_ZERO_19 19 + +#define _FORMAT_2_ZERO_20 20 +#define _FORMAT_2_ZERO_21 21 +#define _FORMAT_2_ZERO_22 22 +#define _FORMAT_2_ZERO_23 23 +#define _FORMAT_2_ZERO_24 24 +#define _FORMAT_2_ZERO_25 25 +#define _FORMAT_2_ZERO_26 26 +#define _FORMAT_2_ZERO_27 27 +#define _FORMAT_2_ZERO_28 28 +#define _FORMAT_2_ZERO_29 29 + +#define _FORMAT_2_ZERO_30 30 +#define _FORMAT_2_ZERO_31 31 +#define _FORMAT_2_ZERO_32 32 +#define _FORMAT_2_ZERO_33 33 +#define _FORMAT_2_ZERO_34 34 +#define _FORMAT_2_ZERO_35 35 +#define _FORMAT_2_ZERO_36 36 +#define _FORMAT_2_ZERO_37 37 +#define _FORMAT_2_ZERO_38 38 +#define _FORMAT_2_ZERO_39 39 + +#define _FORMAT_2_ZERO_40 40 +#define _FORMAT_2_ZERO_41 41 +#define _FORMAT_2_ZERO_42 42 +#define _FORMAT_2_ZERO_43 43 +#define _FORMAT_2_ZERO_44 44 +#define _FORMAT_2_ZERO_45 45 +#define _FORMAT_2_ZERO_46 46 +#define _FORMAT_2_ZERO_47 47 +#define _FORMAT_2_ZERO_48 48 +#define _FORMAT_2_ZERO_49 49 + +#define _FORMAT_2_ZERO_50 50 +#define _FORMAT_2_ZERO_51 51 +#define _FORMAT_2_ZERO_52 52 +#define _FORMAT_2_ZERO_53 53 +#define _FORMAT_2_ZERO_54 54 +#define _FORMAT_2_ZERO_55 55 +#define _FORMAT_2_ZERO_56 56 +#define _FORMAT_2_ZERO_57 57 +#define _FORMAT_2_ZERO_58 58 +#define _FORMAT_2_ZERO_59 59 + +#define _FORMAT_2_ZERO_60 60 +#define _FORMAT_2_ZERO_61 61 +#define _FORMAT_2_ZERO_62 62 +#define _FORMAT_2_ZERO_63 63 +#define _FORMAT_2_ZERO_64 64 +#define _FORMAT_2_ZERO_65 65 +#define _FORMAT_2_ZERO_66 66 +#define _FORMAT_2_ZERO_67 67 +#define _FORMAT_2_ZERO_68 68 +#define _FORMAT_2_ZERO_69 69 + +#define _FORMAT_2_ZERO_70 70 +#define _FORMAT_2_ZERO_71 71 +#define _FORMAT_2_ZERO_72 72 +#define _FORMAT_2_ZERO_73 73 +#define _FORMAT_2_ZERO_74 74 +#define _FORMAT_2_ZERO_75 75 +#define _FORMAT_2_ZERO_76 76 +#define _FORMAT_2_ZERO_77 77 +#define _FORMAT_2_ZERO_78 78 +#define _FORMAT_2_ZERO_79 79 + +#define _FORMAT_2_ZERO_80 80 +#define _FORMAT_2_ZERO_81 81 +#define _FORMAT_2_ZERO_82 82 +#define _FORMAT_2_ZERO_83 83 +#define _FORMAT_2_ZERO_84 84 +#define _FORMAT_2_ZERO_85 85 +#define _FORMAT_2_ZERO_86 86 +#define _FORMAT_2_ZERO_87 87 +#define _FORMAT_2_ZERO_88 88 +#define _FORMAT_2_ZERO_89 89 + +#define _FORMAT_2_ZERO_90 90 +#define _FORMAT_2_ZERO_91 91 +#define _FORMAT_2_ZERO_92 92 +#define _FORMAT_2_ZERO_93 93 +#define _FORMAT_2_ZERO_94 94 +#define _FORMAT_2_ZERO_95 95 +#define _FORMAT_2_ZERO_96 96 +#define _FORMAT_2_ZERO_97 97 +#define _FORMAT_2_ZERO_98 98 +#define _FORMAT_2_ZERO_99 99 + + +#define _FORMAT_3_ZERO_0 000 +#define _FORMAT_3_ZERO_1 001 +#define _FORMAT_3_ZERO_2 002 +#define _FORMAT_3_ZERO_3 003 +#define _FORMAT_3_ZERO_4 004 +#define _FORMAT_3_ZERO_5 005 +#define _FORMAT_3_ZERO_6 006 +#define _FORMAT_3_ZERO_7 007 +#define _FORMAT_3_ZERO_8 008 +#define _FORMAT_3_ZERO_9 009 + +#define _FORMAT_3_ZERO_10 010 +#define _FORMAT_3_ZERO_11 011 +#define _FORMAT_3_ZERO_12 012 +#define _FORMAT_3_ZERO_13 013 +#define _FORMAT_3_ZERO_14 014 +#define _FORMAT_3_ZERO_15 015 +#define _FORMAT_3_ZERO_16 016 +#define _FORMAT_3_ZERO_17 017 +#define _FORMAT_3_ZERO_18 018 +#define _FORMAT_3_ZERO_19 019 + +#define _FORMAT_3_ZERO_20 020 +#define _FORMAT_3_ZERO_21 021 +#define _FORMAT_3_ZERO_22 022 +#define _FORMAT_3_ZERO_23 023 +#define _FORMAT_3_ZERO_24 024 +#define _FORMAT_3_ZERO_25 025 +#define _FORMAT_3_ZERO_26 026 +#define _FORMAT_3_ZERO_27 027 +#define _FORMAT_3_ZERO_28 028 +#define _FORMAT_3_ZERO_29 029 + +#define _FORMAT_3_ZERO_30 030 +#define _FORMAT_3_ZERO_31 031 +#define _FORMAT_3_ZERO_32 032 +#define _FORMAT_3_ZERO_33 033 +#define _FORMAT_3_ZERO_34 034 +#define _FORMAT_3_ZERO_35 035 +#define _FORMAT_3_ZERO_36 036 +#define _FORMAT_3_ZERO_37 037 +#define _FORMAT_3_ZERO_38 038 +#define _FORMAT_3_ZERO_39 039 + +#define _FORMAT_3_ZERO_40 040 +#define _FORMAT_3_ZERO_41 041 +#define _FORMAT_3_ZERO_42 042 +#define _FORMAT_3_ZERO_43 043 +#define _FORMAT_3_ZERO_44 044 +#define _FORMAT_3_ZERO_45 045 +#define _FORMAT_3_ZERO_46 046 +#define _FORMAT_3_ZERO_47 047 +#define _FORMAT_3_ZERO_48 048 +#define _FORMAT_3_ZERO_49 049 + +#define _FORMAT_3_ZERO_50 050 +#define _FORMAT_3_ZERO_51 051 +#define _FORMAT_3_ZERO_52 052 +#define _FORMAT_3_ZERO_53 053 +#define _FORMAT_3_ZERO_54 054 +#define _FORMAT_3_ZERO_55 055 +#define _FORMAT_3_ZERO_56 056 +#define _FORMAT_3_ZERO_57 057 +#define _FORMAT_3_ZERO_58 058 +#define _FORMAT_3_ZERO_59 059 + +#define _FORMAT_3_ZERO_60 060 +#define _FORMAT_3_ZERO_61 061 +#define _FORMAT_3_ZERO_62 062 +#define _FORMAT_3_ZERO_63 063 +#define _FORMAT_3_ZERO_64 064 +#define _FORMAT_3_ZERO_65 065 +#define _FORMAT_3_ZERO_66 066 +#define _FORMAT_3_ZERO_67 067 +#define _FORMAT_3_ZERO_68 068 +#define _FORMAT_3_ZERO_69 069 + +#define _FORMAT_3_ZERO_70 070 +#define _FORMAT_3_ZERO_71 071 +#define _FORMAT_3_ZERO_72 072 +#define _FORMAT_3_ZERO_73 073 +#define _FORMAT_3_ZERO_74 074 +#define _FORMAT_3_ZERO_75 075 +#define _FORMAT_3_ZERO_76 076 +#define _FORMAT_3_ZERO_77 077 +#define _FORMAT_3_ZERO_78 078 +#define _FORMAT_3_ZERO_79 079 + +#define _FORMAT_3_ZERO_80 080 +#define _FORMAT_3_ZERO_81 081 +#define _FORMAT_3_ZERO_82 082 +#define _FORMAT_3_ZERO_83 083 +#define _FORMAT_3_ZERO_84 084 +#define _FORMAT_3_ZERO_85 085 +#define _FORMAT_3_ZERO_86 086 +#define _FORMAT_3_ZERO_87 087 +#define _FORMAT_3_ZERO_88 088 +#define _FORMAT_3_ZERO_89 089 + +#define _FORMAT_3_ZERO_90 090 +#define _FORMAT_3_ZERO_91 091 +#define _FORMAT_3_ZERO_92 092 +#define _FORMAT_3_ZERO_93 093 +#define _FORMAT_3_ZERO_94 094 +#define _FORMAT_3_ZERO_95 095 +#define _FORMAT_3_ZERO_96 096 +#define _FORMAT_3_ZERO_97 097 +#define _FORMAT_3_ZERO_98 098 +#define _FORMAT_3_ZERO_99 099 + + +#define _FORMAT_3_ZERO_100 100 +#define _FORMAT_3_ZERO_101 101 +#define _FORMAT_3_ZERO_102 102 +#define _FORMAT_3_ZERO_103 103 +#define _FORMAT_3_ZERO_104 104 +#define _FORMAT_3_ZERO_105 105 +#define _FORMAT_3_ZERO_106 106 +#define _FORMAT_3_ZERO_107 107 +#define _FORMAT_3_ZERO_108 108 +#define _FORMAT_3_ZERO_109 109 + +#define _FORMAT_3_ZERO_110 110 +#define _FORMAT_3_ZERO_111 111 +#define _FORMAT_3_ZERO_112 112 +#define _FORMAT_3_ZERO_113 113 +#define _FORMAT_3_ZERO_114 114 +#define _FORMAT_3_ZERO_115 115 +#define _FORMAT_3_ZERO_116 116 +#define _FORMAT_3_ZERO_117 117 +#define _FORMAT_3_ZERO_118 118 +#define _FORMAT_3_ZERO_119 119 + +#define _FORMAT_3_ZERO_120 120 +#define _FORMAT_3_ZERO_121 121 +#define _FORMAT_3_ZERO_122 122 +#define _FORMAT_3_ZERO_123 123 +#define _FORMAT_3_ZERO_124 124 +#define _FORMAT_3_ZERO_125 125 +#define _FORMAT_3_ZERO_126 126 +#define _FORMAT_3_ZERO_127 127 +#define _FORMAT_3_ZERO_128 128 +#define _FORMAT_3_ZERO_129 129 + +#define _FORMAT_3_ZERO_130 130 +#define _FORMAT_3_ZERO_131 131 +#define _FORMAT_3_ZERO_132 132 +#define _FORMAT_3_ZERO_133 133 +#define _FORMAT_3_ZERO_134 134 +#define _FORMAT_3_ZERO_135 135 +#define _FORMAT_3_ZERO_136 136 +#define _FORMAT_3_ZERO_137 137 +#define _FORMAT_3_ZERO_138 138 +#define _FORMAT_3_ZERO_139 139 + +#define _FORMAT_3_ZERO_140 140 +#define _FORMAT_3_ZERO_141 141 +#define _FORMAT_3_ZERO_142 142 +#define _FORMAT_3_ZERO_143 143 +#define _FORMAT_3_ZERO_144 144 +#define _FORMAT_3_ZERO_145 145 +#define _FORMAT_3_ZERO_146 146 +#define _FORMAT_3_ZERO_147 147 +#define _FORMAT_3_ZERO_148 148 +#define _FORMAT_3_ZERO_149 149 + +#define _FORMAT_3_ZERO_150 150 +#define _FORMAT_3_ZERO_151 151 +#define _FORMAT_3_ZERO_152 152 +#define _FORMAT_3_ZERO_153 153 +#define _FORMAT_3_ZERO_154 154 +#define _FORMAT_3_ZERO_155 155 +#define _FORMAT_3_ZERO_156 156 +#define _FORMAT_3_ZERO_157 157 +#define _FORMAT_3_ZERO_158 158 +#define _FORMAT_3_ZERO_159 159 + +#define _FORMAT_3_ZERO_160 160 +#define _FORMAT_3_ZERO_161 161 +#define _FORMAT_3_ZERO_162 162 +#define _FORMAT_3_ZERO_163 163 +#define _FORMAT_3_ZERO_164 164 +#define _FORMAT_3_ZERO_165 165 +#define _FORMAT_3_ZERO_166 166 +#define _FORMAT_3_ZERO_167 167 +#define _FORMAT_3_ZERO_168 168 +#define _FORMAT_3_ZERO_169 169 + +#define _FORMAT_3_ZERO_170 170 +#define _FORMAT_3_ZERO_171 171 +#define _FORMAT_3_ZERO_172 172 +#define _FORMAT_3_ZERO_173 173 +#define _FORMAT_3_ZERO_174 174 +#define _FORMAT_3_ZERO_175 175 +#define _FORMAT_3_ZERO_176 176 +#define _FORMAT_3_ZERO_177 177 +#define _FORMAT_3_ZERO_178 178 +#define _FORMAT_3_ZERO_179 179 + +#define _FORMAT_3_ZERO_180 180 +#define _FORMAT_3_ZERO_181 181 +#define _FORMAT_3_ZERO_182 182 +#define _FORMAT_3_ZERO_183 183 +#define _FORMAT_3_ZERO_184 184 +#define _FORMAT_3_ZERO_185 185 +#define _FORMAT_3_ZERO_186 186 +#define _FORMAT_3_ZERO_187 187 +#define _FORMAT_3_ZERO_188 188 +#define _FORMAT_3_ZERO_189 189 + +#define _FORMAT_3_ZERO_190 190 +#define _FORMAT_3_ZERO_191 191 +#define _FORMAT_3_ZERO_192 192 +#define _FORMAT_3_ZERO_193 193 +#define _FORMAT_3_ZERO_194 194 +#define _FORMAT_3_ZERO_195 195 +#define _FORMAT_3_ZERO_196 196 +#define _FORMAT_3_ZERO_197 197 +#define _FORMAT_3_ZERO_198 198 +#define _FORMAT_3_ZERO_199 199 + + +#define _FORMAT_3_ZERO_200 200 +#define _FORMAT_3_ZERO_201 201 +#define _FORMAT_3_ZERO_202 202 +#define _FORMAT_3_ZERO_203 203 +#define _FORMAT_3_ZERO_204 204 +#define _FORMAT_3_ZERO_205 205 +#define _FORMAT_3_ZERO_206 206 +#define _FORMAT_3_ZERO_207 207 +#define _FORMAT_3_ZERO_208 208 +#define _FORMAT_3_ZERO_209 209 + +#define _FORMAT_3_ZERO_210 210 +#define _FORMAT_3_ZERO_211 211 +#define _FORMAT_3_ZERO_212 212 +#define _FORMAT_3_ZERO_213 213 +#define _FORMAT_3_ZERO_214 214 +#define _FORMAT_3_ZERO_215 215 +#define _FORMAT_3_ZERO_216 216 +#define _FORMAT_3_ZERO_217 217 +#define _FORMAT_3_ZERO_218 218 +#define _FORMAT_3_ZERO_219 219 + +#define _FORMAT_3_ZERO_220 220 +#define _FORMAT_3_ZERO_221 221 +#define _FORMAT_3_ZERO_222 222 +#define _FORMAT_3_ZERO_223 223 +#define _FORMAT_3_ZERO_224 224 +#define _FORMAT_3_ZERO_225 225 +#define _FORMAT_3_ZERO_226 226 +#define _FORMAT_3_ZERO_227 227 +#define _FORMAT_3_ZERO_228 228 +#define _FORMAT_3_ZERO_229 229 + +#define _FORMAT_3_ZERO_230 230 +#define _FORMAT_3_ZERO_231 231 +#define _FORMAT_3_ZERO_232 232 +#define _FORMAT_3_ZERO_233 233 +#define _FORMAT_3_ZERO_234 234 +#define _FORMAT_3_ZERO_235 235 +#define _FORMAT_3_ZERO_236 236 +#define _FORMAT_3_ZERO_237 237 +#define _FORMAT_3_ZERO_238 238 +#define _FORMAT_3_ZERO_239 239 + +#define _FORMAT_3_ZERO_240 240 +#define _FORMAT_3_ZERO_241 241 +#define _FORMAT_3_ZERO_242 242 +#define _FORMAT_3_ZERO_243 243 +#define _FORMAT_3_ZERO_244 244 +#define _FORMAT_3_ZERO_245 245 +#define _FORMAT_3_ZERO_246 246 +#define _FORMAT_3_ZERO_247 247 +#define _FORMAT_3_ZERO_248 248 +#define _FORMAT_3_ZERO_249 249 + +#define _FORMAT_3_ZERO_250 250 +#define _FORMAT_3_ZERO_251 251 +#define _FORMAT_3_ZERO_252 252 +#define _FORMAT_3_ZERO_253 253 +#define _FORMAT_3_ZERO_254 254 +#define _FORMAT_3_ZERO_255 255 +#define _FORMAT_3_ZERO_256 256 +#define _FORMAT_3_ZERO_257 257 +#define _FORMAT_3_ZERO_258 258 +#define _FORMAT_3_ZERO_259 259 + +#define _FORMAT_3_ZERO_260 260 +#define _FORMAT_3_ZERO_261 261 +#define _FORMAT_3_ZERO_262 262 +#define _FORMAT_3_ZERO_263 263 +#define _FORMAT_3_ZERO_264 264 +#define _FORMAT_3_ZERO_265 265 +#define _FORMAT_3_ZERO_266 266 +#define _FORMAT_3_ZERO_267 267 +#define _FORMAT_3_ZERO_268 268 +#define _FORMAT_3_ZERO_269 269 + +#define _FORMAT_3_ZERO_270 270 +#define _FORMAT_3_ZERO_271 271 +#define _FORMAT_3_ZERO_272 272 +#define _FORMAT_3_ZERO_273 273 +#define _FORMAT_3_ZERO_274 274 +#define _FORMAT_3_ZERO_275 275 +#define _FORMAT_3_ZERO_276 276 +#define _FORMAT_3_ZERO_277 277 +#define _FORMAT_3_ZERO_278 278 +#define _FORMAT_3_ZERO_279 279 + +#define _FORMAT_3_ZERO_280 280 +#define _FORMAT_3_ZERO_281 281 +#define _FORMAT_3_ZERO_282 282 +#define _FORMAT_3_ZERO_283 283 +#define _FORMAT_3_ZERO_284 284 +#define _FORMAT_3_ZERO_285 285 +#define _FORMAT_3_ZERO_286 286 +#define _FORMAT_3_ZERO_287 287 +#define _FORMAT_3_ZERO_288 288 +#define _FORMAT_3_ZERO_289 289 + +#define _FORMAT_3_ZERO_290 290 +#define _FORMAT_3_ZERO_291 291 +#define _FORMAT_3_ZERO_292 292 +#define _FORMAT_3_ZERO_293 293 +#define _FORMAT_3_ZERO_294 294 +#define _FORMAT_3_ZERO_295 295 +#define _FORMAT_3_ZERO_296 296 +#define _FORMAT_3_ZERO_297 297 +#define _FORMAT_3_ZERO_298 298 +#define _FORMAT_3_ZERO_299 299 + + +#define _FORMAT_3_ZERO_300 300 +#define _FORMAT_3_ZERO_301 301 +#define _FORMAT_3_ZERO_302 302 +#define _FORMAT_3_ZERO_303 303 +#define _FORMAT_3_ZERO_304 304 +#define _FORMAT_3_ZERO_305 305 +#define _FORMAT_3_ZERO_306 306 +#define _FORMAT_3_ZERO_307 307 +#define _FORMAT_3_ZERO_308 308 +#define _FORMAT_3_ZERO_309 309 + +#define _FORMAT_3_ZERO_310 310 +#define _FORMAT_3_ZERO_311 311 +#define _FORMAT_3_ZERO_312 312 +#define _FORMAT_3_ZERO_313 313 +#define _FORMAT_3_ZERO_314 314 +#define _FORMAT_3_ZERO_315 315 +#define _FORMAT_3_ZERO_316 316 +#define _FORMAT_3_ZERO_317 317 +#define _FORMAT_3_ZERO_318 318 +#define _FORMAT_3_ZERO_319 319 + +#define _FORMAT_3_ZERO_320 320 +#define _FORMAT_3_ZERO_321 321 +#define _FORMAT_3_ZERO_322 322 +#define _FORMAT_3_ZERO_323 323 +#define _FORMAT_3_ZERO_324 324 +#define _FORMAT_3_ZERO_325 325 +#define _FORMAT_3_ZERO_326 326 +#define _FORMAT_3_ZERO_327 327 +#define _FORMAT_3_ZERO_328 328 +#define _FORMAT_3_ZERO_329 329 + +#define _FORMAT_3_ZERO_330 330 +#define _FORMAT_3_ZERO_331 331 +#define _FORMAT_3_ZERO_332 332 +#define _FORMAT_3_ZERO_333 333 +#define _FORMAT_3_ZERO_334 334 +#define _FORMAT_3_ZERO_335 335 +#define _FORMAT_3_ZERO_336 336 +#define _FORMAT_3_ZERO_337 337 +#define _FORMAT_3_ZERO_338 338 +#define _FORMAT_3_ZERO_339 339 + +#define _FORMAT_3_ZERO_340 340 +#define _FORMAT_3_ZERO_341 341 +#define _FORMAT_3_ZERO_342 342 +#define _FORMAT_3_ZERO_343 343 +#define _FORMAT_3_ZERO_344 344 +#define _FORMAT_3_ZERO_345 345 +#define _FORMAT_3_ZERO_346 346 +#define _FORMAT_3_ZERO_347 347 +#define _FORMAT_3_ZERO_348 348 +#define _FORMAT_3_ZERO_349 349 + +#define _FORMAT_3_ZERO_350 350 +#define _FORMAT_3_ZERO_351 351 +#define _FORMAT_3_ZERO_352 352 +#define _FORMAT_3_ZERO_353 353 +#define _FORMAT_3_ZERO_354 354 +#define _FORMAT_3_ZERO_355 355 +#define _FORMAT_3_ZERO_356 356 +#define _FORMAT_3_ZERO_357 357 +#define _FORMAT_3_ZERO_358 358 +#define _FORMAT_3_ZERO_359 359 + +#define _FORMAT_3_ZERO_360 360 +#define _FORMAT_3_ZERO_361 361 +#define _FORMAT_3_ZERO_362 362 +#define _FORMAT_3_ZERO_363 363 +#define _FORMAT_3_ZERO_364 364 +#define _FORMAT_3_ZERO_365 365 +#define _FORMAT_3_ZERO_366 366 +#define _FORMAT_3_ZERO_367 367 +#define _FORMAT_3_ZERO_368 368 +#define _FORMAT_3_ZERO_369 369 + +#define _FORMAT_3_ZERO_370 370 +#define _FORMAT_3_ZERO_371 371 +#define _FORMAT_3_ZERO_372 372 +#define _FORMAT_3_ZERO_373 373 +#define _FORMAT_3_ZERO_374 374 +#define _FORMAT_3_ZERO_375 375 +#define _FORMAT_3_ZERO_376 376 +#define _FORMAT_3_ZERO_377 377 +#define _FORMAT_3_ZERO_378 378 +#define _FORMAT_3_ZERO_379 379 + +#define _FORMAT_3_ZERO_380 380 +#define _FORMAT_3_ZERO_381 381 +#define _FORMAT_3_ZERO_382 382 +#define _FORMAT_3_ZERO_383 383 +#define _FORMAT_3_ZERO_384 384 +#define _FORMAT_3_ZERO_385 385 +#define _FORMAT_3_ZERO_386 386 +#define _FORMAT_3_ZERO_387 387 +#define _FORMAT_3_ZERO_388 388 +#define _FORMAT_3_ZERO_389 389 + +#define _FORMAT_3_ZERO_390 390 +#define _FORMAT_3_ZERO_391 391 +#define _FORMAT_3_ZERO_392 392 +#define _FORMAT_3_ZERO_393 393 +#define _FORMAT_3_ZERO_394 394 +#define _FORMAT_3_ZERO_395 395 +#define _FORMAT_3_ZERO_396 396 +#define _FORMAT_3_ZERO_397 397 +#define _FORMAT_3_ZERO_398 398 +#define _FORMAT_3_ZERO_399 399 + + +#define _FORMAT_3_ZERO_400 400 +#define _FORMAT_3_ZERO_401 401 +#define _FORMAT_3_ZERO_402 402 +#define _FORMAT_3_ZERO_403 403 +#define _FORMAT_3_ZERO_404 404 +#define _FORMAT_3_ZERO_405 405 +#define _FORMAT_3_ZERO_406 406 +#define _FORMAT_3_ZERO_407 407 +#define _FORMAT_3_ZERO_408 408 +#define _FORMAT_3_ZERO_409 409 + +#define _FORMAT_3_ZERO_410 410 +#define _FORMAT_3_ZERO_411 411 +#define _FORMAT_3_ZERO_412 412 +#define _FORMAT_3_ZERO_413 413 +#define _FORMAT_3_ZERO_414 414 +#define _FORMAT_3_ZERO_415 415 +#define _FORMAT_3_ZERO_416 416 +#define _FORMAT_3_ZERO_417 417 +#define _FORMAT_3_ZERO_418 418 +#define _FORMAT_3_ZERO_419 419 + +#define _FORMAT_3_ZERO_420 420 +#define _FORMAT_3_ZERO_421 421 +#define _FORMAT_3_ZERO_422 422 +#define _FORMAT_3_ZERO_423 423 +#define _FORMAT_3_ZERO_424 424 +#define _FORMAT_3_ZERO_425 425 +#define _FORMAT_3_ZERO_426 426 +#define _FORMAT_3_ZERO_427 427 +#define _FORMAT_3_ZERO_428 428 +#define _FORMAT_3_ZERO_429 429 + +#define _FORMAT_3_ZERO_430 430 +#define _FORMAT_3_ZERO_431 431 +#define _FORMAT_3_ZERO_432 432 +#define _FORMAT_3_ZERO_433 433 +#define _FORMAT_3_ZERO_434 434 +#define _FORMAT_3_ZERO_435 435 +#define _FORMAT_3_ZERO_436 436 +#define _FORMAT_3_ZERO_437 437 +#define _FORMAT_3_ZERO_438 438 +#define _FORMAT_3_ZERO_439 439 + +#define _FORMAT_3_ZERO_440 440 +#define _FORMAT_3_ZERO_441 441 +#define _FORMAT_3_ZERO_442 442 +#define _FORMAT_3_ZERO_443 443 +#define _FORMAT_3_ZERO_444 444 +#define _FORMAT_3_ZERO_445 445 +#define _FORMAT_3_ZERO_446 446 +#define _FORMAT_3_ZERO_447 447 +#define _FORMAT_3_ZERO_448 448 +#define _FORMAT_3_ZERO_449 449 + +#define _FORMAT_3_ZERO_450 450 +#define _FORMAT_3_ZERO_451 451 +#define _FORMAT_3_ZERO_452 452 +#define _FORMAT_3_ZERO_453 453 +#define _FORMAT_3_ZERO_454 454 +#define _FORMAT_3_ZERO_455 455 +#define _FORMAT_3_ZERO_456 456 +#define _FORMAT_3_ZERO_457 457 +#define _FORMAT_3_ZERO_458 458 +#define _FORMAT_3_ZERO_459 459 + +#define _FORMAT_3_ZERO_460 460 +#define _FORMAT_3_ZERO_461 461 +#define _FORMAT_3_ZERO_462 462 +#define _FORMAT_3_ZERO_463 463 +#define _FORMAT_3_ZERO_464 464 +#define _FORMAT_3_ZERO_465 465 +#define _FORMAT_3_ZERO_466 466 +#define _FORMAT_3_ZERO_467 467 +#define _FORMAT_3_ZERO_468 468 +#define _FORMAT_3_ZERO_469 469 + +#define _FORMAT_3_ZERO_470 470 +#define _FORMAT_3_ZERO_471 471 +#define _FORMAT_3_ZERO_472 472 +#define _FORMAT_3_ZERO_473 473 +#define _FORMAT_3_ZERO_474 474 +#define _FORMAT_3_ZERO_475 475 +#define _FORMAT_3_ZERO_476 476 +#define _FORMAT_3_ZERO_477 477 +#define _FORMAT_3_ZERO_478 478 +#define _FORMAT_3_ZERO_479 479 + +#define _FORMAT_3_ZERO_480 480 +#define _FORMAT_3_ZERO_481 481 +#define _FORMAT_3_ZERO_482 482 +#define _FORMAT_3_ZERO_483 483 +#define _FORMAT_3_ZERO_484 484 +#define _FORMAT_3_ZERO_485 485 +#define _FORMAT_3_ZERO_486 486 +#define _FORMAT_3_ZERO_487 487 +#define _FORMAT_3_ZERO_488 488 +#define _FORMAT_3_ZERO_489 489 + +#define _FORMAT_3_ZERO_490 490 +#define _FORMAT_3_ZERO_491 491 +#define _FORMAT_3_ZERO_492 492 +#define _FORMAT_3_ZERO_493 493 +#define _FORMAT_3_ZERO_494 494 +#define _FORMAT_3_ZERO_495 495 +#define _FORMAT_3_ZERO_496 496 +#define _FORMAT_3_ZERO_497 497 +#define _FORMAT_3_ZERO_498 498 +#define _FORMAT_3_ZERO_499 499 + + +#define _FORMAT_3_ZERO_500 500 +#define _FORMAT_3_ZERO_501 501 +#define _FORMAT_3_ZERO_502 502 +#define _FORMAT_3_ZERO_503 503 +#define _FORMAT_3_ZERO_504 504 +#define _FORMAT_3_ZERO_505 505 +#define _FORMAT_3_ZERO_506 506 +#define _FORMAT_3_ZERO_507 507 +#define _FORMAT_3_ZERO_508 508 +#define _FORMAT_3_ZERO_509 509 + +#define _FORMAT_3_ZERO_510 510 +#define _FORMAT_3_ZERO_511 511 +#define _FORMAT_3_ZERO_512 512 +#define _FORMAT_3_ZERO_513 513 +#define _FORMAT_3_ZERO_514 514 +#define _FORMAT_3_ZERO_515 515 +#define _FORMAT_3_ZERO_516 516 +#define _FORMAT_3_ZERO_517 517 +#define _FORMAT_3_ZERO_518 518 +#define _FORMAT_3_ZERO_519 519 + +#define _FORMAT_3_ZERO_520 520 +#define _FORMAT_3_ZERO_521 521 +#define _FORMAT_3_ZERO_522 522 +#define _FORMAT_3_ZERO_523 523 +#define _FORMAT_3_ZERO_524 524 +#define _FORMAT_3_ZERO_525 525 +#define _FORMAT_3_ZERO_526 526 +#define _FORMAT_3_ZERO_527 527 +#define _FORMAT_3_ZERO_528 528 +#define _FORMAT_3_ZERO_529 529 + +#define _FORMAT_3_ZERO_530 530 +#define _FORMAT_3_ZERO_531 531 +#define _FORMAT_3_ZERO_532 532 +#define _FORMAT_3_ZERO_533 533 +#define _FORMAT_3_ZERO_534 534 +#define _FORMAT_3_ZERO_535 535 +#define _FORMAT_3_ZERO_536 536 +#define _FORMAT_3_ZERO_537 537 +#define _FORMAT_3_ZERO_538 538 +#define _FORMAT_3_ZERO_539 539 + +#define _FORMAT_3_ZERO_540 540 +#define _FORMAT_3_ZERO_541 541 +#define _FORMAT_3_ZERO_542 542 +#define _FORMAT_3_ZERO_543 543 +#define _FORMAT_3_ZERO_544 544 +#define _FORMAT_3_ZERO_545 545 +#define _FORMAT_3_ZERO_546 546 +#define _FORMAT_3_ZERO_547 547 +#define _FORMAT_3_ZERO_548 548 +#define _FORMAT_3_ZERO_549 549 + +#define _FORMAT_3_ZERO_550 550 +#define _FORMAT_3_ZERO_551 551 +#define _FORMAT_3_ZERO_552 552 +#define _FORMAT_3_ZERO_553 553 +#define _FORMAT_3_ZERO_554 554 +#define _FORMAT_3_ZERO_555 555 +#define _FORMAT_3_ZERO_556 556 +#define _FORMAT_3_ZERO_557 557 +#define _FORMAT_3_ZERO_558 558 +#define _FORMAT_3_ZERO_559 559 + +#define _FORMAT_3_ZERO_560 560 +#define _FORMAT_3_ZERO_561 561 +#define _FORMAT_3_ZERO_562 562 +#define _FORMAT_3_ZERO_563 563 +#define _FORMAT_3_ZERO_564 564 +#define _FORMAT_3_ZERO_565 565 +#define _FORMAT_3_ZERO_566 566 +#define _FORMAT_3_ZERO_567 567 +#define _FORMAT_3_ZERO_568 568 +#define _FORMAT_3_ZERO_569 569 + +#define _FORMAT_3_ZERO_570 570 +#define _FORMAT_3_ZERO_571 571 +#define _FORMAT_3_ZERO_572 572 +#define _FORMAT_3_ZERO_573 573 +#define _FORMAT_3_ZERO_574 574 +#define _FORMAT_3_ZERO_575 575 +#define _FORMAT_3_ZERO_576 576 +#define _FORMAT_3_ZERO_577 577 +#define _FORMAT_3_ZERO_578 578 +#define _FORMAT_3_ZERO_579 579 + +#define _FORMAT_3_ZERO_580 580 +#define _FORMAT_3_ZERO_581 581 +#define _FORMAT_3_ZERO_582 582 +#define _FORMAT_3_ZERO_583 583 +#define _FORMAT_3_ZERO_584 584 +#define _FORMAT_3_ZERO_585 585 +#define _FORMAT_3_ZERO_586 586 +#define _FORMAT_3_ZERO_587 587 +#define _FORMAT_3_ZERO_588 588 +#define _FORMAT_3_ZERO_589 589 + +#define _FORMAT_3_ZERO_590 590 +#define _FORMAT_3_ZERO_591 591 +#define _FORMAT_3_ZERO_592 592 +#define _FORMAT_3_ZERO_593 593 +#define _FORMAT_3_ZERO_594 594 +#define _FORMAT_3_ZERO_595 595 +#define _FORMAT_3_ZERO_596 596 +#define _FORMAT_3_ZERO_597 597 +#define _FORMAT_3_ZERO_598 598 +#define _FORMAT_3_ZERO_599 599 + + +#define _FORMAT_3_ZERO_600 600 +#define _FORMAT_3_ZERO_601 601 +#define _FORMAT_3_ZERO_602 602 +#define _FORMAT_3_ZERO_603 603 +#define _FORMAT_3_ZERO_604 604 +#define _FORMAT_3_ZERO_605 605 +#define _FORMAT_3_ZERO_606 606 +#define _FORMAT_3_ZERO_607 607 +#define _FORMAT_3_ZERO_608 608 +#define _FORMAT_3_ZERO_609 609 + +#define _FORMAT_3_ZERO_610 610 +#define _FORMAT_3_ZERO_611 611 +#define _FORMAT_3_ZERO_612 612 +#define _FORMAT_3_ZERO_613 613 +#define _FORMAT_3_ZERO_614 614 +#define _FORMAT_3_ZERO_615 615 +#define _FORMAT_3_ZERO_616 616 +#define _FORMAT_3_ZERO_617 617 +#define _FORMAT_3_ZERO_618 618 +#define _FORMAT_3_ZERO_619 619 + +#define _FORMAT_3_ZERO_620 620 +#define _FORMAT_3_ZERO_621 621 +#define _FORMAT_3_ZERO_622 622 +#define _FORMAT_3_ZERO_623 623 +#define _FORMAT_3_ZERO_624 624 +#define _FORMAT_3_ZERO_625 625 +#define _FORMAT_3_ZERO_626 626 +#define _FORMAT_3_ZERO_627 627 +#define _FORMAT_3_ZERO_628 628 +#define _FORMAT_3_ZERO_629 629 + +#define _FORMAT_3_ZERO_630 630 +#define _FORMAT_3_ZERO_631 631 +#define _FORMAT_3_ZERO_632 632 +#define _FORMAT_3_ZERO_633 633 +#define _FORMAT_3_ZERO_634 634 +#define _FORMAT_3_ZERO_635 635 +#define _FORMAT_3_ZERO_636 636 +#define _FORMAT_3_ZERO_637 637 +#define _FORMAT_3_ZERO_638 638 +#define _FORMAT_3_ZERO_639 639 + +#define _FORMAT_3_ZERO_640 640 +#define _FORMAT_3_ZERO_641 641 +#define _FORMAT_3_ZERO_642 642 +#define _FORMAT_3_ZERO_643 643 +#define _FORMAT_3_ZERO_644 644 +#define _FORMAT_3_ZERO_645 645 +#define _FORMAT_3_ZERO_646 646 +#define _FORMAT_3_ZERO_647 647 +#define _FORMAT_3_ZERO_648 648 +#define _FORMAT_3_ZERO_649 649 + +#define _FORMAT_3_ZERO_650 650 +#define _FORMAT_3_ZERO_651 651 +#define _FORMAT_3_ZERO_652 652 +#define _FORMAT_3_ZERO_653 653 +#define _FORMAT_3_ZERO_654 654 +#define _FORMAT_3_ZERO_655 655 +#define _FORMAT_3_ZERO_656 656 +#define _FORMAT_3_ZERO_657 657 +#define _FORMAT_3_ZERO_658 658 +#define _FORMAT_3_ZERO_659 659 + +#define _FORMAT_3_ZERO_660 660 +#define _FORMAT_3_ZERO_661 661 +#define _FORMAT_3_ZERO_662 662 +#define _FORMAT_3_ZERO_663 663 +#define _FORMAT_3_ZERO_664 664 +#define _FORMAT_3_ZERO_665 665 +#define _FORMAT_3_ZERO_666 666 +#define _FORMAT_3_ZERO_667 667 +#define _FORMAT_3_ZERO_668 668 +#define _FORMAT_3_ZERO_669 669 + +#define _FORMAT_3_ZERO_670 670 +#define _FORMAT_3_ZERO_671 671 +#define _FORMAT_3_ZERO_672 672 +#define _FORMAT_3_ZERO_673 673 +#define _FORMAT_3_ZERO_674 674 +#define _FORMAT_3_ZERO_675 675 +#define _FORMAT_3_ZERO_676 676 +#define _FORMAT_3_ZERO_677 677 +#define _FORMAT_3_ZERO_678 678 +#define _FORMAT_3_ZERO_679 679 + +#define _FORMAT_3_ZERO_680 680 +#define _FORMAT_3_ZERO_681 681 +#define _FORMAT_3_ZERO_682 682 +#define _FORMAT_3_ZERO_683 683 +#define _FORMAT_3_ZERO_684 684 +#define _FORMAT_3_ZERO_685 685 +#define _FORMAT_3_ZERO_686 686 +#define _FORMAT_3_ZERO_687 687 +#define _FORMAT_3_ZERO_688 688 +#define _FORMAT_3_ZERO_689 689 + +#define _FORMAT_3_ZERO_690 690 +#define _FORMAT_3_ZERO_691 691 +#define _FORMAT_3_ZERO_692 692 +#define _FORMAT_3_ZERO_693 693 +#define _FORMAT_3_ZERO_694 694 +#define _FORMAT_3_ZERO_695 695 +#define _FORMAT_3_ZERO_696 696 +#define _FORMAT_3_ZERO_697 697 +#define _FORMAT_3_ZERO_698 698 +#define _FORMAT_3_ZERO_699 699 + + +#define _FORMAT_3_ZERO_700 700 +#define _FORMAT_3_ZERO_701 701 +#define _FORMAT_3_ZERO_702 702 +#define _FORMAT_3_ZERO_703 703 +#define _FORMAT_3_ZERO_704 704 +#define _FORMAT_3_ZERO_705 705 +#define _FORMAT_3_ZERO_706 706 +#define _FORMAT_3_ZERO_707 707 +#define _FORMAT_3_ZERO_708 708 +#define _FORMAT_3_ZERO_709 709 + +#define _FORMAT_3_ZERO_710 710 +#define _FORMAT_3_ZERO_711 711 +#define _FORMAT_3_ZERO_712 712 +#define _FORMAT_3_ZERO_713 713 +#define _FORMAT_3_ZERO_714 714 +#define _FORMAT_3_ZERO_715 715 +#define _FORMAT_3_ZERO_716 716 +#define _FORMAT_3_ZERO_717 717 +#define _FORMAT_3_ZERO_718 718 +#define _FORMAT_3_ZERO_719 719 + +#define _FORMAT_3_ZERO_720 720 +#define _FORMAT_3_ZERO_721 721 +#define _FORMAT_3_ZERO_722 722 +#define _FORMAT_3_ZERO_723 723 +#define _FORMAT_3_ZERO_724 724 +#define _FORMAT_3_ZERO_725 725 +#define _FORMAT_3_ZERO_726 726 +#define _FORMAT_3_ZERO_727 727 +#define _FORMAT_3_ZERO_728 728 +#define _FORMAT_3_ZERO_729 729 + +#define _FORMAT_3_ZERO_730 730 +#define _FORMAT_3_ZERO_731 731 +#define _FORMAT_3_ZERO_732 732 +#define _FORMAT_3_ZERO_733 733 +#define _FORMAT_3_ZERO_734 734 +#define _FORMAT_3_ZERO_735 735 +#define _FORMAT_3_ZERO_736 736 +#define _FORMAT_3_ZERO_737 737 +#define _FORMAT_3_ZERO_738 738 +#define _FORMAT_3_ZERO_739 739 + +#define _FORMAT_3_ZERO_740 740 +#define _FORMAT_3_ZERO_741 741 +#define _FORMAT_3_ZERO_742 742 +#define _FORMAT_3_ZERO_743 743 +#define _FORMAT_3_ZERO_744 744 +#define _FORMAT_3_ZERO_745 745 +#define _FORMAT_3_ZERO_746 746 +#define _FORMAT_3_ZERO_747 747 +#define _FORMAT_3_ZERO_748 748 +#define _FORMAT_3_ZERO_749 749 + +#define _FORMAT_3_ZERO_750 750 +#define _FORMAT_3_ZERO_751 751 +#define _FORMAT_3_ZERO_752 752 +#define _FORMAT_3_ZERO_753 753 +#define _FORMAT_3_ZERO_754 754 +#define _FORMAT_3_ZERO_755 755 +#define _FORMAT_3_ZERO_756 756 +#define _FORMAT_3_ZERO_757 757 +#define _FORMAT_3_ZERO_758 758 +#define _FORMAT_3_ZERO_759 759 + +#define _FORMAT_3_ZERO_760 760 +#define _FORMAT_3_ZERO_761 761 +#define _FORMAT_3_ZERO_762 762 +#define _FORMAT_3_ZERO_763 763 +#define _FORMAT_3_ZERO_764 764 +#define _FORMAT_3_ZERO_765 765 +#define _FORMAT_3_ZERO_766 766 +#define _FORMAT_3_ZERO_767 767 +#define _FORMAT_3_ZERO_768 768 +#define _FORMAT_3_ZERO_769 769 + +#define _FORMAT_3_ZERO_770 770 +#define _FORMAT_3_ZERO_771 771 +#define _FORMAT_3_ZERO_772 772 +#define _FORMAT_3_ZERO_773 773 +#define _FORMAT_3_ZERO_774 774 +#define _FORMAT_3_ZERO_775 775 +#define _FORMAT_3_ZERO_776 776 +#define _FORMAT_3_ZERO_777 777 +#define _FORMAT_3_ZERO_778 778 +#define _FORMAT_3_ZERO_779 779 + +#define _FORMAT_3_ZERO_780 780 +#define _FORMAT_3_ZERO_781 781 +#define _FORMAT_3_ZERO_782 782 +#define _FORMAT_3_ZERO_783 783 +#define _FORMAT_3_ZERO_784 784 +#define _FORMAT_3_ZERO_785 785 +#define _FORMAT_3_ZERO_786 786 +#define _FORMAT_3_ZERO_787 787 +#define _FORMAT_3_ZERO_788 788 +#define _FORMAT_3_ZERO_789 789 + +#define _FORMAT_3_ZERO_790 790 +#define _FORMAT_3_ZERO_791 791 +#define _FORMAT_3_ZERO_792 792 +#define _FORMAT_3_ZERO_793 793 +#define _FORMAT_3_ZERO_794 794 +#define _FORMAT_3_ZERO_795 795 +#define _FORMAT_3_ZERO_796 796 +#define _FORMAT_3_ZERO_797 797 +#define _FORMAT_3_ZERO_798 798 +#define _FORMAT_3_ZERO_799 799 + + +#define _FORMAT_3_ZERO_800 800 +#define _FORMAT_3_ZERO_801 801 +#define _FORMAT_3_ZERO_802 802 +#define _FORMAT_3_ZERO_803 803 +#define _FORMAT_3_ZERO_804 804 +#define _FORMAT_3_ZERO_805 805 +#define _FORMAT_3_ZERO_806 806 +#define _FORMAT_3_ZERO_807 807 +#define _FORMAT_3_ZERO_808 808 +#define _FORMAT_3_ZERO_809 809 + +#define _FORMAT_3_ZERO_810 810 +#define _FORMAT_3_ZERO_811 811 +#define _FORMAT_3_ZERO_812 812 +#define _FORMAT_3_ZERO_813 813 +#define _FORMAT_3_ZERO_814 814 +#define _FORMAT_3_ZERO_815 815 +#define _FORMAT_3_ZERO_816 816 +#define _FORMAT_3_ZERO_817 817 +#define _FORMAT_3_ZERO_818 818 +#define _FORMAT_3_ZERO_819 819 + +#define _FORMAT_3_ZERO_820 820 +#define _FORMAT_3_ZERO_821 821 +#define _FORMAT_3_ZERO_822 822 +#define _FORMAT_3_ZERO_823 823 +#define _FORMAT_3_ZERO_824 824 +#define _FORMAT_3_ZERO_825 825 +#define _FORMAT_3_ZERO_826 826 +#define _FORMAT_3_ZERO_827 827 +#define _FORMAT_3_ZERO_828 828 +#define _FORMAT_3_ZERO_829 829 + +#define _FORMAT_3_ZERO_830 830 +#define _FORMAT_3_ZERO_831 831 +#define _FORMAT_3_ZERO_832 832 +#define _FORMAT_3_ZERO_833 833 +#define _FORMAT_3_ZERO_834 834 +#define _FORMAT_3_ZERO_835 835 +#define _FORMAT_3_ZERO_836 836 +#define _FORMAT_3_ZERO_837 837 +#define _FORMAT_3_ZERO_838 838 +#define _FORMAT_3_ZERO_839 839 + +#define _FORMAT_3_ZERO_840 840 +#define _FORMAT_3_ZERO_841 841 +#define _FORMAT_3_ZERO_842 842 +#define _FORMAT_3_ZERO_843 843 +#define _FORMAT_3_ZERO_844 844 +#define _FORMAT_3_ZERO_845 845 +#define _FORMAT_3_ZERO_846 846 +#define _FORMAT_3_ZERO_847 847 +#define _FORMAT_3_ZERO_848 848 +#define _FORMAT_3_ZERO_849 849 + +#define _FORMAT_3_ZERO_850 850 +#define _FORMAT_3_ZERO_851 851 +#define _FORMAT_3_ZERO_852 852 +#define _FORMAT_3_ZERO_853 853 +#define _FORMAT_3_ZERO_854 854 +#define _FORMAT_3_ZERO_855 855 +#define _FORMAT_3_ZERO_856 856 +#define _FORMAT_3_ZERO_857 857 +#define _FORMAT_3_ZERO_858 858 +#define _FORMAT_3_ZERO_859 859 + +#define _FORMAT_3_ZERO_860 860 +#define _FORMAT_3_ZERO_861 861 +#define _FORMAT_3_ZERO_862 862 +#define _FORMAT_3_ZERO_863 863 +#define _FORMAT_3_ZERO_864 864 +#define _FORMAT_3_ZERO_865 865 +#define _FORMAT_3_ZERO_866 866 +#define _FORMAT_3_ZERO_867 867 +#define _FORMAT_3_ZERO_868 868 +#define _FORMAT_3_ZERO_869 869 + +#define _FORMAT_3_ZERO_870 870 +#define _FORMAT_3_ZERO_871 871 +#define _FORMAT_3_ZERO_872 872 +#define _FORMAT_3_ZERO_873 873 +#define _FORMAT_3_ZERO_874 874 +#define _FORMAT_3_ZERO_875 875 +#define _FORMAT_3_ZERO_876 876 +#define _FORMAT_3_ZERO_877 877 +#define _FORMAT_3_ZERO_878 878 +#define _FORMAT_3_ZERO_879 879 + +#define _FORMAT_3_ZERO_880 880 +#define _FORMAT_3_ZERO_881 881 +#define _FORMAT_3_ZERO_882 882 +#define _FORMAT_3_ZERO_883 883 +#define _FORMAT_3_ZERO_884 884 +#define _FORMAT_3_ZERO_885 885 +#define _FORMAT_3_ZERO_886 886 +#define _FORMAT_3_ZERO_887 887 +#define _FORMAT_3_ZERO_888 888 +#define _FORMAT_3_ZERO_889 889 + +#define _FORMAT_3_ZERO_890 890 +#define _FORMAT_3_ZERO_891 891 +#define _FORMAT_3_ZERO_892 892 +#define _FORMAT_3_ZERO_893 893 +#define _FORMAT_3_ZERO_894 894 +#define _FORMAT_3_ZERO_895 895 +#define _FORMAT_3_ZERO_896 896 +#define _FORMAT_3_ZERO_897 897 +#define _FORMAT_3_ZERO_898 898 +#define _FORMAT_3_ZERO_899 899 + + +#define _FORMAT_3_ZERO_900 900 +#define _FORMAT_3_ZERO_901 901 +#define _FORMAT_3_ZERO_902 902 +#define _FORMAT_3_ZERO_903 903 +#define _FORMAT_3_ZERO_904 904 +#define _FORMAT_3_ZERO_905 905 +#define _FORMAT_3_ZERO_906 906 +#define _FORMAT_3_ZERO_907 907 +#define _FORMAT_3_ZERO_908 908 +#define _FORMAT_3_ZERO_909 909 + +#define _FORMAT_3_ZERO_910 910 +#define _FORMAT_3_ZERO_911 911 +#define _FORMAT_3_ZERO_912 912 +#define _FORMAT_3_ZERO_913 913 +#define _FORMAT_3_ZERO_914 914 +#define _FORMAT_3_ZERO_915 915 +#define _FORMAT_3_ZERO_916 916 +#define _FORMAT_3_ZERO_917 917 +#define _FORMAT_3_ZERO_918 918 +#define _FORMAT_3_ZERO_919 919 + +#define _FORMAT_3_ZERO_920 920 +#define _FORMAT_3_ZERO_921 921 +#define _FORMAT_3_ZERO_922 922 +#define _FORMAT_3_ZERO_923 923 +#define _FORMAT_3_ZERO_924 924 +#define _FORMAT_3_ZERO_925 925 +#define _FORMAT_3_ZERO_926 926 +#define _FORMAT_3_ZERO_927 927 +#define _FORMAT_3_ZERO_928 928 +#define _FORMAT_3_ZERO_929 929 + +#define _FORMAT_3_ZERO_930 930 +#define _FORMAT_3_ZERO_931 931 +#define _FORMAT_3_ZERO_932 932 +#define _FORMAT_3_ZERO_933 933 +#define _FORMAT_3_ZERO_934 934 +#define _FORMAT_3_ZERO_935 935 +#define _FORMAT_3_ZERO_936 936 +#define _FORMAT_3_ZERO_937 937 +#define _FORMAT_3_ZERO_938 938 +#define _FORMAT_3_ZERO_939 939 + +#define _FORMAT_3_ZERO_940 940 +#define _FORMAT_3_ZERO_941 941 +#define _FORMAT_3_ZERO_942 942 +#define _FORMAT_3_ZERO_943 943 +#define _FORMAT_3_ZERO_944 944 +#define _FORMAT_3_ZERO_945 945 +#define _FORMAT_3_ZERO_946 946 +#define _FORMAT_3_ZERO_947 947 +#define _FORMAT_3_ZERO_948 948 +#define _FORMAT_3_ZERO_949 949 + +#define _FORMAT_3_ZERO_950 950 +#define _FORMAT_3_ZERO_951 951 +#define _FORMAT_3_ZERO_952 952 +#define _FORMAT_3_ZERO_953 953 +#define _FORMAT_3_ZERO_954 954 +#define _FORMAT_3_ZERO_955 955 +#define _FORMAT_3_ZERO_956 956 +#define _FORMAT_3_ZERO_957 957 +#define _FORMAT_3_ZERO_958 958 +#define _FORMAT_3_ZERO_959 959 + +#define _FORMAT_3_ZERO_960 960 +#define _FORMAT_3_ZERO_961 961 +#define _FORMAT_3_ZERO_962 962 +#define _FORMAT_3_ZERO_963 963 +#define _FORMAT_3_ZERO_964 964 +#define _FORMAT_3_ZERO_965 965 +#define _FORMAT_3_ZERO_966 966 +#define _FORMAT_3_ZERO_967 967 +#define _FORMAT_3_ZERO_968 968 +#define _FORMAT_3_ZERO_969 969 + +#define _FORMAT_3_ZERO_970 970 +#define _FORMAT_3_ZERO_971 971 +#define _FORMAT_3_ZERO_972 972 +#define _FORMAT_3_ZERO_973 973 +#define _FORMAT_3_ZERO_974 974 +#define _FORMAT_3_ZERO_975 975 +#define _FORMAT_3_ZERO_976 976 +#define _FORMAT_3_ZERO_977 977 +#define _FORMAT_3_ZERO_978 978 +#define _FORMAT_3_ZERO_979 979 + +#define _FORMAT_3_ZERO_980 980 +#define _FORMAT_3_ZERO_981 981 +#define _FORMAT_3_ZERO_982 982 +#define _FORMAT_3_ZERO_983 983 +#define _FORMAT_3_ZERO_984 984 +#define _FORMAT_3_ZERO_985 985 +#define _FORMAT_3_ZERO_986 986 +#define _FORMAT_3_ZERO_987 987 +#define _FORMAT_3_ZERO_988 988 +#define _FORMAT_3_ZERO_989 989 + +#define _FORMAT_3_ZERO_990 990 +#define _FORMAT_3_ZERO_991 991 +#define _FORMAT_3_ZERO_992 992 +#define _FORMAT_3_ZERO_993 993 +#define _FORMAT_3_ZERO_994 994 +#define _FORMAT_3_ZERO_995 995 +#define _FORMAT_3_ZERO_996 996 +#define _FORMAT_3_ZERO_997 997 +#define _FORMAT_3_ZERO_998 998 +#define _FORMAT_3_ZERO_999 999 + +#endif \ No newline at end of file diff --git a/linker.ld b/linker.ld index 60634c4..c8a9eca 100644 --- a/linker.ld +++ b/linker.ld @@ -32,11 +32,11 @@ SECTIONS *(.data) . = ALIGN(16); __start_pci_driver = .; - *(pci_driver) + *(SORT(.pci_driver.*)) __stop_pci_driver = .; . = ALIGN(16); __start_block_dev_driver = .; - *(block_dev_driver) + *(SORT(.block_dev_driver.*)) __stop_block_dev_driver = .; }