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