Linux Audio

Check our new training course

Loading...
v6.2
  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	 */
 19ENTRY(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
 261:	retl
 27	 nop
 28ENDPROC(pci_sun4v_iommu_map)
 29
 30	/* %o0: devhandle
 31	 * %o1:	tsbid
 32	 * %o2:	num ttes
 33	 *
 34	 * returns %o0:	num ttes demapped
 35	 */
 36ENTRY(pci_sun4v_iommu_demap)
 37	mov	HV_FAST_PCI_IOMMU_DEMAP, %o5
 38	ta	HV_FAST_TRAP
 39	retl
 40	 mov	%o1, %o0
 41ENDPROC(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	 */
 50ENTRY(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
 58ENDPROC(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	 */
 70ENTRY(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
 751:	retl
 76	 mov	%o2, %o0
 77ENDPROC(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	 */
 90ENTRY(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
 951:	retl
 96	 mov	%o1, %o0
 97ENDPROC(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	 */
109ENTRY(pci_sun4v_msiq_conf)
110	mov	HV_FAST_PCI_MSIQ_CONF, %o5
111	ta	HV_FAST_TRAP
112	retl
113	 mov	%o0, %o0
114ENDPROC(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	 */
123ENTRY(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
131ENDPROC(pci_sun4v_msiq_info)
132
133	/* %o0: devhandle
134	 * %o1: msiqid
135	 * %o2:	&valid
136	 *
137	 * returns %o0: status
138	 */
139ENTRY(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
145ENDPROC(pci_sun4v_msiq_getvalid)
146
147	/* %o0: devhandle
148	 * %o1: msiqid
149	 * %o2:	valid
150	 *
151	 * returns %o0: status
152	 */
153ENTRY(pci_sun4v_msiq_setvalid)
154	mov	HV_FAST_PCI_MSIQ_SETVALID, %o5
155	ta	HV_FAST_TRAP
156	retl
157	 mov	%o0, %o0
158ENDPROC(pci_sun4v_msiq_setvalid)
159
160	/* %o0: devhandle
161	 * %o1: msiqid
162	 * %o2:	&state
163	 *
164	 * returns %o0: status
165	 */
166ENTRY(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
172ENDPROC(pci_sun4v_msiq_getstate)
173
174	/* %o0: devhandle
175	 * %o1: msiqid
176	 * %o2:	state
177	 *
178	 * returns %o0: status
179	 */
180ENTRY(pci_sun4v_msiq_setstate)
181	mov	HV_FAST_PCI_MSIQ_SETSTATE, %o5
182	ta	HV_FAST_TRAP
183	retl
184	 mov	%o0, %o0
185ENDPROC(pci_sun4v_msiq_setstate)
186
187	/* %o0: devhandle
188	 * %o1: msiqid
189	 * %o2:	&head
190	 *
191	 * returns %o0: status
192	 */
193ENTRY(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
199ENDPROC(pci_sun4v_msiq_gethead)
200
201	/* %o0: devhandle
202	 * %o1: msiqid
203	 * %o2:	head
204	 *
205	 * returns %o0: status
206	 */
207ENTRY(pci_sun4v_msiq_sethead)
208	mov	HV_FAST_PCI_MSIQ_SETHEAD, %o5
209	ta	HV_FAST_TRAP
210	retl
211	 mov	%o0, %o0
212ENDPROC(pci_sun4v_msiq_sethead)
213
214	/* %o0: devhandle
215	 * %o1: msiqid
216	 * %o2:	&tail
217	 *
218	 * returns %o0: status
219	 */
220ENTRY(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
226ENDPROC(pci_sun4v_msiq_gettail)
227
228	/* %o0: devhandle
229	 * %o1: msinum
230	 * %o2:	&valid
231	 *
232	 * returns %o0: status
233	 */
234ENTRY(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
240ENDPROC(pci_sun4v_msi_getvalid)
241
242	/* %o0: devhandle
243	 * %o1: msinum
244	 * %o2:	valid
245	 *
246	 * returns %o0: status
247	 */
248ENTRY(pci_sun4v_msi_setvalid)
249	mov	HV_FAST_PCI_MSI_SETVALID, %o5
250	ta	HV_FAST_TRAP
251	retl
252	 mov	%o0, %o0
253ENDPROC(pci_sun4v_msi_setvalid)
254
255	/* %o0: devhandle
256	 * %o1: msinum
257	 * %o2:	&msiq
258	 *
259	 * returns %o0: status
260	 */
261ENTRY(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
267ENDPROC(pci_sun4v_msi_getmsiq)
268
269	/* %o0: devhandle
270	 * %o1: msinum
271	 * %o2:	msitype
272	 * %o3:	msiq
273	 *
274	 * returns %o0: status
275	 */
276ENTRY(pci_sun4v_msi_setmsiq)
277	mov	HV_FAST_PCI_MSI_SETMSIQ, %o5
278	ta	HV_FAST_TRAP
279	retl
280	 mov	%o0, %o0
281ENDPROC(pci_sun4v_msi_setmsiq)
282
283	/* %o0: devhandle
284	 * %o1: msinum
285	 * %o2:	&state
286	 *
287	 * returns %o0: status
288	 */
289ENTRY(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
295ENDPROC(pci_sun4v_msi_getstate)
296
297	/* %o0: devhandle
298	 * %o1: msinum
299	 * %o2:	state
300	 *
301	 * returns %o0: status
302	 */
303ENTRY(pci_sun4v_msi_setstate)
304	mov	HV_FAST_PCI_MSI_SETSTATE, %o5
305	ta	HV_FAST_TRAP
306	retl
307	 mov	%o0, %o0
308ENDPROC(pci_sun4v_msi_setstate)
309
310	/* %o0: devhandle
311	 * %o1: msinum
312	 * %o2:	&msiq
313	 *
314	 * returns %o0: status
315	 */
316ENTRY(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
322ENDPROC(pci_sun4v_msg_getmsiq)
323
324	/* %o0: devhandle
325	 * %o1: msinum
326	 * %o2:	msiq
327	 *
328	 * returns %o0: status
329	 */
330ENTRY(pci_sun4v_msg_setmsiq)
331	mov	HV_FAST_PCI_MSG_SETMSIQ, %o5
332	ta	HV_FAST_TRAP
333	retl
334	 mov	%o0, %o0
335ENDPROC(pci_sun4v_msg_setmsiq)
336
337	/* %o0: devhandle
338	 * %o1: msinum
339	 * %o2:	&valid
340	 *
341	 * returns %o0: status
342	 */
343ENTRY(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
349ENDPROC(pci_sun4v_msg_getvalid)
350
351	/* %o0: devhandle
352	 * %o1: msinum
353	 * %o2:	valid
354	 *
355	 * returns %o0: status
356	 */
357ENTRY(pci_sun4v_msg_setvalid)
358	mov	HV_FAST_PCI_MSG_SETVALID, %o5
359	ta	HV_FAST_TRAP
360	retl
361	 mov	%o0, %o0
362ENDPROC(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	 */
375ENTRY(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]
381ENDPROC(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	 */
390ENTRY(pci_sun4v_iotsb_bind)
391	mov	HV_FAST_PCI_IOTSB_BIND, %o5
392	ta	HV_FAST_TRAP
393	retl
394	 nop
395ENDPROC(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	 */
408ENTRY(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]
414ENDPROC(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	 */
426ENTRY(pci_sun4v_iotsb_demap)
427	mov	HV_FAST_PCI_IOTSB_DEMAP, %o5
428	ta	HV_FAST_TRAP
429	retl
430	 stx	%o1, [%o4]
431ENDPROC(pci_sun4v_iotsb_demap)
v5.14.15
  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	 */
 19ENTRY(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
 261:	retl
 27	 nop
 28ENDPROC(pci_sun4v_iommu_map)
 29
 30	/* %o0: devhandle
 31	 * %o1:	tsbid
 32	 * %o2:	num ttes
 33	 *
 34	 * returns %o0:	num ttes demapped
 35	 */
 36ENTRY(pci_sun4v_iommu_demap)
 37	mov	HV_FAST_PCI_IOMMU_DEMAP, %o5
 38	ta	HV_FAST_TRAP
 39	retl
 40	 mov	%o1, %o0
 41ENDPROC(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	 */
 50ENTRY(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
 58ENDPROC(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	 */
 70ENTRY(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
 751:	retl
 76	 mov	%o2, %o0
 77ENDPROC(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	 */
 90ENTRY(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
 951:	retl
 96	 mov	%o1, %o0
 97ENDPROC(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	 */
109ENTRY(pci_sun4v_msiq_conf)
110	mov	HV_FAST_PCI_MSIQ_CONF, %o5
111	ta	HV_FAST_TRAP
112	retl
113	 mov	%o0, %o0
114ENDPROC(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	 */
123ENTRY(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
131ENDPROC(pci_sun4v_msiq_info)
132
133	/* %o0: devhandle
134	 * %o1: msiqid
135	 * %o2:	&valid
136	 *
137	 * returns %o0: status
138	 */
139ENTRY(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
145ENDPROC(pci_sun4v_msiq_getvalid)
146
147	/* %o0: devhandle
148	 * %o1: msiqid
149	 * %o2:	valid
150	 *
151	 * returns %o0: status
152	 */
153ENTRY(pci_sun4v_msiq_setvalid)
154	mov	HV_FAST_PCI_MSIQ_SETVALID, %o5
155	ta	HV_FAST_TRAP
156	retl
157	 mov	%o0, %o0
158ENDPROC(pci_sun4v_msiq_setvalid)
159
160	/* %o0: devhandle
161	 * %o1: msiqid
162	 * %o2:	&state
163	 *
164	 * returns %o0: status
165	 */
166ENTRY(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
172ENDPROC(pci_sun4v_msiq_getstate)
173
174	/* %o0: devhandle
175	 * %o1: msiqid
176	 * %o2:	state
177	 *
178	 * returns %o0: status
179	 */
180ENTRY(pci_sun4v_msiq_setstate)
181	mov	HV_FAST_PCI_MSIQ_SETSTATE, %o5
182	ta	HV_FAST_TRAP
183	retl
184	 mov	%o0, %o0
185ENDPROC(pci_sun4v_msiq_setstate)
186
187	/* %o0: devhandle
188	 * %o1: msiqid
189	 * %o2:	&head
190	 *
191	 * returns %o0: status
192	 */
193ENTRY(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
199ENDPROC(pci_sun4v_msiq_gethead)
200
201	/* %o0: devhandle
202	 * %o1: msiqid
203	 * %o2:	head
204	 *
205	 * returns %o0: status
206	 */
207ENTRY(pci_sun4v_msiq_sethead)
208	mov	HV_FAST_PCI_MSIQ_SETHEAD, %o5
209	ta	HV_FAST_TRAP
210	retl
211	 mov	%o0, %o0
212ENDPROC(pci_sun4v_msiq_sethead)
213
214	/* %o0: devhandle
215	 * %o1: msiqid
216	 * %o2:	&tail
217	 *
218	 * returns %o0: status
219	 */
220ENTRY(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
226ENDPROC(pci_sun4v_msiq_gettail)
227
228	/* %o0: devhandle
229	 * %o1: msinum
230	 * %o2:	&valid
231	 *
232	 * returns %o0: status
233	 */
234ENTRY(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
240ENDPROC(pci_sun4v_msi_getvalid)
241
242	/* %o0: devhandle
243	 * %o1: msinum
244	 * %o2:	valid
245	 *
246	 * returns %o0: status
247	 */
248ENTRY(pci_sun4v_msi_setvalid)
249	mov	HV_FAST_PCI_MSI_SETVALID, %o5
250	ta	HV_FAST_TRAP
251	retl
252	 mov	%o0, %o0
253ENDPROC(pci_sun4v_msi_setvalid)
254
255	/* %o0: devhandle
256	 * %o1: msinum
257	 * %o2:	&msiq
258	 *
259	 * returns %o0: status
260	 */
261ENTRY(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
267ENDPROC(pci_sun4v_msi_getmsiq)
268
269	/* %o0: devhandle
270	 * %o1: msinum
271	 * %o2:	msitype
272	 * %o3:	msiq
273	 *
274	 * returns %o0: status
275	 */
276ENTRY(pci_sun4v_msi_setmsiq)
277	mov	HV_FAST_PCI_MSI_SETMSIQ, %o5
278	ta	HV_FAST_TRAP
279	retl
280	 mov	%o0, %o0
281ENDPROC(pci_sun4v_msi_setmsiq)
282
283	/* %o0: devhandle
284	 * %o1: msinum
285	 * %o2:	&state
286	 *
287	 * returns %o0: status
288	 */
289ENTRY(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
295ENDPROC(pci_sun4v_msi_getstate)
296
297	/* %o0: devhandle
298	 * %o1: msinum
299	 * %o2:	state
300	 *
301	 * returns %o0: status
302	 */
303ENTRY(pci_sun4v_msi_setstate)
304	mov	HV_FAST_PCI_MSI_SETSTATE, %o5
305	ta	HV_FAST_TRAP
306	retl
307	 mov	%o0, %o0
308ENDPROC(pci_sun4v_msi_setstate)
309
310	/* %o0: devhandle
311	 * %o1: msinum
312	 * %o2:	&msiq
313	 *
314	 * returns %o0: status
315	 */
316ENTRY(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
322ENDPROC(pci_sun4v_msg_getmsiq)
323
324	/* %o0: devhandle
325	 * %o1: msinum
326	 * %o2:	msiq
327	 *
328	 * returns %o0: status
329	 */
330ENTRY(pci_sun4v_msg_setmsiq)
331	mov	HV_FAST_PCI_MSG_SETMSIQ, %o5
332	ta	HV_FAST_TRAP
333	retl
334	 mov	%o0, %o0
335ENDPROC(pci_sun4v_msg_setmsiq)
336
337	/* %o0: devhandle
338	 * %o1: msinum
339	 * %o2:	&valid
340	 *
341	 * returns %o0: status
342	 */
343ENTRY(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
349ENDPROC(pci_sun4v_msg_getvalid)
350
351	/* %o0: devhandle
352	 * %o1: msinum
353	 * %o2:	valid
354	 *
355	 * returns %o0: status
356	 */
357ENTRY(pci_sun4v_msg_setvalid)
358	mov	HV_FAST_PCI_MSG_SETVALID, %o5
359	ta	HV_FAST_TRAP
360	retl
361	 mov	%o0, %o0
362ENDPROC(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	 */
375ENTRY(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]
381ENDPROC(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	 */
390ENTRY(pci_sun4v_iotsb_bind)
391	mov	HV_FAST_PCI_IOTSB_BIND, %o5
392	ta	HV_FAST_TRAP
393	retl
394	 nop
395ENDPROC(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	 */
408ENTRY(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]
414ENDPROC(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	 */
426ENTRY(pci_sun4v_iotsb_demap)
427	mov	HV_FAST_PCI_IOTSB_DEMAP, %o5
428	ta	HV_FAST_TRAP
429	retl
430	 stx	%o1, [%o4]
431ENDPROC(pci_sun4v_iotsb_demap)