*/
  
  /*
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
  
+ #include <asm/unaligned.h>
  #include "iforce.h"
  
  MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>, Johann Deneux <johann.deneux@gmail.com>");
 
   */
  
  /*
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
  
+ #include <asm/unaligned.h>
  #include "iforce.h"
  
  static struct {
 
   */
  
  /*
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
  
+ #include <linux/serio.h>
  #include "iforce.h"
  
- void iforce_serial_xmit(struct iforce *iforce)
+ struct iforce_serio {
+       struct iforce iforce;
+ 
+       struct serio *serio;
+       int idx, pkt, len, id;
+       u8 csum;
+       u8 expect_packet;
+       u8 cmd_response[IFORCE_MAX_LENGTH];
+       u8 cmd_response_len;
+       u8 data_in[IFORCE_MAX_LENGTH];
+ };
+ 
+ static void iforce_serio_xmit(struct iforce *iforce)
  {
+       struct iforce_serio *iforce_serio = container_of(iforce,
+                                                        struct iforce_serio,
+                                                        iforce);
        unsigned char cs;
        int i;
        unsigned long flags;
 
   */
  
  /*
 - * This program is free software; you can redistribute it and/or modify
 - * it under the terms of the GNU General Public License as published by
 - * the Free Software Foundation; either version 2 of the License, or
 - * (at your option) any later version.
 - *
 - * This program is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - * GNU General Public License for more details.
 - *
 - * You should have received a copy of the GNU General Public License
 - * along with this program; if not, write to the Free Software
 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
  
+ #include <linux/usb.h>
  #include "iforce.h"
  
- void iforce_usb_xmit(struct iforce *iforce)
+ struct iforce_usb {
+       struct iforce iforce;
+ 
+       struct usb_device *usbdev;
+       struct usb_interface *intf;
+       struct urb *irq, *out;
+ 
+       u8 data_in[IFORCE_MAX_LENGTH] ____cacheline_aligned;
+       u8 data_out[IFORCE_MAX_LENGTH] ____cacheline_aligned;
+ };
+ 
+ static void __iforce_usb_xmit(struct iforce *iforce)
  {
+       struct iforce_usb *iforce_usb = container_of(iforce, struct iforce_usb,
+                                                    iforce);
        int n, c;
        unsigned long flags;