~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sparc/kernel/pci_sun4v_asm.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /* pci_sun4v_asm: Hypervisor calls for PCI support.
  3  *
  4  * Copyright (C) 2006, 2008 David S. Miller <davem@davemloft.net>
  5  */
  6 
  7 #include <linux/linkage.h>
  8 #include <asm/hypervisor.h>
  9 
 10         /* %o0: devhandle
 11          * %o1: tsbid
 12          * %o2: num ttes
 13          * %o3: io_attributes
 14          * %o4: io_page_list phys address
 15          *
 16          * returns %o0: -status if status was non-zero, else
 17          *         %o0: num pages mapped
 18          */
 19 ENTRY(pci_sun4v_iommu_map)
 20         mov     %o5, %g1
 21         mov     HV_FAST_PCI_IOMMU_MAP, %o5
 22         ta      HV_FAST_TRAP
 23         brnz,pn %o0, 1f
 24          sub    %g0, %o0, %o0
 25         mov     %o1, %o0
 26 1:      retl
 27          nop
 28 ENDPROC(pci_sun4v_iommu_map)
 29 
 30         /* %o0: devhandle
 31          * %o1: tsbid
 32          * %o2: num ttes
 33          *
 34          * returns %o0: num ttes demapped
 35          */
 36 ENTRY(pci_sun4v_iommu_demap)
 37         mov     HV_FAST_PCI_IOMMU_DEMAP, %o5
 38         ta      HV_FAST_TRAP
 39         retl
 40          mov    %o1, %o0
 41 ENDPROC(pci_sun4v_iommu_demap)
 42 
 43         /* %o0: devhandle
 44          * %o1: tsbid
 45          * %o2: &io_attributes
 46          * %o3: &real_address
 47          *
 48          * returns %o0: status
 49          */
 50 ENTRY(pci_sun4v_iommu_getmap)
 51         mov     %o2, %o4
 52         mov     HV_FAST_PCI_IOMMU_GETMAP, %o5
 53         ta      HV_FAST_TRAP
 54         stx     %o1, [%o4]
 55         stx     %o2, [%o3]
 56         retl
 57          mov    %o0, %o0
 58 ENDPROC(pci_sun4v_iommu_getmap)
 59 
 60         /* %o0: devhandle
 61          * %o1: pci_device
 62          * %o2: pci_config_offset
 63          * %o3: size
 64          *
 65          * returns %o0: data
 66          *
 67          * If there is an error, the data will be returned
 68          * as all 1's.
 69          */
 70 ENTRY(pci_sun4v_config_get)
 71         mov     HV_FAST_PCI_CONFIG_GET, %o5
 72         ta      HV_FAST_TRAP
 73         brnz,a,pn %o1, 1f
 74          mov    -1, %o2
 75 1:      retl
 76          mov    %o2, %o0
 77 ENDPROC(pci_sun4v_config_get)
 78 
 79         /* %o0: devhandle
 80          * %o1: pci_device
 81          * %o2: pci_config_offset
 82          * %o3: size
 83          * %o4: data
 84          *
 85          * returns %o0: status
 86          *
 87          * status will be zero if the operation completed
 88          * successfully, else -1 if not
 89          */
 90 ENTRY(pci_sun4v_config_put)
 91         mov     HV_FAST_PCI_CONFIG_PUT, %o5
 92         ta      HV_FAST_TRAP
 93         brnz,a,pn %o1, 1f
 94          mov    -1, %o1
 95 1:      retl
 96          mov    %o1, %o0
 97 ENDPROC(pci_sun4v_config_put)
 98 
 99         /* %o0: devhandle
100          * %o1: msiqid
101          * %o2: msiq phys address
102          * %o3: num entries
103          *
104          * returns %o0: status
105          *
106          * status will be zero if the operation completed
107          * successfully, else -1 if not
108          */
109 ENTRY(pci_sun4v_msiq_conf)
110         mov     HV_FAST_PCI_MSIQ_CONF, %o5
111         ta      HV_FAST_TRAP
112         retl
113          mov    %o0, %o0
114 ENDPROC(pci_sun4v_msiq_conf)
115 
116         /* %o0: devhandle
117          * %o1: msiqid
118          * %o2: &msiq_phys_addr
119          * %o3: &msiq_num_entries
120          *
121          * returns %o0: status
122          */
123 ENTRY(pci_sun4v_msiq_info)
124         mov     %o2, %o4
125         mov     HV_FAST_PCI_MSIQ_INFO, %o5
126         ta      HV_FAST_TRAP
127         stx     %o1, [%o4]
128         stx     %o2, [%o3]
129         retl
130          mov    %o0, %o0
131 ENDPROC(pci_sun4v_msiq_info)
132 
133         /* %o0: devhandle
134          * %o1: msiqid
135          * %o2: &valid
136          *
137          * returns %o0: status
138          */
139 ENTRY(pci_sun4v_msiq_getvalid)
140         mov     HV_FAST_PCI_MSIQ_GETVALID, %o5
141         ta      HV_FAST_TRAP
142         stx     %o1, [%o2]
143         retl
144          mov    %o0, %o0
145 ENDPROC(pci_sun4v_msiq_getvalid)
146 
147         /* %o0: devhandle
148          * %o1: msiqid
149          * %o2: valid
150          *
151          * returns %o0: status
152          */
153 ENTRY(pci_sun4v_msiq_setvalid)
154         mov     HV_FAST_PCI_MSIQ_SETVALID, %o5
155         ta      HV_FAST_TRAP
156         retl
157          mov    %o0, %o0
158 ENDPROC(pci_sun4v_msiq_setvalid)
159 
160         /* %o0: devhandle
161          * %o1: msiqid
162          * %o2: &state
163          *
164          * returns %o0: status
165          */
166 ENTRY(pci_sun4v_msiq_getstate)
167         mov     HV_FAST_PCI_MSIQ_GETSTATE, %o5
168         ta      HV_FAST_TRAP
169         stx     %o1, [%o2]
170         retl
171          mov    %o0, %o0
172 ENDPROC(pci_sun4v_msiq_getstate)
173 
174         /* %o0: devhandle
175          * %o1: msiqid
176          * %o2: state
177          *
178          * returns %o0: status
179          */
180 ENTRY(pci_sun4v_msiq_setstate)
181         mov     HV_FAST_PCI_MSIQ_SETSTATE, %o5
182         ta      HV_FAST_TRAP
183         retl
184          mov    %o0, %o0
185 ENDPROC(pci_sun4v_msiq_setstate)
186 
187         /* %o0: devhandle
188          * %o1: msiqid
189          * %o2: &head
190          *
191          * returns %o0: status
192          */
193 ENTRY(pci_sun4v_msiq_gethead)
194         mov     HV_FAST_PCI_MSIQ_GETHEAD, %o5
195         ta      HV_FAST_TRAP
196         stx     %o1, [%o2]
197         retl
198          mov    %o0, %o0
199 ENDPROC(pci_sun4v_msiq_gethead)
200 
201         /* %o0: devhandle
202          * %o1: msiqid
203          * %o2: head
204          *
205          * returns %o0: status
206          */
207 ENTRY(pci_sun4v_msiq_sethead)
208         mov     HV_FAST_PCI_MSIQ_SETHEAD, %o5
209         ta      HV_FAST_TRAP
210         retl
211          mov    %o0, %o0
212 ENDPROC(pci_sun4v_msiq_sethead)
213 
214         /* %o0: devhandle
215          * %o1: msiqid
216          * %o2: &tail
217          *
218          * returns %o0: status
219          */
220 ENTRY(pci_sun4v_msiq_gettail)
221         mov     HV_FAST_PCI_MSIQ_GETTAIL, %o5
222         ta      HV_FAST_TRAP
223         stx     %o1, [%o2]
224         retl
225          mov    %o0, %o0
226 ENDPROC(pci_sun4v_msiq_gettail)
227 
228         /* %o0: devhandle
229          * %o1: msinum
230          * %o2: &valid
231          *
232          * returns %o0: status
233          */
234 ENTRY(pci_sun4v_msi_getvalid)
235         mov     HV_FAST_PCI_MSI_GETVALID, %o5
236         ta      HV_FAST_TRAP
237         stx     %o1, [%o2]
238         retl
239          mov    %o0, %o0
240 ENDPROC(pci_sun4v_msi_getvalid)
241 
242         /* %o0: devhandle
243          * %o1: msinum
244          * %o2: valid
245          *
246          * returns %o0: status
247          */
248 ENTRY(pci_sun4v_msi_setvalid)
249         mov     HV_FAST_PCI_MSI_SETVALID, %o5
250         ta      HV_FAST_TRAP
251         retl
252          mov    %o0, %o0
253 ENDPROC(pci_sun4v_msi_setvalid)
254 
255         /* %o0: devhandle
256          * %o1: msinum
257          * %o2: &msiq
258          *
259          * returns %o0: status
260          */
261 ENTRY(pci_sun4v_msi_getmsiq)
262         mov     HV_FAST_PCI_MSI_GETMSIQ, %o5
263         ta      HV_FAST_TRAP
264         stx     %o1, [%o2]
265         retl
266          mov    %o0, %o0
267 ENDPROC(pci_sun4v_msi_getmsiq)
268 
269         /* %o0: devhandle
270          * %o1: msinum
271          * %o2: msitype
272          * %o3: msiq
273          *
274          * returns %o0: status
275          */
276 ENTRY(pci_sun4v_msi_setmsiq)
277         mov     HV_FAST_PCI_MSI_SETMSIQ, %o5
278         ta      HV_FAST_TRAP
279         retl
280          mov    %o0, %o0
281 ENDPROC(pci_sun4v_msi_setmsiq)
282 
283         /* %o0: devhandle
284          * %o1: msinum
285          * %o2: &state
286          *
287          * returns %o0: status
288          */
289 ENTRY(pci_sun4v_msi_getstate)
290         mov     HV_FAST_PCI_MSI_GETSTATE, %o5
291         ta      HV_FAST_TRAP
292         stx     %o1, [%o2]
293         retl
294          mov    %o0, %o0
295 ENDPROC(pci_sun4v_msi_getstate)
296 
297         /* %o0: devhandle
298          * %o1: msinum
299          * %o2: state
300          *
301          * returns %o0: status
302          */
303 ENTRY(pci_sun4v_msi_setstate)
304         mov     HV_FAST_PCI_MSI_SETSTATE, %o5
305         ta      HV_FAST_TRAP
306         retl
307          mov    %o0, %o0
308 ENDPROC(pci_sun4v_msi_setstate)
309 
310         /* %o0: devhandle
311          * %o1: msinum
312          * %o2: &msiq
313          *
314          * returns %o0: status
315          */
316 ENTRY(pci_sun4v_msg_getmsiq)
317         mov     HV_FAST_PCI_MSG_GETMSIQ, %o5
318         ta      HV_FAST_TRAP
319         stx     %o1, [%o2]
320         retl
321          mov    %o0, %o0
322 ENDPROC(pci_sun4v_msg_getmsiq)
323 
324         /* %o0: devhandle
325          * %o1: msinum
326          * %o2: msiq
327          *
328          * returns %o0: status
329          */
330 ENTRY(pci_sun4v_msg_setmsiq)
331         mov     HV_FAST_PCI_MSG_SETMSIQ, %o5
332         ta      HV_FAST_TRAP
333         retl
334          mov    %o0, %o0
335 ENDPROC(pci_sun4v_msg_setmsiq)
336 
337         /* %o0: devhandle
338          * %o1: msinum
339          * %o2: &valid
340          *
341          * returns %o0: status
342          */
343 ENTRY(pci_sun4v_msg_getvalid)
344         mov     HV_FAST_PCI_MSG_GETVALID, %o5
345         ta      HV_FAST_TRAP
346         stx     %o1, [%o2]
347         retl
348          mov    %o0, %o0
349 ENDPROC(pci_sun4v_msg_getvalid)
350 
351         /* %o0: devhandle
352          * %o1: msinum
353          * %o2: valid
354          *
355          * returns %o0: status
356          */
357 ENTRY(pci_sun4v_msg_setvalid)
358         mov     HV_FAST_PCI_MSG_SETVALID, %o5
359         ta      HV_FAST_TRAP
360         retl
361          mov    %o0, %o0
362 ENDPROC(pci_sun4v_msg_setvalid)
363 
364         /*
365          * %o0: devhandle
366          * %o1: r_addr
367          * %o2: size
368          * %o3: pagesize
369          * %o4: virt
370          * %o5: &iotsb_num/&iotsb_handle
371          *
372          * returns %o0: status
373          *         %o1: iotsb_num/iotsb_handle
374          */
375 ENTRY(pci_sun4v_iotsb_conf)
376         mov     %o5, %g1
377         mov     HV_FAST_PCI_IOTSB_CONF, %o5
378         ta      HV_FAST_TRAP
379         retl
380          stx    %o1, [%g1]
381 ENDPROC(pci_sun4v_iotsb_conf)
382 
383         /*
384          * %o0: devhandle
385          * %o1: iotsb_num/iotsb_handle
386          * %o2: pci_device
387          *
388          * returns %o0: status
389          */
390 ENTRY(pci_sun4v_iotsb_bind)
391         mov     HV_FAST_PCI_IOTSB_BIND, %o5
392         ta      HV_FAST_TRAP
393         retl
394          nop
395 ENDPROC(pci_sun4v_iotsb_bind)
396 
397         /*
398          * %o0: devhandle
399          * %o1: iotsb_num/iotsb_handle
400          * %o2: index_count
401          * %o3: iotte_attributes
402          * %o4: io_page_list_p
403          * %o5: &mapped
404          *
405          * returns %o0: status
406          *         %o1: #mapped
407          */
408 ENTRY(pci_sun4v_iotsb_map)
409         mov     %o5, %g1
410         mov     HV_FAST_PCI_IOTSB_MAP, %o5
411         ta      HV_FAST_TRAP
412         retl
413          stx    %o1, [%g1]
414 ENDPROC(pci_sun4v_iotsb_map)
415 
416         /*
417          * %o0: devhandle
418          * %o1: iotsb_num/iotsb_handle
419          * %o2: iotsb_index
420          * %o3: #iottes
421          * %o4: &demapped
422          *
423          * returns %o0: status
424          *         %o1: #demapped
425          */
426 ENTRY(pci_sun4v_iotsb_demap)
427         mov     HV_FAST_PCI_IOTSB_DEMAP, %o5
428         ta      HV_FAST_TRAP
429         retl
430          stx    %o1, [%o4]
431 ENDPROC(pci_sun4v_iotsb_demap)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php