wake_up_interruptible(&ptempnode->cmdwait_q);
ptempnode->wait_option = 0;
ptempnode->pdata_buf = NULL;
- ptempnode->pdata_size = NULL;
ptempnode->callback = NULL;
if (ptempnode->bufvirtualaddr != NULL)
ptempnode->wait_option = wait_option;
ptempnode->pdata_buf = pdata_buf;
- ptempnode->pdata_size = NULL;
ptempnode->callback = NULL;
lbs_deb_leave(LBS_DEB_HOST);
* the result code from the firmware
*/
-static int lbs_cmd_callback(uint16_t respcmd, struct cmd_ds_command *resp, struct lbs_private *priv)
-{
- struct cmd_ds_gen *r = (struct cmd_ds_gen *)resp;
- struct lbs_adapter *adapter = priv->adapter;
- u16 sz = le16_to_cpu(resp->size) - S_DS_GEN;
-
- if (sz > *adapter->cur_cmd->pdata_size) {
- lbs_pr_err("response 0x%04x doesn't fit into buffer (%d > %d)\n",
- respcmd, sz, *adapter->cur_cmd->pdata_size);
- sz = *adapter->cur_cmd->pdata_size;
- }
- memcpy(adapter->cur_cmd->pdata_buf, r->cmdresp, sz);
- *adapter->cur_cmd->pdata_size = sz;
-
- return 0;
-}
-
-int lbs_cmd(struct lbs_private *priv, u16 command, void *cmd, int cmd_size,
- void *rsp, int *rsp_size)
+int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size,
+ int (*callback)(uint16_t, struct cmd_ds_command *, struct lbs_private *))
{
struct lbs_adapter *adapter = priv->adapter;
struct cmd_ctrl_node *cmdnode;
int ret = 0;
lbs_deb_enter(LBS_DEB_HOST);
- lbs_deb_host("rsp at %p, rsp_size at %p\n", rsp, rsp_size);
- if (!adapter || !rsp_size) {
+ if (!adapter) {
lbs_deb_host("PREP_CMD: adapter is NULL\n");
ret = -1;
goto done;
cmdptr = (struct cmd_ds_gen *)cmdnode->bufvirtualaddr;
cmdnode->wait_option = CMD_OPTION_WAITFORRSP;
- cmdnode->pdata_buf = rsp;
- cmdnode->pdata_size = rsp_size;
- cmdnode->callback = lbs_cmd_callback;
+ cmdnode->callback = callback;
/* Set sequence number, clean result, move to buffer */
adapter->seqnum++;
int lbs_free_cmd_buffer(struct lbs_private *priv);
-int lbs_cmd(struct lbs_private *priv,
- u16 command,
- void *cmd, int cmd_size,
- void *resp, int *resp_size);
+int lbs_cmd(struct lbs_private *priv, uint16_t command, void *cmd, int cmd_size,
+ int (*callback)(uint16_t, struct cmd_ds_command *, struct lbs_private *));
int lbs_prepare_and_send_command(struct lbs_private *priv,
u16 cmd_no,
static void if_usb_set_boot2_ver(struct lbs_private *priv)
{
struct cmd_ds_set_boot2_ver b2_cmd;
- int rsp_len = sizeof(b2_cmd);
b2_cmd.action = 0;
b2_cmd.version = priv->boot2_version;
- if (lbs_cmd(priv, CMD_SET_BOOT2_VER, &b2_cmd, sizeof(b2_cmd),
- &b2_cmd, &rsp_len)) {
+ if (lbs_cmd(priv, CMD_SET_BOOT2_VER, &b2_cmd, sizeof(b2_cmd), NULL))
lbs_deb_usb("Setting boot2 version failed\n");
- }
}