u8 addtail)
 {
        unsigned long flags;
-       struct cmd_ds_command *cmdptr;
 
        lbs_deb_enter(LBS_DEB_HOST);
 
-       if (!cmdnode) {
-               lbs_deb_host("QUEUE_CMD: cmdnode is NULL\n");
-               goto done;
-       }
-
-       cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr;
-       if (!cmdptr) {
-               lbs_deb_host("QUEUE_CMD: cmdptr is NULL\n");
+       if (!cmdnode || !cmdnode->cmdbuf) {
+               lbs_deb_host("QUEUE_CMD: cmdnode or cmdbuf is NULL\n");
                goto done;
        }
 
        /* Exit_PS command needs to be queued in the header always. */
-       if (le16_to_cpu(cmdptr->command) == CMD_802_11_PS_MODE) {
-               struct cmd_ds_802_11_ps_mode *psm = &cmdptr->params.psmode;
+       if (le16_to_cpu(cmdnode->cmdbuf->command) == CMD_802_11_PS_MODE) {
+               struct cmd_ds_802_11_ps_mode *psm = (void *) cmdnode->cmdbuf;
+
                if (psm->action == cpu_to_le16(CMD_SUBCMD_EXIT_PS)) {
                        if (priv->psstate != PS_STATE_FULL_POWER)
                                addtail = 0;
        spin_unlock_irqrestore(&priv->driver_lock, flags);
 
        lbs_deb_host("QUEUE_CMD: inserted command 0x%04x into cmdpendingq\n",
-              le16_to_cpu(((struct cmd_ds_gen*)cmdnode->bufvirtualaddr)->command));
+              le16_to_cpu(cmdnode->cmdbuf->command));
 
 done:
        lbs_deb_leave(LBS_DEB_HOST);
                                    struct cmd_ctrl_node *cmdnode)
 {
        unsigned long flags;
-       struct cmd_ds_command *cmdptr;
+       struct cmd_header *cmd;
        int ret = -1;
        u16 cmdsize;
        u16 command;
                goto done;
        }
 
-       cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr;
+       cmd = cmdnode->cmdbuf;
 
        spin_lock_irqsave(&priv->driver_lock, flags);
-       if (!cmdptr || !cmdptr->size) {
+       if (!cmd || !cmd->size) {
                lbs_deb_host("DNLD_CMD: cmdptr is NULL or zero\n");
                __lbs_cleanup_and_insert_cmd(priv, cmdnode);
                spin_unlock_irqrestore(&priv->driver_lock, flags);
        priv->cur_cmd_retcode = 0;
        spin_unlock_irqrestore(&priv->driver_lock, flags);
 
-       cmdsize = le16_to_cpu(cmdptr->size);
-       command = le16_to_cpu(cmdptr->command);
+       cmdsize = le16_to_cpu(cmd->size);
+       command = le16_to_cpu(cmd->command);
 
        lbs_deb_host("DNLD_CMD: command 0x%04x, size %d, jiffies %lu\n",
                    command, cmdsize, jiffies);
-       lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", cmdnode->bufvirtualaddr, cmdsize);
+       lbs_deb_hex(LBS_DEB_HOST, "DNLD_CMD", (void *) cmdnode->cmdbuf, cmdsize);
 
        cmdnode->cmdwaitqwoken = 0;
 
-       ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmdptr, cmdsize);
+       ret = priv->hw_host_to_card(priv, MVMS_CMD, (u8 *) cmd, cmdsize);
 
        if (ret != 0) {
                lbs_deb_host("DNLD_CMD: hw_host_to_card failed\n");
 
        lbs_set_cmd_ctrl_node(priv, cmdnode, wait_option, pdata_buf);
 
-       cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr;
+       cmdptr = (struct cmd_ds_command *)cmdnode->cmdbuf;
 
        lbs_deb_host("PREP_CMD: command 0x%04x\n", cmd_no);
 
 int lbs_allocate_cmd_buffer(struct lbs_private *priv)
 {
        int ret = 0;
-       u32 ulbufsize;
+       u32 bufsize;
        u32 i;
-       struct cmd_ctrl_node *tempcmd_array;
-       u8 *ptempvirtualaddr;
+       struct cmd_ctrl_node *cmdarray;
 
        lbs_deb_enter(LBS_DEB_HOST);
 
-       /* Allocate and initialize cmdCtrlNode */
-       ulbufsize = sizeof(struct cmd_ctrl_node) * MRVDRV_NUM_OF_CMD_BUFFER;
-
-       if (!(tempcmd_array = kzalloc(ulbufsize, GFP_KERNEL))) {
+       /* Allocate and initialize the command array */
+       bufsize = sizeof(struct cmd_ctrl_node) * LBS_NUM_CMD_BUFFERS;
+       if (!(cmdarray = kzalloc(bufsize, GFP_KERNEL))) {
                lbs_deb_host("ALLOC_CMD_BUF: tempcmd_array is NULL\n");
                ret = -1;
                goto done;
        }
-       priv->cmd_array = tempcmd_array;
+       priv->cmd_array = cmdarray;
 
-       /* Allocate and initialize command buffers */
-       ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER;
-       for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) {
-               if (!(ptempvirtualaddr = kzalloc(ulbufsize, GFP_KERNEL))) {
+       /* Allocate and initialize each command buffer in the command array */
+       for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) {
+               cmdarray[i].cmdbuf = kzalloc(LBS_CMD_BUFFER_SIZE, GFP_KERNEL);
+               if (!cmdarray[i].cmdbuf) {
                        lbs_deb_host("ALLOC_CMD_BUF: ptempvirtualaddr is NULL\n");
                        ret = -1;
                        goto done;
                }
-
-               /* Update command buffer virtual */
-               tempcmd_array[i].bufvirtualaddr = ptempvirtualaddr;
        }
 
-       for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) {
-               init_waitqueue_head(&tempcmd_array[i].cmdwait_q);
-               lbs_cleanup_and_insert_cmd(priv, &tempcmd_array[i]);
+       for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) {
+               init_waitqueue_head(&cmdarray[i].cmdwait_q);
+               lbs_cleanup_and_insert_cmd(priv, &cmdarray[i]);
        }
-
        ret = 0;
 
 done:
  */
 int lbs_free_cmd_buffer(struct lbs_private *priv)
 {
-       u32 ulbufsize; /* Someone needs to die for this. Slowly and painfully */
+       struct cmd_ctrl_node *cmdarray;
        unsigned int i;
-       struct cmd_ctrl_node *tempcmd_array;
 
        lbs_deb_enter(LBS_DEB_HOST);
 
                goto done;
        }
 
-       tempcmd_array = priv->cmd_array;
+       cmdarray = priv->cmd_array;
 
        /* Release shared memory buffers */
-       ulbufsize = MRVDRV_SIZE_OF_CMD_BUFFER;
-       for (i = 0; i < MRVDRV_NUM_OF_CMD_BUFFER; i++) {
-               if (tempcmd_array[i].bufvirtualaddr) {
-                       kfree(tempcmd_array[i].bufvirtualaddr);
-                       tempcmd_array[i].bufvirtualaddr = NULL;
+       for (i = 0; i < LBS_NUM_CMD_BUFFERS; i++) {
+               if (cmdarray[i].cmdbuf) {
+                       kfree(cmdarray[i].cmdbuf);
+                       cmdarray[i].cmdbuf = NULL;
                }
        }
 
  *  @param ptempnode   A pointer to cmdCtrlNode structure
  *  @return            n/a
  */
-static void cleanup_cmdnode(struct cmd_ctrl_node *ptempnode)
+static void cleanup_cmdnode(struct cmd_ctrl_node *cmdnode)
 {
        lbs_deb_enter(LBS_DEB_HOST);
 
-       if (!ptempnode)
+       if (!cmdnode)
                return;
-       ptempnode->cmdwaitqwoken = 1;
-       wake_up_interruptible(&ptempnode->cmdwait_q);
-       ptempnode->wait_option = 0;
-       ptempnode->pdata_buf = NULL;
-       ptempnode->callback = NULL;
-       ptempnode->callback_arg = 0;
+       cmdnode->cmdwaitqwoken = 1;
+       wake_up_interruptible(&cmdnode->cmdwait_q);
+       cmdnode->wait_option = 0;
+       cmdnode->pdata_buf = NULL;
+       cmdnode->callback = NULL;
+       cmdnode->callback_arg = 0;
 
-       if (ptempnode->bufvirtualaddr != NULL)
-               memset(ptempnode->bufvirtualaddr, 0, MRVDRV_SIZE_OF_CMD_BUFFER);
+       if (cmdnode->cmdbuf != NULL)
+               memset(cmdnode->cmdbuf, 0, LBS_CMD_BUFFER_SIZE);
 
        lbs_deb_leave(LBS_DEB_HOST);
 }
 int lbs_execute_next_command(struct lbs_private *priv)
 {
        struct cmd_ctrl_node *cmdnode = NULL;
-       struct cmd_ds_command *cmdptr;
+       struct cmd_header *cmd;
        unsigned long flags;
        int ret = 0;
 
        spin_unlock_irqrestore(&priv->driver_lock, flags);
 
        if (cmdnode) {
-               cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr;
+               cmd = cmdnode->cmdbuf;
 
-               if (is_command_allowed_in_ps(le16_to_cpu(cmdptr->command))) {
+               if (is_command_allowed_in_ps(le16_to_cpu(cmd->command))) {
                        if ((priv->psstate == PS_STATE_SLEEP) ||
                            (priv->psstate == PS_STATE_PRE_SLEEP)) {
                                lbs_deb_host(
                                       "EXEC_NEXT_CMD: cannot send cmd 0x%04x in psstate %d\n",
-                                      le16_to_cpu(cmdptr->command),
+                                      le16_to_cpu(cmd->command),
                                       priv->psstate);
                                ret = -1;
                                goto done;
                        }
                        lbs_deb_host("EXEC_NEXT_CMD: OK to send command "
-                              "0x%04x in psstate %d\n",
-                                   le16_to_cpu(cmdptr->command),
-                                   priv->psstate);
+                                    "0x%04x in psstate %d\n",
+                                    le16_to_cpu(cmd->command), priv->psstate);
                } else if (priv->psstate != PS_STATE_FULL_POWER) {
                        /*
                         * 1. Non-PS command:
                         * otherwise send this command down to firmware
                         * immediately.
                         */
-                       if (cmdptr->command !=
-                           cpu_to_le16(CMD_802_11_PS_MODE)) {
+                       if (cmd->command != cpu_to_le16(CMD_802_11_PS_MODE)) {
                                /*  Prepare to send Exit PS,
                                 *  this non PS command will be sent later */
                                if ((priv->psstate == PS_STATE_SLEEP)
                                 * PS command. Ignore it if it is not Exit_PS.
                                 * otherwise send it down immediately.
                                 */
-                               struct cmd_ds_802_11_ps_mode *psm =
-                                   &cmdptr->params.psmode;
+                               struct cmd_ds_802_11_ps_mode *psm = (void *)cmd;
 
                                lbs_deb_host(
                                       "EXEC_NEXT_CMD: PS cmd, action 0x%02x\n",
                }
                list_del(&cmdnode->list);
                lbs_deb_host("EXEC_NEXT_CMD: sending command 0x%04x\n",
-                           le16_to_cpu(cmdptr->command));
+                           le16_to_cpu(cmd->command));
                DownloadcommandToStation(priv, cmdnode);
        } else {
                /*
              unsigned long callback_arg)
 {
        struct cmd_ctrl_node *cmdnode;
-       struct cmd_header *send_cmd;
        unsigned long flags;
        int ret = 0;
 
                goto done;
        }
 
-       send_cmd = (struct cmd_header *) cmdnode->bufvirtualaddr;
        cmdnode->wait_option = CMD_OPTION_WAITFORRSP;
        cmdnode->callback = callback;
        cmdnode->callback_arg = callback_arg;
 
        /* Copy the incoming command to the buffer */
-       memcpy(send_cmd, in_cmd, in_cmd_size);
+       memcpy(cmdnode->cmdbuf, in_cmd, in_cmd_size);
 
        /* Set sequence number, clean result, move to buffer */
        priv->seqnum++;
-       send_cmd->command = cpu_to_le16(command);
-       send_cmd->size    = cpu_to_le16(in_cmd_size);
-       send_cmd->seqnum  = cpu_to_le16(priv->seqnum);
-       send_cmd->result  = 0;
+       cmdnode->cmdbuf->command = cpu_to_le16(command);
+       cmdnode->cmdbuf->size    = cpu_to_le16(in_cmd_size);
+       cmdnode->cmdbuf->seqnum  = cpu_to_le16(priv->seqnum);
+       cmdnode->cmdbuf->result  = 0;
 
        lbs_deb_host("PREP_CMD: command 0x%04x\n", command);