pci_sun4v_asm.S 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* pci_sun4v_asm: Hypervisor calls for PCI support.
  2. *
  3. * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
  4. */
  5. #include <asm/hypervisor.h>
  6. /* %o0: devhandle
  7. * %o1: tsbid
  8. * %o2: num ttes
  9. * %o3: io_attributes
  10. * %o4: io_page_list phys address
  11. *
  12. * returns %o0: -status if status was non-zero, else
  13. * %o0: num pages mapped
  14. */
  15. .globl pci_sun4v_iommu_map
  16. pci_sun4v_iommu_map:
  17. mov %o5, %g1
  18. mov HV_FAST_PCI_IOMMU_MAP, %o5
  19. ta HV_FAST_TRAP
  20. brnz,pn %o0, 1f
  21. sub %g0, %o0, %o0
  22. mov %o1, %o0
  23. 1: retl
  24. nop
  25. /* %o0: devhandle
  26. * %o1: tsbid
  27. * %o2: num ttes
  28. *
  29. * returns %o0: num ttes demapped
  30. */
  31. .globl pci_sun4v_iommu_demap
  32. pci_sun4v_iommu_demap:
  33. mov HV_FAST_PCI_IOMMU_DEMAP, %o5
  34. ta HV_FAST_TRAP
  35. retl
  36. mov %o1, %o0
  37. /* %o0: devhandle
  38. * %o1: tsbid
  39. * %o2: &io_attributes
  40. * %o3: &real_address
  41. *
  42. * returns %o0: status
  43. */
  44. .globl pci_sun4v_iommu_getmap
  45. pci_sun4v_iommu_getmap:
  46. mov %o2, %o4
  47. mov HV_FAST_PCI_IOMMU_GETMAP, %o5
  48. ta HV_FAST_TRAP
  49. stx %o1, [%o4]
  50. stx %o2, [%o3]
  51. retl
  52. mov %o0, %o0
  53. /* %o0: devhandle
  54. * %o1: pci_device
  55. * %o2: pci_config_offset
  56. * %o3: size
  57. *
  58. * returns %o0: data
  59. *
  60. * If there is an error, the data will be returned
  61. * as all 1's.
  62. */
  63. .globl pci_sun4v_config_get
  64. pci_sun4v_config_get:
  65. mov HV_FAST_PCI_CONFIG_GET, %o5
  66. ta HV_FAST_TRAP
  67. brnz,a,pn %o1, 1f
  68. mov -1, %o2
  69. 1: retl
  70. mov %o2, %o0
  71. /* %o0: devhandle
  72. * %o1: pci_device
  73. * %o2: pci_config_offset
  74. * %o3: size
  75. * %o4: data
  76. *
  77. * returns %o0: status
  78. *
  79. * status will be zero if the operation completed
  80. * successfully, else -1 if not
  81. */
  82. .globl pci_sun4v_config_put
  83. pci_sun4v_config_put:
  84. mov HV_FAST_PCI_CONFIG_PUT, %o5
  85. ta HV_FAST_TRAP
  86. brnz,a,pn %o1, 1f
  87. mov -1, %o1
  88. 1: retl
  89. mov %o1, %o0