File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / smartmontools / os_solaris_ata.s
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Jul 22 01:17:35 2013 UTC (10 years, 10 months ago) by misho
Branches: smartmontools, elwix, MAIN
CVS tags: v6_2, v6_1p0, v6_1, HEAD
6.1

    1: ! 
    2: !   os_solaris_ata.s
    3: ! 
    4: !   Home page of code is: http://smartmontools.sourceforge.net
    5: ! 
    6: !   Copyright (C) 2003-8 SAWADA Keiji <smartmontools-support@lists.sourceforge.net>
    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 Foundation,
   20: !   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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:
  100: 	.asciz	"$Id: os_solaris_ata.s,v 1.1.1.2 2013/07/22 01:17:35 misho Exp $"
  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"

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>