mirror of
https://github.com/ISpillMyDrink/OpenSuperClone.git
synced 2026-05-03 21:40:33 +00:00
141 lines
3.1 KiB
Plaintext
141 lines
3.1 KiB
Plaintext
|
|
|
|
#perform identify command
|
|
echo ""
|
|
echo "performing identify command"
|
|
buffersize 512
|
|
setreadpio
|
|
ata28cmd 0 0 0 0 0 0xa0 0xec
|
|
# check if command failed
|
|
seti $command_failed = 0
|
|
gosub check_command_status
|
|
if $command_failed = 1
|
|
echo "Command failed!"
|
|
endif
|
|
gosub show_sense_data
|
|
gosub show_sense_buffer
|
|
gosub show_ata_return_status
|
|
gosub show_passthrough_cmd_status
|
|
echo "refreshing status"
|
|
getstatus
|
|
gosub show_sense_data
|
|
gosub show_sense_buffer
|
|
gosub show_ata_return_status
|
|
gosub show_passthrough_cmd_status
|
|
|
|
|
|
#perform no-op command
|
|
echo ""
|
|
echo ""
|
|
echo "performing no-op command"
|
|
buffersize 512
|
|
setreadpio
|
|
ata28cmd 0 0 0 0 0 0xa0 0x0
|
|
# check if command failed
|
|
seti $command_failed = 0
|
|
gosub check_command_status
|
|
if $command_failed = 1
|
|
echo "Command failed!"
|
|
endif
|
|
gosub show_sense_data
|
|
gosub show_sense_buffer
|
|
gosub show_ata_return_status
|
|
gosub show_passthrough_cmd_status
|
|
echo "refreshing status"
|
|
buffersize 0
|
|
getstatus
|
|
gosub show_sense_data
|
|
gosub show_sense_buffer
|
|
gosub show_ata_return_status
|
|
gosub show_passthrough_cmd_status
|
|
|
|
|
|
buffersize 512
|
|
setreadpio
|
|
ata28cmd 0 0 0 0 0 0xa0 0xec
|
|
|
|
|
|
#request sense
|
|
echo ""
|
|
echo ""
|
|
echo "performing get sense command"
|
|
seti $bufsize = 252
|
|
seti $cbwcommand1 = 0x03
|
|
seti $cbwcommand2 = 0
|
|
seti $cbwcommand3 = 0
|
|
seti $cbwcommand4 = 0
|
|
seti $cbwcommand5 = $bufsize
|
|
seti $cbwcommand6 = 0
|
|
buffersize $bufsize
|
|
clearbuffer
|
|
DIRECTION FROM
|
|
SCSI6CMD $cbwcommand1 $cbwcommand2 $cbwcommand3 $cbwcommand4 $cbwcommand5 $cbwcommand6
|
|
gosub show_sense_data
|
|
gosub show_sense_buffer
|
|
gosub show_ata_return_status
|
|
gosub show_passthrough_cmd_status
|
|
printbuffer 0 $bufsize
|
|
|
|
|
|
|
|
previousscript
|
|
end
|
|
|
|
|
|
|
|
|
|
subroutine check_command_status
|
|
seti $error_bit = $ata_return_status & 1
|
|
seti $command_failed = 0
|
|
if $error_bit != 0
|
|
seti $command_failed = 1
|
|
elseif $command_status != 0
|
|
seti $command_failed = 1
|
|
elseif $io_sense_key > 1
|
|
seti $command_failed = 1
|
|
# usb attached ata devices will normally give this code, so don't count it as failed
|
|
if $io_sense_key = 4
|
|
if $io_asc = 0
|
|
if $io_ascq = 0
|
|
seti $command_failed = 0
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endsubroutine
|
|
|
|
|
|
|
|
subroutine show_sense_data
|
|
if $direct_mode = 0
|
|
hex
|
|
echo "sense_key=0x" $io_sense_key " asc=0x" $io_asc " ascq=0x" $io_ascq
|
|
decimal
|
|
endif
|
|
endsubroutine
|
|
|
|
|
|
subroutine show_passthrough_cmd_status
|
|
if $direct_mode = 0
|
|
echo "status=" $io_status " masked_status=" $io_masked_status " msg_status=" $io_msg_status
|
|
echo "sb_len_wr=" $io_sb_len_wr " host_status=" $io_host_status " driver_status=" $io_driver_status
|
|
echo "resid=" $io_resid " duration=" $io_duration " info=" $io_info
|
|
endif
|
|
endsubroutine
|
|
|
|
|
|
subroutine show_sense_buffer
|
|
if $direct_mode = 0
|
|
echo "Sense buffer:"
|
|
printsensebuffer 0 $io_sb_len_wr
|
|
endif
|
|
endsubroutine
|
|
|
|
|
|
subroutine show_ata_return_status
|
|
hex
|
|
echo "error=0x" $ata_return_error " count=0x" $ata_return_count " lba=0x" $ata_return_lba " device=0x" $ata_return_device " status=0x" $ata_return_status " altstatus=0x" $ata_alternate_status
|
|
echo "command_status= 0x" $command_status
|
|
echo "data_transferred= 0x" $data_transferred
|
|
decimal
|
|
endsubroutine |