I noticed some strange code in src/sys/arch/armv7/omap/ommmc.c This preprocessor define seems to map intr. state bit positions with strings describing them:
149 #define MMCHS_STAT_FMT "\20" \ 150 "\x09d_BADA" \ 151 "\x09c_CERR" \ 152 "\x098_ACE" \ 153 "\x096_DEB" \ 154 "\x095_DCRC" \ 155 "\x094_DTO" \ 156 "\x093_CIE" \ 157 "\x092_CEB" \ 158 "\x091_CCRC" \ 159 "\x090_CTO" \ 160 "\x08f_ERRI" \ 161 "\x089_OBI" \ 162 "\x088_CIRQ" \ 163 "\x085_BRR" \ 164 "\x084_BWR" \ 165 "\x082_BGE" \ 166 "\x081_TC" \ 167 "\x080_CC" It's used later as an extra printf() argument (edited for clarity): 1174 printf("%s: interrupt status=%b\n", DEVNAME(sc), status, MMCHS_STAT_FMT); Whenever the above is called, the string counterpart to each interupt bit set in 'status' is printed, for example: mmmc0: interrupt status=20008000<_BADA,_ERRI> Where BADA and ERRI are intr. status bits at positions 29 and 15 respectively. So through some combination of: * CPP multi-string define with unclear hex escapes prepended * printf() call with one too many parameters * undocumented %b printf() token We get this handy functionality where names of intr. statuses are derrived from their associated bit positions and conditionally printed when set. Does anyone have any idea of why this works the way it does? Ian