xref: /linux/drivers/s390/char/hmcdrv_mod.c (revision 664b0bae0b87f69bc9deb098f5e0158b9cf18e04)
1*6f05e69eSGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
28f933b10SRalf Hoppe /*
38f933b10SRalf Hoppe  *    HMC Drive DVD Module
48f933b10SRalf Hoppe  *
58f933b10SRalf Hoppe  *    Copyright IBM Corp. 2013
68f933b10SRalf Hoppe  *    Author(s): Ralf Hoppe (rhoppe@de.ibm.com)
78f933b10SRalf Hoppe  */
88f933b10SRalf Hoppe 
98f933b10SRalf Hoppe #define KMSG_COMPONENT "hmcdrv"
108f933b10SRalf Hoppe #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
118f933b10SRalf Hoppe 
128f933b10SRalf Hoppe #include <linux/kernel.h>
138f933b10SRalf Hoppe #include <linux/module.h>
148f933b10SRalf Hoppe #include <linux/moduleparam.h>
158f933b10SRalf Hoppe #include <linux/stat.h>
168f933b10SRalf Hoppe 
178f933b10SRalf Hoppe #include "hmcdrv_ftp.h"
188f933b10SRalf Hoppe #include "hmcdrv_dev.h"
198f933b10SRalf Hoppe #include "hmcdrv_cache.h"
208f933b10SRalf Hoppe 
218f933b10SRalf Hoppe MODULE_LICENSE("GPL");
228f933b10SRalf Hoppe MODULE_AUTHOR("Copyright 2013 IBM Corporation");
238f933b10SRalf Hoppe MODULE_DESCRIPTION("HMC drive DVD access");
248f933b10SRalf Hoppe 
258f933b10SRalf Hoppe /*
268f933b10SRalf Hoppe  * module parameter 'cachesize'
278f933b10SRalf Hoppe  */
288f933b10SRalf Hoppe static size_t hmcdrv_mod_cachesize = HMCDRV_CACHE_SIZE_DFLT;
298f933b10SRalf Hoppe module_param_named(cachesize, hmcdrv_mod_cachesize, ulong, S_IRUGO);
308f933b10SRalf Hoppe 
318f933b10SRalf Hoppe /**
328f933b10SRalf Hoppe  * hmcdrv_mod_init() - module init function
338f933b10SRalf Hoppe  */
348f933b10SRalf Hoppe static int __init hmcdrv_mod_init(void)
358f933b10SRalf Hoppe {
368f933b10SRalf Hoppe 	int rc = hmcdrv_ftp_probe(); /* perform w/o cache */
378f933b10SRalf Hoppe 
388f933b10SRalf Hoppe 	if (rc)
398f933b10SRalf Hoppe 		return rc;
408f933b10SRalf Hoppe 
418f933b10SRalf Hoppe 	rc = hmcdrv_cache_startup(hmcdrv_mod_cachesize);
428f933b10SRalf Hoppe 
438f933b10SRalf Hoppe 	if (rc)
448f933b10SRalf Hoppe 		return rc;
458f933b10SRalf Hoppe 
468f933b10SRalf Hoppe 	rc = hmcdrv_dev_init();
478f933b10SRalf Hoppe 
488f933b10SRalf Hoppe 	if (rc)
498f933b10SRalf Hoppe 		hmcdrv_cache_shutdown();
508f933b10SRalf Hoppe 
518f933b10SRalf Hoppe 	return rc;
528f933b10SRalf Hoppe }
538f933b10SRalf Hoppe 
548f933b10SRalf Hoppe /**
558f933b10SRalf Hoppe  * hmcdrv_mod_exit() - module exit function
568f933b10SRalf Hoppe  */
578f933b10SRalf Hoppe static void __exit hmcdrv_mod_exit(void)
588f933b10SRalf Hoppe {
598f933b10SRalf Hoppe 	hmcdrv_dev_exit();
608f933b10SRalf Hoppe 	hmcdrv_cache_shutdown();
618f933b10SRalf Hoppe }
628f933b10SRalf Hoppe 
638f933b10SRalf Hoppe module_init(hmcdrv_mod_init);
648f933b10SRalf Hoppe module_exit(hmcdrv_mod_exit);
65