162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Aic94xx SAS/SATA driver SAS definitions and hardware interface header file. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2005 Adaptec, Inc. All rights reserved. 662306a36Sopenharmony_ci * Copyright (C) 2005 Luben Tuikov <luben_tuikov@adaptec.com> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef _AIC94XX_SAS_H_ 1062306a36Sopenharmony_ci#define _AIC94XX_SAS_H_ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <scsi/libsas.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci/* ---------- DDBs ---------- */ 1562306a36Sopenharmony_ci/* DDBs are device descriptor blocks which describe a device in the 1662306a36Sopenharmony_ci * domain that this sequencer can maintain low-level connections for 1762306a36Sopenharmony_ci * us. They are be 64 bytes. 1862306a36Sopenharmony_ci */ 1962306a36Sopenharmony_ci#define ASD_MAX_DDBS 128 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistruct asd_ddb_ssp_smp_target_port { 2262306a36Sopenharmony_ci u8 conn_type; /* byte 0 */ 2362306a36Sopenharmony_ci#define DDB_TP_CONN_TYPE 0x81 /* Initiator port and addr frame type 0x01 */ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci u8 conn_rate; 2662306a36Sopenharmony_ci __be16 init_conn_tag; 2762306a36Sopenharmony_ci u8 dest_sas_addr[8]; /* bytes 4-11 */ 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci __le16 send_queue_head; 3062306a36Sopenharmony_ci u8 sq_suspended; 3162306a36Sopenharmony_ci u8 ddb_type; /* DDB_TYPE_TARGET */ 3262306a36Sopenharmony_ci#define DDB_TYPE_UNUSED 0xFF 3362306a36Sopenharmony_ci#define DDB_TYPE_TARGET 0xFE 3462306a36Sopenharmony_ci#define DDB_TYPE_INITIATOR 0xFD 3562306a36Sopenharmony_ci#define DDB_TYPE_PM_PORT 0xFC 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci __le16 _r_a; 3862306a36Sopenharmony_ci __be16 awt_def; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci u8 compat_features; /* byte 20 */ 4162306a36Sopenharmony_ci u8 pathway_blocked_count; 4262306a36Sopenharmony_ci __be16 arb_wait_time; 4362306a36Sopenharmony_ci __be32 more_compat_features; /* byte 24 */ 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci u8 conn_mask; 4662306a36Sopenharmony_ci u8 flags; /* concurrent conn:2,2 and open:0(1) */ 4762306a36Sopenharmony_ci#define CONCURRENT_CONN_SUPP 0x04 4862306a36Sopenharmony_ci#define OPEN_REQUIRED 0x01 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci u16 _r_b; 5162306a36Sopenharmony_ci __le16 exec_queue_tail; 5262306a36Sopenharmony_ci __le16 send_queue_tail; 5362306a36Sopenharmony_ci __le16 sister_ddb; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci __le16 _r_c; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci u8 max_concurrent_conn; 5862306a36Sopenharmony_ci u8 num_concurrent_conn; 5962306a36Sopenharmony_ci u8 num_contexts; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci u8 _r_d; 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci __le16 active_task_count; 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci u8 _r_e[9]; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci u8 itnl_reason; /* I_T nexus loss reason */ 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci __le16 _r_f; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci __le16 itnl_timeout; 7262306a36Sopenharmony_ci#define ITNL_TIMEOUT_CONST 0x7D0 /* 2 seconds */ 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci __le32 itnl_timestamp; 7562306a36Sopenharmony_ci} __attribute__ ((packed)); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct asd_ddb_stp_sata_target_port { 7862306a36Sopenharmony_ci u8 conn_type; /* byte 0 */ 7962306a36Sopenharmony_ci u8 conn_rate; 8062306a36Sopenharmony_ci __be16 init_conn_tag; 8162306a36Sopenharmony_ci u8 dest_sas_addr[8]; /* bytes 4-11 */ 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci __le16 send_queue_head; 8462306a36Sopenharmony_ci u8 sq_suspended; 8562306a36Sopenharmony_ci u8 ddb_type; /* DDB_TYPE_TARGET */ 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci __le16 _r_a; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci __be16 awt_def; 9062306a36Sopenharmony_ci u8 compat_features; /* byte 20 */ 9162306a36Sopenharmony_ci u8 pathway_blocked_count; 9262306a36Sopenharmony_ci __be16 arb_wait_time; 9362306a36Sopenharmony_ci __be32 more_compat_features; /* byte 24 */ 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci u8 conn_mask; 9662306a36Sopenharmony_ci u8 flags; /* concurrent conn:2,2 and open:0(1) */ 9762306a36Sopenharmony_ci#define SATA_MULTIPORT 0x80 9862306a36Sopenharmony_ci#define SUPPORTS_AFFIL 0x40 9962306a36Sopenharmony_ci#define STP_AFFIL_POL 0x20 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci u8 _r_b; 10262306a36Sopenharmony_ci u8 flags2; /* STP close policy:0 */ 10362306a36Sopenharmony_ci#define STP_CL_POL_NO_TX 0x00 10462306a36Sopenharmony_ci#define STP_CL_POL_BTW_CMDS 0x01 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci __le16 exec_queue_tail; 10762306a36Sopenharmony_ci __le16 send_queue_tail; 10862306a36Sopenharmony_ci __le16 sister_ddb; 10962306a36Sopenharmony_ci __le16 ata_cmd_scbptr; 11062306a36Sopenharmony_ci __le32 sata_tag_alloc_mask; 11162306a36Sopenharmony_ci __le16 active_task_count; 11262306a36Sopenharmony_ci __le16 _r_c; 11362306a36Sopenharmony_ci __le32 sata_sactive; 11462306a36Sopenharmony_ci u8 num_sata_tags; 11562306a36Sopenharmony_ci u8 sata_status; 11662306a36Sopenharmony_ci u8 sata_ending_status; 11762306a36Sopenharmony_ci u8 itnl_reason; /* I_T nexus loss reason */ 11862306a36Sopenharmony_ci __le16 ncq_data_scb_ptr; 11962306a36Sopenharmony_ci __le16 itnl_timeout; 12062306a36Sopenharmony_ci __le32 itnl_timestamp; 12162306a36Sopenharmony_ci} __attribute__ ((packed)); 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/* This struct asd_ddb_init_port, describes the device descriptor block 12462306a36Sopenharmony_ci * of an initiator port (when the sequencer is operating in target mode). 12562306a36Sopenharmony_ci * Bytes [0,11] and [20,27] are from the OPEN address frame. 12662306a36Sopenharmony_ci * The sequencer allocates an initiator port DDB entry. 12762306a36Sopenharmony_ci */ 12862306a36Sopenharmony_cistruct asd_ddb_init_port { 12962306a36Sopenharmony_ci u8 conn_type; /* byte 0 */ 13062306a36Sopenharmony_ci u8 conn_rate; 13162306a36Sopenharmony_ci __be16 init_conn_tag; /* BE */ 13262306a36Sopenharmony_ci u8 dest_sas_addr[8]; 13362306a36Sopenharmony_ci __le16 send_queue_head; /* LE, byte 12 */ 13462306a36Sopenharmony_ci u8 sq_suspended; 13562306a36Sopenharmony_ci u8 ddb_type; /* DDB_TYPE_INITIATOR */ 13662306a36Sopenharmony_ci __le16 _r_a; 13762306a36Sopenharmony_ci __be16 awt_def; /* BE */ 13862306a36Sopenharmony_ci u8 compat_features; 13962306a36Sopenharmony_ci u8 pathway_blocked_count; 14062306a36Sopenharmony_ci __be16 arb_wait_time; /* BE */ 14162306a36Sopenharmony_ci __be32 more_compat_features; /* BE */ 14262306a36Sopenharmony_ci u8 conn_mask; 14362306a36Sopenharmony_ci u8 flags; /* == 5 */ 14462306a36Sopenharmony_ci u16 _r_b; 14562306a36Sopenharmony_ci __le16 exec_queue_tail; /* execution queue tail */ 14662306a36Sopenharmony_ci __le16 send_queue_tail; 14762306a36Sopenharmony_ci __le16 sister_ddb; 14862306a36Sopenharmony_ci __le16 init_resp_timeout; /* initiator response timeout */ 14962306a36Sopenharmony_ci __le32 _r_c; 15062306a36Sopenharmony_ci __le16 active_tasks; /* active task count */ 15162306a36Sopenharmony_ci __le16 init_list; /* initiator list link pointer */ 15262306a36Sopenharmony_ci __le32 _r_d; 15362306a36Sopenharmony_ci u8 max_conn_to[3]; /* from Conn-Disc mode page, in us, LE */ 15462306a36Sopenharmony_ci u8 itnl_reason; /* I_T nexus loss reason */ 15562306a36Sopenharmony_ci __le16 bus_inact_to; /* from Conn-Disc mode page, in 100 us, LE */ 15662306a36Sopenharmony_ci __le16 itnl_to; /* from the Protocol Specific Port Ctrl MP */ 15762306a36Sopenharmony_ci __le32 itnl_timestamp; 15862306a36Sopenharmony_ci} __attribute__ ((packed)); 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci/* This struct asd_ddb_sata_tag, describes a look-up table to be used 16162306a36Sopenharmony_ci * by the sequencers. SATA II, IDENTIFY DEVICE data, word 76, bit 8: 16262306a36Sopenharmony_ci * NCQ support. This table is used by the sequencers to find the 16362306a36Sopenharmony_ci * corresponding SCB, given a SATA II tag value. 16462306a36Sopenharmony_ci */ 16562306a36Sopenharmony_cistruct asd_ddb_sata_tag { 16662306a36Sopenharmony_ci __le16 scb_pointer[32]; 16762306a36Sopenharmony_ci} __attribute__ ((packed)); 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci/* This struct asd_ddb_sata_pm_table, describes a port number to 17062306a36Sopenharmony_ci * connection handle look-up table. SATA targets attached to a port 17162306a36Sopenharmony_ci * multiplier require a 4-bit port number value. There is one DDB 17262306a36Sopenharmony_ci * entry of this type for each SATA port multiplier (sister DDB). 17362306a36Sopenharmony_ci * Given a SATA PM port number, this table gives us the SATA PM Port 17462306a36Sopenharmony_ci * DDB of the SATA port multiplier port (i.e. the SATA target 17562306a36Sopenharmony_ci * discovered on the port). 17662306a36Sopenharmony_ci */ 17762306a36Sopenharmony_cistruct asd_ddb_sata_pm_table { 17862306a36Sopenharmony_ci __le16 ddb_pointer[16]; 17962306a36Sopenharmony_ci __le16 _r_a[16]; 18062306a36Sopenharmony_ci} __attribute__ ((packed)); 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_ci/* This struct asd_ddb_sata_pm_port, describes the SATA port multiplier 18362306a36Sopenharmony_ci * port format DDB. 18462306a36Sopenharmony_ci */ 18562306a36Sopenharmony_cistruct asd_ddb_sata_pm_port { 18662306a36Sopenharmony_ci u8 _r_a[15]; 18762306a36Sopenharmony_ci u8 ddb_type; 18862306a36Sopenharmony_ci u8 _r_b[13]; 18962306a36Sopenharmony_ci u8 pm_port_flags; 19062306a36Sopenharmony_ci#define PM_PORT_MASK 0xF0 19162306a36Sopenharmony_ci#define PM_PORT_SET 0x02 19262306a36Sopenharmony_ci u8 _r_c[6]; 19362306a36Sopenharmony_ci __le16 sister_ddb; 19462306a36Sopenharmony_ci __le16 ata_cmd_scbptr; 19562306a36Sopenharmony_ci __le32 sata_tag_alloc_mask; 19662306a36Sopenharmony_ci __le16 active_task_count; 19762306a36Sopenharmony_ci __le16 parent_ddb; 19862306a36Sopenharmony_ci __le32 sata_sactive; 19962306a36Sopenharmony_ci u8 num_sata_tags; 20062306a36Sopenharmony_ci u8 sata_status; 20162306a36Sopenharmony_ci u8 sata_ending_status; 20262306a36Sopenharmony_ci u8 _r_d[9]; 20362306a36Sopenharmony_ci} __attribute__ ((packed)); 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci/* This struct asd_ddb_seq_shared, describes a DDB shared by the 20662306a36Sopenharmony_ci * central and link sequencers. port_map_by_links is indexed phy 20762306a36Sopenharmony_ci * number [0,7]; each byte is a bit mask of all the phys that are in 20862306a36Sopenharmony_ci * the same port as the indexed phy. 20962306a36Sopenharmony_ci */ 21062306a36Sopenharmony_cistruct asd_ddb_seq_shared { 21162306a36Sopenharmony_ci __le16 q_free_ddb_head; 21262306a36Sopenharmony_ci __le16 q_free_ddb_tail; 21362306a36Sopenharmony_ci __le16 q_free_ddb_cnt; 21462306a36Sopenharmony_ci __le16 q_used_ddb_head; 21562306a36Sopenharmony_ci __le16 q_used_ddb_tail; 21662306a36Sopenharmony_ci __le16 shared_mem_lock; 21762306a36Sopenharmony_ci __le16 smp_conn_tag; 21862306a36Sopenharmony_ci __le16 est_nexus_buf_cnt; 21962306a36Sopenharmony_ci __le16 est_nexus_buf_thresh; 22062306a36Sopenharmony_ci u32 _r_a; 22162306a36Sopenharmony_ci u8 settable_max_contexts; 22262306a36Sopenharmony_ci u8 _r_b[23]; 22362306a36Sopenharmony_ci u8 conn_not_active; 22462306a36Sopenharmony_ci u8 phy_is_up; 22562306a36Sopenharmony_ci u8 _r_c[8]; 22662306a36Sopenharmony_ci u8 port_map_by_links[8]; 22762306a36Sopenharmony_ci} __attribute__ ((packed)); 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci/* ---------- SG Element ---------- */ 23062306a36Sopenharmony_ci 23162306a36Sopenharmony_ci/* This struct sg_el, describes the hardware scatter gather buffer 23262306a36Sopenharmony_ci * element. All entries are little endian. In an SCB, there are 2 of 23362306a36Sopenharmony_ci * this, plus one more, called a link element of this indicating a 23462306a36Sopenharmony_ci * sublist if needed. 23562306a36Sopenharmony_ci * 23662306a36Sopenharmony_ci * A link element has only the bus address set and the flags (DS) bit 23762306a36Sopenharmony_ci * valid. The bus address points to the start of the sublist. 23862306a36Sopenharmony_ci * 23962306a36Sopenharmony_ci * If a sublist is needed, then that sublist should also include the 2 24062306a36Sopenharmony_ci * sg_el embedded in the SCB, in which case next_sg_offset is 32, 24162306a36Sopenharmony_ci * since sizeof(sg_el) = 16; EOS should be 1 and EOL 0 in this case. 24262306a36Sopenharmony_ci */ 24362306a36Sopenharmony_cistruct sg_el { 24462306a36Sopenharmony_ci __le64 bus_addr; 24562306a36Sopenharmony_ci __le32 size; 24662306a36Sopenharmony_ci __le16 _r; 24762306a36Sopenharmony_ci u8 next_sg_offs; 24862306a36Sopenharmony_ci u8 flags; 24962306a36Sopenharmony_ci#define ASD_SG_EL_DS_MASK 0x30 25062306a36Sopenharmony_ci#define ASD_SG_EL_DS_OCM 0x10 25162306a36Sopenharmony_ci#define ASD_SG_EL_DS_HM 0x00 25262306a36Sopenharmony_ci#define ASD_SG_EL_LIST_MASK 0xC0 25362306a36Sopenharmony_ci#define ASD_SG_EL_LIST_EOL 0x40 25462306a36Sopenharmony_ci#define ASD_SG_EL_LIST_EOS 0x80 25562306a36Sopenharmony_ci} __attribute__ ((packed)); 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci/* ---------- SCBs ---------- */ 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci/* An SCB (sequencer control block) is comprised of a common header 26062306a36Sopenharmony_ci * and a task part, for a total of 128 bytes. All fields are in LE 26162306a36Sopenharmony_ci * order, unless otherwise noted. 26262306a36Sopenharmony_ci */ 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci/* This struct scb_header, defines the SCB header format. 26562306a36Sopenharmony_ci */ 26662306a36Sopenharmony_cistruct scb_header { 26762306a36Sopenharmony_ci __le64 next_scb; 26862306a36Sopenharmony_ci __le16 index; /* transaction context */ 26962306a36Sopenharmony_ci u8 opcode; 27062306a36Sopenharmony_ci} __attribute__ ((packed)); 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci/* SCB opcodes: Execution queue 27362306a36Sopenharmony_ci */ 27462306a36Sopenharmony_ci#define INITIATE_SSP_TASK 0x00 27562306a36Sopenharmony_ci#define INITIATE_LONG_SSP_TASK 0x01 27662306a36Sopenharmony_ci#define INITIATE_BIDIR_SSP_TASK 0x02 27762306a36Sopenharmony_ci#define SCB_ABORT_TASK 0x03 27862306a36Sopenharmony_ci#define INITIATE_SSP_TMF 0x04 27962306a36Sopenharmony_ci#define SSP_TARG_GET_DATA 0x05 28062306a36Sopenharmony_ci#define SSP_TARG_GET_DATA_GOOD 0x06 28162306a36Sopenharmony_ci#define SSP_TARG_SEND_RESP 0x07 28262306a36Sopenharmony_ci#define QUERY_SSP_TASK 0x08 28362306a36Sopenharmony_ci#define INITIATE_ATA_TASK 0x09 28462306a36Sopenharmony_ci#define INITIATE_ATAPI_TASK 0x0a 28562306a36Sopenharmony_ci#define CONTROL_ATA_DEV 0x0b 28662306a36Sopenharmony_ci#define INITIATE_SMP_TASK 0x0c 28762306a36Sopenharmony_ci#define SMP_TARG_SEND_RESP 0x0f 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ci/* SCB opcodes: Send Queue 29062306a36Sopenharmony_ci */ 29162306a36Sopenharmony_ci#define SSP_TARG_SEND_DATA 0x40 29262306a36Sopenharmony_ci#define SSP_TARG_SEND_DATA_GOOD 0x41 29362306a36Sopenharmony_ci 29462306a36Sopenharmony_ci/* SCB opcodes: Link Queue 29562306a36Sopenharmony_ci */ 29662306a36Sopenharmony_ci#define CONTROL_PHY 0x80 29762306a36Sopenharmony_ci#define SEND_PRIMITIVE 0x81 29862306a36Sopenharmony_ci#define INITIATE_LINK_ADM_TASK 0x82 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci/* SCB opcodes: other 30162306a36Sopenharmony_ci */ 30262306a36Sopenharmony_ci#define EMPTY_SCB 0xc0 30362306a36Sopenharmony_ci#define INITIATE_SEQ_ADM_TASK 0xc1 30462306a36Sopenharmony_ci#define EST_ICL_TARG_WINDOW 0xc2 30562306a36Sopenharmony_ci#define COPY_MEM 0xc3 30662306a36Sopenharmony_ci#define CLEAR_NEXUS 0xc4 30762306a36Sopenharmony_ci#define INITIATE_DDB_ADM_TASK 0xc6 30862306a36Sopenharmony_ci#define ESTABLISH_NEXUS_ESCB 0xd0 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci#define LUN_SIZE 8 31162306a36Sopenharmony_ci 31262306a36Sopenharmony_ci#define EFB_MASK 0x80 31362306a36Sopenharmony_ci#define TASK_PRIO_MASK 0x78 31462306a36Sopenharmony_ci#define TASK_ATTR_MASK 0x07 31562306a36Sopenharmony_ci/* ---------- SCB tasks ---------- */ 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci/* This is both ssp_task and long_ssp_task 31862306a36Sopenharmony_ci */ 31962306a36Sopenharmony_cistruct initiate_ssp_task { 32062306a36Sopenharmony_ci u8 proto_conn_rate; /* proto:6,4, conn_rate:3,0 */ 32162306a36Sopenharmony_ci __le32 total_xfer_len; 32262306a36Sopenharmony_ci struct ssp_frame_hdr ssp_frame; 32362306a36Sopenharmony_ci struct ssp_command_iu ssp_cmd; 32462306a36Sopenharmony_ci __le16 sister_scb; /* 0xFFFF */ 32562306a36Sopenharmony_ci __le16 conn_handle; /* index to DDB for the intended target */ 32662306a36Sopenharmony_ci u8 data_dir; /* :1,0 */ 32762306a36Sopenharmony_ci#define DATA_DIR_NONE 0x00 32862306a36Sopenharmony_ci#define DATA_DIR_IN 0x01 32962306a36Sopenharmony_ci#define DATA_DIR_OUT 0x02 33062306a36Sopenharmony_ci#define DATA_DIR_BYRECIPIENT 0x03 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci u8 _r_a; 33362306a36Sopenharmony_ci u8 retry_count; 33462306a36Sopenharmony_ci u8 _r_b[5]; 33562306a36Sopenharmony_ci struct sg_el sg_element[3]; /* 2 real and 1 link */ 33662306a36Sopenharmony_ci} __attribute__ ((packed)); 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ci/* This defines both ata_task and atapi_task. 33962306a36Sopenharmony_ci * ata: C bit of FIS should be 1, 34062306a36Sopenharmony_ci * atapi: C bit of FIS should be 1, and command register should be 0xA0, 34162306a36Sopenharmony_ci * to indicate a packet command. 34262306a36Sopenharmony_ci */ 34362306a36Sopenharmony_cistruct initiate_ata_task { 34462306a36Sopenharmony_ci u8 proto_conn_rate; 34562306a36Sopenharmony_ci __le32 total_xfer_len; 34662306a36Sopenharmony_ci struct host_to_dev_fis fis; 34762306a36Sopenharmony_ci __le32 data_offs; 34862306a36Sopenharmony_ci u8 atapi_packet[16]; 34962306a36Sopenharmony_ci u8 _r_a[12]; 35062306a36Sopenharmony_ci __le16 sister_scb; 35162306a36Sopenharmony_ci __le16 conn_handle; 35262306a36Sopenharmony_ci u8 ata_flags; /* CSMI:6,6, DTM:4,4, QT:3,3, data dir:1,0 */ 35362306a36Sopenharmony_ci#define CSMI_TASK 0x40 35462306a36Sopenharmony_ci#define DATA_XFER_MODE_DMA 0x10 35562306a36Sopenharmony_ci#define ATA_Q_TYPE_MASK 0x08 35662306a36Sopenharmony_ci#define ATA_Q_TYPE_UNTAGGED 0x00 35762306a36Sopenharmony_ci#define ATA_Q_TYPE_NCQ 0x08 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci u8 _r_b; 36062306a36Sopenharmony_ci u8 retry_count; 36162306a36Sopenharmony_ci u8 _r_c; 36262306a36Sopenharmony_ci u8 flags; 36362306a36Sopenharmony_ci#define STP_AFFIL_POLICY 0x20 36462306a36Sopenharmony_ci#define SET_AFFIL_POLICY 0x10 36562306a36Sopenharmony_ci#define RET_PARTIAL_SGLIST 0x02 36662306a36Sopenharmony_ci 36762306a36Sopenharmony_ci u8 _r_d[3]; 36862306a36Sopenharmony_ci struct sg_el sg_element[3]; 36962306a36Sopenharmony_ci} __attribute__ ((packed)); 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_cistruct initiate_smp_task { 37262306a36Sopenharmony_ci u8 proto_conn_rate; 37362306a36Sopenharmony_ci u8 _r_a[40]; 37462306a36Sopenharmony_ci struct sg_el smp_req; 37562306a36Sopenharmony_ci __le16 sister_scb; 37662306a36Sopenharmony_ci __le16 conn_handle; 37762306a36Sopenharmony_ci u8 _r_c[8]; 37862306a36Sopenharmony_ci struct sg_el smp_resp; 37962306a36Sopenharmony_ci u8 _r_d[32]; 38062306a36Sopenharmony_ci} __attribute__ ((packed)); 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_cistruct control_phy { 38362306a36Sopenharmony_ci u8 phy_id; 38462306a36Sopenharmony_ci u8 sub_func; 38562306a36Sopenharmony_ci#define DISABLE_PHY 0x00 38662306a36Sopenharmony_ci#define ENABLE_PHY 0x01 38762306a36Sopenharmony_ci#define RELEASE_SPINUP_HOLD 0x02 38862306a36Sopenharmony_ci#define ENABLE_PHY_NO_SAS_OOB 0x03 38962306a36Sopenharmony_ci#define ENABLE_PHY_NO_SATA_OOB 0x04 39062306a36Sopenharmony_ci#define PHY_NO_OP 0x05 39162306a36Sopenharmony_ci#define EXECUTE_HARD_RESET 0x81 39262306a36Sopenharmony_ci 39362306a36Sopenharmony_ci u8 func_mask; 39462306a36Sopenharmony_ci u8 speed_mask; 39562306a36Sopenharmony_ci u8 hot_plug_delay; 39662306a36Sopenharmony_ci u8 port_type; 39762306a36Sopenharmony_ci u8 flags; 39862306a36Sopenharmony_ci#define DEV_PRES_TIMER_OVERRIDE_ENABLE 0x01 39962306a36Sopenharmony_ci#define DISABLE_PHY_IF_OOB_FAILS 0x02 40062306a36Sopenharmony_ci 40162306a36Sopenharmony_ci __le32 timeout_override; 40262306a36Sopenharmony_ci u8 link_reset_retries; 40362306a36Sopenharmony_ci u8 _r_a[47]; 40462306a36Sopenharmony_ci __le16 conn_handle; 40562306a36Sopenharmony_ci u8 _r_b[56]; 40662306a36Sopenharmony_ci} __attribute__ ((packed)); 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_cistruct control_ata_dev { 40962306a36Sopenharmony_ci u8 proto_conn_rate; 41062306a36Sopenharmony_ci __le32 _r_a; 41162306a36Sopenharmony_ci struct host_to_dev_fis fis; 41262306a36Sopenharmony_ci u8 _r_b[32]; 41362306a36Sopenharmony_ci __le16 sister_scb; 41462306a36Sopenharmony_ci __le16 conn_handle; 41562306a36Sopenharmony_ci u8 ata_flags; /* 0 */ 41662306a36Sopenharmony_ci u8 _r_c[55]; 41762306a36Sopenharmony_ci} __attribute__ ((packed)); 41862306a36Sopenharmony_ci 41962306a36Sopenharmony_cistruct empty_scb { 42062306a36Sopenharmony_ci u8 num_valid; 42162306a36Sopenharmony_ci __le32 _r_a; 42262306a36Sopenharmony_ci#define ASD_EDBS_PER_SCB 7 42362306a36Sopenharmony_ci/* header+data+CRC+DMA suffix data */ 42462306a36Sopenharmony_ci#define ASD_EDB_SIZE (24+1024+4+16) 42562306a36Sopenharmony_ci struct sg_el eb[ASD_EDBS_PER_SCB]; 42662306a36Sopenharmony_ci#define ELEMENT_NOT_VALID 0xC0 42762306a36Sopenharmony_ci} __attribute__ ((packed)); 42862306a36Sopenharmony_ci 42962306a36Sopenharmony_cistruct initiate_link_adm { 43062306a36Sopenharmony_ci u8 phy_id; 43162306a36Sopenharmony_ci u8 sub_func; 43262306a36Sopenharmony_ci#define GET_LINK_ERROR_COUNT 0x00 43362306a36Sopenharmony_ci#define RESET_LINK_ERROR_COUNT 0x01 43462306a36Sopenharmony_ci#define ENABLE_NOTIFY_SPINUP_INTS 0x02 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci u8 _r_a[57]; 43762306a36Sopenharmony_ci __le16 conn_handle; 43862306a36Sopenharmony_ci u8 _r_b[56]; 43962306a36Sopenharmony_ci} __attribute__ ((packed)); 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_cistruct copy_memory { 44262306a36Sopenharmony_ci u8 _r_a; 44362306a36Sopenharmony_ci __le16 xfer_len; 44462306a36Sopenharmony_ci __le16 _r_b; 44562306a36Sopenharmony_ci __le64 src_busaddr; 44662306a36Sopenharmony_ci u8 src_ds; /* See definition of sg_el */ 44762306a36Sopenharmony_ci u8 _r_c[45]; 44862306a36Sopenharmony_ci __le16 conn_handle; 44962306a36Sopenharmony_ci __le64 _r_d; 45062306a36Sopenharmony_ci __le64 dest_busaddr; 45162306a36Sopenharmony_ci u8 dest_ds; /* See definition of sg_el */ 45262306a36Sopenharmony_ci u8 _r_e[39]; 45362306a36Sopenharmony_ci} __attribute__ ((packed)); 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_cistruct abort_task { 45662306a36Sopenharmony_ci u8 proto_conn_rate; 45762306a36Sopenharmony_ci __le32 _r_a; 45862306a36Sopenharmony_ci struct ssp_frame_hdr ssp_frame; 45962306a36Sopenharmony_ci struct ssp_tmf_iu ssp_task; 46062306a36Sopenharmony_ci __le16 sister_scb; 46162306a36Sopenharmony_ci __le16 conn_handle; 46262306a36Sopenharmony_ci u8 flags; /* ovrd_itnl_timer:3,3, suspend_data_trans:2,2 */ 46362306a36Sopenharmony_ci#define SUSPEND_DATA_TRANS 0x04 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci u8 _r_b; 46662306a36Sopenharmony_ci u8 retry_count; 46762306a36Sopenharmony_ci u8 _r_c[5]; 46862306a36Sopenharmony_ci __le16 index; /* Transaction context of task to be queried */ 46962306a36Sopenharmony_ci __le16 itnl_to; 47062306a36Sopenharmony_ci u8 _r_d[44]; 47162306a36Sopenharmony_ci} __attribute__ ((packed)); 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_cistruct clear_nexus { 47462306a36Sopenharmony_ci u8 nexus; 47562306a36Sopenharmony_ci#define NEXUS_ADAPTER 0x00 47662306a36Sopenharmony_ci#define NEXUS_PORT 0x01 47762306a36Sopenharmony_ci#define NEXUS_I_T 0x02 47862306a36Sopenharmony_ci#define NEXUS_I_T_L 0x03 47962306a36Sopenharmony_ci#define NEXUS_TAG 0x04 48062306a36Sopenharmony_ci#define NEXUS_TRANS_CX 0x05 48162306a36Sopenharmony_ci#define NEXUS_SATA_TAG 0x06 48262306a36Sopenharmony_ci#define NEXUS_T_L 0x07 48362306a36Sopenharmony_ci#define NEXUS_L 0x08 48462306a36Sopenharmony_ci#define NEXUS_T_TAG 0x09 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci __le32 _r_a; 48762306a36Sopenharmony_ci u8 flags; 48862306a36Sopenharmony_ci#define SUSPEND_TX 0x80 48962306a36Sopenharmony_ci#define RESUME_TX 0x40 49062306a36Sopenharmony_ci#define SEND_Q 0x04 49162306a36Sopenharmony_ci#define EXEC_Q 0x02 49262306a36Sopenharmony_ci#define NOTINQ 0x01 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ci u8 _r_b[3]; 49562306a36Sopenharmony_ci u8 conn_mask; 49662306a36Sopenharmony_ci u8 _r_c[19]; 49762306a36Sopenharmony_ci struct ssp_tmf_iu ssp_task; /* LUN and TAG */ 49862306a36Sopenharmony_ci __le16 _r_d; 49962306a36Sopenharmony_ci __le16 conn_handle; 50062306a36Sopenharmony_ci __le64 _r_e; 50162306a36Sopenharmony_ci __le16 index; /* Transaction context of task to be cleared */ 50262306a36Sopenharmony_ci __le16 context; /* Clear nexus context */ 50362306a36Sopenharmony_ci u8 _r_f[44]; 50462306a36Sopenharmony_ci} __attribute__ ((packed)); 50562306a36Sopenharmony_ci 50662306a36Sopenharmony_cistruct initiate_ssp_tmf { 50762306a36Sopenharmony_ci u8 proto_conn_rate; 50862306a36Sopenharmony_ci __le32 _r_a; 50962306a36Sopenharmony_ci struct ssp_frame_hdr ssp_frame; 51062306a36Sopenharmony_ci struct ssp_tmf_iu ssp_task; 51162306a36Sopenharmony_ci __le16 sister_scb; 51262306a36Sopenharmony_ci __le16 conn_handle; 51362306a36Sopenharmony_ci u8 flags; /* itnl override and suspend data tx */ 51462306a36Sopenharmony_ci#define OVERRIDE_ITNL_TIMER 8 51562306a36Sopenharmony_ci 51662306a36Sopenharmony_ci u8 _r_b; 51762306a36Sopenharmony_ci u8 retry_count; 51862306a36Sopenharmony_ci u8 _r_c[5]; 51962306a36Sopenharmony_ci __le16 index; /* Transaction context of task to be queried */ 52062306a36Sopenharmony_ci __le16 itnl_to; 52162306a36Sopenharmony_ci u8 _r_d[44]; 52262306a36Sopenharmony_ci} __attribute__ ((packed)); 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci/* Transmits an arbitrary primitive on the link. 52562306a36Sopenharmony_ci * Used for NOTIFY and BROADCAST. 52662306a36Sopenharmony_ci */ 52762306a36Sopenharmony_cistruct send_prim { 52862306a36Sopenharmony_ci u8 phy_id; 52962306a36Sopenharmony_ci u8 wait_transmit; /* :0,0 */ 53062306a36Sopenharmony_ci u8 xmit_flags; 53162306a36Sopenharmony_ci#define XMTPSIZE_MASK 0xF0 53262306a36Sopenharmony_ci#define XMTPSIZE_SINGLE 0x10 53362306a36Sopenharmony_ci#define XMTPSIZE_REPEATED 0x20 53462306a36Sopenharmony_ci#define XMTPSIZE_CONT 0x20 53562306a36Sopenharmony_ci#define XMTPSIZE_TRIPLE 0x30 53662306a36Sopenharmony_ci#define XMTPSIZE_REDUNDANT 0x60 53762306a36Sopenharmony_ci#define XMTPSIZE_INF 0 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci#define XMTCONTEN 0x04 54062306a36Sopenharmony_ci#define XMTPFRM 0x02 /* Transmit at the next frame boundary */ 54162306a36Sopenharmony_ci#define XMTPIMM 0x01 /* Transmit immediately */ 54262306a36Sopenharmony_ci 54362306a36Sopenharmony_ci __le16 _r_a; 54462306a36Sopenharmony_ci u8 prim[4]; /* K, D0, D1, D2 */ 54562306a36Sopenharmony_ci u8 _r_b[50]; 54662306a36Sopenharmony_ci __le16 conn_handle; 54762306a36Sopenharmony_ci u8 _r_c[56]; 54862306a36Sopenharmony_ci} __attribute__ ((packed)); 54962306a36Sopenharmony_ci 55062306a36Sopenharmony_ci/* This describes both SSP Target Get Data and SSP Target Get Data And 55162306a36Sopenharmony_ci * Send Good Response SCBs. Used when the sequencer is operating in 55262306a36Sopenharmony_ci * target mode... 55362306a36Sopenharmony_ci */ 55462306a36Sopenharmony_cistruct ssp_targ_get_data { 55562306a36Sopenharmony_ci u8 proto_conn_rate; 55662306a36Sopenharmony_ci __le32 total_xfer_len; 55762306a36Sopenharmony_ci struct ssp_frame_hdr ssp_frame; 55862306a36Sopenharmony_ci struct xfer_rdy_iu xfer_rdy; 55962306a36Sopenharmony_ci u8 lun[LUN_SIZE]; 56062306a36Sopenharmony_ci __le64 _r_a; 56162306a36Sopenharmony_ci __le16 sister_scb; 56262306a36Sopenharmony_ci __le16 conn_handle; 56362306a36Sopenharmony_ci u8 data_dir; /* 01b */ 56462306a36Sopenharmony_ci u8 _r_b; 56562306a36Sopenharmony_ci u8 retry_count; 56662306a36Sopenharmony_ci u8 _r_c[5]; 56762306a36Sopenharmony_ci struct sg_el sg_element[3]; 56862306a36Sopenharmony_ci} __attribute__ ((packed)); 56962306a36Sopenharmony_ci 57062306a36Sopenharmony_ci/* ---------- The actual SCB struct ---------- */ 57162306a36Sopenharmony_ci 57262306a36Sopenharmony_cistruct scb { 57362306a36Sopenharmony_ci struct scb_header header; 57462306a36Sopenharmony_ci union { 57562306a36Sopenharmony_ci struct initiate_ssp_task ssp_task; 57662306a36Sopenharmony_ci struct initiate_ata_task ata_task; 57762306a36Sopenharmony_ci struct initiate_smp_task smp_task; 57862306a36Sopenharmony_ci struct control_phy control_phy; 57962306a36Sopenharmony_ci struct control_ata_dev control_ata_dev; 58062306a36Sopenharmony_ci struct empty_scb escb; 58162306a36Sopenharmony_ci struct initiate_link_adm link_adm; 58262306a36Sopenharmony_ci struct copy_memory cp_mem; 58362306a36Sopenharmony_ci struct abort_task abort_task; 58462306a36Sopenharmony_ci struct clear_nexus clear_nexus; 58562306a36Sopenharmony_ci struct initiate_ssp_tmf ssp_tmf; 58662306a36Sopenharmony_ci }; 58762306a36Sopenharmony_ci} __attribute__ ((packed)); 58862306a36Sopenharmony_ci 58962306a36Sopenharmony_ci/* ---------- Done List ---------- */ 59062306a36Sopenharmony_ci/* The done list entry opcode field is defined below. 59162306a36Sopenharmony_ci * The mnemonic encoding and meaning is as follows: 59262306a36Sopenharmony_ci * TC - Task Complete, status was received and acknowledged 59362306a36Sopenharmony_ci * TF - Task Failed, indicates an error prior to receiving acknowledgment 59462306a36Sopenharmony_ci * for the command: 59562306a36Sopenharmony_ci * - no conn, 59662306a36Sopenharmony_ci * - NACK or R_ERR received in response to this command, 59762306a36Sopenharmony_ci * - credit blocked or not available, or in the case of SMP request, 59862306a36Sopenharmony_ci * - no SMP response was received. 59962306a36Sopenharmony_ci * In these four cases it is known that the target didn't receive the 60062306a36Sopenharmony_ci * command. 60162306a36Sopenharmony_ci * TI - Task Interrupted, error after the command was acknowledged. It is 60262306a36Sopenharmony_ci * known that the command was received by the target. 60362306a36Sopenharmony_ci * TU - Task Unacked, command was transmitted but neither ACK (R_OK) nor NAK 60462306a36Sopenharmony_ci * (R_ERR) was received due to loss of signal, broken connection, loss of 60562306a36Sopenharmony_ci * dword sync or other reason. The application client should send the 60662306a36Sopenharmony_ci * appropriate task query. 60762306a36Sopenharmony_ci * TA - Task Aborted, see TF. 60862306a36Sopenharmony_ci * _RESP - The completion includes an empty buffer containing status. 60962306a36Sopenharmony_ci * TO - Timeout. 61062306a36Sopenharmony_ci */ 61162306a36Sopenharmony_ci#define TC_NO_ERROR 0x00 61262306a36Sopenharmony_ci#define TC_UNDERRUN 0x01 61362306a36Sopenharmony_ci#define TC_OVERRUN 0x02 61462306a36Sopenharmony_ci#define TF_OPEN_TO 0x03 61562306a36Sopenharmony_ci#define TF_OPEN_REJECT 0x04 61662306a36Sopenharmony_ci#define TI_BREAK 0x05 61762306a36Sopenharmony_ci#define TI_PROTO_ERR 0x06 61862306a36Sopenharmony_ci#define TC_SSP_RESP 0x07 61962306a36Sopenharmony_ci#define TI_PHY_DOWN 0x08 62062306a36Sopenharmony_ci#define TF_PHY_DOWN 0x09 62162306a36Sopenharmony_ci#define TC_LINK_ADM_RESP 0x0a 62262306a36Sopenharmony_ci#define TC_CSMI 0x0b 62362306a36Sopenharmony_ci#define TC_ATA_RESP 0x0c 62462306a36Sopenharmony_ci#define TU_PHY_DOWN 0x0d 62562306a36Sopenharmony_ci#define TU_BREAK 0x0e 62662306a36Sopenharmony_ci#define TI_SATA_TO 0x0f 62762306a36Sopenharmony_ci#define TI_NAK 0x10 62862306a36Sopenharmony_ci#define TC_CONTROL_PHY 0x11 62962306a36Sopenharmony_ci#define TF_BREAK 0x12 63062306a36Sopenharmony_ci#define TC_RESUME 0x13 63162306a36Sopenharmony_ci#define TI_ACK_NAK_TO 0x14 63262306a36Sopenharmony_ci#define TF_SMPRSP_TO 0x15 63362306a36Sopenharmony_ci#define TF_SMP_XMIT_RCV_ERR 0x16 63462306a36Sopenharmony_ci#define TC_PARTIAL_SG_LIST 0x17 63562306a36Sopenharmony_ci#define TU_ACK_NAK_TO 0x18 63662306a36Sopenharmony_ci#define TU_SATA_TO 0x19 63762306a36Sopenharmony_ci#define TF_NAK_RECV 0x1a 63862306a36Sopenharmony_ci#define TA_I_T_NEXUS_LOSS 0x1b 63962306a36Sopenharmony_ci#define TC_ATA_R_ERR_RECV 0x1c 64062306a36Sopenharmony_ci#define TF_TMF_NO_CTX 0x1d 64162306a36Sopenharmony_ci#define TA_ON_REQ 0x1e 64262306a36Sopenharmony_ci#define TF_TMF_NO_TAG 0x1f 64362306a36Sopenharmony_ci#define TF_TMF_TAG_FREE 0x20 64462306a36Sopenharmony_ci#define TF_TMF_TASK_DONE 0x21 64562306a36Sopenharmony_ci#define TF_TMF_NO_CONN_HANDLE 0x22 64662306a36Sopenharmony_ci#define TC_TASK_CLEARED 0x23 64762306a36Sopenharmony_ci#define TI_SYNCS_RECV 0x24 64862306a36Sopenharmony_ci#define TU_SYNCS_RECV 0x25 64962306a36Sopenharmony_ci#define TF_IRTT_TO 0x26 65062306a36Sopenharmony_ci#define TF_NO_SMP_CONN 0x27 65162306a36Sopenharmony_ci#define TF_IU_SHORT 0x28 65262306a36Sopenharmony_ci#define TF_DATA_OFFS_ERR 0x29 65362306a36Sopenharmony_ci#define TF_INV_CONN_HANDLE 0x2a 65462306a36Sopenharmony_ci#define TF_REQUESTED_N_PENDING 0x2b 65562306a36Sopenharmony_ci 65662306a36Sopenharmony_ci/* 0xc1 - 0xc7: empty buffer received, 65762306a36Sopenharmony_ci 0xd1 - 0xd7: establish nexus empty buffer received 65862306a36Sopenharmony_ci*/ 65962306a36Sopenharmony_ci/* This is the ESCB mask */ 66062306a36Sopenharmony_ci#define ESCB_RECVD 0xC0 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci 66362306a36Sopenharmony_ci/* This struct done_list_struct defines the done list entry. 66462306a36Sopenharmony_ci * All fields are LE. 66562306a36Sopenharmony_ci */ 66662306a36Sopenharmony_cistruct done_list_struct { 66762306a36Sopenharmony_ci __le16 index; /* aka transaction context */ 66862306a36Sopenharmony_ci u8 opcode; 66962306a36Sopenharmony_ci u8 status_block[4]; 67062306a36Sopenharmony_ci u8 toggle; /* bit 0 */ 67162306a36Sopenharmony_ci#define DL_TOGGLE_MASK 0x01 67262306a36Sopenharmony_ci} __attribute__ ((packed)); 67362306a36Sopenharmony_ci 67462306a36Sopenharmony_ci/* ---------- PHYS ---------- */ 67562306a36Sopenharmony_ci 67662306a36Sopenharmony_cistruct asd_phy { 67762306a36Sopenharmony_ci struct asd_sas_phy sas_phy; 67862306a36Sopenharmony_ci struct asd_phy_desc *phy_desc; /* hw profile */ 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci struct sas_identify_frame *identify_frame; 68162306a36Sopenharmony_ci struct asd_dma_tok *id_frm_tok; 68262306a36Sopenharmony_ci struct asd_port *asd_port; 68362306a36Sopenharmony_ci 68462306a36Sopenharmony_ci u8 frame_rcvd[ASD_EDB_SIZE]; 68562306a36Sopenharmony_ci}; 68662306a36Sopenharmony_ci 68762306a36Sopenharmony_ci 68862306a36Sopenharmony_ci#define ASD_SCB_SIZE sizeof(struct scb) 68962306a36Sopenharmony_ci#define ASD_DDB_SIZE sizeof(struct asd_ddb_ssp_smp_target_port) 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci/* Define this to 0 if you do not want NOTIFY (ENABLE SPINIP) sent. 69262306a36Sopenharmony_ci * Default: 0x10 (it's a mask) 69362306a36Sopenharmony_ci */ 69462306a36Sopenharmony_ci#define ASD_NOTIFY_ENABLE_SPINUP 0x10 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_ci/* If enabled, set this to the interval between transmission 69762306a36Sopenharmony_ci * of NOTIFY (ENABLE SPINUP). In units of 200 us. 69862306a36Sopenharmony_ci */ 69962306a36Sopenharmony_ci#define ASD_NOTIFY_TIMEOUT 2500 70062306a36Sopenharmony_ci 70162306a36Sopenharmony_ci/* Initial delay after OOB, before we transmit NOTIFY (ENABLE SPINUP). 70262306a36Sopenharmony_ci * If 0, transmit immediately. In milliseconds. 70362306a36Sopenharmony_ci */ 70462306a36Sopenharmony_ci#define ASD_NOTIFY_DOWN_COUNT 0 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci/* Device present timer timeout constant, 10 ms. */ 70762306a36Sopenharmony_ci#define ASD_DEV_PRESENT_TIMEOUT 0x2710 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci#define ASD_SATA_INTERLOCK_TIMEOUT 0 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci/* How long to wait before shutting down an STP connection, unless 71262306a36Sopenharmony_ci * an STP target sent frame(s). 50 usec. 71362306a36Sopenharmony_ci * IGNORED by the sequencer (i.e. value 0 always). 71462306a36Sopenharmony_ci */ 71562306a36Sopenharmony_ci#define ASD_STP_SHUTDOWN_TIMEOUT 0x0 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci/* ATA soft reset timer timeout. 5 usec. */ 71862306a36Sopenharmony_ci#define ASD_SRST_ASSERT_TIMEOUT 0x05 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ci/* 31 sec */ 72162306a36Sopenharmony_ci#define ASD_RCV_FIS_TIMEOUT 0x01D905C0 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci#define ASD_ONE_MILLISEC_TIMEOUT 0x03e8 72462306a36Sopenharmony_ci 72562306a36Sopenharmony_ci/* COMINIT timer */ 72662306a36Sopenharmony_ci#define ASD_TEN_MILLISEC_TIMEOUT 0x2710 72762306a36Sopenharmony_ci#define ASD_COMINIT_TIMEOUT ASD_TEN_MILLISEC_TIMEOUT 72862306a36Sopenharmony_ci 72962306a36Sopenharmony_ci/* 1 sec */ 73062306a36Sopenharmony_ci#define ASD_SMP_RCV_TIMEOUT 0x000F4240 73162306a36Sopenharmony_ci 73262306a36Sopenharmony_ci#endif 733