* - length(n_modulus) = inputdatalength
  */
 struct ica_rsa_modexpo {
-       char __user  *inputdata;
-       unsigned int  inputdatalength;
-       char __user  *outputdata;
-       unsigned int  outputdatalength;
-       char __user  *b_key;
-       char __user  *n_modulus;
+       __u8 __user  *inputdata;
+       __u32         inputdatalength;
+       __u8 __user  *outputdata;
+       __u32         outputdatalength;
+       __u8 __user  *b_key;
+       __u8 __user  *n_modulus;
 };
 
 /**
  * - length(u_mult_inv) = inputdatalength/2 + 8
  */
 struct ica_rsa_modexpo_crt {
-       char __user  *inputdata;
-       unsigned int  inputdatalength;
-       char __user  *outputdata;
-       unsigned int  outputdatalength;
-       char __user  *bp_key;
-       char __user  *bq_key;
-       char __user  *np_prime;
-       char __user  *nq_prime;
-       char __user  *u_mult_inv;
+       __u8 __user  *inputdata;
+       __u32         inputdatalength;
+       __u8 __user  *outputdata;
+       __u32         outputdatalength;
+       __u8 __user  *bp_key;
+       __u8 __user  *bq_key;
+       __u8 __user  *np_prime;
+       __u8 __user  *nq_prime;
+       __u8 __user  *u_mult_inv;
 };
 
 /**
  *         key block
  */
 struct CPRBX {
-       unsigned short  cprb_len;       /* CPRB length        220        */
-       unsigned char   cprb_ver_id;    /* CPRB version id.   0x02       */
-       unsigned char   pad_000[3];     /* Alignment pad bytes           */
-       unsigned char   func_id[2];     /* function id        0x5432     */
-       unsigned char   cprb_flags[4];  /* Flags                         */
-       unsigned int    req_parml;      /* request parameter buffer len  */
-       unsigned int    req_datal;      /* request data buffer           */
-       unsigned int    rpl_msgbl;      /* reply  message block length   */
-       unsigned int    rpld_parml;     /* replied parameter block len   */
-       unsigned int    rpl_datal;      /* reply data block len          */
-       unsigned int    rpld_datal;     /* replied data block len        */
-       unsigned int    req_extbl;      /* request extension block len   */
-       unsigned char   pad_001[4];     /* reserved                      */
-       unsigned int    rpld_extbl;     /* replied extension block len   */
-       unsigned char   padx000[16 - sizeof(char *)];
-       unsigned char  *req_parmb;      /* request parm block 'address'  */
-       unsigned char   padx001[16 - sizeof(char *)];
-       unsigned char  *req_datab;      /* request data block 'address'  */
-       unsigned char   padx002[16 - sizeof(char *)];
-       unsigned char  *rpl_parmb;      /* reply parm block 'address'    */
-       unsigned char   padx003[16 - sizeof(char *)];
-       unsigned char  *rpl_datab;      /* reply data block 'address'    */
-       unsigned char   padx004[16 - sizeof(char *)];
-       unsigned char  *req_extb;       /* request extension block 'addr'*/
-       unsigned char   padx005[16 - sizeof(char *)];
-       unsigned char  *rpl_extb;       /* reply extension block 'address'*/
-       unsigned short  ccp_rtcode;     /* server return code            */
-       unsigned short  ccp_rscode;     /* server reason code            */
-       unsigned int    mac_data_len;   /* Mac Data Length               */
-       unsigned char   logon_id[8];    /* Logon Identifier              */
-       unsigned char   mac_value[8];   /* Mac Value                     */
-       unsigned char   mac_content_flgs;/* Mac content flag byte        */
-       unsigned char   pad_002;        /* Alignment                     */
-       unsigned short  domain;         /* Domain                        */
-       unsigned char   usage_domain[4];/* Usage domain                  */
-       unsigned char   cntrl_domain[4];/* Control domain                */
-       unsigned char   S390enf_mask[4];/* S/390 enforcement mask        */
-       unsigned char   pad_004[36];    /* reserved                      */
+       __u16        cprb_len;          /* CPRB length        220        */
+       __u8         cprb_ver_id;       /* CPRB version id.   0x02       */
+       __u8         pad_000[3];        /* Alignment pad bytes           */
+       __u8         func_id[2];        /* function id        0x5432     */
+       __u8         cprb_flags[4];     /* Flags                         */
+       __u32        req_parml;         /* request parameter buffer len  */
+       __u32        req_datal;         /* request data buffer           */
+       __u32        rpl_msgbl;         /* reply  message block length   */
+       __u32        rpld_parml;        /* replied parameter block len   */
+       __u32        rpl_datal;         /* reply data block len          */
+       __u32        rpld_datal;        /* replied data block len        */
+       __u32        req_extbl;         /* request extension block len   */
+       __u8         pad_001[4];        /* reserved                      */
+       __u32        rpld_extbl;        /* replied extension block len   */
+       __u8         padx000[16 - sizeof(__u8 *)];
+       __u8 __user *req_parmb;         /* request parm block 'address'  */
+       __u8         padx001[16 - sizeof(__u8 *)];
+       __u8 __user *req_datab;         /* request data block 'address'  */
+       __u8         padx002[16 - sizeof(__u8 *)];
+       __u8 __user *rpl_parmb;         /* reply parm block 'address'    */
+       __u8         padx003[16 - sizeof(__u8 *)];
+       __u8 __user *rpl_datab;         /* reply data block 'address'    */
+       __u8         padx004[16 - sizeof(__u8 *)];
+       __u8 __user *req_extb;          /* request extension block 'addr'*/
+       __u8         padx005[16 - sizeof(__u8 *)];
+       __u8 __user *rpl_extb;          /* reply extension block 'address'*/
+       __u16        ccp_rtcode;        /* server return code            */
+       __u16        ccp_rscode;        /* server reason code            */
+       __u32        mac_data_len;      /* Mac Data Length               */
+       __u8         logon_id[8];       /* Logon Identifier              */
+       __u8         mac_value[8];      /* Mac Value                     */
+       __u8         mac_content_flgs;  /* Mac content flag byte         */
+       __u8         pad_002;           /* Alignment                     */
+       __u16        domain;            /* Domain                        */
+       __u8         usage_domain[4];   /* Usage domain                  */
+       __u8         cntrl_domain[4];   /* Control domain                */
+       __u8         S390enf_mask[4];   /* S/390 enforcement mask        */
+       __u8         pad_004[36];       /* reserved                      */
 } __attribute__((packed));
 
 /**
  * xcRB
  */
 struct ica_xcRB {
-       unsigned short  agent_ID;
-       unsigned int    user_defined;
-       unsigned short  request_ID;
-       unsigned int    request_control_blk_length;
-       unsigned char   padding1[16 - sizeof(char *)];
-       char __user    *request_control_blk_addr;
-       unsigned int    request_data_length;
-       char            padding2[16 - sizeof(char *)];
-       char __user    *request_data_address;
-       unsigned int    reply_control_blk_length;
-       char            padding3[16 - sizeof(char *)];
-       char __user    *reply_control_blk_addr;
-       unsigned int    reply_data_length;
-       char            padding4[16 - sizeof(char *)];
-       char __user    *reply_data_addr;
-       unsigned short  priority_window;
-       unsigned int    status;
+       __u16         agent_ID;
+       __u32         user_defined;
+       __u16         request_ID;
+       __u32         request_control_blk_length;
+       __u8          _padding1[16 - sizeof(__u8 *)];
+       __u8 __user  *request_control_blk_addr;
+       __u32         request_data_length;
+       __u8          _padding2[16 - sizeof(__u8 *)];
+       __u8 __user  *request_data_address;
+       __u32         reply_control_blk_length;
+       __u8          _padding3[16 - sizeof(__u8 *)];
+       __u8 __user  *reply_control_blk_addr;
+       __u32         reply_data_length;
+       __u8          __padding4[16 - sizeof(__u8 *)];
+       __u8 __user  *reply_data_addr;
+       __u16         priority_window;
+       __u32         status;
 } __attribute__((packed));
 
 /**
 
 struct ap_message {
        struct list_head list;          /* Request queueing. */
        unsigned long long psmid;       /* Message id. */
