Commit 787a22d1d284b21ad810fd0bedbdefb329f31cd2
1 parent
73089cbfdf
Exists in
master
and in
7 other branches
[XTENSA] Move string-io functions to io.c from pci.c
The string-io functions (outs{bwl}, ins{bwl}) are independent from the PCI option and should be in a separate file. Signed-off-by: Chris Zankel <chris@zankel.net>
Showing 3 changed files with 76 additions and 70 deletions Side-by-side Diff
arch/xtensa/kernel/Makefile
arch/xtensa/kernel/io.c
1 | +/* | |
2 | + * arch/xtensa/io.c | |
3 | + * | |
4 | + * IO primitives | |
5 | + * | |
6 | + * This program is free software; you can redistribute it and/or modify it | |
7 | + * under the terms of the GNU General Public License as published by the | |
8 | + * Free Software Foundation; either version 2 of the License, or (at your | |
9 | + * option) any later version. | |
10 | + * | |
11 | + * Copied from sparc. | |
12 | + * | |
13 | + * Chris Zankel <chris@zankel.net> | |
14 | + * | |
15 | + */ | |
16 | + | |
17 | +#include <asm/io.h> | |
18 | +#include <asm/byteorder.h> | |
19 | + | |
20 | +void outsb(unsigned long addr, const void *src, unsigned long count) { | |
21 | + while (count) { | |
22 | + count -= 1; | |
23 | + writeb(*(const char *)src, addr); | |
24 | + src += 1; | |
25 | + addr += 1; | |
26 | + } | |
27 | +} | |
28 | + | |
29 | +void outsw(unsigned long addr, const void *src, unsigned long count) { | |
30 | + while (count) { | |
31 | + count -= 2; | |
32 | + writew(*(const short *)src, addr); | |
33 | + src += 2; | |
34 | + addr += 2; | |
35 | + } | |
36 | +} | |
37 | + | |
38 | +void outsl(unsigned long addr, const void *src, unsigned long count) { | |
39 | + while (count) { | |
40 | + count -= 4; | |
41 | + writel(*(const long *)src, addr); | |
42 | + src += 4; | |
43 | + addr += 4; | |
44 | + } | |
45 | +} | |
46 | + | |
47 | +void insb(unsigned long addr, void *dst, unsigned long count) { | |
48 | + while (count) { | |
49 | + count -= 1; | |
50 | + *(unsigned char *)dst = readb(addr); | |
51 | + dst += 1; | |
52 | + addr += 1; | |
53 | + } | |
54 | +} | |
55 | + | |
56 | +void insw(unsigned long addr, void *dst, unsigned long count) { | |
57 | + while (count) { | |
58 | + count -= 2; | |
59 | + *(unsigned short *)dst = readw(addr); | |
60 | + dst += 2; | |
61 | + addr += 2; | |
62 | + } | |
63 | +} | |
64 | + | |
65 | +void insl(unsigned long addr, void *dst, unsigned long count) { | |
66 | + while (count) { | |
67 | + count -= 4; | |
68 | + /* | |
69 | + * XXX I am sure we are in for an unaligned trap here. | |
70 | + */ | |
71 | + *(unsigned long *)dst = readl(addr); | |
72 | + dst += 4; | |
73 | + addr += 4; | |
74 | + } | |
75 | +} |
arch/xtensa/kernel/pci.c
... | ... | @@ -394,70 +394,4 @@ |
394 | 394 | |
395 | 395 | return ret; |
396 | 396 | } |
397 | - | |
398 | -/* | |
399 | - * This probably belongs here rather than ioport.c because | |
400 | - * we do not want this crud linked into SBus kernels. | |
401 | - * Also, think for a moment about likes of floppy.c that | |
402 | - * include architecture specific parts. They may want to redefine ins/outs. | |
403 | - * | |
404 | - * We do not use horrible macros here because we want to | |
405 | - * advance pointer by sizeof(size). | |
406 | - */ | |
407 | -void outsb(unsigned long addr, const void *src, unsigned long count) { | |
408 | - while (count) { | |
409 | - count -= 1; | |
410 | - writeb(*(const char *)src, addr); | |
411 | - src += 1; | |
412 | - addr += 1; | |
413 | - } | |
414 | -} | |
415 | - | |
416 | -void outsw(unsigned long addr, const void *src, unsigned long count) { | |
417 | - while (count) { | |
418 | - count -= 2; | |
419 | - writew(*(const short *)src, addr); | |
420 | - src += 2; | |
421 | - addr += 2; | |
422 | - } | |
423 | -} | |
424 | - | |
425 | -void outsl(unsigned long addr, const void *src, unsigned long count) { | |
426 | - while (count) { | |
427 | - count -= 4; | |
428 | - writel(*(const long *)src, addr); | |
429 | - src += 4; | |
430 | - addr += 4; | |
431 | - } | |
432 | -} | |
433 | - | |
434 | -void insb(unsigned long addr, void *dst, unsigned long count) { | |
435 | - while (count) { | |
436 | - count -= 1; | |
437 | - *(unsigned char *)dst = readb(addr); | |
438 | - dst += 1; | |
439 | - addr += 1; | |
440 | - } | |
441 | -} | |
442 | - | |
443 | -void insw(unsigned long addr, void *dst, unsigned long count) { | |
444 | - while (count) { | |
445 | - count -= 2; | |
446 | - *(unsigned short *)dst = readw(addr); | |
447 | - dst += 2; | |
448 | - addr += 2; | |
449 | - } | |
450 | -} | |
451 | - | |
452 | -void insl(unsigned long addr, void *dst, unsigned long count) { | |
453 | - while (count) { | |
454 | - count -= 4; | |
455 | - /* | |
456 | - * XXX I am sure we are in for an unaligned trap here. | |
457 | - */ | |
458 | - *(unsigned long *)dst = readl(addr); | |
459 | - dst += 4; | |
460 | - addr += 4; | |
461 | - } | |
462 | -} |