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
ae5684ce
Commit
ae5684ce
authored
Nov 12, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
parents
0fde7f59
02eaa666
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
8 deletions
+33
-8
drivers/scsi/ahci.c
drivers/scsi/ahci.c
+27
-5
drivers/scsi/sata_qstor.c
drivers/scsi/sata_qstor.c
+6
-3
No files found.
drivers/scsi/ahci.c
View file @
ae5684ce
...
...
@@ -134,6 +134,7 @@ enum {
PORT_IRQ_D2H_REG_FIS
,
/* PORT_CMD bits */
PORT_CMD_ATAPI
=
(
1
<<
24
),
/* Device is ATAPI */
PORT_CMD_LIST_ON
=
(
1
<<
15
),
/* cmd list DMA engine running */
PORT_CMD_FIS_ON
=
(
1
<<
14
),
/* FIS DMA engine running */
PORT_CMD_FIS_RX
=
(
1
<<
4
),
/* Enable FIS receive DMA engine */
...
...
@@ -441,7 +442,7 @@ static void ahci_phy_reset(struct ata_port *ap)
void
__iomem
*
port_mmio
=
(
void
__iomem
*
)
ap
->
ioaddr
.
cmd_addr
;
struct
ata_taskfile
tf
;
struct
ata_device
*
dev
=
&
ap
->
device
[
0
];
u32
tmp
;
u32
new_tmp
,
tmp
;
__sata_phy_reset
(
ap
);
...
...
@@ -455,8 +456,21 @@ static void ahci_phy_reset(struct ata_port *ap)
tf
.
nsect
=
(
tmp
)
&
0xff
;
dev
->
class
=
ata_dev_classify
(
&
tf
);
if
(
!
ata_dev_present
(
dev
))
if
(
!
ata_dev_present
(
dev
))
{
ata_port_disable
(
ap
);
return
;
}
/* Make sure port's ATAPI bit is set appropriately */
new_tmp
=
tmp
=
readl
(
port_mmio
+
PORT_CMD
);
if
(
dev
->
class
==
ATA_DEV_ATAPI
)
new_tmp
|=
PORT_CMD_ATAPI
;
else
new_tmp
&=
~
PORT_CMD_ATAPI
;
if
(
new_tmp
!=
tmp
)
{
writel
(
new_tmp
,
port_mmio
+
PORT_CMD
);
readl
(
port_mmio
+
PORT_CMD
);
/* flush */
}
}
static
u8
ahci_check_status
(
struct
ata_port
*
ap
)
...
...
@@ -474,11 +488,12 @@ static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
ata_tf_from_fis
(
d2h_fis
,
tf
);
}
static
void
ahci_fill_sg
(
struct
ata_queued_cmd
*
qc
)
static
unsigned
int
ahci_fill_sg
(
struct
ata_queued_cmd
*
qc
)
{
struct
ahci_port_priv
*
pp
=
qc
->
ap
->
private_data
;
struct
scatterlist
*
sg
;
struct
ahci_sg
*
ahci_sg
;
unsigned
int
n_sg
=
0
;
VPRINTK
(
"ENTER
\n
"
);
...
...
@@ -493,8 +508,12 @@ static void ahci_fill_sg(struct ata_queued_cmd *qc)
ahci_sg
->
addr
=
cpu_to_le32
(
addr
&
0xffffffff
);
ahci_sg
->
addr_hi
=
cpu_to_le32
((
addr
>>
16
)
>>
16
);
ahci_sg
->
flags_size
=
cpu_to_le32
(
sg_len
-
1
);
ahci_sg
++
;
n_sg
++
;
}
return
n_sg
;
}
static
void
ahci_qc_prep
(
struct
ata_queued_cmd
*
qc
)
...
...
@@ -503,13 +522,14 @@ static void ahci_qc_prep(struct ata_queued_cmd *qc)
struct
ahci_port_priv
*
pp
=
ap
->
private_data
;
u32
opts
;
const
u32
cmd_fis_len
=
5
;
/* five dwords */
unsigned
int
n_elem
;
/*
* Fill in command slot information (currently only one slot,
* slot 0, is currently since we don't do queueing)
*/
opts
=
(
qc
->
n_elem
<<
16
)
|
cmd_fis_len
;
opts
=
cmd_fis_len
;
if
(
qc
->
tf
.
flags
&
ATA_TFLAG_WRITE
)
opts
|=
AHCI_CMD_WRITE
;
if
(
is_atapi_taskfile
(
&
qc
->
tf
))
...
...
@@ -533,7 +553,9 @@ static void ahci_qc_prep(struct ata_queued_cmd *qc)
if
(
!
(
qc
->
flags
&
ATA_QCFLAG_DMAMAP
))
return
;
ahci_fill_sg
(
qc
);
n_elem
=
ahci_fill_sg
(
qc
);
pp
->
cmd_slot
[
0
].
opts
|=
cpu_to_le32
(
n_elem
<<
16
);
}
static
void
ahci_intr_error
(
struct
ata_port
*
ap
,
u32
irq_stat
)
...
...
drivers/scsi/sata_qstor.c
View file @
ae5684ce
...
...
@@ -268,7 +268,7 @@ static void qs_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
writel
(
val
,
(
void
__iomem
*
)(
ap
->
ioaddr
.
scr_addr
+
(
sc_reg
*
8
)));
}
static
void
qs_fill_sg
(
struct
ata_queued_cmd
*
qc
)
static
unsigned
int
qs_fill_sg
(
struct
ata_queued_cmd
*
qc
)
{
struct
scatterlist
*
sg
;
struct
ata_port
*
ap
=
qc
->
ap
;
...
...
@@ -296,6 +296,8 @@ static void qs_fill_sg(struct ata_queued_cmd *qc)
(
unsigned
long
long
)
addr
,
len
);
nelem
++
;
}
return
nelem
;
}
static
void
qs_qc_prep
(
struct
ata_queued_cmd
*
qc
)
...
...
@@ -304,6 +306,7 @@ static void qs_qc_prep(struct ata_queued_cmd *qc)
u8
dflags
=
QS_DF_PORD
,
*
buf
=
pp
->
pkt
;
u8
hflags
=
QS_HF_DAT
|
QS_HF_IEN
|
QS_HF_VLD
;
u64
addr
;
unsigned
int
nelem
;
VPRINTK
(
"ENTER
\n
"
);
...
...
@@ -313,7 +316,7 @@ static void qs_qc_prep(struct ata_queued_cmd *qc)
return
;
}
qs_fill_sg
(
qc
);
nelem
=
qs_fill_sg
(
qc
);
if
((
qc
->
tf
.
flags
&
ATA_TFLAG_WRITE
))
hflags
|=
QS_HF_DIRO
;
...
...
@@ -324,7 +327,7 @@ static void qs_qc_prep(struct ata_queued_cmd *qc)
buf
[
0
]
=
QS_HCB_HDR
;
buf
[
1
]
=
hflags
;
*
(
__le32
*
)(
&
buf
[
4
])
=
cpu_to_le32
(
qc
->
nsect
*
ATA_SECT_SIZE
);
*
(
__le32
*
)(
&
buf
[
8
])
=
cpu_to_le32
(
qc
->
n_
elem
);
*
(
__le32
*
)(
&
buf
[
8
])
=
cpu_to_le32
(
n
elem
);
addr
=
((
u64
)
pp
->
pkt_dma
)
+
QS_CPB_BYTES
;
*
(
__le64
*
)(
&
buf
[
16
])
=
cpu_to_le64
(
addr
);
...
...
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