Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 237377
b: refs/heads/master
c: 8662b25
h: refs/heads/master
i:
  237375: e6ecb09
v: v3
  • Loading branch information
Jussi Kivilinna authored and John W. Linville committed Feb 14, 2011
1 parent 5adef9f commit fa5980d
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 14 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: eefdbec1ea8b7093d2c09d1825f68438701723cf
refs/heads/master: 8662b2518ff7995002378058488326ef7cb80de8
35 changes: 28 additions & 7 deletions trunk/drivers/net/wireless/zd1211rw/zd_chip.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,9 @@ int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr
return 0;
}

int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
unsigned int count)
static int _zd_iowrite32v_async_locked(struct zd_chip *chip,
const struct zd_ioreq32 *ioreqs,
unsigned int count)
{
int i, j, r;
struct zd_ioreq16 ioreqs16[USB_MAX_IOWRITE32_COUNT * 2];
Expand All @@ -170,7 +171,7 @@ int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
ioreqs16[j+1].addr = ioreqs[i].addr;
}

r = zd_usb_iowrite16v(&chip->usb, ioreqs16, count16);
r = zd_usb_iowrite16v_async(&chip->usb, ioreqs16, count16);
#ifdef DEBUG
if (r) {
dev_dbg_f(zd_chip_dev(chip),
Expand All @@ -180,13 +181,29 @@ int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
return r;
}

int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
unsigned int count)
{
int r;

zd_usb_iowrite16v_async_start(&chip->usb);
r = _zd_iowrite32v_async_locked(chip, ioreqs, count);
if (r) {
zd_usb_iowrite16v_async_end(&chip->usb, 0);
return r;
}
return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */);
}

int zd_iowrite16a_locked(struct zd_chip *chip,
const struct zd_ioreq16 *ioreqs, unsigned int count)
{
int r;
unsigned int i, j, t, max;

ZD_ASSERT(mutex_is_locked(&chip->mutex));
zd_usb_iowrite16v_async_start(&chip->usb);

for (i = 0; i < count; i += j + t) {
t = 0;
max = count-i;
Expand All @@ -199,16 +216,17 @@ int zd_iowrite16a_locked(struct zd_chip *chip,
}
}

r = zd_usb_iowrite16v(&chip->usb, &ioreqs[i], j);
r = zd_usb_iowrite16v_async(&chip->usb, &ioreqs[i], j);
if (r) {
zd_usb_iowrite16v_async_end(&chip->usb, 0);
dev_dbg_f(zd_chip_dev(chip),
"error zd_usb_iowrite16v. Error number %d\n",
r);
return r;
}
}

return 0;
return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */);
}

/* Writes a variable number of 32 bit registers. The functions will split
Expand All @@ -221,6 +239,8 @@ int zd_iowrite32a_locked(struct zd_chip *chip,
int r;
unsigned int i, j, t, max;

zd_usb_iowrite16v_async_start(&chip->usb);

for (i = 0; i < count; i += j + t) {
t = 0;
max = count-i;
Expand All @@ -233,16 +253,17 @@ int zd_iowrite32a_locked(struct zd_chip *chip,
}
}

r = _zd_iowrite32v_locked(chip, &ioreqs[i], j);
r = _zd_iowrite32v_async_locked(chip, &ioreqs[i], j);
if (r) {
zd_usb_iowrite16v_async_end(&chip->usb, 0);
dev_dbg_f(zd_chip_dev(chip),
"error _zd_iowrite32v_locked."
" Error number %d\n", r);
return r;
}
}

return 0;
return zd_usb_iowrite16v_async_end(&chip->usb, 50 /* ms */);
}

int zd_ioread16(struct zd_chip *chip, zd_addr_t addr, u16 *value)
Expand Down
11 changes: 5 additions & 6 deletions trunk/drivers/net/wireless/zd1211rw/zd_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1674,7 +1674,7 @@ static void iowrite16v_urb_complete(struct urb *urb)

static int zd_submit_waiting_urb(struct zd_usb *usb, bool last)
{
int r;
int r = 0;
struct urb *urb = usb->urb_async_waiting;

if (!urb)
Expand All @@ -1700,7 +1700,7 @@ static int zd_submit_waiting_urb(struct zd_usb *usb, bool last)
return r;
}

static void zd_usb_iowrite16v_async_start(struct zd_usb *usb)
void zd_usb_iowrite16v_async_start(struct zd_usb *usb)
{
ZD_ASSERT(usb_anchor_empty(&usb->submitted_cmds));
ZD_ASSERT(usb->urb_async_waiting == NULL);
Expand All @@ -1713,7 +1713,7 @@ static void zd_usb_iowrite16v_async_start(struct zd_usb *usb)
usb->urb_async_waiting = NULL;
}

static int zd_usb_iowrite16v_async_end(struct zd_usb *usb, unsigned int timeout)
int zd_usb_iowrite16v_async_end(struct zd_usb *usb, unsigned int timeout)
{
int r;

Expand Down Expand Up @@ -1749,9 +1749,8 @@ static int zd_usb_iowrite16v_async_end(struct zd_usb *usb, unsigned int timeout)
return r;
}

static int zd_usb_iowrite16v_async(struct zd_usb *usb,
const struct zd_ioreq16 *ioreqs,
unsigned int count)
int zd_usb_iowrite16v_async(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
unsigned int count)
{
int r;
struct usb_device *udev;
Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/net/wireless/zd1211rw/zd_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,10 @@ static inline int zd_usb_ioread16(struct zd_usb *usb, u16 *value,
return zd_usb_ioread16v(usb, value, (const zd_addr_t *)&addr, 1);
}

void zd_usb_iowrite16v_async_start(struct zd_usb *usb);
int zd_usb_iowrite16v_async_end(struct zd_usb *usb, unsigned int timeout);
int zd_usb_iowrite16v_async(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
unsigned int count);
int zd_usb_iowrite16v(struct zd_usb *usb, const struct zd_ioreq16 *ioreqs,
unsigned int count);

Expand Down

0 comments on commit fa5980d

Please sign in to comment.