Blame view

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