OSDN Git Service

floppy: prepare ARM code to simplify base address separation
authorWilly Tarreau <w@1wt.eu>
Sun, 1 Mar 2020 19:55:52 +0000 (20:55 +0100)
committerJens Axboe <axboe@kernel.dk>
Mon, 16 Mar 2020 14:26:58 +0000 (08:26 -0600)
The fd_outb() macro on ARM relies on a special fd_setdor() macro when
the register is FD_DOR and both will need to be changed to accept a
separate base address. Let's just remerge them to simplify the change
and make this code more easily reviewable.

Link: https://lore.kernel.org/r/20200301195555.11154-4-w@1wt.eu
Cc: Ian Molton <spyro@f2s.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Denis Efremov <efremov@linux.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
arch/arm/include/asm/floppy.h

index 7e58979..34ebd86 100644 (file)
@@ -9,12 +9,17 @@
 #ifndef __ASM_ARM_FLOPPY_H
 #define __ASM_ARM_FLOPPY_H
 
-#define fd_outb(val,port)                      \
-       do {                                    \
-               if ((port) == (u32)FD_DOR)      \
-                       fd_setdor((val));       \
-               else                            \
-                       outb((val),(port));     \
+#define fd_outb(val,port)                                              \
+       do {                                                            \
+               int new_val = (val);                                    \
+               if ((port) == (u32)FD_DOR) {                            \
+                       if (new_val & 0xf0)                             \
+                               new_val = (new_val & 0x0c) |            \
+                                         floppy_selects[new_val & 3];  \
+                       else                                            \
+                               new_val &= 0x0c;                        \
+               }                                                       \
+               outb(new_val, (port));                                  \
        } while(0)
 
 #define fd_inb(port)           inb((port))
@@ -52,16 +57,6 @@ static inline int fd_dma_setup(void *data, unsigned int length,
  */
 static unsigned char floppy_selects[4] = { 0x10, 0x21, 0x23, 0x33 };
 
-#define fd_setdor(dor)                                                         \
-do {                                                                           \
-       int new_dor = (dor);                                                    \
-       if (new_dor & 0xf0)                                                     \
-               new_dor = (new_dor & 0x0c) | floppy_selects[new_dor & 3];       \
-       else                                                                    \
-               new_dor &= 0x0c;                                                \
-       outb(new_dor, FD_DOR);                                                  \
-} while (0)
-
 #define FDC1 (0x3f0)
 
 #define FLOPPY0_TYPE 4