Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ata: libata-core: Refactor force_tbl definition

Introduce the macro definitions force_cbl(), force_spd_limit(),
force_xfer(), force_lflag(), force_horkage_on() and
force_horkage_onoff() to define with a more compact syntax the struct
ata_force_param entries in the force_tbl array defined in the function
ata_parse_force_one().

To reduce the indentation of the array declaration, force_tbl definition
is also moved out of the ata_parse_force_one() function. The entries are
also reordered to group them by type of the quirck that is applied.

Finally, fix a comment in ata_parse_force_param() incorrectly
referencing force_tbl instead of ata_force_tbl.

Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Reviewed-by: Hannes Reinecke <hare@suse.de>

+81 -58
+81 -58
drivers/ata/libata-core.c
··· 6100 6100 EXPORT_SYMBOL_GPL(ata_platform_remove_one); 6101 6101 6102 6102 #ifdef CONFIG_ATA_FORCE 6103 + 6104 + #define force_cbl(name, flag) \ 6105 + { #name, .cbl = (flag) } 6106 + 6107 + #define force_spd_limit(spd, val) \ 6108 + { #spd, .spd_limit = (val) } 6109 + 6110 + #define force_xfer(mode, shift) \ 6111 + { #mode, .xfer_mask = (1UL << (shift)) } 6112 + 6113 + #define force_lflag(name, flags) \ 6114 + { #name, .lflags = (flags) } 6115 + 6116 + #define force_horkage_on(name, flag) \ 6117 + { #name, .horkage_on = (flag) } 6118 + 6119 + #define force_horkage_onoff(name, flag) \ 6120 + { "no" #name, .horkage_on = (flag) }, \ 6121 + { #name, .horkage_off = (flag) } 6122 + 6123 + static const struct ata_force_param force_tbl[] __initconst = { 6124 + force_cbl(40c, ATA_CBL_PATA40), 6125 + force_cbl(80c, ATA_CBL_PATA80), 6126 + force_cbl(short40c, ATA_CBL_PATA40_SHORT), 6127 + force_cbl(unk, ATA_CBL_PATA_UNK), 6128 + force_cbl(ign, ATA_CBL_PATA_IGN), 6129 + force_cbl(sata, ATA_CBL_SATA), 6130 + 6131 + force_spd_limit(1.5Gbps, 1), 6132 + force_spd_limit(3.0Gbps, 2), 6133 + 6134 + force_xfer(pio0, ATA_SHIFT_PIO + 0), 6135 + force_xfer(pio1, ATA_SHIFT_PIO + 1), 6136 + force_xfer(pio2, ATA_SHIFT_PIO + 2), 6137 + force_xfer(pio3, ATA_SHIFT_PIO + 3), 6138 + force_xfer(pio4, ATA_SHIFT_PIO + 4), 6139 + force_xfer(pio5, ATA_SHIFT_PIO + 5), 6140 + force_xfer(pio6, ATA_SHIFT_PIO + 6), 6141 + force_xfer(mwdma0, ATA_SHIFT_MWDMA + 0), 6142 + force_xfer(mwdma1, ATA_SHIFT_MWDMA + 1), 6143 + force_xfer(mwdma2, ATA_SHIFT_MWDMA + 2), 6144 + force_xfer(mwdma3, ATA_SHIFT_MWDMA + 3), 6145 + force_xfer(mwdma4, ATA_SHIFT_MWDMA + 4), 6146 + force_xfer(udma0, ATA_SHIFT_UDMA + 0), 6147 + force_xfer(udma16, ATA_SHIFT_UDMA + 0), 6148 + force_xfer(udma/16, ATA_SHIFT_UDMA + 0), 6149 + force_xfer(udma1, ATA_SHIFT_UDMA + 1), 6150 + force_xfer(udma25, ATA_SHIFT_UDMA + 1), 6151 + force_xfer(udma/25, ATA_SHIFT_UDMA + 1), 6152 + force_xfer(udma2, ATA_SHIFT_UDMA + 2), 6153 + force_xfer(udma33, ATA_SHIFT_UDMA + 2), 6154 + force_xfer(udma/33, ATA_SHIFT_UDMA + 2), 6155 + force_xfer(udma3, ATA_SHIFT_UDMA + 3), 6156 + force_xfer(udma44, ATA_SHIFT_UDMA + 3), 6157 + force_xfer(udma/44, ATA_SHIFT_UDMA + 3), 6158 + force_xfer(udma4, ATA_SHIFT_UDMA + 4), 6159 + force_xfer(udma66, ATA_SHIFT_UDMA + 4), 6160 + force_xfer(udma/66, ATA_SHIFT_UDMA + 4), 6161 + force_xfer(udma5, ATA_SHIFT_UDMA + 5), 6162 + force_xfer(udma100, ATA_SHIFT_UDMA + 5), 6163 + force_xfer(udma/100, ATA_SHIFT_UDMA + 5), 6164 + force_xfer(udma6, ATA_SHIFT_UDMA + 6), 6165 + force_xfer(udma133, ATA_SHIFT_UDMA + 6), 6166 + force_xfer(udma/133, ATA_SHIFT_UDMA + 6), 6167 + force_xfer(udma7, ATA_SHIFT_UDMA + 7), 6168 + 6169 + force_lflag(nohrst, ATA_LFLAG_NO_HRST), 6170 + force_lflag(nosrst, ATA_LFLAG_NO_SRST), 6171 + force_lflag(norst, ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST), 6172 + force_lflag(rstonce, ATA_LFLAG_RST_ONCE), 6173 + 6174 + force_horkage_onoff(ncq, ATA_HORKAGE_NONCQ), 6175 + force_horkage_onoff(ncqtrim, ATA_HORKAGE_NO_NCQ_TRIM), 6176 + force_horkage_onoff(ncqati, ATA_HORKAGE_NO_NCQ_ON_ATI), 6177 + 6178 + force_horkage_on(dump_id, ATA_HORKAGE_DUMP_ID), 6179 + force_horkage_on(atapi_dmadir, ATA_HORKAGE_ATAPI_DMADIR), 6180 + force_horkage_on(disable, ATA_HORKAGE_DISABLE) 6181 + }; 6182 + 6103 6183 static int __init ata_parse_force_one(char **cur, 6104 6184 struct ata_force_ent *force_ent, 6105 6185 const char **reason) 6106 6186 { 6107 - static const struct ata_force_param force_tbl[] __initconst = { 6108 - { "40c", .cbl = ATA_CBL_PATA40 }, 6109 - { "80c", .cbl = ATA_CBL_PATA80 }, 6110 - { "short40c", .cbl = ATA_CBL_PATA40_SHORT }, 6111 - { "unk", .cbl = ATA_CBL_PATA_UNK }, 6112 - { "ign", .cbl = ATA_CBL_PATA_IGN }, 6113 - { "sata", .cbl = ATA_CBL_SATA }, 6114 - { "1.5Gbps", .spd_limit = 1 }, 6115 - { "3.0Gbps", .spd_limit = 2 }, 6116 - { "noncq", .horkage_on = ATA_HORKAGE_NONCQ }, 6117 - { "ncq", .horkage_off = ATA_HORKAGE_NONCQ }, 6118 - { "noncqtrim", .horkage_on = ATA_HORKAGE_NO_NCQ_TRIM }, 6119 - { "ncqtrim", .horkage_off = ATA_HORKAGE_NO_NCQ_TRIM }, 6120 - { "noncqati", .horkage_on = ATA_HORKAGE_NO_NCQ_ON_ATI }, 6121 - { "ncqati", .horkage_off = ATA_HORKAGE_NO_NCQ_ON_ATI }, 6122 - { "dump_id", .horkage_on = ATA_HORKAGE_DUMP_ID }, 6123 - { "pio0", .xfer_mask = 1 << (ATA_SHIFT_PIO + 0) }, 6124 - { "pio1", .xfer_mask = 1 << (ATA_SHIFT_PIO + 1) }, 6125 - { "pio2", .xfer_mask = 1 << (ATA_SHIFT_PIO + 2) }, 6126 - { "pio3", .xfer_mask = 1 << (ATA_SHIFT_PIO + 3) }, 6127 - { "pio4", .xfer_mask = 1 << (ATA_SHIFT_PIO + 4) }, 6128 - { "pio5", .xfer_mask = 1 << (ATA_SHIFT_PIO + 5) }, 6129 - { "pio6", .xfer_mask = 1 << (ATA_SHIFT_PIO + 6) }, 6130 - { "mwdma0", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 0) }, 6131 - { "mwdma1", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 1) }, 6132 - { "mwdma2", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 2) }, 6133 - { "mwdma3", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 3) }, 6134 - { "mwdma4", .xfer_mask = 1 << (ATA_SHIFT_MWDMA + 4) }, 6135 - { "udma0", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) }, 6136 - { "udma16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) }, 6137 - { "udma/16", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 0) }, 6138 - { "udma1", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) }, 6139 - { "udma25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) }, 6140 - { "udma/25", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 1) }, 6141 - { "udma2", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) }, 6142 - { "udma33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) }, 6143 - { "udma/33", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 2) }, 6144 - { "udma3", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) }, 6145 - { "udma44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) }, 6146 - { "udma/44", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 3) }, 6147 - { "udma4", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) }, 6148 - { "udma66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) }, 6149 - { "udma/66", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 4) }, 6150 - { "udma5", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) }, 6151 - { "udma100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) }, 6152 - { "udma/100", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 5) }, 6153 - { "udma6", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) }, 6154 - { "udma133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) }, 6155 - { "udma/133", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 6) }, 6156 - { "udma7", .xfer_mask = 1 << (ATA_SHIFT_UDMA + 7) }, 6157 - { "nohrst", .lflags = ATA_LFLAG_NO_HRST }, 6158 - { "nosrst", .lflags = ATA_LFLAG_NO_SRST }, 6159 - { "norst", .lflags = ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST }, 6160 - { "rstonce", .lflags = ATA_LFLAG_RST_ONCE }, 6161 - { "atapi_dmadir", .horkage_on = ATA_HORKAGE_ATAPI_DMADIR }, 6162 - { "disable", .horkage_on = ATA_HORKAGE_DISABLE }, 6163 - }; 6164 6187 char *start = *cur, *p = *cur; 6165 6188 char *id, *val, *endp; 6166 6189 const struct ata_force_param *match_fp = NULL; ··· 6265 6242 int last_port = -1, last_device = -1; 6266 6243 char *p, *cur, *next; 6267 6244 6268 - /* calculate maximum number of params and allocate force_tbl */ 6245 + /* Calculate maximum number of params and allocate ata_force_tbl */ 6269 6246 for (p = ata_force_param_buf; *p; p++) 6270 6247 if (*p == ',') 6271 6248 size++;