io-acorn.S 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * linux/arch/arm26/lib/io-acorn.S
  3. *
  4. * Copyright (C) 1995, 1996 Russell King
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #include <linux/linkage.h>
  11. #include <asm/assembler.h>
  12. #include <asm/hardware.h>
  13. .text
  14. .align
  15. .equ diff_pcio_base, PCIO_BASE - IO_BASE
  16. .macro outw2 rd
  17. mov r8, \rd, lsl #16
  18. orr r8, r8, r8, lsr #16
  19. str r8, [r3, r0, lsl #2]
  20. mov r8, \rd, lsr #16
  21. orr r8, r8, r8, lsl #16
  22. str r8, [r3, r0, lsl #2]
  23. .endm
  24. .macro inw2 rd, mask, temp
  25. ldr \rd, [r0]
  26. and \rd, \rd, \mask
  27. ldr \temp, [r0]
  28. orr \rd, \rd, \temp, lsl #16
  29. .endm
  30. .macro addr rd
  31. tst \rd, #0x80000000
  32. mov \rd, \rd, lsl #2
  33. add \rd, \rd, #IO_BASE
  34. addeq \rd, \rd, #diff_pcio_base
  35. .endm
  36. .iosl_warning:
  37. .ascii "<4>insl/outsl not implemented, called from %08lX\0"
  38. .align
  39. /*
  40. * These make no sense on Acorn machines.
  41. * Print a warning message.
  42. */
  43. ENTRY(insl)
  44. ENTRY(outsl)
  45. adr r0, .iosl_warning
  46. mov r1, lr
  47. b printk
  48. @ Purpose: write a memc register
  49. @ Proto : void memc_write(int register, int value);
  50. @ Returns: nothing
  51. ENTRY(memc_write)
  52. cmp r0, #7
  53. RETINSTR(movgt,pc,lr)
  54. mov r0, r0, lsl #17
  55. mov r1, r1, lsl #15
  56. mov r1, r1, lsr #17
  57. orr r0, r0, r1, lsl #2
  58. add r0, r0, #0x03600000
  59. strb r0, [r0]
  60. RETINSTR(mov,pc,lr)