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
728c7763
Commit
728c7763
authored
Jan 17, 2006
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
d1138cf0
a1bd9e68
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
105 additions
and
14 deletions
+105
-14
drivers/pci/quirks.c
drivers/pci/quirks.c
+4
-1
drivers/scsi/ahci.c
drivers/scsi/ahci.c
+10
-0
drivers/scsi/ata_piix.c
drivers/scsi/ata_piix.c
+3
-0
drivers/scsi/libata-core.c
drivers/scsi/libata-core.c
+63
-10
drivers/scsi/sata_promise.c
drivers/scsi/sata_promise.c
+16
-0
drivers/scsi/sata_svw.c
drivers/scsi/sata_svw.c
+1
-0
include/linux/libata.h
include/linux/libata.h
+8
-3
No files found.
drivers/pci/quirks.c
View file @
728c7763
...
@@ -1142,6 +1142,9 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
...
@@ -1142,6 +1142,9 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
case
0x27c4
:
case
0x27c4
:
ich
=
7
;
ich
=
7
;
break
;
break
;
case
0x2828
:
/* ICH8M */
ich
=
8
;
break
;
default:
default:
/* we do not handle this PCI device */
/* we do not handle this PCI device */
return
;
return
;
...
@@ -1161,7 +1164,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
...
@@ -1161,7 +1164,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
else
else
return
;
/* not in combined mode */
return
;
/* not in combined mode */
}
else
{
}
else
{
WARN_ON
((
ich
!=
6
)
&&
(
ich
!=
7
));
WARN_ON
((
ich
!=
6
)
&&
(
ich
!=
7
)
&&
(
ich
!=
8
)
);
tmp
&=
0x3
;
/* interesting bits 1:0 */
tmp
&=
0x3
;
/* interesting bits 1:0 */
if
(
tmp
&
(
1
<<
0
))
if
(
tmp
&
(
1
<<
0
))
comb
=
(
1
<<
2
);
/* PATA port 0, SATA port 1 */
comb
=
(
1
<<
2
);
/* PATA port 0, SATA port 1 */
...
...
drivers/scsi/ahci.c
View file @
728c7763
...
@@ -276,6 +276,16 @@ static const struct pci_device_id ahci_pci_tbl[] = {
...
@@ -276,6 +276,16 @@ static const struct pci_device_id ahci_pci_tbl[] = {
board_ahci
},
/* ESB2 */
board_ahci
},
/* ESB2 */
{
PCI_VENDOR_ID_INTEL
,
0x27c6
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
{
PCI_VENDOR_ID_INTEL
,
0x27c6
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH7-M DH */
board_ahci
},
/* ICH7-M DH */
{
PCI_VENDOR_ID_INTEL
,
0x2821
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2822
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2824
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8 */
{
PCI_VENDOR_ID_INTEL
,
0x2829
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8M */
{
PCI_VENDOR_ID_INTEL
,
0x282a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_ahci
},
/* ICH8M */
{
}
/* terminate list */
{
}
/* terminate list */
};
};
...
...
drivers/scsi/ata_piix.c
View file @
728c7763
...
@@ -157,6 +157,9 @@ static const struct pci_device_id piix_pci_tbl[] = {
...
@@ -157,6 +157,9 @@ static const struct pci_device_id piix_pci_tbl[] = {
{
0x8086
,
0x27c0
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x27c0
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x27c4
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x27c4
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2680
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2680
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2820
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2825
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
0x8086
,
0x2828
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
ich6_sata_ahci
},
{
}
/* terminate list */
{
}
/* terminate list */
};
};
...
...
drivers/scsi/libata-core.c
View file @
728c7763
...
@@ -611,6 +611,10 @@ int ata_rwcmd_protocol(struct ata_queued_cmd *qc)
...
@@ -611,6 +611,10 @@ int ata_rwcmd_protocol(struct ata_queued_cmd *qc)
if
(
dev
->
flags
&
ATA_DFLAG_PIO
)
{
if
(
dev
->
flags
&
ATA_DFLAG_PIO
)
{
tf
->
protocol
=
ATA_PROT_PIO
;
tf
->
protocol
=
ATA_PROT_PIO
;
index
=
dev
->
multi_count
?
0
:
8
;
index
=
dev
->
multi_count
?
0
:
8
;
}
else
if
(
lba48
&&
(
qc
->
ap
->
flags
&
ATA_FLAG_PIO_LBA48
))
{
/* Unable to use DMA due to host limitation */
tf
->
protocol
=
ATA_PROT_PIO
;
index
=
dev
->
multi_count
?
0
:
4
;
}
else
{
}
else
{
tf
->
protocol
=
ATA_PROT_DMA
;
tf
->
protocol
=
ATA_PROT_DMA
;
index
=
16
;
index
=
16
;
...
@@ -1051,18 +1055,22 @@ static unsigned int ata_pio_modes(const struct ata_device *adev)
...
@@ -1051,18 +1055,22 @@ static unsigned int ata_pio_modes(const struct ata_device *adev)
{
{
u16
modes
;
u16
modes
;
/* Usual case. Word 53 indicates word
88
is valid */
/* Usual case. Word 53 indicates word
64
is valid */
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
(
1
<<
2
))
{
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
(
1
<<
1
))
{
modes
=
adev
->
id
[
ATA_ID_PIO_MODES
]
&
0x03
;
modes
=
adev
->
id
[
ATA_ID_PIO_MODES
]
&
0x03
;
modes
<<=
3
;
modes
<<=
3
;
modes
|=
0x7
;
modes
|=
0x7
;
return
modes
;
return
modes
;
}
}
/* If word
88 isn't valid then Word 51 holds the PIO timing number
/* If word
64 isn't valid then Word 51 high byte holds the PIO timing
for the maximum. Turn it into a mask and return it */
number
for the maximum. Turn it into a mask and return it */
modes
=
(
2
<<
(
adev
->
id
[
ATA_ID_OLD_PIO_MODES
]
&
0xFF
))
-
1
;
modes
=
(
2
<<
(
(
adev
->
id
[
ATA_ID_OLD_PIO_MODES
]
>>
8
)
&
0xFF
))
-
1
;
return
modes
;
return
modes
;
/* But wait.. there's more. Design your standards by committee and
you too can get a free iordy field to process. However its the
speeds not the modes that are supported... Note drivers using the
timing API will get this right anyway */
}
}
struct
ata_exec_internal_arg
{
struct
ata_exec_internal_arg
{
...
@@ -1164,6 +1172,39 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
...
@@ -1164,6 +1172,39 @@ ata_exec_internal(struct ata_port *ap, struct ata_device *dev,
return
AC_ERR_OTHER
;
return
AC_ERR_OTHER
;
}
}
/**
* ata_pio_need_iordy - check if iordy needed
* @adev: ATA device
*
* Check if the current speed of the device requires IORDY. Used
* by various controllers for chip configuration.
*/
unsigned
int
ata_pio_need_iordy
(
const
struct
ata_device
*
adev
)
{
int
pio
;
int
speed
=
adev
->
pio_mode
-
XFER_PIO_0
;
if
(
speed
<
2
)
return
0
;
if
(
speed
>
2
)
return
1
;
/* If we have no drive specific rule, then PIO 2 is non IORDY */
if
(
adev
->
id
[
ATA_ID_FIELD_VALID
]
&
2
)
{
/* EIDE */
pio
=
adev
->
id
[
ATA_ID_EIDE_PIO
];
/* Is the speed faster than the drive allows non IORDY ? */
if
(
pio
)
{
/* This is cycle times not frequency - watch the logic! */
if
(
pio
>
240
)
/* PIO2 is 240nS per cycle */
return
1
;
return
0
;
}
}
return
0
;
}
/**
/**
* ata_dev_identify - obtain IDENTIFY x DEVICE page
* ata_dev_identify - obtain IDENTIFY x DEVICE page
* @ap: port on which device we wish to probe resides
* @ap: port on which device we wish to probe resides
...
@@ -1415,7 +1456,7 @@ void ata_dev_config(struct ata_port *ap, unsigned int i)
...
@@ -1415,7 +1456,7 @@ void ata_dev_config(struct ata_port *ap, unsigned int i)
ap
->
udma_mask
&=
ATA_UDMA5
;
ap
->
udma_mask
&=
ATA_UDMA5
;
ap
->
host
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
host
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
host
->
hostt
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
host
->
hostt
->
max_sectors
=
ATA_MAX_SECTORS
;
ap
->
device
->
flags
|=
ATA_DFLAG_LOCK_SECTORS
;
ap
->
device
[
i
].
flags
|=
ATA_DFLAG_LOCK_SECTORS
;
}
}
if
(
ap
->
ops
->
dev_config
)
if
(
ap
->
ops
->
dev_config
)
...
@@ -3056,10 +3097,21 @@ static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf,
...
@@ -3056,10 +3097,21 @@ static void ata_pio_data_xfer(struct ata_port *ap, unsigned char *buf,
static
void
ata_data_xfer
(
struct
ata_port
*
ap
,
unsigned
char
*
buf
,
static
void
ata_data_xfer
(
struct
ata_port
*
ap
,
unsigned
char
*
buf
,
unsigned
int
buflen
,
int
do_write
)
unsigned
int
buflen
,
int
do_write
)
{
{
/* Make the crap hardware pay the costs not the good stuff */
if
(
unlikely
(
ap
->
flags
&
ATA_FLAG_IRQ_MASK
))
{
unsigned
long
flags
;
local_irq_save
(
flags
);
if
(
ap
->
flags
&
ATA_FLAG_MMIO
)
if
(
ap
->
flags
&
ATA_FLAG_MMIO
)
ata_mmio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
ata_mmio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
else
else
ata_pio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
ata_pio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
local_irq_restore
(
flags
);
}
else
{
if
(
ap
->
flags
&
ATA_FLAG_MMIO
)
ata_mmio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
else
ata_pio_data_xfer
(
ap
,
buf
,
buflen
,
do_write
);
}
}
}
/**
/**
...
@@ -5122,6 +5174,7 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string);
...
@@ -5122,6 +5174,7 @@ EXPORT_SYMBOL_GPL(ata_dev_id_string);
EXPORT_SYMBOL_GPL
(
ata_dev_config
);
EXPORT_SYMBOL_GPL
(
ata_dev_config
);
EXPORT_SYMBOL_GPL
(
ata_scsi_simulate
);
EXPORT_SYMBOL_GPL
(
ata_scsi_simulate
);
EXPORT_SYMBOL_GPL
(
ata_pio_need_iordy
);
EXPORT_SYMBOL_GPL
(
ata_timing_compute
);
EXPORT_SYMBOL_GPL
(
ata_timing_compute
);
EXPORT_SYMBOL_GPL
(
ata_timing_merge
);
EXPORT_SYMBOL_GPL
(
ata_timing_merge
);
...
...
drivers/scsi/sata_promise.c
View file @
728c7763
...
@@ -66,6 +66,7 @@ enum {
...
@@ -66,6 +66,7 @@ enum {
board_2037x
=
0
,
/* FastTrak S150 TX2plus */
board_2037x
=
0
,
/* FastTrak S150 TX2plus */
board_20319
=
1
,
/* FastTrak S150 TX4 */
board_20319
=
1
,
/* FastTrak S150 TX4 */
board_20619
=
2
,
/* FastTrak TX4000 */
board_20619
=
2
,
/* FastTrak TX4000 */
board_20771
=
3
,
/* FastTrak TX2300 */
PDC_HAS_PATA
=
(
1
<<
1
),
/* PDC20375 has PATA */
PDC_HAS_PATA
=
(
1
<<
1
),
/* PDC20375 has PATA */
...
@@ -190,6 +191,16 @@ static const struct ata_port_info pdc_port_info[] = {
...
@@ -190,6 +191,16 @@ static const struct ata_port_info pdc_port_info[] = {
.
udma_mask
=
0x7f
,
/* udma0-6 ; FIXME */
.
udma_mask
=
0x7f
,
/* udma0-6 ; FIXME */
.
port_ops
=
&
pdc_pata_ops
,
.
port_ops
=
&
pdc_pata_ops
,
},
},
/* board_20771 */
{
.
sht
=
&
pdc_ata_sht
,
.
host_flags
=
PDC_COMMON_FLAGS
|
ATA_FLAG_SATA
,
.
pio_mask
=
0x1f
,
/* pio0-4 */
.
mwdma_mask
=
0x07
,
/* mwdma0-2 */
.
udma_mask
=
0x7f
,
/* udma0-6 ; FIXME */
.
port_ops
=
&
pdc_sata_ops
,
},
};
};
static
const
struct
pci_device_id
pdc_ata_pci_tbl
[]
=
{
static
const
struct
pci_device_id
pdc_ata_pci_tbl
[]
=
{
...
@@ -226,6 +237,8 @@ static const struct pci_device_id pdc_ata_pci_tbl[] = {
...
@@ -226,6 +237,8 @@ static const struct pci_device_id pdc_ata_pci_tbl[] = {
{
PCI_VENDOR_ID_PROMISE
,
0x6629
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
{
PCI_VENDOR_ID_PROMISE
,
0x6629
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_20619
},
board_20619
},
{
PCI_VENDOR_ID_PROMISE
,
0x3570
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
board_20771
},
{
}
/* terminate list */
{
}
/* terminate list */
};
};
...
@@ -706,6 +719,9 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
...
@@ -706,6 +719,9 @@ static int pdc_ata_init_one (struct pci_dev *pdev, const struct pci_device_id *e
case
board_2037x
:
case
board_2037x
:
probe_ent
->
n_ports
=
2
;
probe_ent
->
n_ports
=
2
;
break
;
break
;
case
board_20771
:
probe_ent
->
n_ports
=
2
;
break
;
case
board_20619
:
case
board_20619
:
probe_ent
->
n_ports
=
4
;
probe_ent
->
n_ports
=
4
;
...
...
drivers/scsi/sata_svw.c
View file @
728c7763
...
@@ -470,6 +470,7 @@ static const struct pci_device_id k2_sata_pci_tbl[] = {
...
@@ -470,6 +470,7 @@ static const struct pci_device_id k2_sata_pci_tbl[] = {
{
0x1166
,
0x0241
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x0241
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x0242
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
8
},
{
0x1166
,
0x0242
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
8
},
{
0x1166
,
0x024a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x024a
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
0x1166
,
0x024b
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
4
},
{
}
{
}
};
};
...
...
include/linux/libata.h
View file @
728c7763
...
@@ -126,16 +126,19 @@ enum {
...
@@ -126,16 +126,19 @@ enum {
ATA_FLAG_SUSPENDED
=
(
1
<<
12
),
/* port is suspended */
ATA_FLAG_SUSPENDED
=
(
1
<<
12
),
/* port is suspended */
ATA_FLAG_PIO_LBA48
=
(
1
<<
13
),
/* Host DMA engine is LBA28 only */
ATA_FLAG_IRQ_MASK
=
(
1
<<
14
),
/* Mask IRQ in PIO xfers */
ATA_QCFLAG_ACTIVE
=
(
1
<<
1
),
/* cmd not yet ack'd to scsi lyer */
ATA_QCFLAG_ACTIVE
=
(
1
<<
1
),
/* cmd not yet ack'd to scsi lyer */
ATA_QCFLAG_SG
=
(
1
<<
3
),
/* have s/g table? */
ATA_QCFLAG_SG
=
(
1
<<
3
),
/* have s/g table? */
ATA_QCFLAG_SINGLE
=
(
1
<<
4
),
/* no s/g, just a single buffer */
ATA_QCFLAG_SINGLE
=
(
1
<<
4
),
/* no s/g, just a single buffer */
ATA_QCFLAG_DMAMAP
=
ATA_QCFLAG_SG
|
ATA_QCFLAG_SINGLE
,
ATA_QCFLAG_DMAMAP
=
ATA_QCFLAG_SG
|
ATA_QCFLAG_SINGLE
,
/* various lengths of time */
/* various lengths of time */
ATA_TMOUT_EDD
=
5
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_EDD
=
5
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_PIO
=
30
*
HZ
,
ATA_TMOUT_PIO
=
30
*
HZ
,
ATA_TMOUT_BOOT
=
30
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_BOOT
=
30
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_BOOT_QUICK
=
7
*
HZ
,
/* h
ue
ristic */
ATA_TMOUT_BOOT_QUICK
=
7
*
HZ
,
/* h
eu
ristic */
ATA_TMOUT_CDB
=
30
*
HZ
,
ATA_TMOUT_CDB
=
30
*
HZ
,
ATA_TMOUT_CDB_QUICK
=
5
*
HZ
,
ATA_TMOUT_CDB_QUICK
=
5
*
HZ
,
ATA_TMOUT_INTERNAL
=
30
*
HZ
,
ATA_TMOUT_INTERNAL
=
30
*
HZ
,
...
@@ -499,6 +502,8 @@ extern int ata_scsi_slave_config(struct scsi_device *sdev);
...
@@ -499,6 +502,8 @@ extern int ata_scsi_slave_config(struct scsi_device *sdev);
/*
/*
* Timing helpers
* Timing helpers
*/
*/
extern
unsigned
int
ata_pio_need_iordy
(
const
struct
ata_device
*
);
extern
int
ata_timing_compute
(
struct
ata_device
*
,
unsigned
short
,
extern
int
ata_timing_compute
(
struct
ata_device
*
,
unsigned
short
,
struct
ata_timing
*
,
int
,
int
);
struct
ata_timing
*
,
int
,
int
);
extern
void
ata_timing_merge
(
const
struct
ata_timing
*
,
extern
void
ata_timing_merge
(
const
struct
ata_timing
*
,
...
...
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