1285242Sachim/******************************************************************************* 2285242Sachim*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3285242Sachim* 4285242Sachim*Redistribution and use in source and binary forms, with or without modification, are permitted provided 5285242Sachim*that the following conditions are met: 6285242Sachim*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7285242Sachim*following disclaimer. 8285242Sachim*2. Redistributions in binary form must reproduce the above copyright notice, 9285242Sachim*this list of conditions and the following disclaimer in the documentation and/or other materials provided 10285242Sachim*with the distribution. 11285242Sachim* 12285242Sachim*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13285242Sachim*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14285242Sachim*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15285242Sachim*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16285242Sachim*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17285242Sachim*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18285242Sachim*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19285242Sachim*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20285242Sachim* 21285242Sachim* $FreeBSD: releng/11.0/sys/dev/pms/RefTisa/sat/src/smdefs.h 285242 2015-07-07 13:17:02Z achim $ 22285242Sachim* 23285242Sachim********************************************************************************/ 24285242Sachim#ifndef __SMDEFS_H__ 25285242Sachim#define __SMDEFS_H__ 26285242Sachim 27285242Sachim#include <dev/pms/RefTisa/tisa/sassata/common/ossa.h> 28285242Sachim 29285242Sachim/* the index for memory requirement, must be continious */ 30285242Sachim#define SM_ROOT_MEM_INDEX 0 /**< the index of dm root memory */ 31285242Sachim#define SM_DEVICE_MEM_INDEX 1 /**< the index of Device descriptors memory */ 32285242Sachim#define SM_IO_MEM_INDEX 2 /**< the index of IO command descriptors memory */ 33285242Sachim 34285242Sachim 35285242Sachim#define SM_MAX_DEV 256 36285242Sachim#define SM_MAX_IO 1024 37285242Sachim 38285242Sachim#define SM_USECS_PER_TICK 1000000 /**< defines the heart beat of the LL layer 10ms */ 39285242Sachim 40285242Sachimenum sm_locks_e 41285242Sachim{ 42285242Sachim SM_TIMER_LOCK = 0, 43285242Sachim SM_DEVICE_LOCK, 44285242Sachim SM_INTERNAL_IO_LOCK, 45285242Sachim SM_EXTERNAL_IO_LOCK, 46285242Sachim SM_NCQ_TAG_LOCK, 47285242Sachim SM_TBD_LOCK, 48285242Sachim SM_MAX_LOCKS 49285242Sachim}; 50285242Sachim 51285242Sachim/* ATA device type */ 52285242Sachim#define SATA_ATA_DEVICE 0x01 /**< ATA ATA device type */ 53285242Sachim#define SATA_ATAPI_DEVICE 0x02 /**< ATA ATAPI device type */ 54285242Sachim#define SATA_PM_DEVICE 0x03 /**< ATA PM device type */ 55285242Sachim#define SATA_SEMB_DEVICE 0x04 /**< ATA SEMB device type */ 56285242Sachim#define SATA_SEMB_WO_SEP_DEVICE 0x05 /**< ATA SEMB without SEP device type */ 57285242Sachim#define UNKNOWN_DEVICE 0xFF 58285242Sachim 59285242Sachim/* 60285242Sachim * FIS type 61285242Sachim */ 62285242Sachim#define PIO_SETUP_DEV_TO_HOST_FIS 0x5F 63285242Sachim#define REG_DEV_TO_HOST_FIS 0x34 64285242Sachim#define SET_DEV_BITS_FIS 0xA1 65285242Sachim 66285242Sachim/* 67285242Sachim * ATA Command code 68285242Sachim */ 69285242Sachim#define SAT_READ_FPDMA_QUEUED 0x60 70285242Sachim#define SAT_READ_DMA_EXT 0x25 71285242Sachim#define SAT_READ_DMA 0xC8 72285242Sachim#define SAT_WRITE_FPDMA_QUEUED 0x61 73285242Sachim#define SAT_WRITE_DMA_EXT 0x35 74285242Sachim#define SAT_WRITE_DMA_FUA_EXT 0x3D 75285242Sachim#define SAT_WRITE_DMA 0xCA 76285242Sachim#define SAT_CHECK_POWER_MODE 0xE5 77285242Sachim#define SAT_READ_LOG_EXT 0x2F 78285242Sachim#define SAT_READ_VERIFY_SECTORS 0x40 79285242Sachim#define SAT_READ_VERIFY_SECTORS_EXT 0x42 80285242Sachim#define SAT_SMART 0xB0 81285242Sachim#define SAT_SMART_EXEUTE_OFF_LINE_IMMEDIATE 0xD4 82285242Sachim#define SAT_SMART_RETURN_STATUS 0xDA 83285242Sachim#define SAT_SMART_READ_LOG 0xD5 84285242Sachim#define SAT_SMART_ENABLE_OPERATIONS 0xD8 85285242Sachim#define SAT_SMART_DISABLE_OPERATIONS 0xD9 86285242Sachim#define SAT_FLUSH_CACHE 0xE7 87285242Sachim#define SAT_FLUSH_CACHE_EXT 0xEA 88285242Sachim#define SAT_STANDBY 0xE2 89285242Sachim#define SAT_MEDIA_EJECT 0xED 90285242Sachim#define SAT_WRITE_SECTORS 0x30 91285242Sachim#define SAT_WRITE_SECTORS_EXT 0x34 92285242Sachim#define SAT_READ_SECTORS 0x20 93285242Sachim#define SAT_READ_SECTORS_EXT 0x24 94285242Sachim#define SAT_GET_MEDIA_STATUS 0xDA 95285242Sachim#define SAT_SET_FEATURES 0xEF 96285242Sachim#define SAT_IDENTIFY_DEVICE 0xEC 97285242Sachim#define SAT_READ_BUFFER 0xE4 98285242Sachim#define SAT_WRITE_BUFFER 0xE8 99285242Sachim 100285242Sachim/* 101285242Sachim * ATAPI Command code 102285242Sachim*/ 103285242Sachim#define SAT_IDENTIFY_PACKET_DEVICE 0xA1 104285242Sachim#define SAT_PACKET 0xA0 105285242Sachim#define SAT_DEVICE_RESET 0x08 106285242Sachim#define SAT_EXECUTE_DEVICE_DIAGNOSTIC 0x90 107285242Sachim 108285242Sachim 109285242Sachim/* 110285242Sachim * ATA Status Register Mask 111285242Sachim */ 112285242Sachim#define ERR_ATA_STATUS_MASK 0x01 /* Error/check bit */ 113285242Sachim#define DRQ_ATA_STATUS_MASK 0x08 /* Data Request bit */ 114285242Sachim#define DF_ATA_STATUS_MASK 0x20 /* Device Fault bit */ 115285242Sachim#define DRDY_ATA_STATUS_MASK 0x40 /* Device Ready bit */ 116285242Sachim#define BSY_ATA_STATUS_MASK 0x80 /* Busy bit */ 117285242Sachim 118285242Sachim/* 119285242Sachim * ATA Error Register Mask 120285242Sachim */ 121285242Sachim#define NM_ATA_ERROR_MASK 0x02 /* No media present bit */ 122285242Sachim#define ABRT_ATA_ERROR_MASK 0x04 /* Command aborted bit */ 123285242Sachim#define MCR_ATA_ERROR_MASK 0x08 /* Media change request bit */ 124285242Sachim#define IDNF_ATA_ERROR_MASK 0x10 /* Address not found bit */ 125285242Sachim#define MC_ATA_ERROR_MASK 0x20 /* Media has changed bit */ 126285242Sachim#define UNC_ATA_ERROR_MASK 0x40 /* Uncorrectable data error bit */ 127285242Sachim#define ICRC_ATA_ERROR_MASK 0x80 /* Interface CRC error bit */ 128285242Sachim 129285242Sachim 130285242Sachim 131285242Sachim 132285242Sachim/* 133285242Sachim * transfer length and LBA limit 2^28 See identify device data word 61:60 134285242Sachim * ATA spec p125 135285242Sachim * 7 zeros 136285242Sachim */ 137285242Sachim#define SAT_TR_LBA_LIMIT 0x10000000 138285242Sachim 139285242Sachim/* 140285242Sachim * transfer length and LBA limit 2^48 See identify device data word 61:60 141285242Sachim * ATA spec p125 142285242Sachim * 12 zeros 143285242Sachim */ 144285242Sachim#define SAT_EXT_TR_LBA_LIMIT 0x1000000000000 145285242Sachim 146285242Sachim 147285242Sachim/* 148285242Sachim * ATA command type. This is for setting LBA, Sector Count 149285242Sachim */ 150285242Sachim#define SAT_NON_EXT_TYPE 0 151285242Sachim#define SAT_EXT_TYPE 1 152285242Sachim#define SAT_FP_TYPE 2 153285242Sachim 154285242Sachim 155285242Sachim/* 156285242Sachim * Report LUNs response data. 157285242Sachim */ 158285242Sachimtypedef struct smScsiReportLun_s 159285242Sachim{ 160285242Sachim bit8 len[4]; 161285242Sachim bit32 reserved; 162285242Sachim tiLUN_t lunList[1]; 163285242Sachim} smScsiReportLun_t; 164285242Sachim 165285242Sachim/* Inquiry vendor string */ 166285242Sachim#define AG_SAT_VENDOR_ID_STRING "ATA " 167285242Sachim 168285242Sachim/* 169285242Sachim * Simple form of SATA Identify Device Data, similar definition is defined by 170285242Sachim * LL Layer as agsaSATAIdentifyData_t. 171285242Sachim */ 172285242Sachimtypedef struct satSimpleSATAIdentifyData_s 173285242Sachim{ 174285242Sachim bit16 word[256]; 175285242Sachim} satSimpleSATAIdentifyData_t; 176285242Sachim 177285242Sachim 178285242Sachim/* 179285242Sachim * READ LOG EXT page 10h 180285242Sachim */ 181285242Sachimtypedef struct satReadLogExtPage10h_s 182285242Sachim{ 183285242Sachim bit8 byte[512]; 184285242Sachim} satReadLogExtPage10h_t; 185285242Sachim 186285242Sachim/* 187285242Sachim * READ LOG EXT Extended Self-test log 188285242Sachim * ATA Table27 p196 189285242Sachim */ 190285242Sachimtypedef struct satReadLogExtSelfTest_s 191285242Sachim{ 192285242Sachim bit8 byte[512]; 193285242Sachim} satReadLogExtSelfTest_t; 194285242Sachim 195285242Sachim/* 196285242Sachim * SMART READ LOG Self-test log 197285242Sachim * ATA Table60 p296 198285242Sachim */ 199285242Sachimtypedef struct satSmartReadLogSelfTest_s 200285242Sachim{ 201285242Sachim bit8 byte[512]; 202285242Sachim} satSmartReadLogSelfTest_t; 203285242Sachim 204285242Sachim 205285242Sachim/* 206285242Sachim * Flag definition for satIntFlag field in smSatInternalIo_t. 207285242Sachim */ 208285242Sachim 209285242Sachim/* Original NCQ I/O already completed, so at the completion of READ LOG EXT 210285242Sachim * page 10h, ignore the TAG tranaltion to get the failed I/O 211285242Sachim */ 212285242Sachim#define AG_SAT_INT_IO_FLAG_ORG_IO_COMPLETED 0x00000001 213285242Sachim 214285242Sachim#define INQUIRY_SUPPORTED_VPD_PAGE 0x00 215285242Sachim#define INQUIRY_UNIT_SERIAL_NUMBER_VPD_PAGE 0x80 216285242Sachim#define INQUIRY_DEVICE_IDENTIFICATION_VPD_PAGE 0x83 217285242Sachim#define INQUIRY_ATA_INFORMATION_VPD_PAGE 0x89 218285242Sachim#define INQUIRY_BLOCK_DEVICE_CHARACTERISTICS_VPD_PAGE 0xB1 219285242Sachim 220285242Sachim#define MODESENSE_CONTROL_PAGE 0x0A 221285242Sachim#define MODESENSE_READ_WRITE_ERROR_RECOVERY_PAGE 0x01 222285242Sachim#define MODESENSE_CACHING 0x08 223285242Sachim#define MODESENSE_INFORMATION_EXCEPTION_CONTROL_PAGE 0x1C 224285242Sachim#define MODESENSE_RETURN_ALL_PAGES 0x3F 225285242Sachim#define MODESENSE_VENDOR_SPECIFIC_PAGE 0x00 226285242Sachim 227285242Sachim#define MODESELECT_CONTROL_PAGE 0x0A 228285242Sachim#define MODESELECT_READ_WRITE_ERROR_RECOVERY_PAGE 0x01 229285242Sachim#define MODESELECT_CACHING 0x08 230285242Sachim#define MODESELECT_INFORMATION_EXCEPTION_CONTROL_PAGE 0x1C 231285242Sachim#define MODESELECT_RETURN_ALL_PAGES 0x3F 232285242Sachim#define MODESELECT_VENDOR_SPECIFIC_PAGE 0x00 233285242Sachim 234285242Sachim#define LOGSENSE_SUPPORTED_LOG_PAGES 0x00 235285242Sachim#define LOGSENSE_SELFTEST_RESULTS_PAGE 0x10 236285242Sachim#define LOGSENSE_INFORMATION_EXCEPTIONS_PAGE 0x2F 237285242Sachim 238285242Sachim 239285242Sachim/* 240285242Sachim * Bit mask definition 241285242Sachim */ 242285242Sachim#define SCSI_EVPD_MASK 0x01 243285242Sachim#define SCSI_IMMED_MASK 0x01 244285242Sachim#define SCSI_NACA_MASK 0x04 245285242Sachim#define SCSI_LINK_MASK 0x01 246285242Sachim#define SCSI_PF_MASK 0x10 247285242Sachim#define SCSI_DEVOFFL_MASK 0x02 248285242Sachim#define SCSI_UNITOFFL_MASK 0x01 249285242Sachim#define SCSI_START_MASK 0x01 250285242Sachim#define SCSI_LOEJ_MASK 0x02 251285242Sachim#define SCSI_NM_MASK 0x02 252285242Sachim#define SCSI_FLUSH_CACHE_IMMED_MASK 0x02 253285242Sachim#define SCSI_FUA_NV_MASK 0x02 254285242Sachim#define SCSI_VERIFY_BYTCHK_MASK 0x02 255285242Sachim#define SCSI_FORMAT_UNIT_IMMED_MASK 0x02 256285242Sachim#define SCSI_FORMAT_UNIT_FOV_MASK 0x80 257285242Sachim#define SCSI_FORMAT_UNIT_DCRT_MASK 0x20 258285242Sachim#define SCSI_FORMAT_UNIT_IP_MASK 0x08 259285242Sachim#define SCSI_WRITE_SAME_LBDATA_MASK 0x02 260285242Sachim#define SCSI_WRITE_SAME_PBDATA_MASK 0x04 261285242Sachim#define SCSI_SYNC_CACHE_IMMED_MASK 0x02 262285242Sachim#define SCSI_WRITE_N_VERIFY_BYTCHK_MASK 0x02 263285242Sachim#define SCSI_SEND_DIAGNOSTIC_SELFTEST_MASK 0x04 264285242Sachim#define SCSI_FORMAT_UNIT_DEFECT_LIST_FORMAT_MASK 0x07 265285242Sachim#define SCSI_FORMAT_UNIT_FMTDATA_MASK 0x10 266285242Sachim#define SCSI_FORMAT_UNIT_DCRT_MASK 0x20 267285242Sachim#define SCSI_FORMAT_UNIT_CMPLIST_MASK 0x08 268285242Sachim#define SCSI_FORMAT_UNIT_LONGLIST_MASK 0x20 269285242Sachim#define SCSI_READ10_FUA_MASK 0x08 270285242Sachim#define SCSI_READ12_FUA_MASK 0x08 271285242Sachim#define SCSI_READ16_FUA_MASK 0x08 272285242Sachim#define SCSI_WRITE10_FUA_MASK 0x08 273285242Sachim#define SCSI_WRITE12_FUA_MASK 0x08 274285242Sachim#define SCSI_WRITE16_FUA_MASK 0x08 275285242Sachim#define SCSI_READ_CAPACITY10_PMI_MASK 0x01 276285242Sachim#define SCSI_READ_CAPACITY16_PMI_MASK 0x01 277285242Sachim#define SCSI_MODE_SENSE6_PC_MASK 0xC0 278285242Sachim#define SCSI_MODE_SENSE6_PAGE_CODE_MASK 0x3F 279285242Sachim#define SCSI_MODE_SENSE10_PC_MASK 0xC0 280285242Sachim#define SCSI_MODE_SENSE10_LLBAA_MASK 0x10 281285242Sachim#define SCSI_MODE_SENSE10_PAGE_CODE_MASK 0x3F 282285242Sachim#define SCSI_SEND_DIAGNOSTIC_TEST_CODE_MASK 0xE0 283285242Sachim#define SCSI_LOG_SENSE_PAGE_CODE_MASK 0x3F 284285242Sachim#define SCSI_MODE_SELECT6_PF_MASK 0x10 285285242Sachim#define SCSI_MODE_SELECT6_AWRE_MASK 0x80 286285242Sachim#define SCSI_MODE_SELECT6_RC_MASK 0x10 287285242Sachim#define SCSI_MODE_SELECT6_EER_MASK 0x08 288285242Sachim#define SCSI_MODE_SELECT6_PER_MASK 0x04 289285242Sachim#define SCSI_MODE_SELECT6_DTE_MASK 0x02 290285242Sachim#define SCSI_MODE_SELECT6_DCR_MASK 0x01 291285242Sachim#define SCSI_MODE_SELECT6_WCE_MASK 0x04 292285242Sachim#define SCSI_MODE_SELECT6_DRA_MASK 0x20 293285242Sachim#define SCSI_MODE_SELECT6_PERF_MASK 0x80 294285242Sachim#define SCSI_MODE_SELECT6_TEST_MASK 0x04 295285242Sachim#define SCSI_MODE_SELECT6_DEXCPT_MASK 0x08 296285242Sachim#define SCSI_MODE_SELECT10_PF_MASK 0x10 297285242Sachim#define SCSI_MODE_SELECT10_LONGLBA_MASK 0x01 298285242Sachim#define SCSI_MODE_SELECT10_AWRE_MASK 0x80 299285242Sachim#define SCSI_MODE_SELECT10_RC_MASK 0x10 300285242Sachim#define SCSI_MODE_SELECT10_EER_MASK 0x08 301285242Sachim#define SCSI_MODE_SELECT10_PER_MASK 0x04 302285242Sachim#define SCSI_MODE_SELECT10_DTE_MASK 0x02 303285242Sachim#define SCSI_MODE_SELECT10_DCR_MASK 0x01 304285242Sachim#define SCSI_MODE_SELECT10_WCE_MASK 0x04 305285242Sachim#define SCSI_MODE_SELECT10_DRA_MASK 0x20 306285242Sachim#define SCSI_MODE_SELECT10_PERF_MASK 0x80 307285242Sachim#define SCSI_MODE_SELECT10_TEST_MASK 0x04 308285242Sachim#define SCSI_MODE_SELECT10_DEXCPT_MASK 0x08 309285242Sachim#define SCSI_WRITE_N_VERIFY10_FUA_MASK 0x08 310285242Sachim#define SCSI_REQUEST_SENSE_DESC_MASK 0x01 311285242Sachim#define SCSI_READ_BUFFER_MODE_MASK 0x1F 312285242Sachim 313285242Sachim#define ATA_REMOVABLE_MEDIA_DEVICE_MASK 0x80 314285242Sachim#define SCSI_REASSIGN_BLOCKS_LONGLIST_MASK 0x01 315285242Sachim#define SCSI_REASSIGN_BLOCKS_LONGLBA_MASK 0x02 316285242Sachim 317285242Sachim 318285242Sachim#define SENSE_DATA_LENGTH 0x12 /* 18 */ 319285242Sachim#define SELFTEST_RESULTS_LOG_PAGE_LENGTH 404 320285242Sachim#define INFORMATION_EXCEPTIONS_LOG_PAGE_LENGTH 11 321285242Sachim#define ZERO_MEDIA_SERIAL_NUMBER_LENGTH 8 322285242Sachim 323285242Sachim#define LOG_SENSE_0 0 324285242Sachim#define LOG_SENSE_1 1 325285242Sachim#define LOG_SENSE_2 2 326285242Sachim 327285242Sachim#define READ_BUFFER_DATA_MODE 0x02 328285242Sachim#define READ_BUFFER_DESCRIPTOR_MODE 0x03 329285242Sachim#define READ_BUFFER_DESCRIPTOR_MODE_DATA_LEN 0x04 330285242Sachim 331285242Sachim#define WRITE_BUFFER_DATA_MODE 0x02 332285242Sachim#define WRITE_BUFFER_DL_MICROCODE_SAVE_MODE 0x05 333285242Sachim 334285242Sachim/* bit mask */ 335285242Sachim#define BIT0_MASK 0x01 336285242Sachim#define BIT1_MASK 0x02 337285242Sachim#define BIT2_MASK 0x04 338285242Sachim#define BIT3_MASK 0x08 339285242Sachim#define BIT4_MASK 0x10 340285242Sachim#define BIT5_MASK 0x20 341285242Sachim#define BIT6_MASK 0x40 342285242Sachim#define BIT7_MASK 0x80 343285242Sachim 344285242Sachim#define MODE_SENSE6_RETURN_ALL_PAGES_LEN 68 345285242Sachim#define MODE_SENSE6_CONTROL_PAGE_LEN 24 346285242Sachim#define MODE_SENSE6_READ_WRITE_ERROR_RECOVERY_PAGE_LEN 24 347285242Sachim#define MODE_SENSE6_CACHING_LEN 32 348285242Sachim#define MODE_SENSE6_INFORMATION_EXCEPTION_CONTROL_PAGE_LEN 24 349285242Sachim 350285242Sachim 351285242Sachim#define MODE_SENSE10_RETURN_ALL_PAGES_LEN 68 + 4 352285242Sachim#define MODE_SENSE10_CONTROL_PAGE_LEN 24 + 4 353285242Sachim#define MODE_SENSE10_READ_WRITE_ERROR_RECOVERY_PAGE_LEN 24 + 4 354285242Sachim#define MODE_SENSE10_CACHING_LEN 32 + 4 355285242Sachim#define MODE_SENSE10_INFORMATION_EXCEPTION_CONTROL_PAGE_LEN 24 + 4 356285242Sachim 357285242Sachim#define MODE_SENSE10_RETURN_ALL_PAGES_LLBAA_LEN 68 + 4 + 8 358285242Sachim#define MODE_SENSE10_CONTROL_PAGE_LLBAA_LEN 24 + 4 + 8 359285242Sachim#define MODE_SENSE10_READ_WRITE_ERROR_RECOVERY_PAGE_LLBAA_LEN 24 + 4 + 8 360285242Sachim#define MODE_SENSE10_CACHING_LLBAA_LEN 32 + 4 + 8 361285242Sachim#define MODE_SENSE10_INFORMATION_EXCEPTION_CONTROL_PAGE_LLBAA_LEN 24 + 4 + 8 362285242Sachim 363285242Sachim/***************************************************************************** 364285242Sachim** SCSI SENSE KEY VALUES 365285242Sachim*****************************************************************************/ 366285242Sachim 367285242Sachim#define SCSI_SNSKEY_NO_SENSE 0x00 368285242Sachim#define SCSI_SNSKEY_RECOVERED_ERROR 0x01 369285242Sachim#define SCSI_SNSKEY_NOT_READY 0x02 370285242Sachim#define SCSI_SNSKEY_MEDIUM_ERROR 0x03 371285242Sachim#define SCSI_SNSKEY_HARDWARE_ERROR 0x04 372285242Sachim#define SCSI_SNSKEY_ILLEGAL_REQUEST 0x05 373285242Sachim#define SCSI_SNSKEY_UNIT_ATTENTION 0x06 374285242Sachim#define SCSI_SNSKEY_DATA_PROTECT 0x07 375285242Sachim#define SCSI_SNSKEY_ABORTED_COMMAND 0x0B 376285242Sachim#define SCSI_SNSKEY_MISCOMPARE 0x0E 377285242Sachim 378285242Sachim/***************************************************************************** 379285242Sachim** SCSI Additional Sense Codes and Qualifiers combo two-bytes 380285242Sachim*****************************************************************************/ 381285242Sachim 382285242Sachim#define SCSI_SNSCODE_NO_ADDITIONAL_INFO 0x0000 383285242Sachim#define SCSI_SNSCODE_LUN_CRC_ERROR_DETECTED 0x0803 384285242Sachim#define SCSI_SNSCODE_INVALID_COMMAND 0x2000 385285242Sachim#define SCSI_SNSCODE_LOGICAL_BLOCK_OUT 0x2100 386285242Sachim#define SCSI_SNSCODE_INVALID_FIELD_IN_CDB 0x2400 387285242Sachim#define SCSI_SNSCODE_LOGICAL_NOT_SUPPORTED 0x2500 388285242Sachim#define SCSI_SNSCODE_POWERON_RESET 0x2900 389285242Sachim#define SCSI_SNSCODE_EVERLAPPED_CMDS 0x4e00 390285242Sachim#define SCSI_SNSCODE_INTERNAL_TARGET_FAILURE 0x4400 391285242Sachim#define SCSI_SNSCODE_MEDIUM_NOT_PRESENT 0x3a00 392285242Sachim#define SCSI_SNSCODE_UNRECOVERED_READ_ERROR 0x1100 393285242Sachim#define SCSI_SNSCODE_RECORD_NOT_FOUND 0x1401 394285242Sachim#define SCSI_SNSCODE_NOT_READY_TO_READY_CHANGE 0x2800 395285242Sachim#define SCSI_SNSCODE_OPERATOR_MEDIUM_REMOVAL_REQUEST 0x5a01 396285242Sachim#define SCSI_SNSCODE_INFORMATION_UNIT_CRC_ERROR 0x4703 397285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_NOT_READY_FORMAT_IN_PROGRESS 0x0404 398285242Sachim#define SCSI_SNSCODE_HARDWARE_IMPENDING_FAILURE 0x5d10 399285242Sachim#define SCSI_SNSCODE_LOW_POWER_CONDITION_ON 0x5e00 400285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_NOT_READY_INIT_REQUIRED 0x0402 401285242Sachim#define SCSI_SNSCODE_INVALID_FIELD_PARAMETER_LIST 0x2600 402285242Sachim#define SCSI_SNSCODE_ATA_DEVICE_FAILED_SET_FEATURES 0x4471 403285242Sachim#define SCSI_SNSCODE_ATA_DEVICE_FEATURE_NOT_ENABLED 0x670B 404285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_FAILED_SELF_TEST 0x3E03 405285242Sachim#define SCSI_SNSCODE_COMMAND_SEQUENCE_ERROR 0x2C00 406285242Sachim#define SCSI_SNSCODE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE 0x2100 407285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_FAILURE 0x3E01 408285242Sachim#define SCSI_SNSCODE_MEDIA_LOAD_OR_EJECT_FAILED 0x5300 409285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_NOT_READY_INITIALIZING_COMMAND_REQUIRED 0x0402 410285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_NOT_READY_CAUSE_NOT_REPORTABLE 0x0400 411285242Sachim#define SCSI_SNSCODE_LOGICAL_UNIT_DOES_NOT_RESPOND_TO_SELECTION 0x0500 412285242Sachim#define SCSI_SNSCODE_DIAGNOSTIC_FAILURE_ON_COMPONENT_NN 0x4000 413285242Sachim#define SCSI_SNSCODE_COMMANDS_CLEARED_BY_ANOTHER_INITIATOR 0x2F00 414285242Sachim#define SCSI_SNSCODE_WRITE_ERROR_AUTO_REALLOCATION_FAILED 0x0C02 415285242Sachim#define SCSI_SNSCODE_ATA_PASS_THROUGH_INFORMATION_AVAILABLE 0x001D 416285242Sachim 417285242Sachim/***************************************************************************** 418285242Sachim** SCSI Additional Sense Codes and Qualifiers saparate bytes 419285242Sachim*****************************************************************************/ 420285242Sachim 421285242Sachim#define SCSI_ASC_NOTREADY_INIT_CMD_REQ 0x04 422285242Sachim#define SCSI_ASCQ_NOTREADY_INIT_CMD_REQ 0x02 423285242Sachim 424285242Sachim 425285242Sachim/***************************************************************************** 426285242Sachim** Inquiry command fields and response sizes 427285242Sachim*****************************************************************************/ 428285242Sachim#define SCSIOP_INQUIRY_CMDDT 0x02 429285242Sachim#define SCSIOP_INQUIRY_EVPD 0x01 430285242Sachim#define STANDARD_INQUIRY_SIZE 36 431285242Sachim#define SATA_PAGE83_INQUIRY_WWN_SIZE 16 /* SAT, revision8, Table81, p78, 12 + 4 */ 432285242Sachim#define SATA_PAGE83_INQUIRY_NO_WWN_SIZE 76 /* SAT, revision8, Table81, p78, 72 + 4 */ 433285242Sachim#define SATA_PAGE89_INQUIRY_SIZE 572 /* SAT, revision8, Table87, p84 */ 434285242Sachim#define SATA_PAGE0_INQUIRY_SIZE 9 /* SPC-4, 7.6.9 Table331, p345 */ 435285242Sachim#define SATA_PAGE80_INQUIRY_SIZE 24 /* SAT, revision8, Table79, p77 */ 436285242Sachim#define SATA_PAGEB1_INQUIRY_SIZE 64 /* SBC-3, revision31, Table193, p273 */ 437285242Sachim 438285242Sachim/***************************************************************************** 439285242Sachim** SCSI Operation Codes (first byte in CDB) 440285242Sachim*****************************************************************************/ 441285242Sachim 442285242Sachim 443285242Sachim#define SCSIOPC_TEST_UNIT_READY 0x00 444285242Sachim#define SCSIOPC_INQUIRY 0x12 445285242Sachim#define SCSIOPC_MODE_SENSE_6 0x1A 446285242Sachim#define SCSIOPC_MODE_SENSE_10 0x5A 447285242Sachim#define SCSIOPC_MODE_SELECT_6 0x15 448285242Sachim#define SCSIOPC_START_STOP_UNIT 0x1B 449285242Sachim#define SCSIOPC_READ_CAPACITY_10 0x25 450285242Sachim#define SCSIOPC_READ_CAPACITY_16 0x9E 451285242Sachim#define SCSIOPC_READ_6 0x08 452285242Sachim#define SCSIOPC_READ_10 0x28 453285242Sachim#define SCSIOPC_READ_12 0xA8 454285242Sachim#define SCSIOPC_READ_16 0x88 455285242Sachim#define SCSIOPC_WRITE_6 0x0A 456285242Sachim#define SCSIOPC_WRITE_10 0x2A 457285242Sachim#define SCSIOPC_WRITE_12 0xAA 458285242Sachim#define SCSIOPC_WRITE_16 0x8A 459285242Sachim#define SCSIOPC_WRITE_VERIFY 0x2E 460285242Sachim#define SCSIOPC_VERIFY_10 0x2F 461285242Sachim#define SCSIOPC_VERIFY_12 0xAF 462285242Sachim#define SCSIOPC_VERIFY_16 0x8F 463285242Sachim#define SCSIOPC_REQUEST_SENSE 0x03 464285242Sachim#define SCSIOPC_REPORT_LUN 0xA0 465285242Sachim#define SCSIOPC_FORMAT_UNIT 0x04 466285242Sachim#define SCSIOPC_SEND_DIAGNOSTIC 0x1D 467285242Sachim#define SCSIOPC_WRITE_SAME_10 0x41 468285242Sachim#define SCSIOPC_WRITE_SAME_16 0x93 469285242Sachim#define SCSIOPC_READ_BUFFER 0x3C 470285242Sachim#define SCSIOPC_WRITE_BUFFER 0x3B 471285242Sachim 472285242Sachim#define SCSIOPC_LOG_SENSE 0x4D 473285242Sachim#define SCSIOPC_LOG_SELECT 0x4C 474285242Sachim#define SCSIOPC_MODE_SELECT_6 0x15 475285242Sachim#define SCSIOPC_MODE_SELECT_10 0x55 476285242Sachim#define SCSIOPC_SYNCHRONIZE_CACHE_10 0x35 477285242Sachim#define SCSIOPC_SYNCHRONIZE_CACHE_16 0x91 478285242Sachim#define SCSIOPC_WRITE_AND_VERIFY_10 0x2E 479285242Sachim#define SCSIOPC_WRITE_AND_VERIFY_12 0xAE 480285242Sachim#define SCSIOPC_WRITE_AND_VERIFY_16 0x8E 481285242Sachim#define SCSIOPC_READ_MEDIA_SERIAL_NUMBER 0xAB 482285242Sachim#define SCSIOPC_REASSIGN_BLOCKS 0x07 483285242Sachim 484285242Sachim#define SCSIOPC_GET_CONFIG 0x46 485285242Sachim#define SCSIOPC_GET_EVENT_STATUS_NOTIFICATION 0x4a 486285242Sachim#define SCSIOPC_REPORT_KEY 0xA4 487285242Sachim#define SCSIOPC_SEND_KEY 0xA3 488285242Sachim#define SCSIOPC_READ_DVD_STRUCTURE 0xAD 489285242Sachim#define SCSIOPC_TOC 0x43 490285242Sachim#define SCSIOPC_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1E 491285242Sachim#define SCSIOPC_READ_VERIFY 0x42 492285242Sachim#define SCSIOPC_ATA_PASS_THROUGH12 0xA1 493285242Sachim#define SCSIOPC_ATA_PASS_THROUGH16 0x85 494285242Sachim 495285242Sachim 496285242Sachim/*! \def MIN(a,b) 497285242Sachim* \brief MIN macro 498285242Sachim* 499285242Sachim* use to find MIN of two values 500285242Sachim*/ 501285242Sachim#ifndef MIN 502285242Sachim#define MIN(a,b) ((a) < (b) ? (a) : (b)) 503285242Sachim#endif 504285242Sachim 505285242Sachim/*! \def MAX(a,b) 506285242Sachim* \brief MAX macro 507285242Sachim* 508285242Sachim* use to find MAX of two values 509285242Sachim*/ 510285242Sachim#ifndef MAX 511285242Sachim#define MAX(a,b) ((a) < (b) ? (b) : (a)) 512285242Sachim#endif 513285242Sachim 514285242Sachim/* for debugging print */ 515285242Sachim#if defined(SM_DEBUG) 516285242Sachim 517285242Sachim/* 518285242Sachim* for debugging purposes. 519285242Sachim*/ 520285242Sachimextern bit32 gSMDebugLevel; 521285242Sachim 522285242Sachim#define SM_DBG0(format) tdsmLogDebugString(gSMDebugLevel, 0, format) 523285242Sachim#define SM_DBG1(format) tdsmLogDebugString(gSMDebugLevel, 1, format) 524285242Sachim#define SM_DBG2(format) tdsmLogDebugString(gSMDebugLevel, 2, format) 525285242Sachim#define SM_DBG3(format) tdsmLogDebugString(gSMDebugLevel, 3, format) 526285242Sachim#define SM_DBG4(format) tdsmLogDebugString(gSMDebugLevel, 4, format) 527285242Sachim#define SM_DBG5(format) tdsmLogDebugString(gSMDebugLevel, 5, format) 528285242Sachim#define SM_DBG6(format) tdsmLogDebugString(gSMDebugLevel, 6, format) 529285242Sachim 530285242Sachim#else 531285242Sachim 532285242Sachim#define SM_DBG0(format) 533285242Sachim#define SM_DBG1(format) 534285242Sachim#define SM_DBG2(format) 535285242Sachim#define SM_DBG3(format) 536285242Sachim#define SM_DBG4(format) 537285242Sachim#define SM_DBG5(format) 538285242Sachim#define SM_DBG6(format) 539285242Sachim 540285242Sachim#endif /* SM_DEBUG */ 541285242Sachim 542285242Sachim//#define SM_ASSERT OS_ASSERT 543285242Sachim//#define tdsmLogDebugString TIDEBUG_MSG 544285242Sachim 545285242Sachim/* 546285242Sachim * SAT specific structure per SATA drive 547285242Sachim */ 548285242Sachim#define SAT_NONNCQ_MAX 1 549285242Sachim#define SAT_NCQ_MAX 32 550285242Sachim#define SAT_MAX_INT_IO 16 551285242Sachim#define SAT_APAPI_CMDQ_MAX 2 552285242Sachim 553285242Sachim/* Device state */ 554285242Sachim#define SAT_DEV_STATE_NORMAL 0 /* Normal */ 555285242Sachim#define SAT_DEV_STATE_IN_RECOVERY 1 /* SAT in recovery mode */ 556285242Sachim#define SAT_DEV_STATE_FORMAT_IN_PROGRESS 2 /* Format unit in progress */ 557285242Sachim#define SAT_DEV_STATE_SMART_THRESHOLD 3 /* SMART Threshold Exceeded Condition*/ 558285242Sachim#define SAT_DEV_STATE_LOW_POWER 4 /* Low Power State*/ 559285242Sachim 560285242Sachim#ifndef agNULL 561285242Sachim#define agNULL ((void *)0) 562285242Sachim#endif 563285242Sachim 564285242Sachim#define SM_SET_ESGL_EXTEND(val) \ 565285242Sachim ((val) = (val) | 0x80000000) 566285242Sachim 567285242Sachim#define SM_CLEAR_ESGL_EXTEND(val) \ 568285242Sachim ((val) = (val) & 0x7FFFFFFF) 569285242Sachim 570285242Sachim#ifndef OPEN_RETRY_RETRIES 571285242Sachim#define OPEN_RETRY_RETRIES 10 572285242Sachim#endif 573285242Sachim 574285242Sachim/********************************************************************* 575285242Sachim* CPU buffer access macro * 576285242Sachim* * 577285242Sachim*/ 578285242Sachim 579285242Sachim#define OSSA_OFFSET_OF(STRUCT_TYPE, FEILD) \ 580285242Sachim (bitptr)&(((STRUCT_TYPE *)0)->FEILD) 581285242Sachim 582285242Sachim 583285242Sachim#if defined(SA_CPU_LITTLE_ENDIAN) 584285242Sachim 585285242Sachim#define OSSA_WRITE_LE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16) \ 586285242Sachim (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit16)(VALUE16); 587285242Sachim 588285242Sachim#define OSSA_WRITE_LE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32) \ 589285242Sachim (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit32)(VALUE32); 590285242Sachim 591285242Sachim#define OSSA_READ_LE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET) \ 592285242Sachim (*((bit16 *)ADDR16)) = (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) 593285242Sachim 594285242Sachim#define OSSA_READ_LE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET) \ 595285242Sachim (*((bit32 *)ADDR32)) = (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) 596285242Sachim 597285242Sachim#define OSSA_WRITE_BE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16) \ 598285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit8)((((bit16)VALUE16)>>8)&0xFF); \ 599285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)(((bit16)VALUE16)&0xFF); 600285242Sachim 601285242Sachim#define OSSA_WRITE_BE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32) \ 602285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit8)((((bit32)VALUE32)>>24)&0xFF); \ 603285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit32)VALUE32)>>16)&0xFF); \ 604285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))) = (bit8)((((bit32)VALUE32)>>8)&0xFF); \ 605285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))) = (bit8)(((bit32)VALUE32)&0xFF); 606285242Sachim 607285242Sachim#define OSSA_READ_BE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET) \ 608285242Sachim (*(bit8 *)(((bit8 *)ADDR16)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); \ 609285242Sachim (*(bit8 *)(((bit8 *)ADDR16))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); 610285242Sachim 611285242Sachim#define OSSA_READ_BE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET) \ 612285242Sachim (*(bit8 *)(((bit8 *)ADDR32)+3)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); \ 613285242Sachim (*(bit8 *)(((bit8 *)ADDR32)+2)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); \ 614285242Sachim (*(bit8 *)(((bit8 *)ADDR32)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))); \ 615285242Sachim (*(bit8 *)(((bit8 *)ADDR32))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))); 616285242Sachim 617285242Sachim#define OSSA_WRITE_BYTE_STRING(AGROOT, DEST_ADDR, SRC_ADDR, LEN) \ 618285242Sachim si_memcpy(DEST_ADDR, SRC_ADDR, LEN); 619285242Sachim 620285242Sachim 621285242Sachim#elif defined(SA_CPU_BIG_ENDIAN) 622285242Sachim 623285242Sachim#define OSSA_WRITE_LE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16) \ 624285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit16)VALUE16)>>8)&0xFF); \ 625285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit8)(((bit16)VALUE16)&0xFF); 626285242Sachim 627285242Sachim#define OSSA_WRITE_LE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32) \ 628285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))) = (bit8)((((bit32)VALUE32)>>24)&0xFF); \ 629285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))) = (bit8)((((bit32)VALUE32)>>16)&0xFF); \ 630285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))) = (bit8)((((bit32)VALUE32)>>8)&0xFF); \ 631285242Sachim (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit8)(((bit32)VALUE32)&0xFF); 632285242Sachim 633285242Sachim#define OSSA_READ_LE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET) \ 634285242Sachim (*(bit8 *)(((bit8 *)ADDR16)+1)) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); \ 635285242Sachim (*(bit8 *)(((bit8 *)ADDR16))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); 636285242Sachim 637285242Sachim#define OSSA_READ_LE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET) \ 638285242Sachim (*((bit8 *)(((bit8 *)ADDR32)+3))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); \ 639285242Sachim (*((bit8 *)(((bit8 *)ADDR32)+2))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+1))); \ 640285242Sachim (*((bit8 *)(((bit8 *)ADDR32)+1))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+2))); \ 641285242Sachim (*((bit8 *)(((bit8 *)ADDR32)))) = (*((bit8 *)(((bit8 *)DMA_ADDR)+(OFFSET)+3))); 642285242Sachim 643285242Sachim#define OSSA_WRITE_BE_16(AGROOT, DMA_ADDR, OFFSET, VALUE16) \ 644285242Sachim (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit16)(VALUE16); 645285242Sachim 646285242Sachim#define OSSA_WRITE_BE_32(AGROOT, DMA_ADDR, OFFSET, VALUE32) \ 647285242Sachim (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))) = (bit32)(VALUE32); 648285242Sachim 649285242Sachim#define OSSA_READ_BE_16(AGROOT, ADDR16, DMA_ADDR, OFFSET) \ 650285242Sachim (*((bit16 *)ADDR16)) = (*((bit16 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); 651285242Sachim 652285242Sachim#define OSSA_READ_BE_32(AGROOT, ADDR32, DMA_ADDR, OFFSET) \ 653285242Sachim (*((bit32 *)ADDR32)) = (*((bit32 *)(((bit8 *)DMA_ADDR)+(OFFSET)))); 654285242Sachim 655285242Sachim#define OSSA_WRITE_BYTE_STRING(AGROOT, DEST_ADDR, SRC_ADDR, LEN) \ 656285242Sachim si_memcpy(DEST_ADDR, SRC_ADDR, LEN); 657285242Sachim 658285242Sachim#else 659285242Sachim 660285242Sachim#error (Host CPU endianess undefined!!) 661285242Sachim 662285242Sachim#endif 663285242Sachim 664285242Sachim 665285242Sachim#if defined(SA_CPU_LITTLE_ENDIAN) 666285242Sachim 667285242Sachim#ifndef LEBIT16_TO_BIT16 668285242Sachim#define LEBIT16_TO_BIT16(_x) (_x) 669285242Sachim#endif 670285242Sachim 671285242Sachim#ifndef BIT16_TO_LEBIT16 672285242Sachim#define BIT16_TO_LEBIT16(_x) (_x) 673285242Sachim#endif 674285242Sachim 675285242Sachim#ifndef BIT16_TO_BEBIT16 676285242Sachim#define BIT16_TO_BEBIT16(_x) AGSA_FLIP_2_BYTES(_x) 677285242Sachim#endif 678285242Sachim 679285242Sachim#ifndef BEBIT16_TO_BIT16 680285242Sachim#define BEBIT16_TO_BIT16(_x) AGSA_FLIP_2_BYTES(_x) 681285242Sachim#endif 682285242Sachim 683285242Sachim#ifndef LEBIT32_TO_BIT32 684285242Sachim#define LEBIT32_TO_BIT32(_x) (_x) 685285242Sachim#endif 686285242Sachim 687285242Sachim#ifndef BIT32_TO_LEBIT32 688285242Sachim#define BIT32_TO_LEBIT32(_x) (_x) 689285242Sachim#endif 690285242Sachim 691285242Sachim 692285242Sachim#ifndef BEBIT32_TO_BIT32 693285242Sachim#define BEBIT32_TO_BIT32(_x) AGSA_FLIP_4_BYTES(_x) 694285242Sachim#endif 695285242Sachim 696285242Sachim#ifndef BIT32_TO_BEBIT32 697285242Sachim#define BIT32_TO_BEBIT32(_x) AGSA_FLIP_4_BYTES(_x) 698285242Sachim#endif 699285242Sachim 700285242Sachim#elif defined(SA_CPU_BIG_ENDIAN) 701285242Sachim 702285242Sachim#ifndef LEBIT16_TO_BIT16 703285242Sachim#define LEBIT16_TO_BIT16(_x) AGSA_FLIP_2_BYTES(_x) 704285242Sachim#endif 705285242Sachim 706285242Sachim#ifndef BIT16_TO_LEBIT16 707285242Sachim#define BIT16_TO_LEBIT16(_x) AGSA_FLIP_2_BYTES(_x) 708285242Sachim#endif 709285242Sachim 710285242Sachim#ifndef BIT16_TO_BEBIT16 711285242Sachim#define BIT16_TO_BEBIT16(_x) (_x) 712285242Sachim#endif 713285242Sachim 714285242Sachim#ifndef BEBIT16_TO_BIT16 715285242Sachim#define BEBIT16_TO_BIT16(_x) (_x) 716285242Sachim#endif 717285242Sachim 718285242Sachim#ifndef LEBIT32_TO_BIT32 719285242Sachim#define LEBIT32_TO_BIT32(_x) AGSA_FLIP_4_BYTES(_x) 720285242Sachim#endif 721285242Sachim 722285242Sachim#ifndef BIT32_TO_LEBIT32 723285242Sachim#define BIT32_TO_LEBIT32(_x) AGSA_FLIP_4_BYTES(_x) 724285242Sachim#endif 725285242Sachim 726285242Sachim#ifndef BEBIT32_TO_BIT32 727285242Sachim#define BEBIT32_TO_BIT32(_x) (_x) 728285242Sachim#endif 729285242Sachim 730285242Sachim#ifndef BIT32_TO_BEBIT32 731285242Sachim#define BIT32_TO_BEBIT32(_x) (_x) 732285242Sachim#endif 733285242Sachim 734285242Sachim#else 735285242Sachim 736285242Sachim#error No definition of SA_CPU_BIG_ENDIAN or SA_CPU_LITTLE_ENDIAN 737285242Sachim 738285242Sachim#endif 739285242Sachim 740285242Sachim 741285242Sachim/* 742285242Sachim * Task Management task used in tiINITaskManagement() 743285242Sachim * 744285242Sachim * 1 SM_ABORT TASK - aborts the task identified by the Referenced Task Tag field. 745285242Sachim * 2 SM_ABORT TASK SET - aborts all Tasks issued by this initiator on the Logical Unit 746285242Sachim * 3 SM_CLEAR ACA - clears the Auto Contingent Allegiance condition. 747285242Sachim * 4 SM_CLEAR TASK SET - Aborts all Tasks (from all initiators) for the Logical Unit. 748285242Sachim * 5 SM_LOGICAL UNIT RESET 749285242Sachim * 6 SM_TARGET WARM RESET - iSCSI only 750285242Sachim * 7 SM_TARGET_COLD_RESET - iSCSI only 751285242Sachim * 8 SM_TASK_REASSIGN - iSCSI only 752285242Sachim * 9 SM_QUERY_TASK - SAS only 753285242Sachim */ 754285242Sachim 755285242Sachim#define SM_ABORT_TASK 1 756285242Sachim#define SM_ABORT_TASK_SET 2 757285242Sachim#define SM_CLEAR_ACA 3 758285242Sachim#define SM_CLEAR_TASK_SET 4 759285242Sachim#define SM_LOGICAL_UNIT_RESET 5 760285242Sachim#define SM_TARGET_WARM_RESET 6 /* iSCSI only */ 761285242Sachim#define SM_TARGET_COLD_RESET 7 /* iSCSI only */ 762285242Sachim#define SM_TASK_REASSIGN 8 /* iSCSI only */ 763285242Sachim#define SM_QUERY_TASK 9 /* SAS only */ 764285242Sachim 765285242Sachim/* SMP PHY CONTROL OPERATION */ 766285242Sachim#define SMP_PHY_CONTROL_NOP 0x00 767285242Sachim#define SMP_PHY_CONTROL_LINK_RESET 0x01 768285242Sachim#define SMP_PHY_CONTROL_HARD_RESET 0x02 769285242Sachim#define SMP_PHY_CONTROL_DISABLE 0x03 770285242Sachim#define SMP_PHY_CONTROL_CLEAR_ERROR_LOG 0x05 771285242Sachim#define SMP_PHY_CONTROL_CLEAR_AFFILIATION 0x06 772285242Sachim#define SMP_PHY_CONTROL_XMIT_SATA_PS_SIGNAL 0x07 773285242Sachim 774285242Sachim/**************************************************************** 775285242Sachim * Phy Control request 776285242Sachim ****************************************************************/ 777285242Sachimtypedef struct smpReqPhyControl_s 778285242Sachim{ 779285242Sachim bit8 reserved1[4]; 780285242Sachim bit8 reserved2; 781285242Sachim bit8 phyIdentifier; 782285242Sachim bit8 phyOperation; 783285242Sachim bit8 updatePartialPathwayTOValue; 784285242Sachim /* b7-1 : reserved */ 785285242Sachim /* b0 : update partial pathway timeout value */ 786285242Sachim bit8 reserved3[20]; 787285242Sachim bit8 programmedMinPhysicalLinkRate; 788285242Sachim /* b7-4 : programmed Minimum Physical Link Rate*/ 789285242Sachim /* b3-0 : reserved */ 790285242Sachim bit8 programmedMaxPhysicalLinkRate; 791285242Sachim /* b7-4 : programmed Maximum Physical Link Rate*/ 792285242Sachim /* b3-0 : reserved */ 793285242Sachim bit8 reserved4[2]; 794285242Sachim bit8 partialPathwayTOValue; 795285242Sachim /* b7-4 : reserved */ 796285242Sachim /* b3-0 : partial Pathway TO Value */ 797285242Sachim bit8 reserved5[3]; 798285242Sachim} smpReqPhyControl_t; 799285242Sachim 800285242Sachim 801285242Sachimtypedef struct smSMPFrameHeader_s 802285242Sachim{ 803285242Sachim bit8 smpFrameType; /* The first byte of SMP frame represents the SMP FRAME TYPE */ 804285242Sachim bit8 smpFunction; /* The second byte of the SMP frame represents the SMP FUNCTION */ 805285242Sachim bit8 smpFunctionResult; /* The third byte of SMP frame represents FUNCTION RESULT of the SMP response. */ 806285242Sachim bit8 smpReserved; /* reserved */ 807285242Sachim} smSMPFrameHeader_t; 808285242Sachim 809285242Sachim/* SMP direct payload size limit: IOMB direct payload size = 48 */ 810285242Sachim#define SMP_DIRECT_PAYLOAD_LIMIT 44 811285242Sachim 812285242Sachim#define SMP_REQUEST 0x40 813285242Sachim#define SMP_RESPONSE 0x41 814285242Sachim 815285242Sachim#define SMP_PHY_CONTROL 0x91 816285242Sachim 817285242Sachim/* SMP function results */ 818285242Sachim#define SMP_FUNCTION_ACCEPTED 0x00 819285242Sachim 820285242Sachim/* bit8 array[4] -> bit32 */ 821285242Sachim#define SM_GET_SAS_ADDRESSLO(sasAddressLo) \ 822285242Sachim DMA_BEBIT32_TO_BIT32(*(bit32 *)sasAddressLo) 823285242Sachim 824285242Sachim#define SM_GET_SAS_ADDRESSHI(sasAddressHi) \ 825285242Sachim DMA_BEBIT32_TO_BIT32(*(bit32 *)sasAddressHi) 826285242Sachim 827285242Sachim/* SATA sector size 512 bytes = 0x200 bytes */ 828285242Sachim#define SATA_SECTOR_SIZE 0x200 829285242Sachim/* TL limit in sector */ 830285242Sachim/* for SAT_READ/WRITE_DMA and SAT_READ/WRITE_SECTORS ATA command */ 831285242Sachim#define NON_BIT48_ADDRESS_TL_LIMIT 0x100 832285242Sachim/* for SAT_READ/WRITE_DMA_EXT and SAT_READ/WRITE_SECTORS_EXT and SAT_READ/WRITE_FPDMA_QUEUEDATA command */ 833285242Sachim#define BIT48_ADDRESS_TL_LIMIT 0xFFFF 834285242Sachim 835285242Sachim#define VEN_DEV_SPC 0x800111f8 836285242Sachim#define VEN_DEV_SPCv 0x800811f8 837285242Sachim#define VEN_DEV_SPCve 0x800911f8 838285242Sachim#define VEN_DEV_SPCvplus 0x801811f8 839285242Sachim#define VEN_DEV_SPCveplus 0x801911f8 840285242Sachim 841285242Sachim#define SMIsSPC(agr) (VEN_DEV_SPC == ossaHwRegReadConfig32(agr,0 ) ? 1 : 0) /* returns true config space read is SPC */ 842285242Sachim#define SMIsSPCv(agr) (VEN_DEV_SPCv == ossaHwRegReadConfig32(agr,0 ) ? 1 : 0) /* returns true config space read is SPCv */ 843285242Sachim#define SMIsSPCve(agr) (VEN_DEV_SPCve == ossaHwRegReadConfig32(agr,0 ) ? 1 : 0) /* returns true config space read is SPCve */ 844285242Sachim#define SMIsSPCvplus(agr) (VEN_DEV_SPCvplus == ossaHwRegReadConfig32(agr,0 ) ? 1 : 0) /* returns true config space read is SPCv+ */ 845285242Sachim#define SMIsSPCveplus(agr) (VEN_DEV_SPCveplus == ossaHwRegReadConfig32(agr,0 ) ? 1 : 0) /* returns true config space read is SPCve+ */ 846285242Sachim 847285242Sachim#define DEFAULT_KEY_BUFFER_SIZE 64 848285242Sachim 849285242Sachim 850285242Sachim#endif /* __SMDEFS_H__ */ 851285242Sachim 852