Commit 529e7a62 authored by Ed Lin's avatar Ed Lin Committed by James Bottomley

[SCSI] stex: adjust default queue length

Firmware of new version may adjust default queue length. It is
backward compatible.
Signed-off-by: default avatarEd Lin <ed.lin@promise.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 47c4f997
...@@ -78,6 +78,7 @@ enum { ...@@ -78,6 +78,7 @@ enum {
MU_MAX_DELAY_TIME = 240000, MU_MAX_DELAY_TIME = 240000,
MU_HANDSHAKE_SIGNATURE = 0x55aaaa55, MU_HANDSHAKE_SIGNATURE = 0x55aaaa55,
MU_HANDSHAKE_SIGNATURE_HALF = 0x5a5a0000,
HMU_PARTNER_TYPE = 2, HMU_PARTNER_TYPE = 2,
/* firmware returned values */ /* firmware returned values */
...@@ -902,6 +903,7 @@ static int stex_handshake(struct st_hba *hba) ...@@ -902,6 +903,7 @@ static int stex_handshake(struct st_hba *hba)
void __iomem *base = hba->mmio_base; void __iomem *base = hba->mmio_base;
struct handshake_frame *h; struct handshake_frame *h;
dma_addr_t status_phys; dma_addr_t status_phys;
u32 data;
int i; int i;
if (readl(base + OMR0) != MU_HANDSHAKE_SIGNATURE) { if (readl(base + OMR0) != MU_HANDSHAKE_SIGNATURE) {
...@@ -923,6 +925,13 @@ static int stex_handshake(struct st_hba *hba) ...@@ -923,6 +925,13 @@ static int stex_handshake(struct st_hba *hba)
udelay(10); udelay(10);
data = readl(base + OMR1);
if ((data & 0xffff0000) == MU_HANDSHAKE_SIGNATURE_HALF) {
data &= 0x0000ffff;
if (hba->host->can_queue > data)
hba->host->can_queue = data;
}
h = (struct handshake_frame *)(hba->dma_mem + MU_REQ_BUFFER_SIZE); h = (struct handshake_frame *)(hba->dma_mem + MU_REQ_BUFFER_SIZE);
h->rb_phy = cpu_to_le32(hba->dma_handle); h->rb_phy = cpu_to_le32(hba->dma_handle);
h->rb_phy_hi = cpu_to_le32((hba->dma_handle >> 16) >> 16); h->rb_phy_hi = cpu_to_le32((hba->dma_handle >> 16) >> 16);
...@@ -1234,7 +1243,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -1234,7 +1243,7 @@ stex_probe(struct pci_dev *pdev, const struct pci_device_id *id)
if (err) if (err)
goto out_free_irq; goto out_free_irq;
err = scsi_init_shared_tag_map(host, ST_CAN_QUEUE); err = scsi_init_shared_tag_map(host, host->can_queue);
if (err) { if (err) {
printk(KERN_ERR DRV_NAME "(%s): init shared queue failed\n", printk(KERN_ERR DRV_NAME "(%s): init shared queue failed\n",
pci_name(pdev)); pci_name(pdev));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment