Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 47362
b: refs/heads/master
c: 9b14dec
h: refs/heads/master
v: v3
  • Loading branch information
Alan authored and Jeff Garzik committed Feb 9, 2007
1 parent bf4e30c commit 825a50c
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5924b74c1cde5ef0246cf0dfbe689b27ffbe815b
refs/heads/master: 9b14dec5adf47287a2b52fc9fdedd6a0e245daca
9 changes: 6 additions & 3 deletions trunk/drivers/ata/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -116,11 +116,14 @@ config SATA_SIL24
If unsure, say N.

config SATA_SIS
tristate "SiS 964/180 SATA support"
tristate "SiS 964/965/966/180 SATA support"
depends on PCI
select PATA_SIS
help
This option enables support for SiS Serial ATA 964/180.

This option enables support for SiS Serial ATA on
SiS 964/965/966/180 and Parallel ATA on SiS 180.
The PATA support for SiS 180 requires additionally to
enable the PATA_SIS driver in the config.
If unsure, say N.

config SATA_ULI
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/ata/pata_sis.c
Original file line number Diff line number Diff line change
Expand Up @@ -796,6 +796,8 @@ static struct ata_port_info sis_info133_early = {
.port_ops = &sis_133_early_ops,
};

/* Privately shared with the SiS180 SATA driver, not for use elsewhere */
EXPORT_SYMBOL_GPL(sis_info133);

static void sis_fixup(struct pci_dev *pdev, struct sis_chipset *sis)
{
Expand Down
34 changes: 25 additions & 9 deletions trunk/drivers/ata/sata_sis.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,22 +138,25 @@ static struct ata_port_info sis_port_info = {
.port_ops = &sis_ops,
};


MODULE_AUTHOR("Uwe Koziolek");
MODULE_DESCRIPTION("low-level driver for Silicon Integratad Systems SATA controller");
MODULE_LICENSE("GPL");
MODULE_DEVICE_TABLE(pci, sis_pci_tbl);
MODULE_VERSION(DRV_VERSION);

static unsigned int get_scr_cfg_addr(unsigned int port_no, unsigned int sc_reg, struct pci_dev *pdev)
static unsigned int get_scr_cfg_addr(struct ata_port *ap, unsigned int sc_reg)
{
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned int addr = SIS_SCR_BASE + (4 * sc_reg);
u8 pmr;

if (port_no) {
if (ap->port_no) {
switch (pdev->device) {
case 0x0180:
case 0x0181:
addr += SIS180_SATA1_OFS;
pci_read_config_byte(pdev, SIS_PMR, &pmr);
if ((pmr & SIS_PMR_COMBINED) == 0)
addr += SIS180_SATA1_OFS;
break;

case 0x0182:
Expand All @@ -170,7 +173,7 @@ static unsigned int get_scr_cfg_addr(unsigned int port_no, unsigned int sc_reg,
static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
{
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, sc_reg, pdev);
unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg);
u32 val, val2 = 0;
u8 pmr;

Expand All @@ -188,13 +191,13 @@ static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
return (val|val2) & 0xfffffffb; /* avoid problems with powerdowned ports */
}

static void sis_scr_cfg_write (struct ata_port *ap, unsigned int scr, u32 val)
static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
{
struct pci_dev *pdev = to_pci_dev(ap->host->dev);
unsigned int cfg_addr = get_scr_cfg_addr(ap->port_no, scr, pdev);
unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg);
u8 pmr;

if (scr == SCR_ERROR) /* doesn't exist in PCI cfg space */
if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */
return;

pci_read_config_byte(pdev, SIS_PMR, &pmr);
Expand Down Expand Up @@ -251,6 +254,9 @@ static void sis_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)

static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
{
/* Provided by the PATA driver */
extern struct ata_port_info sis_info133;

static int printed_version;
struct ata_probe_ent *probe_ent = NULL;
int rc;
Expand Down Expand Up @@ -300,6 +306,17 @@ static int sis_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
switch (ent->device) {
case 0x0180:
case 0x0181:

/* The PATA-handling is provided by pata_sis */
switch (pmr & 0x30) {
case 0x10:
ppi[1] = &sis_info133;
break;

case 0x30:
ppi[0] = &sis_info133;
break;
}
if ((pmr & SIS_PMR_COMBINED) == 0) {
dev_printk(KERN_INFO, &pdev->dev,
"Detected SiS 180/181/964 chipset in SATA mode\n");
Expand Down Expand Up @@ -379,4 +396,3 @@ static void __exit sis_exit(void)

module_init(sis_init);
module_exit(sis_exit);

0 comments on commit 825a50c

Please sign in to comment.