mfi(4): Make mfi_linux.ko compile (maybe it even works).
authorSascha Wildner <saw@online.de>
Wed, 1 Dec 2010 21:18:19 +0000 (22:18 +0100)
committerSascha Wildner <saw@online.de>
Wed, 1 Dec 2010 21:18:19 +0000 (22:18 +0100)
I haven't tested this yet.

sys/conf/files
sys/dev/raid/mfi/Makefile
sys/dev/raid/mfi/mfi_linux.c

index 5595b0b..7917ed3 100644 (file)
@@ -609,7 +609,7 @@ dev/raid/mfi/mfi.c          optional mfi
 dev/raid/mfi/mfi_debug.c       optional mfi
 dev/raid/mfi/mfi_pci.c         optional mfi pci
 dev/raid/mfi/mfi_disk.c                optional mfi
-#dev/raid/mfi/mfi_linux.c      optional mfi compat_linux
+dev/raid/mfi/mfi_linux.c       optional mfi compat_linux
 dev/raid/mfi/mfi_cam.c         optional mfip scbus
 dev/netif/mii_layer/mii.c              optional miibus
 dev/netif/mii_layer/mii_physubr.c      optional miibus
index 5b3fc48..5a81b72 100644 (file)
@@ -3,8 +3,9 @@
 SUBDIR= mfip
 
 #.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
-#SUBDIR+= mfi_linux
-#.endif
+.if ${MACHINE_ARCH} == "i386"
+SUBDIR+= mfi_linux
+.endif
 
 KMOD=  mfi
 SRCS=  mfi.c mfi_pci.c mfi_disk.c mfi_debug.c
index 5f0a86c..343add6 100644 (file)
@@ -32,6 +32,7 @@
 #include <sys/kernel.h>
 #include <sys/module.h>
 #include <sys/file.h>
+#include <sys/mapped_ioctl.h>
 #include <sys/proc.h>
 
 #if defined(__x86_64__) /* Assume amd64 wants 32 bit Linux */
 #include <dev/raid/mfi/mfireg.h>
 #include <dev/raid/mfi/mfi_ioctl.h>
 
-/* There are multiple ioctl number ranges that need to be handled */
-#define MFI_LINUX_IOCTL_MIN  0x4d00
-#define MFI_LINUX_IOCTL_MAX  0x4d04
+static struct ioctl_map_range mfi_linux_ioctl_cmds[] = {
+       MAPPED_IOCTL_MAP(MFI_LINUX_CMD, MFI_CMD),
+       MAPPED_IOCTL_MAP(MFI_LINUX_CMD_2, MFI_CMD),
+       MAPPED_IOCTL_MAP(MFI_LINUX_SET_AEN, MFI_SET_AEN),
+       MAPPED_IOCTL_MAP(MFI_LINUX_SET_AEN_2, MFI_SET_AEN),
+       MAPPED_IOCTL_MAPF(0 ,0, NULL)
+};
 
-static linux_ioctl_function_t mfi_linux_ioctl;
-static struct linux_ioctl_handler mfi_linux_handler = {mfi_linux_ioctl,
-                                                      MFI_LINUX_IOCTL_MIN,
-                                                      MFI_LINUX_IOCTL_MAX};
+static struct ioctl_map_handler mfi_linux_ioctl_handler = {
+       &linux_ioctl_map,
+       "mfi_linux",
+       mfi_linux_ioctl_cmds
+};
 
-SYSINIT  (mfi_register,   SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_ioctl_register_handler, &mfi_linux_handler);
-SYSUNINIT(mfi_unregister, SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_ioctl_unregister_handler, &mfi_linux_handler);
-
-static struct linux_device_handler mfi_device_handler =
-       { "mfi", "megaraid_sas", "mfi0", "megaraid_sas_ioctl_node", -1, 0, 1};
-
-SYSINIT  (mfi_register2,   SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_device_register_handler, &mfi_device_handler);
-SYSUNINIT(mfi_unregister2, SI_SUB_KLD, SI_ORDER_MIDDLE,
-         linux_device_unregister_handler, &mfi_device_handler);
+SYSINIT  (mfi_register,   SI_BOOT2_KLD, SI_ORDER_MIDDLE,
+         mapped_ioctl_register_handler, &mfi_linux_ioctl_handler);
+SYSUNINIT(mfi_unregister, SI_BOOT2_KLD, SI_ORDER_MIDDLE,
+         mapped_ioctl_unregister_handler, &mfi_linux_ioctl_handler);
 
 static int
 mfi_linux_modevent(module_t mod, int cmd, void *data)
@@ -77,26 +75,3 @@ mfi_linux_modevent(module_t mod, int cmd, void *data)
 
 DEV_MODULE(mfi_linux, mfi_linux_modevent, NULL);
 MODULE_DEPEND(mfi, linux, 1, 1, 1);
-
-static int
-mfi_linux_ioctl(struct thread *p, struct linux_ioctl_args *args)
-{
-       struct file *fp;
-       int error;
-       u_long cmd = args->cmd;
-
-       switch (cmd) {
-       case MFI_LINUX_CMD:
-               cmd = MFI_LINUX_CMD_2;
-               break;
-       case MFI_LINUX_SET_AEN:
-               cmd = MFI_LINUX_SET_AEN_2;
-               break;
-       }
-
-       if ((error = fget(p, args->fd, &fp)) != 0)
-               return (error);
-       error = fo_ioctl(fp, cmd, (caddr_t)args->arg, p->td_ucred, p);
-       fdrop(fp, p);
-       return (error);
-}