diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index 55e744d..73803a5 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c @@ -139,6 +139,7 @@ enum { PORT_CS_DEV_RST = (1 << 1), /* device reset */ PORT_CS_INIT = (1 << 2), /* port initialize */ PORT_CS_IRQ_WOC = (1 << 3), /* interrupt write one to clear */ + PORT_CS_CDB16 = (1 << 5), /* 0=12b cdb, 1=16b cdb */ PORT_CS_RESUME = (1 << 6), /* port resume */ PORT_CS_32BIT_ACTV = (1 << 10), /* 32-bit activation */ PORT_CS_PM_EN = (1 << 13), /* port multiplier enable */ @@ -188,11 +189,36 @@ enum { PORT_CERR_XFR_PCIPERR = 35, /* PSD ecode 11 - PCI prity err during transfer */ PORT_CERR_SENDSERVICE = 36, /* FIS received while sending service */ + /* bits of PRB control field */ + CTRL_PROTOCOL = (1 << 0), /* override def. ATA protocol */ + CTRL_PACKET_READ = (1 << 4), /* PACKET cmd read */ + CTRL_PACKET_WRITE = (1 << 5), /* PACKET cmd write */ + CTRL_NIEN = (1 << 6), /* Mask completion irq */ + CTRL_SRST = (1 << 7), /* Soft reset request (ign BSY?) */ + + /* PRB protocol field */ + PRB_PROT_PACKET = (1 << 16), + PRB_PROT_TCQ = (1 << 17), + PRB_PROT_NCQ = (1 << 18), + PRB_PROT_READ = (1 << 19), + PRB_PROT_WRITE = (1 << 20), + PRB_PROT_TRANSPARENT = (1 << 21), + + /* port RAM layout (0x000 - 0xFFF) */ + RAM_SLOT_SZ = 0x80, /* size of one slot */ + RAM_SLOT_N = 31, + RAM_SLOT_PM_OFS = 0xf80, + RAM_SLOT_PM_SZ = 8, /* struct sil24_pm_reg */ + RAM_SLOT_PM_N = 16, + /* * Other constants */ SGE_TRM = (1 << 31), /* Last SGE in chain */ - PRB_SOFT_RST = (1 << 7), /* Soft reset request (ign BSY?) */ + SGE_LNK = (1 << 30), /* linked list; + Points to SGT, not SGE */ + SGE_DRD = (1 << 29), /* discard data read (/dev/null) */ + /* data address ignored */ /* board id */ BID_SIL3124 = 0, @@ -207,6 +233,19 @@ struct sil24_cmd_block { struct sil24_sge sge[LIBATA_MAX_PRD]; }; +/* ATAPI PRB */ +struct sil24_atapi_block { + struct sil24_prb prb; + u8 cdb[16]; + struct sil24_sge sge[1]; +}; + +/* per-port multiplier set of registers */ +struct sil24_pm_reg { + u32 status; + u32 qactive; +}; + /* * ap->private_data *