io-acorn.S 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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/config.h> /* for CONFIG_CPU_nn */
  11. #include <linux/linkage.h>
  12. #include <asm/assembler.h>
  13. #include <asm/hardware.h>
  14. .text
  15. .align
  16. .equ diff_pcio_base, PCIO_BASE - IO_BASE
  17. .macro outw2 rd
  18. mov r8, \rd, lsl #16
  19. orr r8, r8, r8, lsr #16
  20. str r8, [r3, r0, lsl #2]
  21. mov r8, \rd, lsr #16
  22. orr r8, r8, r8, lsl #16
  23. str r8, [r3, r0, lsl #2]
  24. .endm
  25. .macro inw2 rd, mask, temp
  26. ldr \rd, [r0]
  27. and \rd, \rd, \mask
  28. ldr \temp, [r0]
  29. orr \rd, \rd, \temp, lsl #16
  30. .endm
  31. .macro addr rd
  32. tst \rd, #0x80000000
  33. mov \rd, \rd, lsl #2
  34. add \rd, \rd, #IO_BASE
  35. addeq \rd, \rd, #diff_pcio_base
  36. .endm
  37. .iosl_warning:
  38. .ascii "<4>insl/outsl not implemented, called from %08lX\0"
  39. .align
  40. /*
  41. * These make no sense on Acorn machines.
  42. * Print a warning message.
  43. */
  44. ENTRY(insl)
  45. ENTRY(outsl)
  46. adr r0, .iosl_warning
  47. mov r1, lr
  48. b printk
  49. @ Purpose: write a memc register
  50. @ Proto : void memc_write(int register, int value);
  51. @ Returns: nothing
  52. ENTRY(memc_write)
  53. cmp r0, #7
  54. RETINSTR(movgt,pc,lr)
  55. mov r0, r0, lsl #17
  56. mov r1, r1, lsl #15
  57. mov r1, r1, lsr #17
  58. orr r0, r0, r1, lsl #2
  59. add r0, r0, #0x03600000
  60. strb r0, [r0]
  61. RETINSTR(mov,pc,lr)