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