]>
Commit | Line | Data |
---|---|---|
832b75ed GG |
1 | ! |
2 | ! os_solaris_ata.s | |
3 | ! | |
4 | ! Home page of code is: http://smartmontools.sourceforge.net | |
5 | ! | |
34ad0c5f | 6 | ! Copyright (C) 2003-8 SAWADA Keiji <smartmontools-support@lists.sourceforge.net> |
832b75ed GG |
7 | ! |
8 | ! This program is free software; you can redistribute it and/or modify | |
9 | ! it under the terms of the GNU General Public License as published by | |
10 | ! the Free Software Foundation; either version 2 of the License, or | |
11 | ! (at your option) any later version. | |
12 | ! | |
13 | ! This program is distributed in the hope that it will be useful, but | |
14 | ! WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 | ! General Public License for more details. | |
17 | ! | |
18 | ! You should have received a copy of the GNU General Public License | |
19 | ! along with this program; if not, write to the Free Software | |
20 | ! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
21 | ! | |
22 | ! | |
23 | ! -------------------------------------------------------- | |
24 | ! direct access routines to ATA device under Solaris/SPARC | |
25 | ! -------------------------------------------------------- | |
26 | ! | |
27 | ! Information | |
28 | ! ----------- | |
29 | ! | |
30 | ! In Solaris, programmer can pass SCSI command to target device directly | |
31 | ! by using USCSI ioctl or using "scg" generic SCSI driver. But, such | |
32 | ! method does not exist for ATA devices. | |
33 | ! | |
34 | ! However, I can access Solaris kernel source because I am subscriber of | |
35 | ! Source Foundation Program of Solaris. So, I can find method of | |
36 | ! accessing ATA device directly. The method is to pack command in | |
37 | ! undocumented structure and issue ioctl that appears only in kernel | |
38 | ! source. Yes, that is the same way in using USCSI interface. | |
39 | ! | |
40 | ! But, I met difficulty in disclosing this technique. I have signed NDA | |
41 | ! with Sun that inhibits me not to violate their intellectual property. | |
42 | ! | |
43 | ! Fortunately, Sun allows licensees to publish "Interfaces" if: | |
44 | ! | |
45 | ! (1) he/she treats Solaris code as confidential | |
46 | ! | |
47 | ! (2) and he/she doesn't incorporate Sun's code into his/her code | |
48 | ! | |
49 | ! (3) and disclose enough information to use "Interface" to everyone. | |
50 | ! | |
51 | ! So, I publish that technique in assembly code or object code because: | |
52 | ! | |
53 | ! (1) I believe Sun's intellectural property is not invaded because I | |
54 | ! didn't reveal any struct member and ioctl to non-licensee. | |
55 | ! | |
56 | ! (2) no piece of kernel source is included in this code. | |
57 | ! | |
58 | ! (3) And finally, I publish enough information below in order to use | |
59 | ! this code. | |
60 | ! | |
61 | ! For last reason, please don't remove "Calling Interface" section from | |
62 | ! distribution. | |
63 | ! | |
64 | ! | |
65 | ! Calling Interface | |
66 | ! ----------------- | |
67 | ! | |
68 | ! Name of function/macro presents corresponding S.M.A.R.T. command. | |
69 | ! | |
70 | ! Parameters are described below. | |
71 | ! | |
72 | ! int fd | |
73 | ! | |
74 | ! File descriptor of ATA device. Device would be | |
75 | ! /dev/rdsk/cXtXdXsX. | |
76 | ! | |
77 | ! Device should be raw device serviced by "dada" driver. ATAPI | |
78 | ! CD-ROM/R/RW, DVD-ROM, and so on are not allowed because they are | |
79 | ! serviced by "sd" driver. On x86 Solaris, "cmdk" driver services | |
80 | ! them, this routines doesn't work. | |
81 | ! | |
82 | ! int s | |
83 | ! Select sector for service. For example, this indicates log sector | |
84 | ! number for smart_read_log() function. Probably you need to read | |
85 | ! ATA specification for this parameter. | |
86 | ! | |
87 | ! void *data | |
88 | ! Data going to be read/written. It don't have to be word aligned, | |
89 | ! But data shall points valid user memory space. | |
90 | ! | |
91 | ! This is very tiny routines, but if you feel this insufficient, please | |
92 | ! let me know. | |
93 | ! | |
94 | ! ksw / SAWADA Keiji | |
95 | ! <card_captor@users.sourceforge.net> | |
96 | .file "solaris-ata-in.c" | |
97 | .section ".rodata" | |
98 | .align 8 | |
99 | .LLC0: | |
34ad0c5f | 100 | .asciz "$Id: os_solaris_ata.s,v 1.6 2008/03/04 22:09:47 ballen4705 Exp $" |
832b75ed GG |
101 | .global os_solaris_ata_s_cvsid |
102 | .section ".data" | |
103 | .align 4 | |
104 | .type os_solaris_ata_s_cvsid, #object | |
105 | .size os_solaris_ata_s_cvsid, 4 | |
106 | os_solaris_ata_s_cvsid: | |
107 | .long .LLC0 | |
108 | .section ".text" | |
109 | .align 4 | |
110 | .type ata_cmd, #function | |
111 | .proc 04 | |
112 | ata_cmd: | |
113 | !#PROLOGUE# 0 | |
114 | save %sp, -184, %sp | |
115 | !#PROLOGUE# 1 | |
116 | st %i0, [%fp+68] | |
117 | st %i1, [%fp+72] | |
118 | st %i2, [%fp+76] | |
119 | st %i3, [%fp+80] | |
120 | st %i4, [%fp+84] | |
121 | st %i5, [%fp+88] | |
122 | ld [%fp+92], %g1 | |
123 | st %g1, [%fp-76] | |
124 | ld [%fp-76], %g1 | |
125 | and %g1, 3, %g1 | |
126 | cmp %g1, 0 | |
127 | be .LL2 | |
128 | nop | |
129 | mov -2, %g1 | |
130 | st %g1, [%fp-80] | |
131 | b .LL1 | |
132 | nop | |
133 | .LL2: | |
134 | add %fp, -56, %g1 | |
135 | mov %g1, %o0 | |
136 | mov 0, %o1 | |
137 | mov 36, %o2 | |
138 | call memset, 0 | |
139 | nop | |
140 | add %fp, -72, %g1 | |
141 | mov %g1, %o0 | |
142 | mov 0, %o1 | |
143 | mov 16, %o2 | |
144 | call memset, 0 | |
145 | nop | |
146 | ld [%fp+72], %g1 | |
147 | stb %g1, [%fp-72] | |
148 | mov 1, %g1 | |
149 | stb %g1, [%fp-71] | |
150 | mov 1, %g1 | |
151 | stb %g1, [%fp-70] | |
152 | ld [%fp+76], %g1 | |
153 | stb %g1, [%fp-69] | |
154 | ld [%fp+84], %g1 | |
155 | sll %g1, 9, %g1 | |
156 | st %g1, [%fp-68] | |
157 | ld [%fp+80], %g1 | |
158 | st %g1, [%fp-60] | |
159 | mov 10, %g1 | |
160 | sth %g1, [%fp-52] | |
161 | ld [%fp+88], %g1 | |
162 | cmp %g1, 0 | |
163 | be .LL3 | |
164 | nop | |
165 | mov 14, %g1 | |
166 | st %g1, [%fp-84] | |
167 | b .LL4 | |
168 | nop | |
169 | .LL3: | |
170 | mov 6, %g1 | |
171 | st %g1, [%fp-84] | |
172 | .LL4: | |
173 | ld [%fp-84], %g1 | |
174 | st %g1, [%fp-48] | |
175 | ld [%fp+88], %g1 | |
176 | sll %g1, 9, %g1 | |
177 | st %g1, [%fp-44] | |
178 | ld [%fp+88], %g1 | |
179 | sll %g1, 9, %g1 | |
180 | st %g1, [%fp-40] | |
181 | ld [%fp+88], %g1 | |
182 | cmp %g1, 0 | |
183 | be .LL5 | |
184 | nop | |
185 | ld [%fp+92], %g1 | |
186 | st %g1, [%fp-88] | |
187 | b .LL6 | |
188 | nop | |
189 | .LL5: | |
190 | st %g0, [%fp-88] | |
191 | .LL6: | |
192 | ld [%fp-88], %g1 | |
193 | st %g1, [%fp-36] | |
194 | add %fp, -72, %g1 | |
195 | st %g1, [%fp-32] | |
196 | add %fp, -56, %g1 | |
197 | ld [%fp+68], %o0 | |
198 | mov 1481, %o1 | |
199 | mov %g1, %o2 | |
200 | call ioctl, 0 | |
201 | nop | |
202 | mov %o0, %g1 | |
203 | st %g1, [%fp-80] | |
204 | .LL1: | |
205 | ld [%fp-80], %i0 | |
206 | ret | |
207 | restore | |
208 | .size ata_cmd, .-ata_cmd | |
209 | .align 4 | |
210 | .global ata_identify | |
211 | .type ata_identify, #function | |
212 | .proc 04 | |
213 | ata_identify: | |
214 | !#PROLOGUE# 0 | |
215 | save %sp, -648, %sp | |
216 | !#PROLOGUE# 1 | |
217 | st %i0, [%fp+68] | |
218 | st %i1, [%fp+72] | |
219 | add %fp, -536, %g1 | |
220 | st %g1, [%sp+92] | |
221 | ld [%fp+68], %o0 | |
222 | mov 236, %o1 | |
223 | mov 0, %o2 | |
224 | mov 0, %o3 | |
225 | mov 1, %o4 | |
226 | mov 1, %o5 | |
227 | call ata_cmd, 0 | |
228 | nop | |
229 | mov %o0, %g1 | |
230 | st %g1, [%fp-20] | |
231 | add %fp, -536, %g1 | |
232 | ld [%fp+72], %o0 | |
233 | mov %g1, %o1 | |
234 | mov 512, %o2 | |
235 | call memcpy, 0 | |
236 | nop | |
237 | ld [%fp-20], %g1 | |
238 | cmp %g1, 0 | |
239 | be .LL8 | |
240 | nop | |
241 | mov -1, %g1 | |
242 | st %g1, [%fp-540] | |
243 | b .LL9 | |
244 | nop | |
245 | .LL8: | |
246 | st %g0, [%fp-540] | |
247 | .LL9: | |
248 | ld [%fp-540], %g1 | |
249 | mov %g1, %i0 | |
250 | ret | |
251 | restore | |
252 | .size ata_identify, .-ata_identify | |
253 | .align 4 | |
254 | .global ata_pidentify | |
255 | .type ata_pidentify, #function | |
256 | .proc 04 | |
257 | ata_pidentify: | |
258 | !#PROLOGUE# 0 | |
259 | save %sp, -648, %sp | |
260 | !#PROLOGUE# 1 | |
261 | st %i0, [%fp+68] | |
262 | st %i1, [%fp+72] | |
263 | add %fp, -536, %g1 | |
264 | st %g1, [%sp+92] | |
265 | ld [%fp+68], %o0 | |
266 | mov 161, %o1 | |
267 | mov 0, %o2 | |
268 | mov 0, %o3 | |
269 | mov 1, %o4 | |
270 | mov 1, %o5 | |
271 | call ata_cmd, 0 | |
272 | nop | |
273 | mov %o0, %g1 | |
274 | st %g1, [%fp-20] | |
275 | add %fp, -536, %g1 | |
276 | ld [%fp+72], %o0 | |
277 | mov %g1, %o1 | |
278 | mov 512, %o2 | |
279 | call memcpy, 0 | |
280 | nop | |
281 | ld [%fp-20], %g1 | |
282 | cmp %g1, 0 | |
283 | be .LL11 | |
284 | nop | |
285 | mov -1, %g1 | |
286 | st %g1, [%fp-540] | |
287 | b .LL12 | |
288 | nop | |
289 | .LL11: | |
290 | st %g0, [%fp-540] | |
291 | .LL12: | |
292 | ld [%fp-540], %g1 | |
293 | mov %g1, %i0 | |
294 | ret | |
295 | restore | |
296 | .size ata_pidentify, .-ata_pidentify | |
297 | .align 4 | |
298 | .global smart_read_data | |
299 | .type smart_read_data, #function | |
300 | .proc 04 | |
301 | smart_read_data: | |
302 | !#PROLOGUE# 0 | |
303 | save %sp, -648, %sp | |
304 | !#PROLOGUE# 1 | |
305 | st %i0, [%fp+68] | |
306 | st %i1, [%fp+72] | |
307 | add %fp, -536, %g1 | |
308 | st %g1, [%sp+92] | |
309 | ld [%fp+68], %o0 | |
310 | mov 176, %o1 | |
311 | mov 208, %o2 | |
312 | sethi %hi(12733440), %g1 | |
313 | or %g1, 768, %o3 | |
314 | mov 0, %o4 | |
315 | mov 1, %o5 | |
316 | call ata_cmd, 0 | |
317 | nop | |
318 | mov %o0, %g1 | |
319 | st %g1, [%fp-20] | |
320 | add %fp, -536, %g1 | |
321 | ld [%fp+72], %o0 | |
322 | mov %g1, %o1 | |
323 | mov 512, %o2 | |
324 | call memcpy, 0 | |
325 | nop | |
326 | ld [%fp-20], %g1 | |
327 | cmp %g1, 0 | |
328 | be .LL14 | |
329 | nop | |
330 | mov -1, %g1 | |
331 | st %g1, [%fp-540] | |
332 | b .LL15 | |
333 | nop | |
334 | .LL14: | |
335 | st %g0, [%fp-540] | |
336 | .LL15: | |
337 | ld [%fp-540], %g1 | |
338 | mov %g1, %i0 | |
339 | ret | |
340 | restore | |
341 | .size smart_read_data, .-smart_read_data | |
342 | .align 4 | |
343 | .global smart_read_thresholds | |
344 | .type smart_read_thresholds, #function | |
345 | .proc 04 | |
346 | smart_read_thresholds: | |
347 | !#PROLOGUE# 0 | |
348 | save %sp, -648, %sp | |
349 | !#PROLOGUE# 1 | |
350 | st %i0, [%fp+68] | |
351 | st %i1, [%fp+72] | |
352 | add %fp, -536, %g1 | |
353 | st %g1, [%sp+92] | |
354 | ld [%fp+68], %o0 | |
355 | mov 176, %o1 | |
356 | mov 209, %o2 | |
357 | sethi %hi(12733440), %g1 | |
358 | or %g1, 769, %o3 | |
359 | mov 1, %o4 | |
360 | mov 1, %o5 | |
361 | call ata_cmd, 0 | |
362 | nop | |
363 | mov %o0, %g1 | |
364 | st %g1, [%fp-20] | |
365 | add %fp, -536, %g1 | |
366 | ld [%fp+72], %o0 | |
367 | mov %g1, %o1 | |
368 | mov 512, %o2 | |
369 | call memcpy, 0 | |
370 | nop | |
371 | ld [%fp-20], %g1 | |
372 | cmp %g1, 0 | |
373 | be .LL17 | |
374 | nop | |
375 | mov -1, %g1 | |
376 | st %g1, [%fp-540] | |
377 | b .LL18 | |
378 | nop | |
379 | .LL17: | |
380 | st %g0, [%fp-540] | |
381 | .LL18: | |
382 | ld [%fp-540], %g1 | |
383 | mov %g1, %i0 | |
384 | ret | |
385 | restore | |
386 | .size smart_read_thresholds, .-smart_read_thresholds | |
387 | .align 4 | |
388 | .global smart_auto_save | |
389 | .type smart_auto_save, #function | |
390 | .proc 04 | |
391 | smart_auto_save: | |
392 | !#PROLOGUE# 0 | |
393 | save %sp, -128, %sp | |
394 | !#PROLOGUE# 1 | |
395 | st %i0, [%fp+68] | |
396 | st %i1, [%fp+72] | |
397 | st %g0, [%sp+92] | |
398 | ld [%fp+68], %o0 | |
399 | mov 176, %o1 | |
400 | mov 210, %o2 | |
401 | sethi %hi(12733440), %g1 | |
402 | or %g1, 768, %o3 | |
403 | ld [%fp+72], %o4 | |
404 | mov 0, %o5 | |
405 | call ata_cmd, 0 | |
406 | nop | |
407 | mov %o0, %g1 | |
408 | st %g1, [%fp-20] | |
409 | ld [%fp-20], %g1 | |
410 | cmp %g1, 0 | |
411 | be .LL20 | |
412 | nop | |
413 | mov -1, %g1 | |
414 | st %g1, [%fp-24] | |
415 | b .LL21 | |
416 | nop | |
417 | .LL20: | |
418 | st %g0, [%fp-24] | |
419 | .LL21: | |
420 | ld [%fp-24], %g1 | |
421 | mov %g1, %i0 | |
422 | ret | |
423 | restore | |
424 | .size smart_auto_save, .-smart_auto_save | |
425 | .align 4 | |
426 | .global smart_immediate_offline | |
427 | .type smart_immediate_offline, #function | |
428 | .proc 04 | |
429 | smart_immediate_offline: | |
430 | !#PROLOGUE# 0 | |
431 | save %sp, -128, %sp | |
432 | !#PROLOGUE# 1 | |
433 | st %i0, [%fp+68] | |
434 | st %i1, [%fp+72] | |
435 | ld [%fp+72], %g1 | |
436 | and %g1, 255, %o5 | |
437 | sethi %hi(12733440), %g1 | |
438 | or %g1, 768, %g1 | |
439 | or %o5, %g1, %g1 | |
440 | st %g0, [%sp+92] | |
441 | ld [%fp+68], %o0 | |
442 | mov 176, %o1 | |
443 | mov 212, %o2 | |
444 | mov %g1, %o3 | |
445 | mov 0, %o4 | |
446 | mov 0, %o5 | |
447 | call ata_cmd, 0 | |
448 | nop | |
449 | mov %o0, %g1 | |
450 | st %g1, [%fp-20] | |
451 | ld [%fp-20], %g1 | |
452 | cmp %g1, 0 | |
453 | be .LL23 | |
454 | nop | |
455 | mov -1, %g1 | |
456 | st %g1, [%fp-24] | |
457 | b .LL24 | |
458 | nop | |
459 | .LL23: | |
460 | st %g0, [%fp-24] | |
461 | .LL24: | |
462 | ld [%fp-24], %g1 | |
463 | mov %g1, %i0 | |
464 | ret | |
465 | restore | |
466 | .size smart_immediate_offline, .-smart_immediate_offline | |
467 | .align 4 | |
468 | .global smart_read_log | |
469 | .type smart_read_log, #function | |
470 | .proc 04 | |
471 | smart_read_log: | |
472 | !#PROLOGUE# 0 | |
473 | save %sp, -128, %sp | |
474 | !#PROLOGUE# 1 | |
475 | st %i0, [%fp+68] | |
476 | st %i1, [%fp+72] | |
477 | st %i2, [%fp+76] | |
478 | st %i3, [%fp+80] | |
479 | ld [%fp+72], %g1 | |
480 | and %g1, 255, %o5 | |
481 | sethi %hi(12733440), %g1 | |
482 | or %g1, 768, %g1 | |
483 | or %o5, %g1, %o5 | |
484 | ld [%fp+80], %g1 | |
485 | st %g1, [%sp+92] | |
486 | ld [%fp+68], %o0 | |
487 | mov 176, %o1 | |
488 | mov 213, %o2 | |
489 | mov %o5, %o3 | |
490 | ld [%fp+76], %o4 | |
491 | ld [%fp+76], %o5 | |
492 | call ata_cmd, 0 | |
493 | nop | |
494 | mov %o0, %g1 | |
495 | st %g1, [%fp-20] | |
496 | ld [%fp-20], %g1 | |
497 | cmp %g1, 0 | |
498 | be .LL26 | |
499 | nop | |
500 | mov -1, %g1 | |
501 | st %g1, [%fp-24] | |
502 | b .LL27 | |
503 | nop | |
504 | .LL26: | |
505 | st %g0, [%fp-24] | |
506 | .LL27: | |
507 | ld [%fp-24], %g1 | |
508 | mov %g1, %i0 | |
509 | ret | |
510 | restore | |
511 | .size smart_read_log, .-smart_read_log | |
512 | .align 4 | |
513 | .global smart_enable | |
514 | .type smart_enable, #function | |
515 | .proc 04 | |
516 | smart_enable: | |
517 | !#PROLOGUE# 0 | |
518 | save %sp, -128, %sp | |
519 | !#PROLOGUE# 1 | |
520 | st %i0, [%fp+68] | |
521 | st %g0, [%sp+92] | |
522 | ld [%fp+68], %o0 | |
523 | mov 176, %o1 | |
524 | mov 216, %o2 | |
525 | sethi %hi(12733440), %g1 | |
526 | or %g1, 768, %o3 | |
527 | mov 0, %o4 | |
528 | mov 0, %o5 | |
529 | call ata_cmd, 0 | |
530 | nop | |
531 | mov %o0, %g1 | |
532 | st %g1, [%fp-20] | |
533 | ld [%fp-20], %g1 | |
534 | cmp %g1, 0 | |
535 | be .LL29 | |
536 | nop | |
537 | mov -1, %g1 | |
538 | st %g1, [%fp-24] | |
539 | b .LL30 | |
540 | nop | |
541 | .LL29: | |
542 | st %g0, [%fp-24] | |
543 | .LL30: | |
544 | ld [%fp-24], %g1 | |
545 | mov %g1, %i0 | |
546 | ret | |
547 | restore | |
548 | .size smart_enable, .-smart_enable | |
549 | .align 4 | |
550 | .global smart_disable | |
551 | .type smart_disable, #function | |
552 | .proc 04 | |
553 | smart_disable: | |
554 | !#PROLOGUE# 0 | |
555 | save %sp, -128, %sp | |
556 | !#PROLOGUE# 1 | |
557 | st %i0, [%fp+68] | |
558 | st %g0, [%sp+92] | |
559 | ld [%fp+68], %o0 | |
560 | mov 176, %o1 | |
561 | mov 217, %o2 | |
562 | sethi %hi(12733440), %g1 | |
563 | or %g1, 768, %o3 | |
564 | mov 0, %o4 | |
565 | mov 0, %o5 | |
566 | call ata_cmd, 0 | |
567 | nop | |
568 | mov %o0, %g1 | |
569 | st %g1, [%fp-20] | |
570 | ld [%fp-20], %g1 | |
571 | cmp %g1, 0 | |
572 | be .LL32 | |
573 | nop | |
574 | mov -1, %g1 | |
575 | st %g1, [%fp-24] | |
576 | b .LL33 | |
577 | nop | |
578 | .LL32: | |
579 | st %g0, [%fp-24] | |
580 | .LL33: | |
581 | ld [%fp-24], %g1 | |
582 | mov %g1, %i0 | |
583 | ret | |
584 | restore | |
585 | .size smart_disable, .-smart_disable | |
586 | .align 4 | |
587 | .global smart_status | |
588 | .type smart_status, #function | |
589 | .proc 04 | |
590 | smart_status: | |
591 | !#PROLOGUE# 0 | |
592 | save %sp, -128, %sp | |
593 | !#PROLOGUE# 1 | |
594 | st %i0, [%fp+68] | |
595 | st %g0, [%sp+92] | |
596 | ld [%fp+68], %o0 | |
597 | mov 176, %o1 | |
598 | mov 218, %o2 | |
599 | sethi %hi(12733440), %g1 | |
600 | or %g1, 768, %o3 | |
601 | mov 0, %o4 | |
602 | mov 0, %o5 | |
603 | call ata_cmd, 0 | |
604 | nop | |
605 | mov %o0, %g1 | |
606 | st %g1, [%fp-20] | |
607 | ld [%fp-20], %g1 | |
608 | cmp %g1, 0 | |
609 | be .LL35 | |
610 | nop | |
611 | mov -1, %g1 | |
612 | st %g1, [%fp-24] | |
613 | b .LL36 | |
614 | nop | |
615 | .LL35: | |
616 | st %g0, [%fp-24] | |
617 | .LL36: | |
618 | ld [%fp-24], %g1 | |
619 | mov %g1, %i0 | |
620 | ret | |
621 | restore | |
622 | .size smart_status, .-smart_status | |
623 | .align 4 | |
624 | .global smart_status_check | |
625 | .type smart_status_check, #function | |
626 | .proc 04 | |
627 | smart_status_check: | |
628 | !#PROLOGUE# 0 | |
629 | save %sp, -128, %sp | |
630 | !#PROLOGUE# 1 | |
631 | st %i0, [%fp+68] | |
632 | st %g0, [%sp+92] | |
633 | ld [%fp+68], %o0 | |
634 | mov 176, %o1 | |
635 | mov 218, %o2 | |
636 | sethi %hi(12733440), %g1 | |
637 | or %g1, 768, %o3 | |
638 | mov 0, %o4 | |
639 | mov 0, %o5 | |
640 | call ata_cmd, 0 | |
641 | nop | |
642 | mov %o0, %g1 | |
643 | st %g1, [%fp-20] | |
644 | ld [%fp-20], %g1 | |
645 | cmp %g1, 0 | |
646 | be .LL38 | |
647 | nop | |
648 | mov -1, %g1 | |
649 | st %g1, [%fp-24] | |
650 | b .LL37 | |
651 | nop | |
652 | .LL38: | |
653 | st %g0, [%fp-24] | |
654 | .LL37: | |
655 | ld [%fp-24], %i0 | |
656 | ret | |
657 | restore | |
658 | .size smart_status_check, .-smart_status_check | |
659 | .align 4 | |
660 | .global smart_auto_offline | |
661 | .type smart_auto_offline, #function | |
662 | .proc 04 | |
663 | smart_auto_offline: | |
664 | !#PROLOGUE# 0 | |
665 | save %sp, -128, %sp | |
666 | !#PROLOGUE# 1 | |
667 | st %i0, [%fp+68] | |
668 | st %i1, [%fp+72] | |
669 | st %g0, [%sp+92] | |
670 | ld [%fp+68], %o0 | |
671 | mov 176, %o1 | |
672 | mov 219, %o2 | |
673 | sethi %hi(12733440), %g1 | |
674 | or %g1, 768, %o3 | |
675 | ld [%fp+72], %o4 | |
676 | mov 0, %o5 | |
677 | call ata_cmd, 0 | |
678 | nop | |
679 | mov %o0, %g1 | |
680 | st %g1, [%fp-20] | |
681 | ld [%fp-20], %g1 | |
682 | cmp %g1, 0 | |
683 | be .LL40 | |
684 | nop | |
685 | mov -1, %g1 | |
686 | st %g1, [%fp-24] | |
687 | b .LL41 | |
688 | nop | |
689 | .LL40: | |
690 | st %g0, [%fp-24] | |
691 | .LL41: | |
692 | ld [%fp-24], %g1 | |
693 | mov %g1, %i0 | |
694 | ret | |
695 | restore | |
696 | .size smart_auto_offline, .-smart_auto_offline | |
697 | .ident "GCC: (GNU) 3.4.2" |