/* * drivers/vservices/skeleton_driver.c * * Copyright (c) 2012-2018 General Dynamics * Copyright (c) 2014 Open Kernel Labs, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Skeleton testing driver for templating vService client/server drivers */ #include #include #include #include #include #include struct skeleton_info { unsigned dummy; }; static void vs_skeleton_handle_start(struct vs_service_device *service) { /* NOTE: Do not change this message - is it used for system testing */ dev_info(&service->dev, "skeleton handle_start\n"); } static int vs_skeleton_handle_message(struct vs_service_device *service, struct vs_mbuf *mbuf) { dev_info(&service->dev, "skeleton handle_messasge\n"); return -EBADMSG; } static void vs_skeleton_handle_notify(struct vs_service_device *service, u32 flags) { dev_info(&service->dev, "skeleton handle_notify\n"); } static void vs_skeleton_handle_reset(struct vs_service_device *service) { dev_info(&service->dev, "skeleton handle_reset %s service %d\n", service->is_server ? "server" : "client", service->id); } static int vs_skeleton_probe(struct vs_service_device *service) { struct skeleton_info *info; int err = -ENOMEM; info = kzalloc(sizeof(*info), GFP_KERNEL); if (!info) goto fail; dev_set_drvdata(&service->dev, info); return 0; fail: return err; } static int vs_skeleton_remove(struct vs_service_device *service) { struct skeleton_info *info = dev_get_drvdata(&service->dev); dev_info(&service->dev, "skeleton remove\n"); kfree(info); return 0; } static struct vs_service_driver server_skeleton_driver = { .protocol = "com.ok-labs.skeleton", .is_server = true, .probe = vs_skeleton_probe, .remove = vs_skeleton_remove, .start = vs_skeleton_handle_start, .receive = vs_skeleton_handle_message, .notify = vs_skeleton_handle_notify, .reset = vs_skeleton_handle_reset, .driver = { .name = "vs-server-skeleton", .owner = THIS_MODULE, .bus = &vs_server_bus_type, }, }; static struct vs_service_driver client_skeleton_driver = { .protocol = "com.ok-labs.skeleton", .is_server = false, .probe = vs_skeleton_probe, .remove = vs_skeleton_remove, .start = vs_skeleton_handle_start, .receive = vs_skeleton_handle_message, .notify = vs_skeleton_handle_notify, .reset = vs_skeleton_handle_reset, .driver = { .name = "vs-client-skeleton", .owner = THIS_MODULE, .bus = &vs_client_bus_type, }, }; static int __init vs_skeleton_init(void) { int ret; ret = driver_register(&server_skeleton_driver.driver); if (ret) return ret; ret = driver_register(&client_skeleton_driver.driver); if (ret) driver_unregister(&server_skeleton_driver.driver); return ret; } static void __exit vs_skeleton_exit(void) { driver_unregister(&server_skeleton_driver.driver); driver_unregister(&client_skeleton_driver.driver); } module_init(vs_skeleton_init); module_exit(vs_skeleton_exit); MODULE_DESCRIPTION("OKL4 Virtual Services Skeleton Client/Server Driver"); MODULE_AUTHOR("Open Kernel Labs, Inc");