-       void *message;                  /* Pointer to message buffer. */
-       size_t length;                  /* Message length. */
+       void *msg;                      /* Pointer to message buffer. */
+       unsigned int len;               /* Message length. */
+       u32 flags;                      /* Flags, see AP_MSG_FLAG_xxx */
        int rc;                         /* Return code for this message */
-
        void *private;                  /* ap driver private pointer. */
-       unsigned int special:1;         /* Used for special commands. */
        /* receive is called from tasklet context */
        void (*receive)(struct ap_queue *, struct ap_message *,
                        struct ap_message *);
 };
 
+#define AP_MSG_FLAG_SPECIAL  (1 << 16) /* flag msg as 'special' with NQAP */
+
 /**
  * ap_init_message() - Initialize ap_message.
  * Initialize a message before using. Otherwise this might result in
  */
 static inline void ap_release_message(struct ap_message *ap_msg)
 {
-       kzfree(ap_msg->message);
+       kzfree(ap_msg->msg);
        kzfree(ap_msg->private);
 }
 
 
  */
 static inline struct ap_queue_status
 __ap_send(ap_qid_t qid, unsigned long long psmid, void *msg, size_t length,
-         unsigned int special)
+         int special)
 {
-       if (special == 1)
+       if (special)
                qid |= 0x400000UL;
        return ap_nqap(qid, psmid, msg, length);
 }
        struct ap_message *ap_msg;
 
        status = ap_dqap(aq->qid, &aq->reply->psmid,
-                        aq->reply->message, aq->reply->length);
+                        aq->reply->msg, aq->reply->len);
        switch (status.response_code) {
        case AP_RESPONSE_NORMAL:
                aq->queue_count--;
        /* Start the next request on the queue. */
        ap_msg = list_entry(aq->requestq.next, struct ap_message, list);
        status = __ap_send(aq->qid, ap_msg->psmid,
-                          ap_msg->message, ap_msg->length, ap_msg->special);
+                          ap_msg->msg, ap_msg->len,
+                          ap_msg->flags & AP_MSG_FLAG_SPECIAL);
        switch (status.response_code) {
        case AP_RESPONSE_NORMAL:
                aq->queue_count++;
 
        preqcblk->rpl_msgbl = cprbplusparamblen;
        if (paramblen) {
                preqcblk->req_parmb =
-                       ((u8 *) preqcblk) + sizeof(struct CPRBX);
+                       ((u8 __user *) preqcblk) + sizeof(struct CPRBX);
                preqcblk->rpl_parmb =
-                       ((u8 *) prepcblk) + sizeof(struct CPRBX);
+                       ((u8 __user *) prepcblk) + sizeof(struct CPRBX);
        }
 
        *pcprbmem = cprbmem;
 {
        int i, rc, keysize;
        int seckeysize;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct kgreqparm {
        preqcblk->domain = domain;
 
        /* fill request cprb param block with KG request */
-       preqparm = (struct kgreqparm *) preqcblk->req_parmb;
+       preqparm = (struct kgreqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "KG", 2);
        preqparm->rule_array_len = sizeof(preqparm->rule_array_len);
        preqparm->lv1.len = sizeof(struct lv1);
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct kgrepparm *) prepcblk->rpl_parmb;
+       ptr =  ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct kgrepparm *) ptr;
 
        /* check length of the returned secure key token */
        seckeysize = prepparm->lv3.keyblock.toklen
                   const u8 *clrkey, u8 seckey[SECKEYBLOBSIZE])
 {
        int rc, keysize, seckeysize;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct cmreqparm {
        preqcblk->domain = domain;
 
        /* fill request cprb param block with CM request */
-       preqparm = (struct cmreqparm *) preqcblk->req_parmb;
+       preqparm = (struct cmreqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "CM", 2);
        memcpy(preqparm->rule_array, "AES     ", 8);
        preqparm->rule_array_len =
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct cmrepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct cmrepparm *) ptr;
 
        /* check length of the returned secure key token */
        seckeysize = prepparm->lv3.keyblock.toklen
                    u8 *protkey, u32 *protkeylen, u32 *protkeytype)
 {
        int rc;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct uskreqparm {
        preqcblk->domain = domain;
 
        /* fill request cprb param block with USK request */
-       preqparm = (struct uskreqparm *) preqcblk->req_parmb;
+       preqparm = (struct uskreqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "US", 2);
        preqparm->rule_array_len = sizeof(preqparm->rule_array_len);
        preqparm->lv1.len = sizeof(struct lv1);
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct uskrepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct uskrepparm *) ptr;
 
        /* check the returned keyblock */
        if (prepparm->lv3.ckb.version != 0x01 &&
                     u8 *keybuf, size_t *keybufsize)
 {
        int rc;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct gkreqparm {
        preqcblk->req_parml = sizeof(struct gkreqparm);
 
        /* prepare request param block with GK request */
-       preqparm = (struct gkreqparm *) preqcblk->req_parmb;
+       preqparm = (struct gkreqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "GK", 2);
        preqparm->rule_array_len =  sizeof(uint16_t) + 2 * 8;
        memcpy(preqparm->rule_array, "AES     OP      ", 2*8);
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct gkrepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct gkrepparm *) ptr;
 
        /* do some plausibility checks on the key block */
        if (prepparm->kb.len < 120 + 5 * sizeof(uint16_t) ||
                           int *key_token_size)
 {
        int rc, n;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct rule_array_block {
        preqcblk->req_parml = 0;
 
        /* prepare request param block with IP request */
-       preq_ra_block = (struct rule_array_block *) preqcblk->req_parmb;
+       preq_ra_block = (struct rule_array_block __force *) preqcblk->req_parmb;
        memcpy(preq_ra_block->subfunc_code, "IP", 2);
        preq_ra_block->rule_array_len =  sizeof(uint16_t) + 2 * 8;
        memcpy(preq_ra_block->rule_array, rule_array_1, 8);
        }
 
        /* prepare vud block */
-       preq_vud_block = (struct vud_block *)
+       preq_vud_block = (struct vud_block __force *)
                (preqcblk->req_parmb + preqcblk->req_parml);
        n = complete ? 0 : (clr_key_bit_size + 7) / 8;
        preq_vud_block->len = sizeof(struct vud_block) + n;
        preqcblk->req_parml += preq_vud_block->len;
 
        /* prepare key block */
-       preq_key_block = (struct key_block *)
+       preq_key_block = (struct key_block __force *)
                (preqcblk->req_parmb + preqcblk->req_parml);
        n = *key_token_size;
        preq_key_block->len = sizeof(struct key_block) + n;
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct iprepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct iprepparm *) ptr;
 
        /* do some plausibility checks on the key block */
        if (prepparm->kb.len < 120 + 3 * sizeof(uint16_t) ||
                       u8 *protkey, u32 *protkeylen, u32 *protkeytype)
 {
        int rc;
-       u8 *mem;
+       u8 *mem, *ptr;
        struct CPRBX *preqcblk, *prepcblk;
        struct ica_xcRB xcrb;
        struct aureqparm {
        preqcblk->domain = domain;
 
        /* fill request cprb param block with AU request */
-       preqparm = (struct aureqparm *) preqcblk->req_parmb;
+       preqparm = (struct aureqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "AU", 2);
        preqparm->rule_array_len =
                sizeof(preqparm->rule_array_len)
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct aurepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct aurepparm *) ptr;
 
        /* check the returned keyblock */
        if (prepparm->vud.ckb.version != 0x01 &&
        preqcblk->domain = domain;
 
        /* fill request cprb param block with FQ request */
-       preqparm = (struct fqreqparm *) preqcblk->req_parmb;
+       preqparm = (struct fqreqparm __force *) preqcblk->req_parmb;
        memcpy(preqparm->subfunc_code, "FQ", 2);
        memcpy(preqparm->rule_array, keyword, sizeof(preqparm->rule_array));
        preqparm->rule_array_len =
        }
 
        /* process response cprb param block */
-       prepcblk->rpl_parmb = ((u8 *) prepcblk) + sizeof(struct CPRBX);
-       prepparm = (struct fqrepparm *) prepcblk->rpl_parmb;
+       ptr = ((u8 *) prepcblk) + sizeof(struct CPRBX);
+       prepcblk->rpl_parmb = (u8 __user *) ptr;
+       prepparm = (struct fqrepparm *) ptr;
        ptr = prepparm->lvdata;
 
        /* check and possibly copy reply rule array */
 
        int rc, i;
 
        ap_init_message(&ap_msg);
-       ap_msg.message = (void *) get_zeroed_page(GFP_KERNEL);
-       if (!ap_msg.message)
+       ap_msg.msg = (void *) get_zeroed_page(GFP_KERNEL);
+       if (!ap_msg.msg)
                return -ENOMEM;
 
        rng_type6CPRB_msgX(&ap_msg, 4, &domain);
 
-       msg = ap_msg.message;
+       msg = ap_msg.msg;
        msg->cprbx.domain = AP_QID_QUEUE(aq->qid);
 
-       rc = ap_send(aq->qid, 0x0102030405060708ULL, ap_msg.message,
-                    ap_msg.length);
+       rc = ap_send(aq->qid, 0x0102030405060708ULL, ap_msg.msg, ap_msg.len);
        if (rc)
                goto out_free;
 
        /* Wait for the test message to complete. */
        for (i = 0; i < 2 * HZ; i++) {
                msleep(1000 / HZ);
-               rc = ap_recv(aq->qid, &psmid, ap_msg.message, 4096);
+               rc = ap_recv(aq->qid, &psmid, ap_msg.msg, 4096);
                if (rc == 0 && psmid == 0x0102030405060708ULL)
                        break;
        }
                goto out_free;
        }
 
-       reply = ap_msg.message;
+       reply = ap_msg.msg;
        if (reply->cprbx.ccp_rtcode == 0 && reply->cprbx.ccp_rscode == 0)
                rc = 1;
        else
                rc = 0;
 out_free:
-       free_page((unsigned long) ap_msg.message);
+       free_page((unsigned long) ap_msg.msg);
        return rc;
 }
 
 
 static inline int convert_error(struct zcrypt_queue *zq,
                                struct ap_message *reply)
 {
-       struct error_hdr *ehdr = reply->message;
+       struct error_hdr *ehdr = reply->msg;
        int card = AP_QID_CARD(zq->queue->qid);
        int queue = AP_QID_QUEUE(zq->queue->qid);
 
                        struct {
                                struct type86_hdr hdr;
                                struct type86_fmt2_ext fmt2;
-                       } __packed * head = reply->message;
+                       } __packed * head = reply->msg;
                        unsigned int apfs = *((u32 *)head->fmt2.apfs);
 
                        ZCRYPT_DBF(DBF_ERR,
 
        mod_len = mex->inputdatalength;
 
        if (mod_len <= 128) {
-               struct type50_meb1_msg *meb1 = ap_msg->message;
+               struct type50_meb1_msg *meb1 = ap_msg->msg;
 
                memset(meb1, 0, sizeof(*meb1));
-               ap_msg->length = sizeof(*meb1);
+               ap_msg->len = sizeof(*meb1);
                meb1->header.msg_type_code = TYPE50_TYPE_CODE;
                meb1->header.msg_len = sizeof(*meb1);
                meb1->keyblock_type = TYPE50_MEB1_FMT;
                exp = meb1->exponent + sizeof(meb1->exponent) - mod_len;
                inp = meb1->message + sizeof(meb1->message) - mod_len;
        } else if (mod_len <= 256) {
-               struct type50_meb2_msg *meb2 = ap_msg->message;
+               struct type50_meb2_msg *meb2 = ap_msg->msg;
 
                memset(meb2, 0, sizeof(*meb2));
-               ap_msg->length = sizeof(*meb2);
+               ap_msg->len = sizeof(*meb2);
                meb2->header.msg_type_code = TYPE50_TYPE_CODE;
                meb2->header.msg_len = sizeof(*meb2);
                meb2->keyblock_type = TYPE50_MEB2_FMT;
                exp = meb2->exponent + sizeof(meb2->exponent) - mod_len;
                inp = meb2->message + sizeof(meb2->message) - mod_len;
        } else if (mod_len <= 512) {
-               struct type50_meb3_msg *meb3 = ap_msg->message;
+               struct type50_meb3_msg *meb3 = ap_msg->msg;
 
                memset(meb3, 0, sizeof(*meb3));
-               ap_msg->length = sizeof(*meb3);
+               ap_msg->len = sizeof(*meb3);
                meb3->header.msg_type_code = TYPE50_TYPE_CODE;
                meb3->header.msg_len = sizeof(*meb3);
                meb3->keyblock_type = TYPE50_MEB3_FMT;
         * 512 byte modulus (4k keys).
         */
        if (mod_len <= 128) {           /* up to 1024 bit key size */
-               struct type50_crb1_msg *crb1 = ap_msg->message;
+               struct type50_crb1_msg *crb1 = ap_msg->msg;
 
                memset(crb1, 0, sizeof(*crb1));
-               ap_msg->length = sizeof(*crb1);
+               ap_msg->len = sizeof(*crb1);
                crb1->header.msg_type_code = TYPE50_TYPE_CODE;
                crb1->header.msg_len = sizeof(*crb1);
                crb1->keyblock_type = TYPE50_CRB1_FMT;
                u = crb1->u + sizeof(crb1->u) - short_len;
                inp = crb1->message + sizeof(crb1->message) - mod_len;
        } else if (mod_len <= 256) {    /* up to 2048 bit key size */
-               struct type50_crb2_msg *crb2 = ap_msg->message;
+               struct type50_crb2_msg *crb2 = ap_msg->msg;
 
                memset(crb2, 0, sizeof(*crb2));
-               ap_msg->length = sizeof(*crb2);
+               ap_msg->len = sizeof(*crb2);
                crb2->header.msg_type_code = TYPE50_TYPE_CODE;
                crb2->header.msg_len = sizeof(*crb2);
                crb2->keyblock_type = TYPE50_CRB2_FMT;
                inp = crb2->message + sizeof(crb2->message) - mod_len;
        } else if ((mod_len <= 512) &&  /* up to 4096 bit key size */
                   (zq->zcard->max_mod_size == CEX3A_MAX_MOD_SIZE)) {
-               struct type50_crb3_msg *crb3 = ap_msg->message;
+               struct type50_crb3_msg *crb3 = ap_msg->msg;
 
                memset(crb3, 0, sizeof(*crb3));
-               ap_msg->length = sizeof(*crb3);
+               ap_msg->len = sizeof(*crb3);
                crb3->header.msg_type_code = TYPE50_TYPE_CODE;
                crb3->header.msg_len = sizeof(*crb3);
                crb3->keyblock_type = TYPE50_CRB3_FMT;
                          char __user *outputdata,
                          unsigned int outputdatalength)
 {
-       struct type80_hdr *t80h = reply->message;
+       struct type80_hdr *t80h = reply->msg;
        unsigned char *data;
 
        if (t80h->len < sizeof(*t80h) + outputdatalength) {
                BUG_ON(t80h->len > CEX2A_MAX_RESPONSE_SIZE);
        else
                BUG_ON(t80h->len > CEX3A_MAX_RESPONSE_SIZE);
-       data = reply->message + t80h->len - outputdatalength;
+       data = reply->msg + t80h->len - outputdatalength;
        if (copy_to_user(outputdata, data, outputdatalength))
                return -EFAULT;
        return 0;
                            unsigned int outputdatalength)
 {
        /* Response type byte is the second byte in the response. */
-       unsigned char rtype = ((unsigned char *) reply->message)[1];
+       unsigned char rtype = ((unsigned char *) reply->msg)[1];
 
        switch (rtype) {
        case TYPE82_RSP_CODE:
                .reply_code = REP82_ERROR_MACHINE_FAILURE,
        };
        struct type80_hdr *t80h;
-       int length;
+       int len;
 
        /* Copy the reply message to the request message buffer. */
        if (!reply)
                goto out;       /* ap_msg->rc indicates the error */
-       t80h = reply->message;
+       t80h = reply->msg;
        if (t80h->type == TYPE80_RSP_CODE) {
                if (aq->ap_dev.device_type == AP_DEVICE_TYPE_CEX2A)
-                       length = min_t(int,
-                                      CEX2A_MAX_RESPONSE_SIZE, t80h->len);
+                       len = min_t(int, CEX2A_MAX_RESPONSE_SIZE, t80h->len);
                else
-                       length = min_t(int,
-                                      CEX3A_MAX_RESPONSE_SIZE, t80h->len);
-               memcpy(msg->message, reply->message, length);
+                       len = min_t(int, CEX3A_MAX_RESPONSE_SIZE, t80h->len);
+               memcpy(msg->msg, reply->msg, len);
        } else
-               memcpy(msg->message, reply->message, sizeof(error_reply));
+               memcpy(msg->msg, reply->msg, sizeof(error_reply));
 out:
        complete((struct completion *) msg->private);
 }
 
        ap_init_message(&ap_msg);
        if (zq->zcard->user_space_type == ZCRYPT_CEX2A)
-               ap_msg.message = kmalloc(MSGTYPE50_CRB2_MAX_MSG_SIZE,
-                                        GFP_KERNEL);
+               ap_msg.msg = kmalloc(MSGTYPE50_CRB2_MAX_MSG_SIZE, GFP_KERNEL);
        else
-               ap_msg.message = kmalloc(MSGTYPE50_CRB3_MAX_MSG_SIZE,
-                                        GFP_KERNEL);
-       if (!ap_msg.message)
+               ap_msg.msg = kmalloc(MSGTYPE50_CRB3_MAX_MSG_SIZE, GFP_KERNEL);
+       if (!ap_msg.msg)
                return -ENOMEM;
        ap_msg.receive = zcrypt_cex2a_receive;
        ap_msg.psmid = (((unsigned long long) current->pid) << 32) +
                /* Signal pending. */
                ap_cancel_message(zq->queue, &ap_msg);
 out_free:
-       kfree(ap_msg.message);
+       kfree(ap_msg.msg);
        return rc;
 }
 
 
        ap_init_message(&ap_msg);
        if (zq->zcard->user_space_type == ZCRYPT_CEX2A)
-               ap_msg.message = kmalloc(MSGTYPE50_CRB2_MAX_MSG_SIZE,
-                                        GFP_KERNEL);
+               ap_msg.msg = kmalloc(MSGTYPE50_CRB2_MAX_MSG_SIZE, GFP_KERNEL);
        else
-               ap_msg.message = kmalloc(MSGTYPE50_CRB3_MAX_MSG_SIZE,
-                                        GFP_KERNEL);
-       if (!ap_msg.message)
+               ap_msg.msg = kmalloc(MSGTYPE50_CRB3_MAX_MSG_SIZE, GFP_KERNEL);
+       if (!ap_msg.msg)
                return -ENOMEM;
        ap_msg.receive = zcrypt_cex2a_receive;
        ap_msg.psmid = (((unsigned long long) current->pid) << 32) +
                /* Signal pending. */
                ap_cancel_message(zq->queue, &ap_msg);
 out_free:
-       kfree(ap_msg.message);
+       kfree(ap_msg.msg);
        return rc;
 }
 
 
                struct function_and_rules_block fr;
                unsigned short length;
                char text[0];
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
        int size;
 
        /*
 
        msg->cprbx.req_parml = size - sizeof(msg->hdr) - sizeof(msg->cprbx);
 
-       ap_msg->length = size;
+       ap_msg->len = size;
        return 0;
 }
 
                struct function_and_rules_block fr;
                unsigned short length;
                char text[0];
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
        int size;
 
        /*
 
        msg->fr = static_pkd_fnr;
 
-       ap_msg->length = size;
+       ap_msg->len = size;
        return 0;
 }
 
        struct {
                struct type6_hdr hdr;
                struct CPRBX cprbx;
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
 
        int rcblen = CEIL4(xcRB->request_control_blk_length);
        int replylen, req_sumlen, resp_sumlen;
-       char *req_data = ap_msg->message + sizeof(struct type6_hdr) + rcblen;
+       char *req_data = ap_msg->msg + sizeof(struct type6_hdr) + rcblen;
        char *function_code;
 
        if (CEIL4(xcRB->request_control_blk_length) <
                return -EINVAL; /* overflow after alignment*/
 
        /* length checks */
-       ap_msg->length = sizeof(struct type6_hdr) +
+       ap_msg->len = sizeof(struct type6_hdr) +
                CEIL4(xcRB->request_control_blk_length) +
                xcRB->request_data_length;
-       if (ap_msg->length > MSGTYPE06_MAX_MSG_SIZE)
+       if (ap_msg->len > MSGTYPE06_MAX_MSG_SIZE)
                return -EINVAL;
 
        /*
 
        if (memcmp(function_code, "US", 2) == 0
            || memcmp(function_code, "AU", 2) == 0)
-               ap_msg->special = 1;
-       else
-               ap_msg->special = 0;
+               ap_msg->flags |= AP_MSG_FLAG_SPECIAL;
 
        /* copy data block */
        if (xcRB->request_data_length &&
                struct ep11_cprb cprbx;
                unsigned char   pld_tag;        /* fixed value 0x30 */
                unsigned char   pld_lenfmt;     /* payload length format */
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
 
        struct pld_hdr {
                unsigned char   func_tag;       /* fixed value 0x4 */
                return -EINVAL; /* overflow after alignment*/
 
        /* length checks */
-       ap_msg->length = sizeof(struct type6_hdr) + xcRB->req_len;
+       ap_msg->len = sizeof(struct type6_hdr) + xcRB->req_len;
        if (CEIL4(xcRB->req_len) > MSGTYPE06_MAX_MSG_SIZE -
                                   (sizeof(struct type6_hdr)))
                return -EINVAL;
 
        /* enable special processing based on the cprbs flags special bit */
        if (msg->cprbx.flags & 0x20)
-               ap_msg->special = 1;
+               ap_msg->flags |= AP_MSG_FLAG_SPECIAL;
 
        return 0;
 }
                0x35, 0x9D, 0xD3, 0xD3, 0xA7, 0x9D, 0x5D, 0x41,
                0x6F, 0x65, 0x1B, 0xCF, 0xA9, 0x87, 0x91, 0x09
        };
-       struct type86x_reply *msg = reply->message;
+       struct type86x_reply *msg = reply->msg;
        unsigned short service_rc, service_rs;
        unsigned int reply_len, pad_len;
        char *data;
                               struct ap_message *reply,
                               struct ica_xcRB *xcRB)
 {
-       struct type86_fmt2_msg *msg = reply->message;
-       char *data = reply->message;
+       struct type86_fmt2_msg *msg = reply->msg;
+       char *data = reply->msg;
 
        /* Copy CPRB to user */
        if (copy_to_user(xcRB->reply_control_blk_addr,
                                    struct ap_message *reply,
                                    struct ep11_urb *xcRB)
 {
-       struct type86_fmt2_msg *msg = reply->message;
-       char *data = reply->message;
+       struct type86_fmt2_msg *msg = reply->msg;
+       char *data = reply->msg;
 
        if (xcRB->resp_len < msg->fmt2.count1)
                return -EINVAL;
                struct type86_hdr hdr;
                struct type86_fmt2_ext fmt2;
                struct CPRBX cprbx;
-       } __packed * msg = reply->message;
-       char *data = reply->message;
+       } __packed * msg = reply->msg;
+       char *data = reply->msg;
 
        if (msg->cprbx.ccp_rtcode != 0 || msg->cprbx.ccp_rscode != 0)
                return -EINVAL;
                            char __user *outputdata,
                            unsigned int outputdatalength)
 {
-       struct type86x_reply *msg = reply->message;
+       struct type86x_reply *msg = reply->msg;
 
        switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
                            struct ap_message *reply,
                            struct ica_xcRB *xcRB)
 {
-       struct type86x_reply *msg = reply->message;
+       struct type86x_reply *msg = reply->msg;
 
        switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
 static int convert_response_ep11_xcrb(struct zcrypt_queue *zq,
        struct ap_message *reply, struct ep11_urb *xcRB)
 {
-       struct type86_ep11_reply *msg = reply->message;
+       struct type86_ep11_reply *msg = reply->msg;
 
        switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
                                 struct ap_message *reply,
                                 char *data)
 {
-       struct type86x_reply *msg = reply->message;
+       struct type86x_reply *msg = reply->msg;
 
        switch (msg->hdr.type) {
        case TYPE82_RSP_CODE:
        struct response_type *resp_type =
                (struct response_type *) msg->private;
        struct type86x_reply *t86r;
-       int length;
+       int len;
 
        /* Copy the reply message to the request message buffer. */
        if (!reply)
                goto out;       /* ap_msg->rc indicates the error */
-       t86r = reply->message;
+       t86r = reply->msg;
        if (t86r->hdr.type == TYPE86_RSP_CODE &&
                 t86r->cprbx.cprb_ver_id == 0x02) {
                switch (resp_type->type) {
                case CEXXC_RESPONSE_TYPE_ICA:
-                       length = sizeof(struct type86x_reply)
-                               + t86r->length - 2;
-                       length = min(CEXXC_MAX_ICA_RESPONSE_SIZE, length);
-                       memcpy(msg->message, reply->message, length);
+                       len = sizeof(struct type86x_reply) + t86r->length - 2;
+                       len = min_t(int, CEXXC_MAX_ICA_RESPONSE_SIZE, len);
+                       memcpy(msg->msg, reply->msg, len);
                        break;
                case CEXXC_RESPONSE_TYPE_XCRB:
-                       length = t86r->fmt2.offset2 + t86r->fmt2.count2;
-                       length = min(MSGTYPE06_MAX_MSG_SIZE, length);
-                       memcpy(msg->message, reply->message, length);
+                       len = t86r->fmt2.offset2 + t86r->fmt2.count2;
+                       len = min_t(int, MSGTYPE06_MAX_MSG_SIZE, len);
+                       memcpy(msg->msg, reply->msg, len);
                        break;
                default:
-                       memcpy(msg->message, &error_reply,
-                              sizeof(error_reply));
+                       memcpy(msg->msg, &error_reply, sizeof(error_reply));
                }
        } else
-               memcpy(msg->message, reply->message, sizeof(error_reply));
+               memcpy(msg->msg, reply->msg, sizeof(error_reply));
 out:
        complete(&(resp_type->work));
 }
        struct response_type *resp_type =
                (struct response_type *)msg->private;
        struct type86_ep11_reply *t86r;
-       int length;
+       int len;
 
        /* Copy the reply message to the request message buffer. */
        if (!reply)
                goto out;       /* ap_msg->rc indicates the error */
-       t86r = reply->message;
+       t86r = reply->msg;
        if (t86r->hdr.type == TYPE86_RSP_CODE &&
            t86r->cprbx.cprb_ver_id == 0x04) {
                switch (resp_type->type) {
                case CEXXC_RESPONSE_TYPE_EP11:
-                       length = t86r->fmt2.offset1 + t86r->fmt2.count1;
-                       length = min(MSGTYPE06_MAX_MSG_SIZE, length);
-                       memcpy(msg->message, reply->message, length);
+                       len = t86r->fmt2.offset1 + t86r->fmt2.count1;
+                       len = min_t(int, MSGTYPE06_MAX_MSG_SIZE, len);
+                       memcpy(msg->msg, reply->msg, len);
                        break;
                default:
-                       memcpy(msg->message, &error_reply, sizeof(error_reply));
+                       memcpy(msg->msg, &error_reply, sizeof(error_reply));
                }
        } else {
-               memcpy(msg->message, reply->message, sizeof(error_reply));
+               memcpy(msg->msg, reply->msg, sizeof(error_reply));
        }
 out:
        complete(&(resp_type->work));
        int rc;
 
        ap_init_message(&ap_msg);
-       ap_msg.message = (void *) get_zeroed_page(GFP_KERNEL);
-       if (!ap_msg.message)
+       ap_msg.msg = (void *) get_zeroed_page(GFP_KERNEL);
+       if (!ap_msg.msg)
                return -ENOMEM;
        ap_msg.receive = zcrypt_msgtype6_receive;
        ap_msg.psmid = (((unsigned long long) current->pid) << 32) +
                /* Signal pending. */
                ap_cancel_message(zq->queue, &ap_msg);
 out_free:
-       free_page((unsigned long) ap_msg.message);
+       free_page((unsigned long) ap_msg.msg);
        return rc;
 }
 
        int rc;
 
        ap_init_message(&ap_msg);
-       ap_msg.message = (void *) get_zeroed_page(GFP_KERNEL);
-       if (!ap_msg.message)
+       ap_msg.msg = (void *) get_zeroed_page(GFP_KERNEL);
+       if (!ap_msg.msg)
                return -ENOMEM;
        ap_msg.receive = zcrypt_msgtype6_receive;
        ap_msg.psmid = (((unsigned long long) current->pid) << 32) +
                ap_cancel_message(zq->queue, &ap_msg);
        }
 out_free:
-       free_page((unsigned long) ap_msg.message);
+       free_page((unsigned long) ap_msg.msg);
        return rc;
 }
 
                .type = CEXXC_RESPONSE_TYPE_XCRB,
        };
 
