octeontx2-af: Convert mbox msg id check to a macro
authorAleksey Makarov <amakarov@marvell.com>
Wed, 10 Oct 2018 12:44:26 +0000 (18:14 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 10 Oct 2018 17:06:02 +0000 (10:06 -0700)
With 10's of mailbox messages expected to be handled in future,
checking for message id could become a lengthy switch case. Hence
added a macro to auto generate the switch case for each msg id.

Signed-off-by: Aleksey Makarov <amakarov@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/af/rvu.c

index 2e70947..db5a75d 100644 (file)
@@ -257,6 +257,12 @@ cpt:
        return 0;
 }
 
+static int rvu_mbox_handler_READY(struct rvu *rvu, struct msg_req *req,
+                                 struct ready_msg_rsp *rsp)
+{
+       return 0;
+}
+
 static int rvu_process_mbox_msg(struct rvu *rvu, int devid,
                                struct mbox_msghdr *req)
 {
@@ -264,13 +270,39 @@ static int rvu_process_mbox_msg(struct rvu *rvu, int devid,
        if (req->sig != OTX2_MBOX_REQ_SIG)
                goto bad_message;
 
-       if (req->id == MBOX_MSG_READY)
-               return 0;
-
+       switch (req->id) {
+#define M(_name, _id, _req_type, _rsp_type)                            \
+       case _id: {                                                     \
+               struct _rsp_type *rsp;                                  \
+               int err;                                                \
+                                                                       \
+               rsp = (struct _rsp_type *)otx2_mbox_alloc_msg(          \
+                       &rvu->mbox, devid,                              \
+                       sizeof(struct _rsp_type));                      \
+               if (rsp) {                                              \
+                       rsp->hdr.id = _id;                              \
+                       rsp->hdr.sig = OTX2_MBOX_RSP_SIG;               \
+                       rsp->hdr.pcifunc = req->pcifunc;                \
+                       rsp->hdr.rc = 0;                                \
+               }                                                       \
+                                                                       \
+               err = rvu_mbox_handler_ ## _name(rvu,                   \
+                                                (struct _req_type *)req, \
+                                                rsp);                  \
+               if (rsp && err)                                         \
+                       rsp->hdr.rc = err;                              \
+                                                                       \
+               return rsp ? err : -ENOMEM;                             \
+       }
+MBOX_MESSAGES
+#undef M
+               break;
 bad_message:
-       otx2_reply_invalid_msg(&rvu->mbox, devid, req->pcifunc,
-                              req->id);
-       return -ENODEV;
+       default:
+               otx2_reply_invalid_msg(&rvu->mbox, devid, req->pcifunc,
+                                      req->id);
+               return -ENODEV;
+       }
 }
 
 static void rvu_mbox_handler(struct work_struct *work)