From e683af2efdb40e19a5577a6afd33692c75924bc4 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Sat, 30 Sep 2006 23:27:50 -0700 Subject: [PATCH] --- yaml --- r: 37643 b: refs/heads/master c: e4e040887b8f136d00e253dcf584667d8cd560a6 h: refs/heads/master i: 37641: 5a5f2a995192e6762c4ad86eb132c21b5ea43161 37639: 3ee08d8d14d3e9d1fec17e8c7d2410367d52d444 v: v3 --- [refs] | 2 +- trunk/drivers/char/isicom.c | 35 +++++++++++++++++++---------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index 14137f3a67ae..0bc1ff8b1dd0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3f27100872b21e4cc70d07b96eeb3611b30bce63 +refs/heads/master: e4e040887b8f136d00e253dcf584667d8cd560a6 diff --git a/trunk/drivers/char/isicom.c b/trunk/drivers/char/isicom.c index 913be23e0a24..2e1da632aee1 100644 --- a/trunk/drivers/char/isicom.c +++ b/trunk/drivers/char/isicom.c @@ -1756,9 +1756,12 @@ static int __devinit load_firmware(struct pci_dev *pdev, if (retval) goto end; + retval = -EIO; + for (frame = (struct stframe *)fw->data; frame < (struct stframe *)(fw->data + fw->size); - frame++) { + frame = (struct stframe *)((u8 *)(frame + 1) + + frame->count)) { if (WaitTillCardIsFree(base)) goto errrelfw; @@ -1797,23 +1800,12 @@ static int __devinit load_firmware(struct pci_dev *pdev, } } - retval = -EIO; - - if (WaitTillCardIsFree(base)) - goto errrelfw; - - outw(0xf2, base); - outw(0x800, base); - outw(0x0, base); - outw(0x0, base); - InterruptTheCard(base); - outw(0x0, base + 0x4); /* for ISI4608 cards */ - /* XXX: should we test it by reading it back and comparing with original like * in load firmware package? */ - for (frame = (struct stframe*)fw->data; - frame < (struct stframe*)(fw->data + fw->size); - frame++) { + for (frame = (struct stframe *)fw->data; + frame < (struct stframe *)(fw->data + fw->size); + frame = (struct stframe *)((u8 *)(frame + 1) + + frame->count)) { if (WaitTillCardIsFree(base)) goto errrelfw; @@ -1863,6 +1855,17 @@ static int __devinit load_firmware(struct pci_dev *pdev, } } + /* xfer ctrl */ + if (WaitTillCardIsFree(base)) + goto errrelfw; + + outw(0xf2, base); + outw(0x800, base); + outw(0x0, base); + outw(0x0, base); + InterruptTheCard(base); + outw(0x0, base + 0x4); /* for ISI4608 cards */ + board->status |= FIRMWARE_LOADED; retval = 0;