-       ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
-       if (!ap_msg->message)
+       ap_msg->msg = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
+       if (!ap_msg->msg)
                return -ENOMEM;
        ap_msg->receive = zcrypt_msgtype6_receive;
        ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
                .type = CEXXC_RESPONSE_TYPE_EP11,
        };
 
-       ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
-       if (!ap_msg->message)
+       ap_msg->msg = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
+       if (!ap_msg->msg)
                return -ENOMEM;
        ap_msg->receive = zcrypt_msgtype6_receive_ep11;
        ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
                struct ep11_cprb cprbx;
                unsigned char   pld_tag;        /* fixed value 0x30 */
                unsigned char   pld_lenfmt;     /* payload length format */
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
        struct pld_hdr {
                unsigned char   func_tag;       /* fixed value 0x4 */
                unsigned char   func_len;       /* fixed value 0x4 */
                .type = CEXXC_RESPONSE_TYPE_XCRB,
        };
 
-       ap_msg->message = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
-       if (!ap_msg->message)
+       ap_msg->msg = kmalloc(MSGTYPE06_MAX_MSG_SIZE, GFP_KERNEL);
+       if (!ap_msg->msg)
                return -ENOMEM;
        ap_msg->receive = zcrypt_msgtype6_receive;
        ap_msg->psmid = (((unsigned long long) current->pid) << 32) +
                char rule[8];
                short int verb_length;
                short int key_length;
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
        struct response_type *rtype = (struct response_type *)(ap_msg->private);
        int rc;
 
 
                char rule[8];
                short int verb_length;
                short int key_length;
