aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/DocBook/libata.tmpl5
-rw-r--r--drivers/scsi/libsas/sas_ata.c24
2 files changed, 19 insertions, 10 deletions
diff --git a/Documentation/DocBook/libata.tmpl b/Documentation/DocBook/libata.tmpl
index e2e24b4778d4..ba9975771503 100644
--- a/Documentation/DocBook/libata.tmpl
+++ b/Documentation/DocBook/libata.tmpl
@@ -456,8 +456,9 @@ void (*irq_clear) (struct ata_port *);
456 456
457 <sect2><title>SATA phy read/write</title> 457 <sect2><title>SATA phy read/write</title>
458 <programlisting> 458 <programlisting>
459u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg); 459int (*scr_read) (struct ata_port *ap, unsigned int sc_reg,
460void (*scr_write) (struct ata_port *ap, unsigned int sc_reg, 460 u32 *val);
461int (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
461 u32 val); 462 u32 val);
462 </programlisting> 463 </programlisting>
463 464
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 2db258996751..359391f5735f 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -172,7 +172,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
172 qc->tf.nsect = 0; 172 qc->tf.nsect = 0;
173 } 173 }
174 174
175 ata_tf_to_fis(&qc->tf, (u8*)&task->ata_task.fis, 0); 175 ata_tf_to_fis(&qc->tf, 1, 0, (u8*)&task->ata_task.fis);
176 task->uldd_task = qc; 176 task->uldd_task = qc;
177 if (is_atapi_taskfile(&qc->tf)) { 177 if (is_atapi_taskfile(&qc->tf)) {
178 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len); 178 memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
@@ -298,7 +298,7 @@ static void sas_ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
298 memcpy(tf, &dev->sata_dev.tf, sizeof (*tf)); 298 memcpy(tf, &dev->sata_dev.tf, sizeof (*tf));
299} 299}
300 300
301static void sas_ata_scr_write(struct ata_port *ap, unsigned int sc_reg_in, 301static int sas_ata_scr_write(struct ata_port *ap, unsigned int sc_reg_in,
302 u32 val) 302 u32 val)
303{ 303{
304 struct domain_device *dev = ap->private_data; 304 struct domain_device *dev = ap->private_data;
@@ -317,25 +317,33 @@ static void sas_ata_scr_write(struct ata_port *ap, unsigned int sc_reg_in,
317 case SCR_ACTIVE: 317 case SCR_ACTIVE:
318 dev->sata_dev.ap->sactive = val; 318 dev->sata_dev.ap->sactive = val;
319 break; 319 break;
320 default:
321 return -EINVAL;
320 } 322 }
323 return 0;
321} 324}
322 325
323static u32 sas_ata_scr_read(struct ata_port *ap, unsigned int sc_reg_in) 326static int sas_ata_scr_read(struct ata_port *ap, unsigned int sc_reg_in,
327 u32 *val)
324{ 328{
325 struct domain_device *dev = ap->private_data; 329 struct domain_device *dev = ap->private_data;
326 330
327 SAS_DPRINTK("STUB %s\n", __FUNCTION__); 331 SAS_DPRINTK("STUB %s\n", __FUNCTION__);
328 switch (sc_reg_in) { 332 switch (sc_reg_in) {
329 case SCR_STATUS: 333 case SCR_STATUS:
330 return dev->sata_dev.sstatus; 334 *val = dev->sata_dev.sstatus;
335 return 0;
331 case SCR_CONTROL: 336 case SCR_CONTROL:
332 return dev->sata_dev.scontrol; 337 *val = dev->sata_dev.scontrol;
338 return 0;
333 case SCR_ERROR: 339 case SCR_ERROR:
334 return dev->sata_dev.serror; 340 *val = dev->sata_dev.serror;
341 return 0;
335 case SCR_ACTIVE: 342 case SCR_ACTIVE:
336 return dev->sata_dev.ap->sactive; 343 *val = dev->sata_dev.ap->sactive;
344 return 0;
337 default: 345 default:
338 return 0xffffffffU; 346 return -EINVAL;
339 } 347 }
340} 348}
341 349