From 61b6eb3cafcf9c710864d0561e6301a989f96a1a Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Thu, 4 Jul 2013 12:05:10 +0400 Subject: [PATCH] [REFACTOR] redesing swap_message_parser_module.c and rename: swap_message_parser_module.c --> swap_msg_parser.c --- parser/swap_message_parser_module.c | 84 ---------------------------- parser/swap_msg_parser.c | 107 ++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 84 deletions(-) delete mode 100644 parser/swap_message_parser_module.c create mode 100644 parser/swap_msg_parser.c diff --git a/parser/swap_message_parser_module.c b/parser/swap_message_parser_module.c deleted file mode 100644 index 4db839f..0000000 --- a/parser/swap_message_parser_module.c +++ /dev/null @@ -1,84 +0,0 @@ -#include - -#include "parser_defs.h" -#include "message_handler.h" -#include "swap_message_parser_errors.h" - -#include -#include - - -int swap_message_parser_handler(unsigned int cmd, void __user *msg) -{ - int result; - - switch(cmd) { - case SWAP_DRIVER_MSG_START: - { - result = message_start(msg); - break; - } - case SWAP_DRIVER_MSG_STOP: - { - result = message_stop(); - break; - } - case SWAP_DRIVER_MSG_CONFIG: - { - result = message_config(msg); - break; - } - case SWAP_DRIVER_MSG_SWAP_INST_ADD: - { - result = message_swap_inst_add(msg); - break; - } - case SWAP_DRIVER_MSG_SWAP_INST_REMOVE: - { - result = message_swap_inst_remove(msg); - break; - } - default: - { - result = -E_SMP_UNKNOWN_MESSAGE; - break; - } - } - - return result; -} - -static int register_swap_message_parser(void) -{ - int result; - - result = register_swap_message_parser_handler(swap_message_parser_handler); - - return result; -} - - -static int __init swap_message_parser_init(void) -{ - int result; - - result = register_swap_message_parser(); - if (result != 0) { - print_err("SWAP Message Parser handler was not registered! Message parser won't work!\n"); - return result; - } - - print_msg("Module init\n"); - - return result; -} - -static void __exit swap_message_parser_exit(void) -{ - print_msg("Module exit\n"); -} - -module_init(swap_message_parser_init); -module_exit(swap_message_parser_exit); - -MODULE_LICENSE("GPL"); diff --git a/parser/swap_msg_parser.c b/parser/swap_msg_parser.c new file mode 100644 index 0000000..53a730d --- /dev/null +++ b/parser/swap_msg_parser.c @@ -0,0 +1,107 @@ +#include +#include +#include + +#include "parser_defs.h" +#include "msg_buf.h" +#include "msg_cmd.h" + +#include +#include + +enum MSG_ID { + MSG_KEEP_ALIVE = 0x0001, + MSG_START = 0x0002, + MSG_STOP = 0x0003, + MSG_CONFIG = 0x0004, + MSG_SWAP_INST_ADD = 0x0008, + MSG_SWAP_INST_REMOVE = 0x0009 +}; + +struct basic_msg_fmt { + u32 msg_id; + u32 len; +} __attribute__((packed)); + +static int msg_handler(void __user *msg) +{ + int ret; + u32 size; + enum MSG_ID msg_id; + struct msg_buf mb; + void __user *payload; + struct basic_msg_fmt bmf; + + ret = copy_from_user(&bmf, (void*)msg, sizeof(bmf)); + if (ret) + return ret; + + size = bmf.len; + ret = init_mb(&mb, size); + if (ret) + return ret; + + payload = msg + sizeof(bmf); + if (size) { + ret = copy_from_user(mb.begin, (void*)payload, size); + if (ret) + goto uninit; + } + + msg_id = bmf.msg_id; + switch (msg_id) { + case MSG_KEEP_ALIVE: + ret = msg_keep_alive(&mb); + break; + case MSG_START: + ret = msg_start(&mb); + break; + case MSG_STOP: + ret = msg_stop(&mb); + break; + case MSG_CONFIG: + ret = msg_config(&mb); + break; + case MSG_SWAP_INST_ADD: + ret = msg_swap_inst_add(&mb); + break; + case MSG_SWAP_INST_REMOVE: + ret = msg_swap_inst_remove(&mb); + break; + default: + print_err("incorrect message ID [%u]\n", msg_id); + ret = -EINVAL; + break; + } + +uninit: + uninit_mb(&mb); + return ret; +} + +static void register_msg_handler(void) +{ + set_msg_handler(msg_handler); +} + +static void unregister_msg_handler(void) +{ + set_msg_handler(NULL); +} + +static int __init swap_parser_init(void) +{ + register_msg_handler(); + + return 0; +} + +static void __exit swap_parser_exit(void) +{ + unregister_msg_handler(); +} + +module_init(swap_parser_init); +module_exit(swap_parser_exit); + +MODULE_LICENSE("GPL"); -- 2.7.4