-       } __packed * msg = ap_msg->message;
+       } __packed * msg = ap_msg->msg;
        static struct type6_hdr static_type6_hdrX = {
                .type           = 0x06,
                .offset1        = 0x00000058,
        memcpy(msg->rule, "RANDOM  ", 8);
        msg->verb_length = 0x02;
        msg->key_length = 0x02;
-       ap_msg->length = sizeof(*msg);
+       ap_msg->len = sizeof(*msg);
        *domain = (unsigned short)msg->cprbx.domain;
 }
 
 
        zq = kzalloc(sizeof(struct zcrypt_queue), GFP_KERNEL);
        if (!zq)
                return NULL;
-       zq->reply.message = kmalloc(max_response_size, GFP_KERNEL);
-       if (!zq->reply.message)
+       zq->reply.msg = kmalloc(max_response_size, GFP_KERNEL);
+       if (!zq->reply.msg)
                goto out_free;
-       zq->reply.length = max_response_size;
+       zq->reply.len = max_response_size;
        INIT_LIST_HEAD(&zq->list);
        kref_init(&zq->refcount);
        return zq;
 
 void zcrypt_queue_free(struct zcrypt_queue *zq)
 {
-       kfree(zq->reply.message);
+       kfree(zq->reply.msg);
        kfree(zq);
 }
 EXPORT_SYMBOL(zcrypt_queue_free);