Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 171193
b: refs/heads/master
c: a134fd6
h: refs/heads/master
i:
  171191: 81368c1
v: v3
  • Loading branch information
Dirk Brandewie authored and Inaky Perez-Gonzalez committed Oct 19, 2009
1 parent ef10f0a commit 928201b
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 15 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: 81b182a7542c4282191fa0b1e8d9fcb022c03e68
refs/heads/master: a134fd6b103b78378e3beb6af94d8d8c2abdd19d
54 changes: 40 additions & 14 deletions trunk/drivers/net/wimax/i2400m/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -618,6 +618,46 @@ int i2400m_dev_reset_handle(struct i2400m *i2400m)
EXPORT_SYMBOL_GPL(i2400m_dev_reset_handle);


/**
* i2400m_bm_buf_alloc - Alloc the command and ack buffers for boot mode
*
* Get the buffers needed to deal with boot mode messages. These
* buffers need to be allocated before the sdio recieve irq is setup.
*/
int i2400m_bm_buf_alloc(struct i2400m *i2400m)
{
int result;

result = -ENOMEM;
i2400m->bm_cmd_buf = kzalloc(I2400M_BM_CMD_BUF_SIZE, GFP_KERNEL);
if (i2400m->bm_cmd_buf == NULL)
goto error_bm_cmd_kzalloc;
i2400m->bm_ack_buf = kzalloc(I2400M_BM_ACK_BUF_SIZE, GFP_KERNEL);
if (i2400m->bm_ack_buf == NULL)
goto error_bm_ack_buf_kzalloc;
return 0;

error_bm_ack_buf_kzalloc:
kfree(i2400m->bm_cmd_buf);
error_bm_cmd_kzalloc:
return result;
}
EXPORT_SYMBOL_GPL(i2400m_bm_buf_alloc);

/**
* i2400m_bm_buf_free - Free boot mode command and ack buffers.
*
* Free the command and ack buffers
*
*/
void i2400m_bm_buf_free(struct i2400m *i2400m)
{
kfree(i2400m->bm_ack_buf);
kfree(i2400m->bm_cmd_buf);
return;
}
EXPORT_SYMBOL_GPL(i2400m_bm_buf_free
);
/**
* i2400m_setup - bus-generic setup function for the i2400m device
*
Expand Down Expand Up @@ -645,16 +685,6 @@ int i2400m_setup(struct i2400m *i2400m, enum i2400m_bri bm_flags)
snprintf(wimax_dev->name, sizeof(wimax_dev->name),
"i2400m-%s:%s", dev->bus->name, dev_name(dev));

i2400m->bm_cmd_buf = kzalloc(I2400M_BM_CMD_BUF_SIZE, GFP_KERNEL);
if (i2400m->bm_cmd_buf == NULL) {
dev_err(dev, "cannot allocate USB command buffer\n");
goto error_bm_cmd_kzalloc;
}
i2400m->bm_ack_buf = kzalloc(I2400M_BM_ACK_BUF_SIZE, GFP_KERNEL);
if (i2400m->bm_ack_buf == NULL) {
dev_err(dev, "cannot allocate USB ack buffer\n");
goto error_bm_ack_buf_kzalloc;
}
result = i2400m_bootrom_init(i2400m, bm_flags);
if (result < 0) {
dev_err(dev, "read mac addr: bootrom init "
Expand Down Expand Up @@ -713,10 +743,6 @@ int i2400m_setup(struct i2400m *i2400m, enum i2400m_bri bm_flags)
error_register_netdev:
error_read_mac_addr:
error_bootrom_init:
kfree(i2400m->bm_ack_buf);
error_bm_ack_buf_kzalloc:
kfree(i2400m->bm_cmd_buf);
error_bm_cmd_kzalloc:
d_fnend(3, dev, "(i2400m %p) = %d\n", i2400m, result);
return result;
}
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/net/wimax/i2400m/i2400m.h
Original file line number Diff line number Diff line change
Expand Up @@ -725,6 +725,8 @@ void i2400m_put(struct i2400m *i2400m)
}

extern int i2400m_dev_reset_handle(struct i2400m *);
extern int i2400m_bm_buf_alloc(struct i2400m *i2400m);
extern void i2400m_bm_buf_free(struct i2400m *i2400m);

/*
* _setup()/_release() are called by the probe/disconnect functions of
Expand Down
14 changes: 14 additions & 0 deletions trunk/drivers/net/wimax/i2400m/sdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,18 @@ int i2400ms_probe(struct sdio_func *func,
goto error_func_enable;
}

/*
* Before we are enabling the device interrupt register, make
* sure the buffer used during bootmode operation is setup so
* when the first D2H data interrupt comes, the memory is
* available for copying the D2H data.
*/
result = i2400m_bm_buf_alloc(i2400m);
if (result < 0) {
dev_err(dev, "cannot allocate SDIO bootmode buffer\n");
goto error_bootmode_buf_setup;
}

result = i2400ms_rx_setup(i2400ms);
if (result < 0)
goto error_rx_setup;
Expand All @@ -474,6 +486,8 @@ int i2400ms_probe(struct sdio_func *func,
error_setup:
i2400ms_rx_release(i2400ms);
error_rx_setup:
i2400m_bm_buf_free(i2400m);
error_bootmode_buf_setup:
sdio_claim_host(func);
sdio_disable_func(func);
sdio_release_host(func);
Expand Down
8 changes: 8 additions & 0 deletions trunk/drivers/net/wimax/i2400m/usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,12 @@ int i2400mu_probe(struct usb_interface *iface,
usb_dev->autosuspend_disabled = 0;
#endif

result = i2400m_bm_buf_alloc(i2400m);
if (result < 0) {
dev_err(dev, "cannot allocate USB bootmode buffer\n");
goto error_bm_buf_alloc;
}

result = i2400m_setup(i2400m, I2400M_BRI_MAC_REINIT);
if (result < 0) {
dev_err(dev, "cannot setup device: %d\n", result);
Expand All @@ -434,6 +440,8 @@ int i2400mu_probe(struct usb_interface *iface,
error_debugfs_add:
i2400m_release(i2400m);
error_setup:
i2400m_bm_buf_free(i2400m);
error_bm_buf_alloc:
usb_set_intfdata(iface, NULL);
usb_put_dev(i2400mu->usb_dev);
free_netdev(net_dev);
Expand Down

0 comments on commit 928201b

Please sign in to comment.