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
Kirill Smelkov
linux
Commits
c1d96203
Commit
c1d96203
authored
Oct 31, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev
parents
4fd5f826
005a5a06
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
18 additions
and
51 deletions
+18
-51
drivers/scsi/libata-core.c
drivers/scsi/libata-core.c
+10
-49
drivers/scsi/libata-scsi.c
drivers/scsi/libata-scsi.c
+8
-1
drivers/scsi/libata.h
drivers/scsi/libata.h
+0
-1
No files found.
drivers/scsi/libata-core.c
View file @
c1d96203
...
...
@@ -294,28 +294,6 @@ void ata_exec_command(struct ata_port *ap, const struct ata_taskfile *tf)
ata_exec_command_pio
(
ap
,
tf
);
}
/**
* ata_exec - issue ATA command to host controller
* @ap: port to which command is being issued
* @tf: ATA taskfile register set
*
* Issues PIO/MMIO write to ATA command register, with proper
* synchronization with interrupt handler / other threads.
*
* LOCKING:
* Obtains host_set lock.
*/
static
inline
void
ata_exec
(
struct
ata_port
*
ap
,
const
struct
ata_taskfile
*
tf
)
{
unsigned
long
flags
;
DPRINTK
(
"ata%u: cmd 0x%X
\n
"
,
ap
->
id
,
tf
->
command
);
spin_lock_irqsave
(
&
ap
->
host_set
->
lock
,
flags
);
ap
->
ops
->
exec_command
(
ap
,
tf
);
spin_unlock_irqrestore
(
&
ap
->
host_set
->
lock
,
flags
);
}
/**
* ata_tf_to_host - issue ATA taskfile to host controller
* @ap: port to which command is being issued
...
...
@@ -326,30 +304,11 @@ static inline void ata_exec(struct ata_port *ap, const struct ata_taskfile *tf)
* other threads.
*
* LOCKING:
* Obtains host_set lock.
*/
static
void
ata_tf_to_host
(
struct
ata_port
*
ap
,
const
struct
ata_taskfile
*
tf
)
{
ap
->
ops
->
tf_load
(
ap
,
tf
);
ata_exec
(
ap
,
tf
);
}
/**
* ata_tf_to_host_nolock - issue ATA taskfile to host controller
* @ap: port to which command is being issued
* @tf: ATA taskfile register set
*
* Issues ATA taskfile register set to ATA host controller,
* with proper synchronization with interrupt handler and
* other threads.
*
* LOCKING:
* spin_lock_irqsave(host_set lock)
*/
void
ata_tf_to_host_nolock
(
struct
ata_port
*
ap
,
const
struct
ata_taskfile
*
tf
)
static
inline
void
ata_tf_to_host
(
struct
ata_port
*
ap
,
const
struct
ata_taskfile
*
tf
)
{
ap
->
ops
->
tf_load
(
ap
,
tf
);
ap
->
ops
->
exec_command
(
ap
,
tf
);
...
...
@@ -1912,12 +1871,14 @@ static void ata_bus_post_reset(struct ata_port *ap, unsigned int devmask)
*
* LOCKING:
* PCI/etc. bus probe sem.
* Obtains host_set lock.
*
*/
static
unsigned
int
ata_bus_edd
(
struct
ata_port
*
ap
)
{
struct
ata_taskfile
tf
;
unsigned
long
flags
;
/* set up execute-device-diag (bus reset) taskfile */
/* also, take interrupts to a known state (disabled) */
...
...
@@ -1928,7 +1889,9 @@ static unsigned int ata_bus_edd(struct ata_port *ap)
tf
.
protocol
=
ATA_PROT_NODATA
;
/* do bus reset */
spin_lock_irqsave
(
&
ap
->
host_set
->
lock
,
flags
);
ata_tf_to_host
(
ap
,
&
tf
);
spin_unlock_irqrestore
(
&
ap
->
host_set
->
lock
,
flags
);
/* spec says at least 2ms. but who knows with those
* crazy ATAPI devices...
...
...
@@ -3555,7 +3518,7 @@ int ata_qc_issue_prot(struct ata_queued_cmd *qc)
switch
(
qc
->
tf
.
protocol
)
{
case
ATA_PROT_NODATA
:
ata_tf_to_host
_nolock
(
ap
,
&
qc
->
tf
);
ata_tf_to_host
(
ap
,
&
qc
->
tf
);
break
;
case
ATA_PROT_DMA
:
...
...
@@ -3566,20 +3529,20 @@ int ata_qc_issue_prot(struct ata_queued_cmd *qc)
case
ATA_PROT_PIO
:
/* load tf registers, initiate polling pio */
ata_qc_set_polling
(
qc
);
ata_tf_to_host
_nolock
(
ap
,
&
qc
->
tf
);
ata_tf_to_host
(
ap
,
&
qc
->
tf
);
ap
->
hsm_task_state
=
HSM_ST
;
queue_work
(
ata_wq
,
&
ap
->
pio_task
);
break
;
case
ATA_PROT_ATAPI
:
ata_qc_set_polling
(
qc
);
ata_tf_to_host
_nolock
(
ap
,
&
qc
->
tf
);
ata_tf_to_host
(
ap
,
&
qc
->
tf
);
queue_work
(
ata_wq
,
&
ap
->
packet_task
);
break
;
case
ATA_PROT_ATAPI_NODATA
:
ap
->
flags
|=
ATA_FLAG_NOINTR
;
ata_tf_to_host
_nolock
(
ap
,
&
qc
->
tf
);
ata_tf_to_host
(
ap
,
&
qc
->
tf
);
queue_work
(
ata_wq
,
&
ap
->
packet_task
);
break
;
...
...
@@ -4126,8 +4089,6 @@ static void ata_host_init(struct ata_port *ap, struct Scsi_Host *host,
host
->
unique_id
=
ata_unique_id
++
;
host
->
max_cmd_len
=
12
;
scsi_assign_lock
(
host
,
&
host_set
->
lock
);
ap
->
flags
=
ATA_FLAG_PORT_DISABLED
;
ap
->
id
=
host
->
unique_id
;
ap
->
host
=
host
;
...
...
drivers/scsi/libata-scsi.c
View file @
c1d96203
...
...
@@ -39,6 +39,7 @@
#include <scsi/scsi.h>
#include "scsi.h"
#include <scsi/scsi_host.h>
#include <scsi/scsi_device.h>
#include <linux/libata.h>
#include <linux/hdreg.h>
#include <asm/uaccess.h>
...
...
@@ -2405,8 +2406,12 @@ int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
struct
ata_port
*
ap
;
struct
ata_device
*
dev
;
struct
scsi_device
*
scsidev
=
cmd
->
device
;
struct
Scsi_Host
*
shost
=
scsidev
->
host
;
ap
=
(
struct
ata_port
*
)
&
scsidev
->
host
->
hostdata
[
0
];
ap
=
(
struct
ata_port
*
)
&
shost
->
hostdata
[
0
];
spin_unlock
(
shost
->
host_lock
);
spin_lock
(
&
ap
->
host_set
->
lock
);
ata_scsi_dump_cdb
(
ap
,
cmd
);
...
...
@@ -2429,6 +2434,8 @@ int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
ata_scsi_translate
(
ap
,
dev
,
cmd
,
done
,
atapi_xlat
);
out_unlock:
spin_unlock
(
&
ap
->
host_set
->
lock
);
spin_lock
(
shost
->
host_lock
);
return
0
;
}
...
...
drivers/scsi/libata.h
View file @
c1d96203
...
...
@@ -48,7 +48,6 @@ extern int ata_qc_issue(struct ata_queued_cmd *qc);
extern
int
ata_check_atapi_dma
(
struct
ata_queued_cmd
*
qc
);
extern
void
ata_dev_select
(
struct
ata_port
*
ap
,
unsigned
int
device
,
unsigned
int
wait
,
unsigned
int
can_sleep
);
extern
void
ata_tf_to_host_nolock
(
struct
ata_port
*
ap
,
const
struct
ata_taskfile
*
tf
);
extern
void
swap_buf_le16
(
u16
*
buf
,
unsigned
int
buf_words
);
extern
int
ata_task_ioctl
(
struct
scsi_device
*
scsidev
,
void
__user
*
arg
);
extern
int
ata_cmd_ioctl
(
struct
scsi_device
*
scsidev
,
void
__user
*
arg
);
...
...
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