Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
2a8cf462
Commit
2a8cf462
authored
Jul 04, 2004
by
Jeff Garzik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[libata sata_promise] convert to using packets for non-data taskfiles
parent
58657980
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
41 deletions
+27
-41
drivers/scsi/sata_promise.c
drivers/scsi/sata_promise.c
+27
-41
No files found.
drivers/scsi/sata_promise.c
View file @
2a8cf462
...
...
@@ -74,7 +74,6 @@ struct pdc_port_priv {
static
u32
pdc_sata_scr_read
(
struct
ata_port
*
ap
,
unsigned
int
sc_reg
);
static
void
pdc_sata_scr_write
(
struct
ata_port
*
ap
,
unsigned
int
sc_reg
,
u32
val
);
static
int
pdc_sata_init_one
(
struct
pci_dev
*
pdev
,
const
struct
pci_device_id
*
ent
);
static
void
pdc_dma_start
(
struct
ata_queued_cmd
*
qc
);
static
irqreturn_t
pdc_interrupt
(
int
irq
,
void
*
dev_instance
,
struct
pt_regs
*
regs
);
static
void
pdc_eng_timeout
(
struct
ata_port
*
ap
);
static
int
pdc_port_start
(
struct
ata_port
*
ap
);
...
...
@@ -83,8 +82,6 @@ static void pdc_phy_reset(struct ata_port *ap);
static
void
pdc_qc_prep
(
struct
ata_queued_cmd
*
qc
);
static
void
pdc_tf_load_mmio
(
struct
ata_port
*
ap
,
struct
ata_taskfile
*
tf
);
static
void
pdc_exec_command_mmio
(
struct
ata_port
*
ap
,
struct
ata_taskfile
*
tf
);
static
inline
void
pdc_dma_complete
(
struct
ata_port
*
ap
,
struct
ata_queued_cmd
*
qc
,
int
have_err
);
static
void
pdc_irq_clear
(
struct
ata_port
*
ap
);
static
int
pdc_qc_issue_prot
(
struct
ata_queued_cmd
*
qc
);
...
...
@@ -271,26 +268,26 @@ static void pdc_qc_prep(struct ata_queued_cmd *qc)
VPRINTK
(
"ENTER
\n
"
);
ata_qc_prep
(
qc
);
i
=
pdc_pkt_header
(
&
qc
->
tf
,
qc
->
ap
->
prd_dma
,
qc
->
dev
->
devno
,
pp
->
pkt
);
switch
(
qc
->
tf
.
protocol
)
{
case
ATA_PROT_DMA
:
ata_qc_prep
(
qc
);
/* fall through */
if
(
qc
->
tf
.
flags
&
ATA_TFLAG_LBA48
)
i
=
pdc_prep_lba48
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
else
i
=
pdc_prep_lba28
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
case
ATA_PROT_NODATA
:
i
=
pdc_pkt_header
(
&
qc
->
tf
,
qc
->
ap
->
prd_dma
,
qc
->
dev
->
devno
,
pp
->
pkt
);
pdc_pkt_footer
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
}
if
(
qc
->
tf
.
flags
&
ATA_TFLAG_LBA48
)
i
=
pdc_prep_lba48
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
else
i
=
pdc_prep_lba28
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
static
inline
void
pdc_dma_complete
(
struct
ata_port
*
ap
,
struct
ata_queued_cmd
*
qc
,
int
have_err
)
{
u8
err_bit
=
have_err
?
ATA_ERR
:
0
;
pdc_pkt_footer
(
&
qc
->
tf
,
pp
->
pkt
,
i
);
break
;
/* get drive status; clear intr; complete txn */
ata_qc_complete
(
qc
,
ata_wait_idle
(
ap
)
|
err_bit
);
default:
break
;
}
}
static
void
pdc_eng_timeout
(
struct
ata_port
*
ap
)
...
...
@@ -317,19 +314,11 @@ static void pdc_eng_timeout(struct ata_port *ap)
switch
(
qc
->
tf
.
protocol
)
{
case
ATA_PROT_DMA
:
case
ATA_PROT_NODATA
:
printk
(
KERN_ERR
"ata%u: DMA timeout
\n
"
,
ap
->
id
);
ata_qc_complete
(
qc
,
ata_wait_idle
(
ap
)
|
ATA_ERR
);
break
;
case
ATA_PROT_NODATA
:
drv_stat
=
ata_busy_wait
(
ap
,
ATA_BUSY
|
ATA_DRQ
,
1000
);
printk
(
KERN_ERR
"ata%u: command 0x%x timeout, stat 0x%x
\n
"
,
ap
->
id
,
qc
->
tf
.
command
,
drv_stat
);
ata_qc_complete
(
qc
,
drv_stat
);
break
;
default:
drv_stat
=
ata_busy_wait
(
ap
,
ATA_BUSY
|
ATA_DRQ
,
1000
);
...
...
@@ -360,13 +349,8 @@ static inline unsigned int pdc_host_intr( struct ata_port *ap,
switch
(
qc
->
tf
.
protocol
)
{
case
ATA_PROT_DMA
:
pdc_dma_complete
(
ap
,
qc
,
have_err
);
handled
=
1
;
break
;
case
ATA_PROT_NODATA
:
/* command completion, but no data xfer */
status
=
ata_busy_wait
(
ap
,
ATA_BUSY
|
ATA_DRQ
,
1000
);
DPRINTK
(
"BUS_NODATA (drv_stat 0x%X)
\n
"
,
status
);
case
ATA_PROT_NODATA
:
status
=
ata_wait_idle
(
ap
);
if
(
have_err
)
status
|=
ATA_ERR
;
ata_qc_complete
(
qc
,
status
);
...
...
@@ -442,7 +426,7 @@ static irqreturn_t pdc_interrupt (int irq, void *dev_instance, struct pt_regs *r
return
IRQ_RETVAL
(
handled
);
}
static
inline
void
pdc_
dma
_start
(
struct
ata_queued_cmd
*
qc
)
static
inline
void
pdc_
packet
_start
(
struct
ata_queued_cmd
*
qc
)
{
struct
ata_port
*
ap
=
qc
->
ap
;
struct
pdc_port_priv
*
pp
=
ap
->
private_data
;
...
...
@@ -464,7 +448,8 @@ static int pdc_qc_issue_prot(struct ata_queued_cmd *qc)
{
switch
(
qc
->
tf
.
protocol
)
{
case
ATA_PROT_DMA
:
pdc_dma_start
(
qc
);
case
ATA_PROT_NODATA
:
pdc_packet_start
(
qc
);
return
0
;
case
ATA_PROT_ATAPI_DMA
:
...
...
@@ -480,14 +465,16 @@ static int pdc_qc_issue_prot(struct ata_queued_cmd *qc)
static
void
pdc_tf_load_mmio
(
struct
ata_port
*
ap
,
struct
ata_taskfile
*
tf
)
{
WARN_ON
(
tf
->
protocol
==
ATA_PROT_DMA
);
WARN_ON
(
tf
->
protocol
==
ATA_PROT_DMA
||
tf
->
protocol
==
ATA_PROT_NODATA
);
ata_tf_load_mmio
(
ap
,
tf
);
}
static
void
pdc_exec_command_mmio
(
struct
ata_port
*
ap
,
struct
ata_taskfile
*
tf
)
{
WARN_ON
(
tf
->
protocol
==
ATA_PROT_DMA
);
WARN_ON
(
tf
->
protocol
==
ATA_PROT_DMA
||
tf
->
protocol
==
ATA_PROT_NODATA
);
ata_exec_command_mmio
(
ap
,
tf
);
}
...
...
@@ -541,8 +528,7 @@ static void pdc_host_init(unsigned int chip_id, struct ata_probe_ent *pe)
writel
(
tmp
,
mmio
+
PDC_TBG_MODE
);
readl
(
mmio
+
PDC_TBG_MODE
);
/* flush */
set_current_state
(
TASK_UNINTERRUPTIBLE
);
schedule_timeout
(
msecs_to_jiffies
(
10
)
+
1
);
msleep
(
10
);
/* adjust slew rate control register. */
tmp
=
readl
(
mmio
+
PDC_SLEW_CTL
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment