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
b286e392
Commit
b286e392
authored
Nov 18, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6
parents
bcb6ad1f
6593178d
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
143 additions
and
341 deletions
+143
-341
drivers/ide/ide-cd.c
drivers/ide/ide-cd.c
+1
-1
drivers/ide/ide-disk.c
drivers/ide/ide-disk.c
+1
-1
drivers/ide/ide-floppy.c
drivers/ide/ide-floppy.c
+1
-1
drivers/ide/ide-lib.c
drivers/ide/ide-lib.c
+4
-4
drivers/ide/ide-tape.c
drivers/ide/ide-tape.c
+1
-1
drivers/ide/pci/aec62xx.c
drivers/ide/pci/aec62xx.c
+0
-47
drivers/ide/pci/alim15x3.c
drivers/ide/pci/alim15x3.c
+7
-2
drivers/ide/pci/cs5520.c
drivers/ide/pci/cs5520.c
+2
-3
drivers/ide/pci/siimage.c
drivers/ide/pci/siimage.c
+7
-1
drivers/ide/pci/via82cxxx.c
drivers/ide/pci/via82cxxx.c
+114
-263
drivers/ide/ppc/pmac.c
drivers/ide/ppc/pmac.c
+0
-14
drivers/ide/setup-pci.c
drivers/ide/setup-pci.c
+1
-1
drivers/scsi/ide-scsi.c
drivers/scsi/ide-scsi.c
+1
-1
include/linux/ide.h
include/linux/ide.h
+3
-1
No files found.
drivers/ide/ide-cd.c
View file @
b286e392
...
...
@@ -3328,8 +3328,8 @@ static ide_proc_entry_t idecd_proc[] = {
#endif
static
ide_driver_t
ide_cdrom_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"ide-cdrom"
,
.
bus
=
&
ide_bus_type
,
.
probe
=
ide_cd_probe
,
...
...
drivers/ide/ide-disk.c
View file @
b286e392
...
...
@@ -1089,8 +1089,8 @@ static void ide_device_shutdown(struct device *dev)
}
static
ide_driver_t
idedisk_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"ide-disk"
,
.
bus
=
&
ide_bus_type
,
.
probe
=
ide_disk_probe
,
...
...
drivers/ide/ide-floppy.c
View file @
b286e392
...
...
@@ -1925,8 +1925,8 @@ static ide_proc_entry_t idefloppy_proc[] = {
static
int
ide_floppy_probe
(
struct
device
*
);
static
ide_driver_t
idefloppy_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"ide-floppy"
,
.
bus
=
&
ide_bus_type
,
.
probe
=
ide_floppy_probe
,
...
...
drivers/ide/ide-lib.c
View file @
b286e392
...
...
@@ -410,10 +410,10 @@ void ide_toggle_bounce(ide_drive_t *drive, int on)
{
u64
addr
=
BLK_BOUNCE_HIGH
;
/* dma64_addr_t */
if
(
on
&&
drive
->
media
==
ide_disk
)
{
if
(
!
PCI_DMA_BUS_IS_PHYS
)
addr
=
BLK_BOUNCE_ANY
;
else
if
(
HWIF
(
drive
)
->
pci_dev
)
if
(
!
PCI_DMA_BUS_IS_PHYS
)
{
addr
=
BLK_BOUNCE_ANY
;
}
else
if
(
on
&&
drive
->
media
==
ide_disk
)
{
if
(
HWIF
(
drive
)
->
pci_dev
)
addr
=
HWIF
(
drive
)
->
pci_dev
->
dma_mask
;
}
...
...
drivers/ide/ide-tape.c
View file @
b286e392
...
...
@@ -4748,8 +4748,8 @@ static ide_proc_entry_t idetape_proc[] = {
static
int
ide_tape_probe
(
struct
device
*
);
static
ide_driver_t
idetape_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"ide-tape"
,
.
bus
=
&
ide_bus_type
,
.
probe
=
ide_tape_probe
,
...
...
drivers/ide/pci/aec62xx.c
View file @
b286e392
...
...
@@ -65,23 +65,6 @@ static struct chipset_bus_clock_list_entry aec6xxx_34_base [] = {
#define BUSCLOCK(D) \
((struct chipset_bus_clock_list_entry *) pci_get_drvdata((D)))
#if 0
if (dev->device == PCI_DEVICE_ID_ARTOP_ATP850UF) {
(void) pci_read_config_byte(dev, 0x54, &art);
p += sprintf(p, "DMA Mode: %s(%s)",
(c0&0x20)?((art&0x03)?"UDMA":" DMA"):" PIO",
(art&0x02)?"2":(art&0x01)?"1":"0");
p += sprintf(p, " %s(%s)",
(c0&0x40)?((art&0x0c)?"UDMA":" DMA"):" PIO",
(art&0x08)?"2":(art&0x04)?"1":"0");
p += sprintf(p, " %s(%s)",
(c1&0x20)?((art&0x30)?"UDMA":" DMA"):" PIO",
(art&0x20)?"2":(art&0x10)?"1":"0");
p += sprintf(p, " %s(%s)\n",
(c1&0x40)?((art&0xc0)?"UDMA":" DMA"):" PIO",
(art&0x80)?"2":(art&0x40)?"1":"0");
} else {
#endif
/*
* TO DO: active tuning and correction of cards without a bios.
...
...
@@ -112,13 +95,9 @@ static u8 aec62xx_ratemask (ide_drive_t *drive)
switch
(
hwif
->
pci_dev
->
device
)
{
case
PCI_DEVICE_ID_ARTOP_ATP865
:
case
PCI_DEVICE_ID_ARTOP_ATP865R
:
#if 0
mode = (hwif->INB(hwif->dma_master) & 0x10) ? 4 : 3;
#else
mode
=
(
hwif
->
INB
(((
hwif
->
channel
)
?
hwif
->
mate
->
dma_status
:
hwif
->
dma_status
))
&
0x10
)
?
4
:
3
;
#endif
break
;
case
PCI_DEVICE_ID_ARTOP_ATP860
:
case
PCI_DEVICE_ID_ARTOP_ATP860R
:
...
...
@@ -263,35 +242,9 @@ static int aec62xx_irq_timeout (ide_drive_t *drive)
case
PCI_DEVICE_ID_ARTOP_ATP865
:
case
PCI_DEVICE_ID_ARTOP_ATP865R
:
printk
(
" AEC62XX time out "
);
#if 0
{
int i = 0;
u8 reg49h = 0;
pci_read_config_byte(HWIF(drive)->pci_dev, 0x49, ®49h);
for (i=0;i<256;i++)
pci_write_config_byte(HWIF(drive)->pci_dev, 0x49, reg49h|0x10);
pci_write_config_byte(HWIF(drive)->pci_dev, 0x49, reg49h & ~0x10);
}
return 0;
#endif
default:
break
;
}
#if 0
{
ide_hwif_t *hwif = HWIF(drive);
struct pci_dev *dev = hwif->pci_dev;
u8 tmp1 = 0, tmp2 = 0, mode6 = 0;
pci_read_config_byte(dev, 0x44, &tmp1);
pci_read_config_byte(dev, 0x45, &tmp2);
printk(" AEC6280 r44=%x r45=%x ",tmp1,tmp2);
mode6 = HWIF(drive)->INB(((hwif->channel) ?
hwif->mate->dma_status :
hwif->dma_status));
printk(" AEC6280 133=%x ", (mode6 & 0x10));
}
#endif
return
0
;
}
...
...
drivers/ide/pci/alim15x3.c
View file @
b286e392
...
...
@@ -876,10 +876,15 @@ static ide_pci_device_t ali15x3_chipset __devinitdata = {
static
int
__devinit
alim15x3_init_one
(
struct
pci_dev
*
dev
,
const
struct
pci_device_id
*
id
)
{
static
struct
pci_device_id
ati_rs100
[]
=
{
{
PCI_DEVICE
(
PCI_VENDOR_ID_ATI
,
PCI_DEVICE_ID_ATI_RS100
)
},
{
},
};
ide_pci_device_t
*
d
=
&
ali15x3_chipset
;
if
(
pci_find_device
(
PCI_VENDOR_ID_ATI
,
PCI_DEVICE_ID_ATI_RS100
,
NULL
))
printk
(
KERN_
ERR
"Warning
: ATI Radeon IGP Northbridge is not yet fully tested.
\n
"
);
if
(
pci_dev_present
(
ati_rs100
))
printk
(
KERN_
WARNING
"alim15x3
: ATI Radeon IGP Northbridge is not yet fully tested.
\n
"
);
#if defined(CONFIG_SPARC64)
d
->
init_hwif
=
init_hwif_common_ali15x3
;
...
...
drivers/ide/pci/cs5520.c
View file @
b286e392
...
...
@@ -222,10 +222,9 @@ static int __devinit cs5520_init_one(struct pci_dev *dev, const struct pci_devic
/* We must not grab the entire device, it has 'ISA' space in its
BARS too and we will freak out other bits of the kernel */
if
(
pci_enable_device_bars
(
dev
,
1
<<
2
))
{
if
(
pci_enable_device_bars
(
dev
,
1
<<
2
))
{
printk
(
KERN_WARNING
"%s: Unable to enable 55x0.
\n
"
,
d
->
name
);
return
1
;
return
-
ENODEV
;
}
pci_set_master
(
dev
);
if
(
pci_set_dma_mask
(
dev
,
DMA_32BIT_MASK
))
{
...
...
drivers/ide/pci/siimage.c
View file @
b286e392
...
...
@@ -6,7 +6,13 @@
*
* May be copied or modified under the terms of the GNU General Public License
*
* Documentation available under NDA only
* Documentation for CMD680:
* http://gkernel.sourceforge.net/specs/sii/sii-0680a-v1.31.pdf.bz2
*
* Documentation for SiI 3112:
* http://gkernel.sourceforge.net/specs/sii/3112A_SiI-DS-0095-B2.pdf.bz2
*
* Errata and other documentation only available under NDA.
*
*
* FAQ Items:
...
...
drivers/ide/pci/via82cxxx.c
View file @
b286e392
...
...
@@ -100,185 +100,14 @@ static struct via_isa_bridge {
{
NULL
}
};
static
struct
via_isa_bridge
*
via_config
;
static
unsigned
int
via_80w
;
static
unsigned
int
via_clock
;
static
char
*
via_dma
[]
=
{
"MWDMA16"
,
"UDMA33"
,
"UDMA66"
,
"UDMA100"
,
"UDMA133"
};
/*
* VIA /proc entry.
*/
#if defined(DISPLAY_VIA_TIMINGS) && defined(CONFIG_PROC_FS)
#include <linux/stat.h>
#include <linux/proc_fs.h>
static
u8
via_proc
=
0
;
static
unsigned
long
via_base
;
static
struct
pci_dev
*
bmide_dev
,
*
isa_dev
;
static
char
*
via_control3
[]
=
{
"No limit"
,
"64"
,
"128"
,
"192"
};
#define via_print(format, arg...) p += sprintf(p, format "\n" , ## arg)
#define via_print_drive(name, format, arg...)\
p += sprintf(p, name); for (i = 0; i < 4; i++) p += sprintf(p, format, ## arg); p += sprintf(p, "\n");
/**
* via_get_info - generate via /proc file
* @buffer: buffer for data
* @addr: set to start of data to use
* @offset: current file offset
* @count: size of read
*
* Fills in buffer with the debugging/configuration information for
* the VIA chipset tuning and attached drives
*/
static
int
via_get_info
(
char
*
buffer
,
char
**
addr
,
off_t
offset
,
int
count
)
struct
via82cxxx_dev
{
int
speed
[
4
],
cycle
[
4
],
setup
[
4
],
active
[
4
],
recover
[
4
],
den
[
4
],
uen
[
4
],
udma
[
4
],
umul
[
4
],
active8b
[
4
],
recover8b
[
4
];
struct
pci_dev
*
dev
=
bmide_dev
;
unsigned
int
v
,
u
,
i
;
int
len
;
u16
c
,
w
;
u8
t
,
x
;
char
*
p
=
buffer
;
via_print
(
"----------VIA BusMastering IDE Configuration"
"----------------"
);
via_print
(
"Driver Version: 3.38"
);
via_print
(
"South Bridge: VIA %s"
,
via_config
->
name
);
pci_read_config_byte
(
isa_dev
,
PCI_REVISION_ID
,
&
t
);
pci_read_config_byte
(
dev
,
PCI_REVISION_ID
,
&
x
);
via_print
(
"Revision: ISA %#x IDE %#x"
,
t
,
x
);
via_print
(
"Highest DMA rate: %s"
,
via_dma
[
via_config
->
flags
&
VIA_UDMA
]);
via_print
(
"BM-DMA base: %#lx"
,
via_base
);
via_print
(
"PCI clock: %d.%dMHz"
,
via_clock
/
1000
,
via_clock
/
100
%
10
);
pci_read_config_byte
(
dev
,
VIA_MISC_1
,
&
t
);
via_print
(
"Master Read Cycle IRDY: %dws"
,
(
t
&
64
)
>>
6
);
via_print
(
"Master Write Cycle IRDY: %dws"
,
(
t
&
32
)
>>
5
);
via_print
(
"BM IDE Status Register Read Retry: %s"
,
(
t
&
8
)
?
"yes"
:
"no"
);
pci_read_config_byte
(
dev
,
VIA_MISC_3
,
&
t
);
via_print
(
"Max DRDY Pulse Width: %s%s"
,
via_control3
[(
t
&
0x03
)],
(
t
&
0x03
)
?
" PCI clocks"
:
""
);
via_print
(
"-----------------------Primary IDE"
"-------Secondary IDE------"
);
via_print
(
"Read DMA FIFO flush: %10s%20s"
,
(
t
&
0x80
)
?
"yes"
:
"no"
,
(
t
&
0x40
)
?
"yes"
:
"no"
);
via_print
(
"End Sector FIFO flush: %10s%20s"
,
(
t
&
0x20
)
?
"yes"
:
"no"
,
(
t
&
0x10
)
?
"yes"
:
"no"
);
pci_read_config_byte
(
dev
,
VIA_IDE_CONFIG
,
&
t
);
via_print
(
"Prefetch Buffer: %10s%20s"
,
(
t
&
0x80
)
?
"yes"
:
"no"
,
(
t
&
0x20
)
?
"yes"
:
"no"
);
via_print
(
"Post Write Buffer: %10s%20s"
,
(
t
&
0x40
)
?
"yes"
:
"no"
,
(
t
&
0x10
)
?
"yes"
:
"no"
);
pci_read_config_byte
(
dev
,
VIA_IDE_ENABLE
,
&
t
);
via_print
(
"Enabled: %10s%20s"
,
(
t
&
0x02
)
?
"yes"
:
"no"
,
(
t
&
0x01
)
?
"yes"
:
"no"
);
c
=
inb
(
via_base
+
0x02
)
|
(
inb
(
via_base
+
0x0a
)
<<
8
);
via_print
(
"Simplex only: %10s%20s"
,
(
c
&
0x80
)
?
"yes"
:
"no"
,
(
c
&
0x8000
)
?
"yes"
:
"no"
);
via_print
(
"Cable Type: %10s%20s"
,
(
via_80w
&
1
)
?
"80w"
:
"40w"
,
(
via_80w
&
2
)
?
"80w"
:
"40w"
);
via_print
(
"-------------------drive0----drive1"
"----drive2----drive3-----"
);
pci_read_config_byte
(
dev
,
VIA_ADDRESS_SETUP
,
&
t
);
pci_read_config_dword
(
dev
,
VIA_DRIVE_TIMING
,
&
v
);
pci_read_config_word
(
dev
,
VIA_8BIT_TIMING
,
&
w
);
if
(
via_config
->
flags
&
VIA_UDMA
)
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
else
u
=
0
;
for
(
i
=
0
;
i
<
4
;
i
++
)
{
setup
[
i
]
=
((
t
>>
((
3
-
i
)
<<
1
))
&
0x3
)
+
1
;
recover8b
[
i
]
=
((
w
>>
((
1
-
(
i
>>
1
))
<<
3
))
&
0xf
)
+
1
;
active8b
[
i
]
=
((
w
>>
(((
1
-
(
i
>>
1
))
<<
3
)
+
4
))
&
0xf
)
+
1
;
active
[
i
]
=
((
v
>>
(((
3
-
i
)
<<
3
)
+
4
))
&
0xf
)
+
1
;
recover
[
i
]
=
((
v
>>
((
3
-
i
)
<<
3
))
&
0xf
)
+
1
;
udma
[
i
]
=
((
u
>>
((
3
-
i
)
<<
3
))
&
0x7
)
+
2
;
umul
[
i
]
=
((
u
>>
(((
3
-
i
)
&
2
)
<<
3
))
&
0x8
)
?
1
:
2
;
uen
[
i
]
=
((
u
>>
((
3
-
i
)
<<
3
))
&
0x20
);
den
[
i
]
=
(
c
&
((
i
&
1
)
?
0x40
:
0x20
)
<<
((
i
&
2
)
<<
2
));
speed
[
i
]
=
2
*
via_clock
/
(
active
[
i
]
+
recover
[
i
]);
cycle
[
i
]
=
1000000
*
(
active
[
i
]
+
recover
[
i
])
/
via_clock
;
if
(
!
uen
[
i
]
||
!
den
[
i
])
continue
;
switch
(
via_config
->
flags
&
VIA_UDMA
)
{
case
VIA_UDMA_33
:
speed
[
i
]
=
2
*
via_clock
/
udma
[
i
];
cycle
[
i
]
=
1000000
*
udma
[
i
]
/
via_clock
;
break
;
case
VIA_UDMA_66
:
speed
[
i
]
=
4
*
via_clock
/
(
udma
[
i
]
*
umul
[
i
]);
cycle
[
i
]
=
500000
*
(
udma
[
i
]
*
umul
[
i
])
/
via_clock
;
break
;
case
VIA_UDMA_100
:
speed
[
i
]
=
6
*
via_clock
/
udma
[
i
];
cycle
[
i
]
=
333333
*
udma
[
i
]
/
via_clock
;
break
;
case
VIA_UDMA_133
:
speed
[
i
]
=
8
*
via_clock
/
udma
[
i
];
cycle
[
i
]
=
250000
*
udma
[
i
]
/
via_clock
;
break
;
}
}
via_print_drive
(
"Transfer Mode: "
,
"%10s"
,
den
[
i
]
?
(
uen
[
i
]
?
"UDMA"
:
"DMA"
)
:
"PIO"
);
via_print_drive
(
"Address Setup: "
,
"%8dns"
,
1000000
*
setup
[
i
]
/
via_clock
);
via_print_drive
(
"Cmd Active: "
,
"%8dns"
,
1000000
*
active8b
[
i
]
/
via_clock
);
via_print_drive
(
"Cmd Recovery: "
,
"%8dns"
,
1000000
*
recover8b
[
i
]
/
via_clock
);
via_print_drive
(
"Data Active: "
,
"%8dns"
,
1000000
*
active
[
i
]
/
via_clock
);
via_print_drive
(
"Data Recovery: "
,
"%8dns"
,
1000000
*
recover
[
i
]
/
via_clock
);
via_print_drive
(
"Cycle Time: "
,
"%8dns"
,
cycle
[
i
]);
via_print_drive
(
"Transfer Rate: "
,
"%4d.%dMB/s"
,
speed
[
i
]
/
1000
,
speed
[
i
]
/
100
%
10
);
/* hoping it is less than 4K... */
len
=
(
p
-
buffer
)
-
offset
;
*
addr
=
buffer
+
offset
;
return
len
>
count
?
count
:
len
;
}
#endif
/* DISPLAY_VIA_TIMINGS && CONFIG_PROC_FS */
struct
via_isa_bridge
*
via_config
;
unsigned
int
via_80w
;
};
/**
* via_set_speed - write timing registers
...
...
@@ -289,11 +118,13 @@ static int via_get_info(char *buffer, char **addr, off_t offset, int count)
* via_set_speed writes timing values to the chipset registers
*/
static
void
via_set_speed
(
struct
pci_dev
*
dev
,
u8
dn
,
struct
ide_timing
*
timing
)
static
void
via_set_speed
(
ide_hwif_t
*
hwif
,
u8
dn
,
struct
ide_timing
*
timing
)
{
struct
pci_dev
*
dev
=
hwif
->
pci_dev
;
struct
via82cxxx_dev
*
vdev
=
ide_get_hwifdata
(
hwif
);
u8
t
;
if
(
~
via_config
->
flags
&
VIA_BAD_AST
)
{
if
(
~
v
dev
->
v
ia_config
->
flags
&
VIA_BAD_AST
)
{
pci_read_config_byte
(
dev
,
VIA_ADDRESS_SETUP
,
&
t
);
t
=
(
t
&
~
(
3
<<
((
3
-
dn
)
<<
1
)))
|
((
FIT
(
timing
->
setup
,
1
,
4
)
-
1
)
<<
((
3
-
dn
)
<<
1
));
pci_write_config_byte
(
dev
,
VIA_ADDRESS_SETUP
,
t
);
...
...
@@ -305,7 +136,7 @@ static void via_set_speed(struct pci_dev *dev, u8 dn, struct ide_timing *timing)
pci_write_config_byte
(
dev
,
VIA_DRIVE_TIMING
+
(
3
-
dn
),
((
FIT
(
timing
->
active
,
1
,
16
)
-
1
)
<<
4
)
|
(
FIT
(
timing
->
recover
,
1
,
16
)
-
1
));
switch
(
via_config
->
flags
&
VIA_UDMA
)
{
switch
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
)
{
case
VIA_UDMA_33
:
t
=
timing
->
udma
?
(
0xe0
|
(
FIT
(
timing
->
udma
,
2
,
5
)
-
2
))
:
0x03
;
break
;
case
VIA_UDMA_66
:
t
=
timing
->
udma
?
(
0xe8
|
(
FIT
(
timing
->
udma
,
2
,
9
)
-
2
))
:
0x0f
;
break
;
case
VIA_UDMA_100
:
t
=
timing
->
udma
?
(
0xe0
|
(
FIT
(
timing
->
udma
,
2
,
9
)
-
2
))
:
0x07
;
break
;
...
...
@@ -329,6 +160,7 @@ static void via_set_speed(struct pci_dev *dev, u8 dn, struct ide_timing *timing)
static
int
via_set_drive
(
ide_drive_t
*
drive
,
u8
speed
)
{
ide_drive_t
*
peer
=
HWIF
(
drive
)
->
drives
+
(
~
drive
->
dn
&
1
);
struct
via82cxxx_dev
*
vdev
=
ide_get_hwifdata
(
drive
->
hwif
);
struct
ide_timing
t
,
p
;
unsigned
int
T
,
UT
;
...
...
@@ -337,7 +169,7 @@ static int via_set_drive(ide_drive_t *drive, u8 speed)
T
=
1000000000
/
via_clock
;
switch
(
via_config
->
flags
&
VIA_UDMA
)
{
switch
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
)
{
case
VIA_UDMA_33
:
UT
=
T
;
break
;
case
VIA_UDMA_66
:
UT
=
T
/
2
;
break
;
case
VIA_UDMA_100
:
UT
=
T
/
3
;
break
;
...
...
@@ -352,7 +184,7 @@ static int via_set_drive(ide_drive_t *drive, u8 speed)
ide_timing_merge
(
&
p
,
&
t
,
&
t
,
IDE_TIMING_8BIT
);
}
via_set_speed
(
HWIF
(
drive
)
->
pci_dev
,
drive
->
dn
,
&
t
);
via_set_speed
(
HWIF
(
drive
),
drive
->
dn
,
&
t
);
if
(
!
drive
->
init_speed
)
drive
->
init_speed
=
speed
;
...
...
@@ -390,20 +222,41 @@ static void via82cxxx_tune_drive(ide_drive_t *drive, u8 pio)
static
int
via82cxxx_ide_dma_check
(
ide_drive_t
*
drive
)
{
u16
w80
=
HWIF
(
drive
)
->
udma_four
;
ide_hwif_t
*
hwif
=
HWIF
(
drive
);
struct
via82cxxx_dev
*
vdev
=
ide_get_hwifdata
(
hwif
);
u16
w80
=
hwif
->
udma_four
;
u16
speed
=
ide_find_best_mode
(
drive
,
XFER_PIO
|
XFER_EPIO
|
XFER_SWDMA
|
XFER_MWDMA
|
(
via_config
->
flags
&
VIA_UDMA
?
XFER_UDMA
:
0
)
|
(
w80
&&
(
via_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_66
?
XFER_UDMA_66
:
0
)
|
(
w80
&&
(
via_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_100
?
XFER_UDMA_100
:
0
)
|
(
w80
&&
(
via_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_133
?
XFER_UDMA_133
:
0
));
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
?
XFER_UDMA
:
0
)
|
(
w80
&&
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_66
?
XFER_UDMA_66
:
0
)
|
(
w80
&&
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_100
?
XFER_UDMA_100
:
0
)
|
(
w80
&&
(
v
dev
->
v
ia_config
->
flags
&
VIA_UDMA
)
>=
VIA_UDMA_133
?
XFER_UDMA_133
:
0
));
via_set_drive
(
drive
,
speed
);
if
(
drive
->
autodma
&&
(
speed
&
XFER_MODE
)
!=
XFER_PIO
)
return
HWIF
(
drive
)
->
ide_dma_on
(
drive
);
return
HWIF
(
drive
)
->
ide_dma_off_quietly
(
drive
);
return
hwif
->
ide_dma_on
(
drive
);
return
hwif
->
ide_dma_off_quietly
(
drive
);
}
static
struct
via_isa_bridge
*
via_config_find
(
struct
pci_dev
**
isa
)
{
struct
via_isa_bridge
*
via_config
;
u8
t
;
for
(
via_config
=
via_isa_bridges
;
via_config
->
id
;
via_config
++
)
if
((
*
isa
=
pci_find_device
(
PCI_VENDOR_ID_VIA
+
!!
(
via_config
->
flags
&
VIA_BAD_ID
),
via_config
->
id
,
NULL
)))
{
pci_read_config_byte
(
*
isa
,
PCI_REVISION_ID
,
&
t
);
if
(
t
>=
via_config
->
rev_min
&&
t
<=
via_config
->
rev_max
)
break
;
}
return
via_config
;
}
/**
...
...
@@ -418,82 +271,28 @@ static int via82cxxx_ide_dma_check (ide_drive_t *drive)
static
unsigned
int
__devinit
init_chipset_via82cxxx
(
struct
pci_dev
*
dev
,
const
char
*
name
)
{
struct
pci_dev
*
isa
=
NULL
;
struct
via_isa_bridge
*
via_config
;
u8
t
,
v
;
unsigned
int
u
;
int
i
;
/*
* Find the ISA bridge to see how good the IDE is.
*/
for
(
via_config
=
via_isa_bridges
;
via_config
->
id
;
via_config
++
)
if
((
isa
=
pci_find_device
(
PCI_VENDOR_ID_VIA
+
!!
(
via_config
->
flags
&
VIA_BAD_ID
),
via_config
->
id
,
NULL
)))
{
pci_read_config_byte
(
isa
,
PCI_REVISION_ID
,
&
t
);
if
(
t
>=
via_config
->
rev_min
&&
t
<=
via_config
->
rev_max
)
break
;
}
via_config
=
via_config_find
(
&
isa
);
if
(
!
via_config
->
id
)
{
printk
(
KERN_WARNING
"VP_IDE: Unknown VIA SouthBridge, disabling DMA.
\n
"
);
return
-
ENODEV
;
}
/*
*
Check 80-wire cable presence and setup Clk66.
*
Setup or disable Clk66 if appropriate
*/
switch
(
via_config
->
flags
&
VIA_UDMA
)
{
case
VIA_UDMA_66
:
/* Enable Clk66 */
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
pci_write_config_dword
(
dev
,
VIA_UDMA_TIMING
,
u
|
0x80008
);
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
(
i
&
16
))
&
8
)
&&
((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
2
))
{
/*
* 2x PCI clock and
* UDMA w/ < 3T/cycle
*/
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
case
VIA_UDMA_100
:
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
i
)
&
0x10
)
||
(((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
4
)))
{
/* BIOS 80-wire bit or
* UDMA w/ < 60ns/cycle
*/
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
case
VIA_UDMA_133
:
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
i
)
&
0x10
)
||
(((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
6
)))
{
/* BIOS 80-wire bit or
* UDMA w/ < 60ns/cycle
*/
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
}
/* Disable Clk66 */
if
(
via_config
->
flags
&
VIA_BAD_CLK66
)
{
if
((
via_config
->
flags
&
VIA_UDMA
)
==
VIA_UDMA_66
)
{
/* Enable Clk66 */
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
pci_write_config_dword
(
dev
,
VIA_UDMA_TIMING
,
u
|
0x80008
);
}
else
if
(
via_config
->
flags
&
VIA_BAD_CLK66
)
{
/* Would cause trouble on 596a and 686 */
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
pci_write_config_dword
(
dev
,
VIA_UDMA_TIMING
,
u
&
~
0x80008
);
...
...
@@ -560,26 +359,78 @@ static unsigned int __devinit init_chipset_via82cxxx(struct pci_dev *dev, const
via_dma
[
via_config
->
flags
&
VIA_UDMA
],
pci_name
(
dev
));
/*
* Setup /proc/ide/via entry.
*/
return
0
;
}
/*
* Check and handle 80-wire cable presence
*/
static
void
__devinit
via_cable_detect
(
struct
pci_dev
*
dev
,
struct
via82cxxx_dev
*
vdev
)
{
unsigned
int
u
;
int
i
;
pci_read_config_dword
(
dev
,
VIA_UDMA_TIMING
,
&
u
);
switch
(
vdev
->
via_config
->
flags
&
VIA_UDMA
)
{
case
VIA_UDMA_66
:
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
(
i
&
16
))
&
8
)
&&
((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
2
))
{
/*
* 2x PCI clock and
* UDMA w/ < 3T/cycle
*/
vdev
->
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
case
VIA_UDMA_100
:
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
i
)
&
0x10
)
||
(((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
4
)))
{
/* BIOS 80-wire bit or
* UDMA w/ < 60ns/cycle
*/
vdev
->
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
case
VIA_UDMA_133
:
for
(
i
=
24
;
i
>=
0
;
i
-=
8
)
if
(((
u
>>
i
)
&
0x10
)
||
(((
u
>>
i
)
&
0x20
)
&&
(((
u
>>
i
)
&
7
)
<
6
)))
{
/* BIOS 80-wire bit or
* UDMA w/ < 60ns/cycle
*/
vdev
->
via_80w
|=
(
1
<<
(
1
-
(
i
>>
4
)));
}
break
;
#if defined(DISPLAY_VIA_TIMINGS) && defined(CONFIG_PROC_FS)
if
(
!
via_proc
)
{
via_base
=
pci_resource_start
(
dev
,
4
);
bmide_dev
=
dev
;
isa_dev
=
isa
;
ide_pci_create_host_proc
(
"via"
,
via_get_info
);
via_proc
=
1
;
}
#endif
/* DISPLAY_VIA_TIMINGS && CONFIG_PROC_FS */
return
0
;
}
static
void
__devinit
init_hwif_via82cxxx
(
ide_hwif_t
*
hwif
)
{
struct
via82cxxx_dev
*
vdev
=
kmalloc
(
sizeof
(
struct
via82cxxx_dev
),
GFP_KERNEL
);
struct
pci_dev
*
isa
=
NULL
;
int
i
;
if
(
vdev
==
NULL
)
{
printk
(
KERN_ERR
"VP_IDE: out of memory :(
\n
"
);
return
;
}
memset
(
vdev
,
0
,
sizeof
(
struct
via82cxxx_dev
));
ide_set_hwifdata
(
hwif
,
vdev
);
vdev
->
via_config
=
via_config_find
(
&
isa
);
via_cable_detect
(
hwif
->
pci_dev
,
vdev
);
hwif
->
autodma
=
0
;
hwif
->
tuneproc
=
&
via82cxxx_tune_drive
;
...
...
@@ -594,7 +445,7 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
for
(
i
=
0
;
i
<
2
;
i
++
)
{
hwif
->
drives
[
i
].
io_32bit
=
1
;
hwif
->
drives
[
i
].
unmask
=
(
via_config
->
flags
&
VIA_NO_UNMASK
)
?
0
:
1
;
hwif
->
drives
[
i
].
unmask
=
(
v
dev
->
v
ia_config
->
flags
&
VIA_NO_UNMASK
)
?
0
:
1
;
hwif
->
drives
[
i
].
autotune
=
1
;
hwif
->
drives
[
i
].
dn
=
hwif
->
channel
*
2
+
i
;
}
...
...
@@ -608,7 +459,7 @@ static void __devinit init_hwif_via82cxxx(ide_hwif_t *hwif)
hwif
->
swdma_mask
=
0x07
;
if
(
!
hwif
->
udma_four
)
hwif
->
udma_four
=
(
via_80w
>>
hwif
->
channel
)
&
1
;
hwif
->
udma_four
=
(
v
dev
->
v
ia_80w
>>
hwif
->
channel
)
&
1
;
hwif
->
ide_dma_check
=
&
via82cxxx_ide_dma_check
;
if
(
!
noautodma
)
hwif
->
autodma
=
1
;
...
...
drivers/ide/ppc/pmac.c
View file @
b286e392
...
...
@@ -1401,20 +1401,6 @@ pmac_ide_setup_device(pmac_ide_hwif_t *pmif, ide_hwif_t *hwif)
/* We probe the hwif now */
probe_hwif_init
(
hwif
);
/* The code IDE code will have set hwif->present if we have devices attached,
* if we don't, the discard the interface except if we are on a media bay slot
*/
if
(
!
hwif
->
present
&&
!
pmif
->
mediabay
)
{
printk
(
KERN_INFO
"ide%d: Bus empty, interface released.
\n
"
,
hwif
->
index
);
default_hwif_iops
(
hwif
);
for
(
i
=
IDE_DATA_OFFSET
;
i
<=
IDE_CONTROL_OFFSET
;
++
i
)
hwif
->
io_ports
[
i
]
=
0
;
hwif
->
chipset
=
ide_unknown
;
hwif
->
noprobe
=
1
;
return
-
ENODEV
;
}
return
0
;
}
...
...
drivers/ide/setup-pci.c
View file @
b286e392
...
...
@@ -787,7 +787,7 @@ static int pre_init = 1; /* Before first ordered IDE scan */
static
LIST_HEAD
(
ide_pci_drivers
);
/*
* __ide_
register_pci
_driver - attach IDE driver
* __ide_
pci_register
_driver - attach IDE driver
* @driver: pci driver
* @module: owner module of the driver
*
...
...
drivers/scsi/ide-scsi.c
View file @
b286e392
...
...
@@ -784,8 +784,8 @@ static ide_proc_entry_t idescsi_proc[] = {
#endif
static
ide_driver_t
idescsi_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"ide-scsi"
,
.
bus
=
&
ide_bus_type
,
.
probe
=
ide_scsi_probe
,
...
...
include/linux/ide.h
View file @
b286e392
...
...
@@ -1089,9 +1089,11 @@ enum {
/*
* Subdrivers support.
*
* The gendriver.owner field should be set to the module owner of this driver.
* The gendriver.name field should be set to the name of this driver
*/
typedef
struct
ide_driver_s
{
struct
module
*
owner
;
const
char
*
version
;
u8
media
;
unsigned
supports_dsc_overlap
:
1
;
...
...
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