aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/i2o.h
diff options
context:
space:
mode:
authorMarkus Lidel <Markus.Lidel@shadowconnect.com>2005-06-24 01:02:19 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-24 03:05:28 -0400
commitb2aaee33fbb354a2f08121aa1c1be55841102761 (patch)
tree7567ca61aaf5eed8bb1acd01cd87aa235b854fd4 /include/linux/i2o.h
parentf10378fff658f61307496e0ae00095041725cf07 (diff)
[PATCH] I2O: Adaptec specific SG_IO access, firmware access through sysfs and 2400A workaround
Changes: - Provide SG_IO access to BLOCK and EXECUTIVE class on Adaptec controllers - Use PRIVATE messages in SCSI-OSM because on some controllers normal SCSI class commands like READ or READ CAPACITY cause errors - Use new DMA and SG list creation function - Added workaround to limit sectors per request for Adaptec 2400A controllers Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/i2o.h')
-rw-r--r--include/linux/i2o.h37
1 files changed, 26 insertions, 11 deletions
diff --git a/include/linux/i2o.h b/include/linux/i2o.h
index 497ea574f96b..2039a87c2b91 100644
--- a/include/linux/i2o.h
+++ b/include/linux/i2o.h
@@ -147,10 +147,13 @@ struct i2o_controller {
147 147
148 struct pci_dev *pdev; /* PCI device */ 148 struct pci_dev *pdev; /* PCI device */
149 149
150 unsigned int short_req:1; /* use small block sizes */
151 unsigned int no_quiesce:1; /* dont quiesce before reset */
152 unsigned int raptor:1; /* split bar */
153 unsigned int promise:1; /* Promise controller */ 150 unsigned int promise:1; /* Promise controller */
151 unsigned int adaptec:1; /* DPT / Adaptec controller */
152 unsigned int raptor:1; /* split bar */
153 unsigned int no_quiesce:1; /* dont quiesce before reset */
154 unsigned int short_req:1; /* use small block sizes */
155 unsigned int limit_sectors:1; /* limit number of sectors / request */
156 unsigned int pae_support:1; /* controller has 64-bit SGL support */
154 157
155 struct list_head devices; /* list of I2O devices */ 158 struct list_head devices; /* list of I2O devices */
156 struct list_head list; /* Controller list */ 159 struct list_head list; /* Controller list */
@@ -746,7 +749,21 @@ static inline struct i2o_message __iomem *i2o_msg_in_to_virt(struct i2o_controll
746static inline int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr, 749static inline int i2o_dma_alloc(struct device *dev, struct i2o_dma *addr,
747 size_t len, unsigned int gfp_mask) 750 size_t len, unsigned int gfp_mask)
748{ 751{
752 struct pci_dev *pdev = to_pci_dev(dev);
753 int dma_64 = 0;
754
755 if ((sizeof(dma_addr_t) > 4) && (pdev->dma_mask == DMA_64BIT_MASK)) {
756 dma_64 = 1;
757 if(pci_set_dma_mask(pdev, DMA_32BIT_MASK))
758 return -ENOMEM;
759 }
760
749 addr->virt = dma_alloc_coherent(dev, len, &addr->phys, gfp_mask); 761 addr->virt = dma_alloc_coherent(dev, len, &addr->phys, gfp_mask);
762
763 if ((sizeof(dma_addr_t) > 4) && dma_64)
764 if(pci_set_dma_mask(pdev, DMA_64BIT_MASK))
765 printk(KERN_WARNING "i2o: unable to set 64-bit DMA");
766
750 if (!addr->virt) 767 if (!addr->virt)
751 return -ENOMEM; 768 return -ENOMEM;
752 769
@@ -946,7 +963,7 @@ extern void i2o_debug_state(struct i2o_controller *c);
946#define I2O_CMD_BLOCK_MEJECT 0x43 963#define I2O_CMD_BLOCK_MEJECT 0x43
947#define I2O_CMD_BLOCK_POWER 0x70 964#define I2O_CMD_BLOCK_POWER 0x70
948 965
949#define I2O_PRIVATE_MSG 0xFF 966#define I2O_CMD_PRIVATE 0xFF
950 967
951/* Command status values */ 968/* Command status values */
952 969
@@ -1095,9 +1112,9 @@ extern void i2o_debug_state(struct i2o_controller *c);
1095#define SGL_OFFSET_8 (0x0080 | I2OVERSION) 1112#define SGL_OFFSET_8 (0x0080 | I2OVERSION)
1096#define SGL_OFFSET_9 (0x0090 | I2OVERSION) 1113#define SGL_OFFSET_9 (0x0090 | I2OVERSION)
1097#define SGL_OFFSET_10 (0x00A0 | I2OVERSION) 1114#define SGL_OFFSET_10 (0x00A0 | I2OVERSION)
1098 1115#define SGL_OFFSET_11 (0x00B0 | I2OVERSION)
1099#define TRL_OFFSET_5 (0x0050 | I2OVERSION) 1116#define SGL_OFFSET_12 (0x00C0 | I2OVERSION)
1100#define TRL_OFFSET_6 (0x0060 | I2OVERSION) 1117#define SGL_OFFSET(x) (((x)<<4) | I2OVERSION)
1101 1118
1102/* Transaction Reply Lists (TRL) Control Word structure */ 1119/* Transaction Reply Lists (TRL) Control Word structure */
1103#define TRL_SINGLE_FIXED_LENGTH 0x00 1120#define TRL_SINGLE_FIXED_LENGTH 0x00
@@ -1130,7 +1147,6 @@ extern void i2o_debug_state(struct i2o_controller *c);
1130#define HOST_TID 1 1147#define HOST_TID 1
1131 1148
1132#define MSG_FRAME_SIZE 128 /* i2o_scsi assumes >= 32 */ 1149#define MSG_FRAME_SIZE 128 /* i2o_scsi assumes >= 32 */
1133#define REPLY_FRAME_SIZE 17
1134#define SG_TABLESIZE 30 1150#define SG_TABLESIZE 30
1135#define NMBR_MSG_FRAMES 128 1151#define NMBR_MSG_FRAMES 128
1136 1152
@@ -1155,11 +1171,10 @@ extern void i2o_debug_state(struct i2o_controller *c);
1155#define I2O_HRT_GET_TRIES 3 1171#define I2O_HRT_GET_TRIES 3
1156#define I2O_LCT_GET_TRIES 3 1172#define I2O_LCT_GET_TRIES 3
1157 1173
1158/* request queue sizes */ 1174/* defines for max_sectors and max_phys_segments */
1159#define I2O_MAX_SECTORS 1024 1175#define I2O_MAX_SECTORS 1024
1176#define I2O_MAX_SECTORS_LIMITED 256
1160#define I2O_MAX_PHYS_SEGMENTS MAX_PHYS_SEGMENTS 1177#define I2O_MAX_PHYS_SEGMENTS MAX_PHYS_SEGMENTS
1161 1178
1162#define I2O_REQ_MEMPOOL_SIZE 32
1163
1164#endif /* __KERNEL__ */ 1179#endif /* __KERNEL__ */
1165#endif /* _I2O_H */ 1180#endif /* _I2O_H */