linux/drivers/macintosh/adbhid.c
<<
>>
Prefs
   1/*
   2 * drivers/macintosh/adbhid.c
   3 *
   4 * ADB HID driver for Power Macintosh computers.
   5 *
   6 * Adapted from drivers/macintosh/mac_keyb.c by Franz Sirl.
   7 * drivers/macintosh/mac_keyb.c was Copyright (C) 1996 Paul Mackerras
   8 * with considerable contributions from Ben Herrenschmidt and others.
   9 *
  10 * Copyright (C) 2000 Franz Sirl.
  11 *
  12 * Adapted to ADB changes and support for more devices by
  13 * Benjamin Herrenschmidt. Adapted from code in MkLinux
  14 * and reworked.
  15 * 
  16 * Supported devices:
  17 *
  18 * - Standard 1 button mouse
  19 * - All standard Apple Extended protocol (handler ID 4)
  20 * - mouseman and trackman mice & trackballs 
  21 * - PowerBook Trackpad (default setup: enable tapping)
  22 * - MicroSpeed mouse & trackball (needs testing)
  23 * - CH Products Trackball Pro (needs testing)
  24 * - Contour Design (Contour Mouse)
  25 * - Hunter digital (NoHandsMouse)
  26 * - Kensignton TurboMouse 5 (needs testing)
  27 * - Mouse Systems A3 mice and trackballs <aidan@kublai.com>
  28 * - MacAlly 2-buttons mouse (needs testing) <pochini@denise.shiny.it>
  29 *
  30 * To do:
  31 *
  32 * Improve Kensington support.
  33 * Split mouse/kbd
  34 * Move to syfs
  35 */
  36
  37#include <linux/module.h>
  38#include <linux/slab.h>
  39#include <linux/init.h>
  40#include <linux/notifier.h>
  41#include <linux/input.h>
  42
  43#include <linux/adb.h>
  44#include <linux/cuda.h>
  45#include <linux/pmu.h>
  46
  47#include <asm/machdep.h>
  48#ifdef CONFIG_PPC_PMAC
  49#include <asm/backlight.h>
  50#include <asm/pmac_feature.h>
  51#endif
  52
  53MODULE_AUTHOR("Franz Sirl <Franz.Sirl-kernel@lauterbach.com>");
  54
  55static int restore_capslock_events;
  56module_param(restore_capslock_events, int, 0644);
  57MODULE_PARM_DESC(restore_capslock_events,
  58        "Produce keypress events for capslock on both keyup and keydown.");
  59
  60#define KEYB_KEYREG     0       /* register # for key up/down data */
  61#define KEYB_LEDREG     2       /* register # for leds on ADB keyboard */
  62#define MOUSE_DATAREG   0       /* reg# for movement/button codes from mouse */
  63
  64static int adb_message_handler(struct notifier_block *, unsigned long, void *);
  65static struct notifier_block adbhid_adb_notifier = {
  66        .notifier_call  = adb_message_handler,
  67};
  68
  69/* Some special keys */
  70#define ADB_KEY_DEL             0x33
  71#define ADB_KEY_CMD             0x37
  72#define ADB_KEY_CAPSLOCK        0x39
  73#define ADB_KEY_FN              0x3f
  74#define ADB_KEY_FWDEL           0x75
  75#define ADB_KEY_POWER_OLD       0x7e
  76#define ADB_KEY_POWER           0x7f
  77
  78static const u16 adb_to_linux_keycodes[128] = {
  79        /* 0x00 */ KEY_A,               /*  30 */
  80        /* 0x01 */ KEY_S,               /*  31 */
  81        /* 0x02 */ KEY_D,               /*  32 */
  82        /* 0x03 */ KEY_F,               /*  33 */
  83        /* 0x04 */ KEY_H,               /*  35 */
  84        /* 0x05 */ KEY_G,               /*  34 */
  85        /* 0x06 */ KEY_Z,               /*  44 */
  86        /* 0x07 */ KEY_X,               /*  45 */
  87        /* 0x08 */ KEY_C,               /*  46 */
  88        /* 0x09 */ KEY_V,               /*  47 */
  89        /* 0x0a */ KEY_102ND,           /*  86 */
  90        /* 0x0b */ KEY_B,               /*  48 */
  91        /* 0x0c */ KEY_Q,               /*  16 */
  92        /* 0x0d */ KEY_W,               /*  17 */
  93        /* 0x0e */ KEY_E,               /*  18 */
  94        /* 0x0f */ KEY_R,               /*  19 */
  95        /* 0x10 */ KEY_Y,               /*  21 */
  96        /* 0x11 */ KEY_T,               /*  20 */
  97        /* 0x12 */ KEY_1,               /*   2 */
  98        /* 0x13 */ KEY_2,               /*   3 */
  99        /* 0x14 */ KEY_3,               /*   4 */
 100        /* 0x15 */ KEY_4,               /*   5 */
 101        /* 0x16 */ KEY_6,               /*   7 */
 102        /* 0x17 */ KEY_5,               /*   6 */
 103        /* 0x18 */ KEY_EQUAL,           /*  13 */
 104        /* 0x19 */ KEY_9,               /*  10 */
 105        /* 0x1a */ KEY_7,               /*   8 */
 106        /* 0x1b */ KEY_MINUS,           /*  12 */
 107        /* 0x1c */ KEY_8,               /*   9 */
 108        /* 0x1d */ KEY_0,               /*  11 */
 109        /* 0x1e */ KEY_RIGHTBRACE,      /*  27 */
 110        /* 0x1f */ KEY_O,               /*  24 */
 111        /* 0x20 */ KEY_U,               /*  22 */
 112        /* 0x21 */ KEY_LEFTBRACE,       /*  26 */
 113        /* 0x22 */ KEY_I,               /*  23 */
 114        /* 0x23 */ KEY_P,               /*  25 */
 115        /* 0x24 */ KEY_ENTER,           /*  28 */
 116        /* 0x25 */ KEY_L,               /*  38 */
 117        /* 0x26 */ KEY_J,               /*  36 */
 118        /* 0x27 */ KEY_APOSTROPHE,      /*  40 */
 119        /* 0x28 */ KEY_K,               /*  37 */
 120        /* 0x29 */ KEY_SEMICOLON,       /*  39 */
 121        /* 0x2a */ KEY_BACKSLASH,       /*  43 */
 122        /* 0x2b */ KEY_COMMA,           /*  51 */
 123        /* 0x2c */ KEY_SLASH,           /*  53 */
 124        /* 0x2d */ KEY_N,               /*  49 */
 125        /* 0x2e */ KEY_M,               /*  50 */
 126        /* 0x2f */ KEY_DOT,             /*  52 */
 127        /* 0x30 */ KEY_TAB,             /*  15 */
 128        /* 0x31 */ KEY_SPACE,           /*  57 */
 129        /* 0x32 */ KEY_GRAVE,           /*  41 */
 130        /* 0x33 */ KEY_BACKSPACE,       /*  14 */
 131        /* 0x34 */ KEY_KPENTER,         /*  96 */
 132        /* 0x35 */ KEY_ESC,             /*   1 */
 133        /* 0x36 */ KEY_LEFTCTRL,        /*  29 */
 134        /* 0x37 */ KEY_LEFTMETA,        /* 125 */
 135        /* 0x38 */ KEY_LEFTSHIFT,       /*  42 */
 136        /* 0x39 */ KEY_CAPSLOCK,        /*  58 */
 137        /* 0x3a */ KEY_LEFTALT,         /*  56 */
 138        /* 0x3b */ KEY_LEFT,            /* 105 */
 139        /* 0x3c */ KEY_RIGHT,           /* 106 */
 140        /* 0x3d */ KEY_DOWN,            /* 108 */
 141        /* 0x3e */ KEY_UP,              /* 103 */
 142        /* 0x3f */ KEY_FN,              /* 0x1d0 */
 143        /* 0x40 */ 0,
 144        /* 0x41 */ KEY_KPDOT,           /*  83 */
 145        /* 0x42 */ 0,
 146        /* 0x43 */ KEY_KPASTERISK,      /*  55 */
 147        /* 0x44 */ 0,
 148        /* 0x45 */ KEY_KPPLUS,          /*  78 */
 149        /* 0x46 */ 0,
 150        /* 0x47 */ KEY_NUMLOCK,         /*  69 */
 151        /* 0x48 */ 0,
 152        /* 0x49 */ 0,
 153        /* 0x4a */ 0,
 154        /* 0x4b */ KEY_KPSLASH,         /*  98 */
 155        /* 0x4c */ KEY_KPENTER,         /*  96 */
 156        /* 0x4d */ 0,
 157        /* 0x4e */ KEY_KPMINUS,         /*  74 */
 158        /* 0x4f */ 0,
 159        /* 0x50 */ 0,
 160        /* 0x51 */ KEY_KPEQUAL,         /* 117 */
 161        /* 0x52 */ KEY_KP0,             /*  82 */
 162        /* 0x53 */ KEY_KP1,             /*  79 */
 163        /* 0x54 */ KEY_KP2,             /*  80 */
 164        /* 0x55 */ KEY_KP3,             /*  81 */
 165        /* 0x56 */ KEY_KP4,             /*  75 */
 166        /* 0x57 */ KEY_KP5,             /*  76 */
 167        /* 0x58 */ KEY_KP6,             /*  77 */
 168        /* 0x59 */ KEY_KP7,             /*  71 */
 169        /* 0x5a */ 0,
 170        /* 0x5b */ KEY_KP8,             /*  72 */
 171        /* 0x5c */ KEY_KP9,             /*  73 */
 172        /* 0x5d */ KEY_YEN,             /* 124 */
 173        /* 0x5e */ KEY_RO,              /*  89 */
 174        /* 0x5f */ KEY_KPCOMMA,         /* 121 */
 175        /* 0x60 */ KEY_F5,              /*  63 */
 176        /* 0x61 */ KEY_F6,              /*  64 */
 177        /* 0x62 */ KEY_F7,              /*  65 */
 178        /* 0x63 */ KEY_F3,              /*  61 */
 179        /* 0x64 */ KEY_F8,              /*  66 */
 180        /* 0x65 */ KEY_F9,              /*  67 */
 181        /* 0x66 */ KEY_HANJA,           /* 123 */
 182        /* 0x67 */ KEY_F11,             /*  87 */
 183        /* 0x68 */ KEY_HANGEUL,         /* 122 */
 184        /* 0x69 */ KEY_SYSRQ,           /*  99 */
 185        /* 0x6a */ 0,
 186        /* 0x6b */ KEY_SCROLLLOCK,      /*  70 */
 187        /* 0x6c */ 0,
 188        /* 0x6d */ KEY_F10,             /*  68 */
 189        /* 0x6e */ KEY_COMPOSE,         /* 127 */
 190        /* 0x6f */ KEY_F12,             /*  88 */
 191        /* 0x70 */ 0,
 192        /* 0x71 */ KEY_PAUSE,           /* 119 */
 193        /* 0x72 */ KEY_INSERT,          /* 110 */
 194        /* 0x73 */ KEY_HOME,            /* 102 */
 195        /* 0x74 */ KEY_PAGEUP,          /* 104 */
 196        /* 0x75 */ KEY_DELETE,          /* 111 */
 197        /* 0x76 */ KEY_F4,              /*  62 */
 198        /* 0x77 */ KEY_END,             /* 107 */
 199        /* 0x78 */ KEY_F2,              /*  60 */
 200        /* 0x79 */ KEY_PAGEDOWN,        /* 109 */
 201        /* 0x7a */ KEY_F1,              /*  59 */
 202        /* 0x7b */ KEY_RIGHTSHIFT,      /*  54 */
 203        /* 0x7c */ KEY_RIGHTALT,        /* 100 */
 204        /* 0x7d */ KEY_RIGHTCTRL,       /*  97 */
 205        /* 0x7e */ KEY_RIGHTMETA,       /* 126 */
 206        /* 0x7f */ KEY_POWER,           /* 116 */
 207};
 208
 209struct adbhid {
 210        struct input_dev *input;
 211        int id;
 212        int default_id;
 213        int original_handler_id;
 214        int current_handler_id;
 215        int mouse_kind;
 216        u16 *keycode;
 217        char name[64];
 218        char phys[32];
 219        int flags;
 220};
 221
 222#define FLAG_FN_KEY_PRESSED             0x00000001
 223#define FLAG_POWER_FROM_FN              0x00000002
 224#define FLAG_EMU_FWDEL_DOWN             0x00000004
 225#define FLAG_CAPSLOCK_TRANSLATE         0x00000008
 226#define FLAG_CAPSLOCK_DOWN              0x00000010
 227#define FLAG_CAPSLOCK_IGNORE_NEXT       0x00000020
 228#define FLAG_POWER_KEY_PRESSED          0x00000040
 229
 230static struct adbhid *adbhid[16];
 231
 232static void adbhid_probe(void);
 233
 234static void adbhid_input_keycode(int, int, int);
 235
 236static void init_trackpad(int id);
 237static void init_trackball(int id);
 238static void init_turbomouse(int id);
 239static void init_microspeed(int id);
 240static void init_ms_a3(int id);
 241
 242static struct adb_ids keyboard_ids;
 243static struct adb_ids mouse_ids;
 244static struct adb_ids buttons_ids;
 245
 246/* Kind of keyboard, see Apple technote 1152  */
 247#define ADB_KEYBOARD_UNKNOWN    0
 248#define ADB_KEYBOARD_ANSI       0x0100
 249#define ADB_KEYBOARD_ISO        0x0200
 250#define ADB_KEYBOARD_JIS        0x0300
 251
 252/* Kind of mouse  */
 253#define ADBMOUSE_STANDARD_100   0       /* Standard 100cpi mouse (handler 1) */
 254#define ADBMOUSE_STANDARD_200   1       /* Standard 200cpi mouse (handler 2) */
 255#define ADBMOUSE_EXTENDED       2       /* Apple Extended mouse (handler 4) */
 256#define ADBMOUSE_TRACKBALL      3       /* TrackBall (handler 4) */
 257#define ADBMOUSE_TRACKPAD       4       /* Apple's PowerBook trackpad (handler 4) */
 258#define ADBMOUSE_TURBOMOUSE5    5       /* Turbomouse 5 (previously req. mousehack) */
 259#define ADBMOUSE_MICROSPEED     6       /* Microspeed mouse (&trackball ?), MacPoint */
 260#define ADBMOUSE_TRACKBALLPRO   7       /* Trackball Pro (special buttons) */
 261#define ADBMOUSE_MS_A3          8       /* Mouse systems A3 trackball (handler 3) */
 262#define ADBMOUSE_MACALLY2       9       /* MacAlly 2-button mouse */
 263
 264static void
 265adbhid_keyboard_input(unsigned char *data, int nb, int apoll)
 266{
 267        int id = (data[0] >> 4) & 0x0f;
 268
 269        if (!adbhid[id]) {
 270                printk(KERN_ERR "ADB HID on ID %d not yet registered, packet %#02x, %#02x, %#02x, %#02x\n",
 271                       id, data[0], data[1], data[2], data[3]);
 272                return;
 273        }
 274
 275        /* first check this is from register 0 */
 276        if (nb != 3 || (data[0] & 3) != KEYB_KEYREG)
 277                return;         /* ignore it */
 278        adbhid_input_keycode(id, data[1], 0);
 279        if (!(data[2] == 0xff || (data[2] == 0x7f && data[1] == 0x7f)))
 280                adbhid_input_keycode(id, data[2], 0);
 281}
 282
 283static void
 284adbhid_input_keycode(int id, int scancode, int repeat)
 285{
 286        struct adbhid *ahid = adbhid[id];
 287        int keycode, up_flag, key;
 288
 289        keycode = scancode & 0x7f;
 290        up_flag = scancode & 0x80;
 291
 292        if (restore_capslock_events) {
 293                if (keycode == ADB_KEY_CAPSLOCK && !up_flag) {
 294                        /* Key pressed, turning on the CapsLock LED.
 295                         * The next 0xff will be interpreted as a release. */
 296                        if (ahid->flags & FLAG_CAPSLOCK_IGNORE_NEXT) {
 297                                /* Throw away this key event if it happens
 298                                 * just after resume. */
 299                                ahid->flags &= ~FLAG_CAPSLOCK_IGNORE_NEXT;
 300                                return;
 301                        } else {
 302                                ahid->flags |= FLAG_CAPSLOCK_TRANSLATE
 303                                        | FLAG_CAPSLOCK_DOWN;
 304                        }
 305                } else if (scancode == 0xff &&
 306                           !(ahid->flags & FLAG_POWER_KEY_PRESSED)) {
 307                        /* Scancode 0xff usually signifies that the capslock
 308                         * key was either pressed or released, or that the
 309                         * power button was released. */
 310                        if (ahid->flags & FLAG_CAPSLOCK_TRANSLATE) {
 311                                keycode = ADB_KEY_CAPSLOCK;
 312                                if (ahid->flags & FLAG_CAPSLOCK_DOWN) {
 313                                        /* Key released */
 314                                        up_flag = 1;
 315                                        ahid->flags &= ~FLAG_CAPSLOCK_DOWN;
 316                                } else {
 317                                        /* Key pressed */
 318                                        up_flag = 0;
 319                                        ahid->flags &= ~FLAG_CAPSLOCK_TRANSLATE;
 320                                }
 321                        } else {
 322                                printk(KERN_INFO "Spurious caps lock event "
 323                                                 "(scancode 0xff).\n");
 324                        }
 325                }
 326        }
 327
 328        switch (keycode) {
 329        case ADB_KEY_CAPSLOCK:
 330                if (!restore_capslock_events) {
 331                        /* Generate down/up events for CapsLock every time. */
 332                        input_report_key(ahid->input, KEY_CAPSLOCK, 1);
 333                        input_sync(ahid->input);
 334                        input_report_key(ahid->input, KEY_CAPSLOCK, 0);
 335                        input_sync(ahid->input);
 336                        return;
 337                }
 338                break;
 339#ifdef CONFIG_PPC_PMAC
 340        case ADB_KEY_POWER_OLD: /* Power key on PBook 3400 needs remapping */
 341                switch(pmac_call_feature(PMAC_FTR_GET_MB_INFO,
 342                        NULL, PMAC_MB_INFO_MODEL, 0)) {
 343                case PMAC_TYPE_COMET:
 344                case PMAC_TYPE_HOOPER:
 345                case PMAC_TYPE_KANGA:
 346                        keycode = ADB_KEY_POWER;
 347                }
 348                break;
 349        case ADB_KEY_POWER:
 350                /* Keep track of the power key state */
 351                if (up_flag)
 352                        ahid->flags &= ~FLAG_POWER_KEY_PRESSED;
 353                else
 354                        ahid->flags |= FLAG_POWER_KEY_PRESSED;
 355
 356                /* Fn + Command will produce a bogus "power" keycode */
 357                if (ahid->flags & FLAG_FN_KEY_PRESSED) {
 358                        keycode = ADB_KEY_CMD;
 359                        if (up_flag)
 360                                ahid->flags &= ~FLAG_POWER_FROM_FN;
 361                        else
 362                                ahid->flags |= FLAG_POWER_FROM_FN;
 363                } else if (ahid->flags & FLAG_POWER_FROM_FN) {
 364                        keycode = ADB_KEY_CMD;
 365                        ahid->flags &= ~FLAG_POWER_FROM_FN;
 366                }
 367                break;
 368        case ADB_KEY_FN:
 369                /* Keep track of the Fn key state */
 370                if (up_flag) {
 371                        ahid->flags &= ~FLAG_FN_KEY_PRESSED;
 372                        /* Emulate Fn+delete = forward delete */
 373                        if (ahid->flags & FLAG_EMU_FWDEL_DOWN) {
 374                                ahid->flags &= ~FLAG_EMU_FWDEL_DOWN;
 375                                keycode = ADB_KEY_FWDEL;
 376                                break;
 377                        }
 378                } else
 379                        ahid->flags |= FLAG_FN_KEY_PRESSED;
 380                break;
 381        case ADB_KEY_DEL:
 382                /* Emulate Fn+delete = forward delete */
 383                if (ahid->flags & FLAG_FN_KEY_PRESSED) {
 384                        keycode = ADB_KEY_FWDEL;
 385                        if (up_flag)
 386                                ahid->flags &= ~FLAG_EMU_FWDEL_DOWN;
 387                        else
 388                                ahid->flags |= FLAG_EMU_FWDEL_DOWN;
 389                }
 390                break;
 391#endif /* CONFIG_PPC_PMAC */
 392        }
 393
 394        key = adbhid[id]->keycode[keycode];
 395        if (key) {
 396                input_report_key(adbhid[id]->input, key, !up_flag);
 397                input_sync(adbhid[id]->input);
 398        } else
 399                printk(KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n", keycode,
 400                       up_flag ? "released" : "pressed");
 401
 402}
 403
 404static void
 405adbhid_mouse_input(unsigned char *data, int nb, int autopoll)
 406{
 407        int id = (data[0] >> 4) & 0x0f;
 408
 409        if (!adbhid[id]) {
 410                printk(KERN_ERR "ADB HID on ID %d not yet registered\n", id);
 411                return;
 412        }
 413
 414  /*
 415    Handler 1 -- 100cpi original Apple mouse protocol.
 416    Handler 2 -- 200cpi original Apple mouse protocol.
 417
 418    For Apple's standard one-button mouse protocol the data array will
 419    contain the following values:
 420
 421                BITS    COMMENTS
 422    data[0] = dddd 1100 ADB command: Talk, register 0, for device dddd.
 423    data[1] = bxxx xxxx First button and x-axis motion.
 424    data[2] = byyy yyyy Second button and y-axis motion.
 425
 426    Handler 4 -- Apple Extended mouse protocol.
 427
 428    For Apple's 3-button mouse protocol the data array will contain the
 429    following values:
 430
 431                BITS    COMMENTS
 432    data[0] = dddd 1100 ADB command: Talk, register 0, for device dddd.
 433    data[1] = bxxx xxxx Left button and x-axis motion.
 434    data[2] = byyy yyyy Second button and y-axis motion.
 435    data[3] = byyy bxxx Third button and fourth button.  Y is additional
 436              high bits of y-axis motion.  XY is additional
 437              high bits of x-axis motion.
 438
 439    MacAlly 2-button mouse protocol.
 440
 441    For MacAlly 2-button mouse protocol the data array will contain the
 442    following values:
 443
 444                BITS    COMMENTS
 445    data[0] = dddd 1100 ADB command: Talk, register 0, for device dddd.
 446    data[1] = bxxx xxxx Left button and x-axis motion.
 447    data[2] = byyy yyyy Right button and y-axis motion.
 448    data[3] = ???? ???? unknown
 449    data[4] = ???? ???? unknown
 450
 451  */
 452
 453        /* If it's a trackpad, we alias the second button to the first.
 454           NOTE: Apple send>  40" class="line"" naDB_KEY_POWER;
 445 446 447hid.c#L452" id="L452" class="line" name="L452"> 448keycode) {
id]->input);
 359  4                     if 4 360  4                        4    <4 href="+code=ahid"sref">ADB_KEY_DEL:
MOUSEsh/aCKPA="drivers/macintoshMOUSEsh/aCKPA=c#L382" id="L382" class="line" name="L382">4361  4                     els4
[0] >> 4) & 0x0f;
[0] >> 4) & 0x0f;
 362  4                        4    <4 href="+code=ahid" claa>[0] >> 4) & 0x0f;
4363  4             } else if (4a hre4="+code=ahid" class="s.c#L391" id="L391" class="line" name="L391">4364  4                     ADB_KEY_DEL:
MOUSEsMICROSPE) {
4345[0] >> 4) & 0x0f;
 346[0] >> 4) & 0x0f;
 347[0] >> 4) & 0x0f;
 368  4     case  359  4             /* Keep track of t.c#L391" id="L391" class="line" name="L391">4370  4             if (ADB_KEY_DEL:
MOUSEsh/aCKBALLPRs="string">">:
MOUSEsh/aCKBALLPRsc#L382" id="L382" class="line" name="L382">4371  4                     [0] >> 4) & 0x0f;
 372  4                     /* Emulate Fn+deledbhid.//a>[0] >> 4) & 0x0f;
 373  4                     if 4[0] >> 4) & 0x0f;
 374  4                        4    <4 href="+code=ahid" claa>[0] >> 4) & 0x0f;
[0] >> 4) & 0x0f;
 375  4                        4    <4 href="+code=keycode" .c#L391" id="L391" class="line" name="L391">4346ADB_KEY_DEL:
MOUSEsMS_A3="string">">:
MOUSEsMS_A3c#L382" id="L382" class="line" name="L382">4347[0] >> 4) & 0x0f;
[0] >> 4) & 0x0f;
 378  4             } else
[0] >> 4) & 0x0f;
 359  4                     [0] >> 4) & 0x0f;
 380  4             break;
4381  4     case ADB_KEY_DEL:
MOUSEsMACALLY2="string">">:
MOUSEsMACALLY2c#L382" id="L382" class="line" name="L382">4382  4             /* Emulate Fn+delet>[0] >> 4) & 0x0f;
4383  4             if (ahid[ 384  4                     4375  4                     if 443464387  4                     els4
 388  4                        4    <4 href="+code=a>adbhid[id]->input, key, !  !(/a>[0] >> 4) & 0x0f;
 389  4             }
(adbhid[id]->input, key, !!(/a>[0] >> 4) & 0x0f;
 390  4             break;
 391#e4dif ) {
id]->input);
ADB_KEY_FWDEL 392  4     }
/* Emulate Fn+delet>[0] >> ort_key(adbhid[id]->input, key, ! !(/a>[0] >> 4) & 0x0f;
 383  4 href="drivers/macintosh4adbhi4.c#L394" id="L394" class="line" name="L394">4394  4     key = id]->input, key, !4375  4     if ([0] >> 4) & 0x0f;
 346id]->input, key, !4387  4             class="sr(/a>[0] >> 4) & 0x0f;
[0] >> 4) & 0x0f;
 388  4     } else
 399  4             adbhid[id]->input);
5400  5                    5401
<5 href="drivers/macintosh5adbhi5.c#L402" id="L402" class="line" name="L402">5402}
5a href="drivers/macintos5/adbh5d.c#L4dbhid.c#L405" id="L405" class="line" name="L405">5403
<5 href="drivers/macintosh5adbhi5.c#L40id[(unsigned char *(un>adbhs="sref">data, int nb, int autopoll)
5404st5tic void
5405key<> = (data[0] >> 4) & 0x0f;
5406{
5a href="drivers/macintos5/adbh5d.c#L48" id="L408" class="line" name="L408">5476{
5a            id[id]) {
5408
<5 href="drivers/macintosh5adbhi50vers/macintosh/adbhida>[0] >> "+code=KERN_ERR" class="sref">KERN_ERR "ADB HID on ID %d not yet registered\n", id);
5409  5     if (!5410  5             5411  5             return;
5412  5     }
keycode) {
id]->input);
5413
<5 href="drivers/macintosh5adbhi51ahid" class="default82" id="L382" class="line" name="L382">5414  5span class="comment">/*<5span>51sref">keysref"c#02PBook 3400 needs remapping Adjudbhble;5415    H5ndler51href="+code=key10" id="L410" class="line" name="L410">5406{
5an class="comment">    H5ndler51macintosh/adbhid.c#L3<> = ([0] >> 4) & 0x0f;
5417
<5 href="drivers/macintosh5adbhi5.c#L418" id="L418" class="line" name="L418">5418    F5r App51vers/macintosh/adbhidref">keycode) {
5409  5an class="comment">    c5ntain51ode=ahid" class="srefsref"c#0:/adbhidaok 3400 needs remapping microphonh/hid.c#L452" id="L452" class="line" name="L452">5420
<5 href="drivers/macintosh5adbhi52href="+code=ahid" class="sreft>[0] >> ort_key(adbhid[id]->input, key, !, !5421     5     52ode=ahid" class="sref">ahid5422    d5ta[0]52c#L453" id="L453" class="line" name="L453">5423    d5ta[1]52ahid" class="sref">ahsref"c#1:/adbhidaok 3400 needs remapping muadbhid.c#L383" id="L383" class="line" name="L383">5424    d5ta[2]52ode=keycode" class="sref">keycode = (adbhid[id]->input, key, !, !54155406{
5an class="comment">    H5ndler52.c#L48" id="L408" class="line" name="L408">5427
<5 href="drivers/macintosh5adbhi52t_sync" class="sref">sref"c#2:/adbhidaok 3400 needs remapping volumeaincrosh/bhid.c#L383" id="L383" class="line" name="L383">5418    F5r App52ode=keycode" class="sref">keycode = (adbhid[id]->input, key, !;
ey, !5409  5an class="comment">    f5llowi52ode=ahid" class="sref">ahid5430
<5 href="drivers/macintosh5adbhi5.c#L431" id="L431" class="line" name="L431">5431     5     53ode=ahid" class="srefsref"c#3:/adbhidaok 3400 needs remapping volumeaincrosh/bhid.c#L383" id="L383" class="line" name="L383">5432    d5ta[0]53="comment">/* Emulate Fn+deletode = (adbhid[id]->input, key, !, !5433    d5ta[1]53="+code=ahid" class="sref">ah.c#L381" id="L381" class="line" name="L381">5424    d5ta[2]5= byyy1" id="L381" class="line" name="L381">5415    d5ta[3]53href="+code=keycode" default82" id="L382" class="line" name="L382">5436     5     53href="+code=ahid" class="srefa>[0] >> "+code=KERN_ERR" class="sref">KERN_ERR "Unhandled ADB key (scancode %#02x) %s.\n"_MISC evmap>, , , , id)2" id="L382" class="line" name="L382">5427
<5an class="comment">     5     53t_sync" class="sref">class="sr="srefa>[0] >> 4) & 0x0f;
5418key.c#L381" id="L381" class="line" name="L381">5409  5an class="comment">    M5cAlly53macintosh/adbhid.c#L390" id="L390" class="line" name="L390">5440
<5 href="drivers/macintosh5adbhi54href="+code=ahi90" id="L390" class="line" name="L390">5431    F5r Mac54ode=ahid" class.c#L381" id="L381" class="line" name="L381">5442    f5llowi54c#L453" id="L453" class="line" name="L453">5443
<5 href="drivers/macintosh5adbhi54="+code=ahid"sref"c#1fPBook 3400 needs remapping Powerbooknal5444     5     54ode=keycode" cl10" id="L410" class="line" name="L410">5445    d5ta[0]54href="+code=keycode" <> = ([0] >> 4) & 0x0f;
5446    d5ta[1]54.c#L48" id="L408" class="line" name="L408">5447    d5ta[2]54drivers/macintosh/adbadrivers/macintosh/adbhid.c#L415" id="L415" class="line" name="L415">5448    d5ta[3]5= ???? ???? unknown
5409  5an class="comment">    d5ta[4]5= ???? ???? unknown

5450
<5 href="drivers/macintosh5adbhi5.c#L45 ???? unknown
5451  */<5span>55c#L402" id="L402" class="line" name="L402">5452
<5 href="drivers/macintosh5adbhi55="comment">/* Emulateref">keycode) {
5453  5     /* 55ahid" class="sref">ahsref"c#8:/adbhidaok 3400 needs remapping muadbhid.c#L383" id="L383" class="line" name="L383">5454     5     55ode=keycode" class="sref">keycode = (adbhid[id]->input, key, !, !544554465447sref"c#7:/adbhidaok 3400 needs remapping volumeaincrosh/bhid.c#L383" id="L383" class="line" name="L383">5448keycode = (adbhid[id]->input, key, !;
ey, !5359  5                     if 5ahid5360  5                        5    <56c#L431" id="L431" class="line" name="L431">5361  5                     els5
5362  5                        5    <5 href="+code=ahid" claref">keycode = (adbhid[id]->input, key, !, !5363  5             } else if (5a hre5="+code=ahid" class="s">ahid535453455346keycode = (adbhid[id]->input, key, !, !5347ahid53485359  5             /* Keep track of tsref"c#a:/adbhidaok 3400 needs remapping br hrenessaincrosh/bhid.c#L383" id="L383" class="line" name="L383">5370  5             if (, !5371  5                     5362  5                     /* Emulate Fn+deleref">keycode = adbh411" id="L411" class="line" name="L411">5373  5                     if 55354keycode = (adbhid[id]->input, key, !;
ey, !5375  5                        5    <5 href="+code=keycode" ">ahid534653475378  5             } else
5359  5                     5380  5             break;
keycode = adbh411" id="L411" class="line" name="L411">5381  5     case 5382  5             /* Emulate Fn+deleref">keycode = (adbhid[id]->input, key, !, !5383  5             if (ah">ahid5384  5                     5375  5                     if 5kehid.c#L383" id="L383" class="line" name="L383">5346keycode = (adbhid[id]->input, key, !, !5347ahid5388  5                        5    <58c#L439" id="L439" class="line" name="L439">5389  5             }
/* Keep track of tsref"c#d:/adbhidaok 3400 needs remapping 5390  5             break;
adbhid[id]->input, key, !, !5391#e5dif ahid5392  5     }
5383  5 href="drivers/macintosh5adbhi59ahid" class="sref">ahsref"c#e:/adbhidaok 3400 needs remapping 5394  5     keycode = (adbhid[id]->input, key, !;
ey, !5375  5     if (53465387  5             sref"c#f82" id="L382" class="line" name="L382">5388  5     } else
keyref">keycode) {
5399  5             6400  6                    6410  6 if ahid6402}
6a href="drivers/macintos6/adbh60="comment">/* Emulate Fn+deleref">keycode = (adbhid[id]->input, key, !, !6403
<6 href="drivers/macintosh6adbhi60ahid" class="sref">ah">ahid6404st6tic void
64056465keysref"c#ff82" id="L382" class="line" name="L382">6475class="sr="sref/aok 3400 needs remapping 6408
<6 href="drivers/macintosh6adbhi60vers/macintosh/adbhid">ahid6498
<6             6410  6             6411  6             return;
ahid = KERN_ERR "Unhandled ADB key (scancode %#02x) %s.\n"_MISC evmap>, , , , id)2" id="L382" class="line" name="L382">6412  6     }
/* Emulate Fn+deleref">key///////aode = 6413
<6 href="drivers/macintosh6adbhi61ahid" class="sref">ah">ahid6414  6span class="comment">/*<6span>61href="+code=ahid" claref">key90" id="L390" class="line" name="L390">6415    H6ndler61href="+code=keyahid6465    H6ndler61macintosh/adbhid.c#L3default82" id="L382" class="line" name="L382">6475class="saode = KERN_ERR "Unhandled ADB key (scancode %#02x) %s.\n"_MISC evmap>, , , , id)2" id="L382" class="line" name="L382">6408
<6an class="comment">    F6r App61vers/macintosh/adbhid"sref">class="saode = 6498
<6an class="comment">    c6ntain61ode=ahid" class="sref////////.c#L381" id="L381" class="line" name="L381">6420
<6 href="drivers/macintosh6adbhi62href="+code=ahid" cla90" id="L390" class="line" name="L390">6421     6     62ode=ahid" class90" id="L390" class="line" name="L390">6412  6an class="comment">    d6ta[0]62="comment">/* E.c#L381" id="L381" class="line" name="L381">6413
<6an class="comment">    d6ta[1]62ahid" class="90" id="L390" class="line" name="L390">6414  6an class="comment">    d6ta[2]62 byyy1" id="L381" class="line" name="L381">6415 = adbhid[id]->input);
6406{
6an class="comment">    H6ndler62.c#L490" id="L390" class="line" name="L390">64756418    F6r App62ode=kdbhid.ce &ucautopoll)
_reqdbhtd ADB opoll)
6498
<6an class="comment">    f6llowi62ode=adbhid.c<> = (6430
<6 href="drivers/macintosh6adbhi6.c#L43dbhid.c<> = (6431     6     63ode=adbhid.c<> = (6412  6an class="comment">    d6ta[0]632de=adbhid.c<> = (6413
<6an class="comment">    d6ta[1]63="+codbhid.c<> = (6414  6an class="comment">    d6ta[2]6= byyydbhid.c (adbhid[6415    d6ta[3]63href=8" id="L398" class="line" name="L398">6406{
6an class="comment">     6     63href=dbhid.c#L40= (adbhe &ucautopoll)
_reqdbhtd ADB*topoll)
6427
<6an class="comment">     6     63t_syn10" id="L410" class="line" name="L410">6418 = (, !6498
<6an class="comment">    M6cAlly63macintosh/adbs="sref">long>, !6440
<6 href="drivers/macintosh6adbhi64c#L431" id="L431" class="line" name="L431">6431    F6r Mac64ode=ahid" cla, !, !6442    f6llowi64c#L453" id="L453" class="line" name="L453">6443
<6 href="drivers/macintosh6adbhi64="+code=ahid") {
ADB_KEY_FWDEpC_PM37_\n&_ende=input" class=pC_PM37_\n&_endd AD4410" id="L410" class="line" name="L410">6444     6     64ode=keycode" class="saode = 6445    d6ta[0]64href="+code=keycode"  ( = 6446    d6ta[1]64macintosh/adbhid.c#L3 ( = 6447    d6ta[2]64drivers/macintosh/adba {
6418    d6ta[3]64vers/macintosh/adbhida>[0] >> "C_PM37_\n&_dbhrt=id" class="srepC_PM37_\n&_dbhrtd AD n./a>[0] >> "C_PM37_\n&_dbhrt=id" class="srepC_PM37_\n&_dbhrtd AD dlt; 16) ?.a>[0] >> "C_PM37_\n&_dbhrt=id" class="srepC_PM37_\n&_dbhrtd AD : 098" id="L398" class="line" name="L398">6498
<6an class="comment">    d6ta[4]64ode=ahid" class="srefa>[0] >> pC_PM37;id" class="srepC_PM37d ADe=  (6450
<6 href="drivers/macintosh6adbhi65tk" class="sr2 else8" id="L398" class="line" name="L398">6431  */<6span>65ode=ahid" class="sref (6452
<6 href="drivers/macintosh6adbhi65="comment">/*, !, !6453  6     /* 65="+code=ahid") {
6454     6     65ode=keycode" class="stopoll)
_reqdbhtd ADhdbhidid[adb, 0a>3)2" id="L382" class="line" name="L382">6445)
adbhid[, !644664476448adbhs="sref">data< (autopoll)
6498
<6                     if 66360  6                        6    <66tk" class="srs="sref">long>, !6361  6                     els6
6362  6                        6    <66="comment">/*, !, !6363  6             } else if (6a hre66="+code=ahid"hid[63546345adbhdbhidid[, !6346_reqdbhtd ADhdbhidid[adb, 0a>3)2" id="L382" class="line" name="L382">6347ahid)
adbhid[, !6359  6             /* Keep tr2 else410" id="L410" class="line" name="L410">6370  6             if (hhid[ = 6371  6                     6362  6                     /* Emulate Fn+dele) {
6373  6                     if 6ah">ahid[0] >> "C_PM37_\n&_ende=input" class=pC_PM37_\n&_endd AD dlt; 16) ?.a>[0] >> "C_PM37_\n&_ende=input" class=pC_PM37_\n&_endd AD : 098" id="L398" class="line" name="L398">63546375  6                        6    <6 href="+code=keycode"  ( = 63466347, !6378  6             } else
6359  6                     6380  6             break;
6381  6     case 6362  6             /* ???? unknown
6373  6             if (
6384  6                     autopoll)
"L3_kb&_evmap>adbhe &ucautopoll)
)
">autopoll)
">autopoll)
autopoll)
6375  6                     if 66346)
id]B*topoll)
id]B=  (adbhid[data< (  6                        6    <68c#L439" id="L439" class="line" name="L439">6389  6             }
/* Keep trref">keycode) {
6390  6             break;
) {
6391#e6dif ) {
6362  6     }
/* Emulate Fn+deleycode) {
6373  6 href="drivers/macintosh6adbhi69ahid" class="sref">ah Fn+deleycode) {
  6     adbh ()
id]input);
  6     if (63466387  6             6388  6     } else
6399  6             7400  7                    7410  7 if 7420  7     }
)
"L3_kb&_capsloce_remember>adbh#L4049" id="L439" class="line" name="L439">7403
<7 href="drivers/macintosh7adbhi70ahid"10" id="L410" class="line" name="L410">7404st7tic void
)
id]B*topoll)
7405autopoll)
746574757408
<7 href="drivers/macintosh7adbhi70vers/macintosh/adbhidtopoll)
id]->7498
<7             7410  7             ) {
)
7411  7             return;
ahid) {
7420  7     }
/* Emulate Fn+deleref">key) {
)
7413
<7 href="drivers/macintosh7adbhi71ahid" class="90" id="L390" class="line" name="L390">7414  7span class="comment">/*<7span>71href=90" id="L390" class="line" name="L390">7405    H7ndler71href=8" id="L398" class="line" name="L398">7465    H7ndler71href=dbhid.cine8" id="L398" class="line" name="L398">7475_message_7;s.\nr>adbhe &ucautopoll)
]B*topoll)
long>, !7408
<7an class="comment">    F7r App71vers/10" id="L410" class="line" name="L410">7498
<7an class="comment">    c7ntain71t">/* Keep trref">keycode) {
7420
<7 href="drivers/macintosh7adbhi72href="+code=asref"code) {
7421     7     72ode=ahid" clasref"code) {
;
7420  7an class="comment">    d7ta[0]72="comment">/* Ef">key)ok 3400 needs remapping Stop a hrrepeat timer. Autopoll i
au*id.c#L383" id="L383" class="line" name="L383">7413
<7an class="comment">    d7ta[1]72ahid" class="sref">ah10" id="L410" class="line" name="L410">7414  7an class="comment">    d7ta[2]72href="+code=ahid" claref">key">autopoll)
74157406{
7an class="comment">    H7ndler72macintosh/adbhid.c#L3ref">keyref">key"/a>) {
id]->7475class="sr="sref/ Ef">key)(id]->);
    F7r App72vers/macintosh/adbhid"sref">c90" id="L390" class="line" name="L390">7498
<7an class="comment">    f7llowi72ode=ahid" class="sref90" id="L390" class="line" name="L390">7430
<7 href="drivers/macintosh7adbhi73c#L431" id="L431" class="line" name="L431">7431     7     73ode=ahid" class="sref ok 3400 needs remapping Stop pC_PM37 \n&qreqdbhtsu*id.c#L383" id="L383" class="line" name="L383">7412  7an class="comment">    d7ta[0]73="comment">/* Ef">keywhilea>) {
7413
<7an class="comment">    d7ta[1]73ahid" class="sref">ah">ahid_poll=id" class="sref">_poll>adbh)98" id="L398" class="line" name="L398"h7414  7an class="comment">    d7ta[2]73 byyy1" id="L381" class="line" name="L381">7415    d7ta[3]73href="+code=keycode"  ok 3400 needs remapping Afterqresume, ;s.y"/aa hrcapsloce LED i
ac#L383" id="L383" class="line" name="L383">7406{
7an class="comment">     7     73href= ???? unknown
ac#L383" id="L383" class="line" name="L383">7475     7     73t_syn ???? unknown
ac#L383" id="L383" class="line" name="L383">74187498
<7an class="comment">    M7cAlly73macin ???? unknown
7440
<7 href="drivers/macintosh7adbhi74href="+code=ahid" cla) {
7431    F7r Mac74ode=ahid" class="srefffffffff ("L3_kb&_capsloce_remember>adbh)98" id="L398" class="line" name="L398"h7442    f7llowi74c#L453" id="L453" class="line" name="L453">7443
<7 href="drivers/macintosh7adbhi74ahid" class="sref">ah.c#L381" id="L381" class="line" name="L381">7444     7     74 byyy1" id="L381" class="line" name="L381">7445    d7ta[0]74href="+code=ksref"code) {
7446    d7ta[1]74macintosh/adbhid.c#L3 ("L3_probaamp; 0x0f;
"L3_proba>adbh)98" id="L398" class="line" name="L398"h7475    d7ta[2]74drivers/macintosh/adb.c#L381" id="L381" class="line" name="L381">7418    d7ta[3]74vers/macintos90" id="L390" class="line" name="L390">7498
<7an class="comment">    d7ta[4]74ode=ahid" clad.c#L4  (]98" id="L398" class="line" name="L398">7450
<7 href="drivers/macintosh7adbhi75tk" c90" id="L390" class="line" name="L390">7431  */<7span>75c#L402" id="L402" class="line" name="L402">7452
<7 href="drivers/macintosh7adbhi752de=adbhid.c<> 2" id="L402" class="line" name="L402">7443
<7     /* 75="+co ("L3_id" clasgister=id" class="sref">"L3_id" clasgister>adbh">autopoll)
autopoll)
autopoll)
7444     7     75ode=keycode" class="sd" cla<>autopoll)
autopoll)
74457446)
id]B*topoll)
7447)
)
7418 = (7498
<7                     if 7 = (7360  7                        7    <76c#L431" id="L431" class="line" name="L431">7361  7                     els7
) {
id]->4410" id="L410" class="line" name="L410">7362  7                        7    <76="comment">/* Ef">key)gt;KERN_ERR id)utopoll)
  7             } else if (7a hre76ahid" class="sref">ahd.c#L4 -topoll)
734473457346id]->B=  (id]))utopoll)
7398
<7             ]98" id="L398" class="line" name="L398">7370  7             if ();
7361  7                     7362  7                     7373  7                     if 7KERN_ERR id)utopoll)
, !)
7375  7                        7    <7 href="+code=kRN_ERR 7346, !7347, !7348, !7398
<7                     , !7380  7             break;
7381  7     case adbhid[)
  7             /*, !);
  7             if ();
, !);
);
, !  7                     if 7);
);
7346);
);
[7347ass="sreass="srntd ADinput);
);
  67     7                 6    <68c#L439" id="L439" c7ass="line7 name="L439">6389  67     7      }
/* Keep t; 12) | hid[6390  67     7      break;
)
6391#e67if , !keycode) keyrrefcodode=id" class="sreidm/a>]B=  (adbheizeofhe_to_">6ux_keyrref]input);
6ux_keyrref]ode=id" class="sref">id]))utopoll)
6362  67    }7keycode) keyrrefcodo class="sreass="srntd AD4410" id="L410" class="line" name="L382">6373  67href=7drivers/macintosh6adbhi69ahid"m76ode=ahid" class="srefa>[0] >> err=id" class="sreerrd ADB= -topoll)
  67    <7 href="+code=key"6classsssssssd77href="+code=ahid" clagotoa);
  67    i7 (63466387  67     79="comment">    d6ta[2]64drivers/maci" class=");
KERN_ERR 6388  67    }79                6    <68c#L439" id="L439" c7ass="line7 name="L398">6399  67     79     KERN_ERR keycode) keyrrefcodosntERN_ERR" clas\n&s_to_">6ux_keyrref]input);
6ux_keyrref]ode=, " classalloc>adbheizeofhe_to_">6ux_keyrref]input);
6ux_keyrref]ode=iclass="sreGFP_n clELref")98" id="L398" c8ass="line8 name="L390">7400  78     8             7410  78if key)gt;7420  78    }80a href="drivers/6acinf="6river68t">/* Keep t_idref"eftopoll)
7403
<78href=80rivers/macintosh6adbhnfault_mauot_MSG_POST_RESEhref=82" id="L382" c8ass="line8 name="L410">7404st78ic vo80href="+code=key"6classsssssssC69ode=ahid" cl* Ef">key)gt;  68ref="80rivers/macintosh7adbhi72href=reass="srntd ADinput);
);
) {
=fail=id" class="srefail/a>]98" id="L398" c8ass="line8 name="L398">7465    H7ndler72macin]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L408">74757408
<78href=8drivers/macintosh7adbha h6e clN:ha h6e cl2:ha h6e cl3:ha h6e cl6:ha h6e cl8mauot_MSG_POST_RESEhref=82" id="L382" c8a9s="line8 name="L398">6399  68     80     7410  78     8      7411  78     8      return;
key)gt;7420  78    }8]input  7         class7"comm78="comment"refffffffOf".);
7413
<78href=81rivers/macintosh6adbhi69ahid"]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L390">7414  78pan c81                7    <77 byyy1" id="L381" c8ass="line8 name="L390">74057465    H7ndlea h6e c1N:ha h6e c14:ha h6e c19:ha h6e c1D:ha h6e cC1mauot_MSG_POST_RESEhref=82" id="L382" c8ass="line8 name="L398">7475    d6ta[2a h6e cC4:ha h6e cC7mauot_MSG_POST_RESEhref=82" id="L382" c8ass="line8 name="L439">7408
<78n cla81="comment">    F7r App72vers/C69ode=ahid" cl* Ef">key)gt;7498
<78n cla81     );
);
7420
<78href=82     , !keycode) keyrrefcodo[10"+coe=input" class="/a>]]98" id="L398" c8ass="line8 name="L382">7421, !keycode) keyrrefcodo[10"s=KERN_ERR" classhysref"on>, !keycode) keyrrefcodo[50"+coe=input" class="/a>]]98" id="L398" c8ass="line8 name="L382">7420  78n cla8s="comment">    d7ta[0"71ode=aC69ode=ahid" clysref"on>, !keycode) keyrrefcodo[50"s=KERN_ERR" classhode" <> = (7413
<78n cla8s="comment">    d7ta[111111111]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L410">7414  78n cla82                7    <77 byyy1" id="L381" c8ass="line8 name="L398">74157406{
78n cla8s="comment">    H7ndlea h6e c1E:ha h6e cC2:ha h6e cC5:ha h6e cC8:ha h6e cC9mauot_MSG_POST_RESEhref=82" id="L382" c8ass="line8 name="L439">7475key)gt;    F7r App72vers/reass="srntd ADinput);
);
7498
<78n cla8s="comment">    f7llow11111111]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L390">7430
<78href=83     7431  */<7span>75c#L402" id="L402" c8ass="line8 name="L383">7412  78n cla8s="comment">    d7ta[0"+code=keycode" class="s/mach (  */<7span>75c#L402" id="L402" c8ass="line8 name="L383">7413
<78n cla8s="comment">    d7ta[1]73ahid"els7
, !keycode) keyrrefcodo[t" class="/a>] dlt; 169utopoll)
"+coe=input" class="/a>]]49" id="L439" c8ass="line8 name="L398"h7414  78n cla83href="+code=key"6classsssssssp72vers/reass="srntd AD) &aeleycode) {
KERN_ERR keycode) keyrrefcodo[t" class="/a>] dlt; 169utopoll)
"a 02x/ass=""sref">nput);
74157406{
78n cla83="comment">    d7ta[1]74macintosh/ad>nput);
) {
)
) {
) {
7475) {
) {
7418nput);
) {
7498
<78n cla83     ) {
) {
7440
<78href=8drivers/macintosh7adbh]74macintosh/ad>nput);
7431    F7r Ma02x/ass=""sref">nput);
) {
ass=lass="sreGFP_n clELref")98" id="L398" c8ass="line8 name="L398"h7442/>nput);
adbheizeo"srff">KERN_ERR keycode) keyrrefcodo[0]class="sreGFP_n clELref")98" id="L398" c8ass="line8 name="L453">7443
<78href=8drivers/macintosh7adbhi74ahid" class="sref">ah.c#L381" id="L381" c8ass="line8 name="L381">7444     7     74 byyy1" id="L381" c8ass="line8 name="L381">7445    d7ta[0]74href="+code=ksOUSE) {
7446    d7ta[1]74macintosh/ad" class=");
KERN_ERR 7418nput);
) {
)
) {
7498
<78n cla84     nput);
) {
7450
<78href=85     ) {
7431    F7r Ma02x/ass=""sref">nput);
) {
) {
7452
<78href=85                7    i74ahid" class="sref">ah.c#L381" id="L381" c8ass="line8 name="L402">7443
<78    <8pan cld" class="sref">ah.c#L381" id="L381" c8ass="line8 name="L402">7444    d7ta[0]74href="+code=ksISC) {
7445/* Keep t_idref"eftopoll)
7446    H7ndlea h6e cl2:h]73href="+code=keycode"  odjustableTkeyboard button x0f;
7447KERN_ERR 7418    F7r App72vers/reass="srntd ADinput);
) {
)
7498
<78     85     ) {
) {
7360  78     86     )
nput);
7361  78     86     return;
) {
nput);
7362  78     8                 7    "71ode=aC69ode=ahid" cl) &aeleycode) {
) {
"on_VOLUMEUP=n cs=K2x/ass=""sref">nput);
  78     8      } else if (7a hr"71ode=aC69ode=ahid" cl) &aeleycode) {
) {
=n cs=K2x/ass=""sref">nput);
7344ah.c#L381" id="L381" c8ass="line8 name="L390">73457346    H7ndler72macinC69ode=ahid" cl" class=");
KERN_ERR );
) {
)
    F7r App72vers/i72t_synC69ode=ahid" clBIT_MASKycode) {
) {
7398
<78     8      ) {
nput);
7370  78     8      if () {
) {
"on_VOLUMEUP=n cs=K2x/ass=""sref">nput);
7361  78     87     return;
) {
) {
=n cs=K2x/ass=""sref">nput);
7362  78     87                7    "71ode=aC69ode=ahid" cl) &aeleycode) {
) {
"on_BRIGHLNESSUP=n cs=K2x/ass=""sref">nput);
7373  78     87     } else if (7a hr"71ode=aC69ode=ahid" cl) &aeleycode) {
) {
=n cs=K2x/ass=""sref">nput);
) {
)
nput);
7375  78     87rivers/macintosh7adbhi72href=reass="srntd AD) &aeleycode) {
nput);
7346    H7ndler72macinC69ode=ahid" cl" &aeleycode) {
nput);
7347) {
) {
=n cs=K2x/ass=""sref">nput);
7348    F7r App72vers/reass="srntd AD" &aeleycode) {
) {
"on_KBDILLUMUP=n cs=K2x/ass=""sref">nput);
7398
<78     87="comment">    f7llow11111111]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L398">7380  78     88     7381  78    c88     return;
, !  78     88                7    "71ode=a]74drivers/macintosh/adb.c#L381" id="L381" c8ass="line8 name="L398"h7373  78     88     } else if (7a hr]73href="+code=keycode"  else fall throughbe sremaeP afterqresume.u*id.c#L383" id="L383" c8ass="line8 name="L398"h7354     7     74 byyy1" id="L381" c8ass="line8 name="L398"h7375  78     8              nfault_mauot_MSG_POST_RESEhref=82" id="L382" c8ass="line8 name="L398">7346    d7ta[1]74macintosh/ad* Ef">key)gt;7347    d6ta[2]64drivers/maciass="srefa>[0] >> err=id" class="sreerrd DEVef"code) {
  68     88="comment">    F7r Apd77href="+code=ahid" clagotoa);
6389  68     8      }
6390  68     89            6391#e68if );
, !keycode) keyrrefcodol=id" class="srefail/a>]98" id="L398" c8ass="line8 name="L382">6362  68    }89             6373  68href=89     if (]B|| hid[  68    <8 href="+code=kels7
[0] >> eca 7ref="7code=ahid" cla90" id="L390" c8ass="line8 name="L398"h6375  68    i8 ();
63466387  68     89="comment">  els7
[[6388  68    }89rivers/macintosh7adbhi73href="+code=keycode"  HACK WARNING!! This should d7 away as soon there is hreutilitysremaeP afterqresume.u*id.c#L383" id="L383" c8ass="line8 name="L398">6399  68     89     i73href="+code=keycodes/macintosh7adbh *bcodcontrol that0"+cod" clTx0f;
7400  79     9      i73href="+code=keycodes/macintosh7adbh * sremaeP afterqresume.u*id.c#L383" id="L383" c9ass="line9 name="L431">7410  79if nput);
6362  69    }90a href="drivers/6acinC69ode=ahid" cl>nput);
6373  69href=90rivers/macint7404st79ic vo90="comment">     7     74 byyy1" id="L381" c9a5s="line9 name="L398"h6375  69ref="90rivers/macinte76ahidERR" clas\n&sde=ke|.c#10098" id="L398" c9ass="line9 name="L398">74657475);
nput]B|| hid[7408
<79href=90e , !6399  69     90     keycode) kfre rf=id" class="sress="srff">KERN_ERR keycode) keyrrefcodo l=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L381">7410  79     9      keycode) kfre rf=id" class="sress="srff">KERN_ERR 7411  79     91             7420  79    }91     KERN_ERRid]->7413
<79href=91rivers/macinte76ahid
[0] >> el=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L390">7414  79pan c91     74057465KERN_ERRass="sune 37;#02rf=idef=nC69ode=ahid" cl>id]->74757408
<79n cla91     } else
KERN_ERRid]->7498
<79n cla91             keycode) kfre rf=id" class="sress=d="L39ff">KERN_ERRid]->keycode) keyrrefcodo l=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L410">7420
<79href=92     break;
keycode) kfre rf=id" class="sress=d="L39ff">KERN_ERRid]->7421KERN_ERRid]->7420  79n cla9s="com7413
<79n cla92an cld" class="sref">ah.c#L381" id="L381" c9ass="line9 name="L410">7414  79n cla92                7    <77 byyy1" id="L381" c9ass="line9 name="L398">74157406{
79n cla9s="comd" class="srefid]>ass="sree 37;#02ff">KERN_ERRass="sree 37;#02rf=idef=nC69ode=ahid" cl>id]->, !)
7475, !key)gt;7498
<79n cla9s="comment">  ode7ERN_ERR" classhd="L39ff">KERN_ERRid]->7430
<79href=93     KERN_ERRid]->);
);
7431[[)
7412  79n cla9s="comment">    d7ta[0href="+code7ADB_K78ode=d="L39>ass="sune 37;#02ff">KERN_ERRass="sune 37;#02rf=idC69ode=ahid" cl>id]->7413
<79n cla9s="comment">    d7ta[1]73ahid"d" class="srefid]>ass="sre37;#02ff">KERN_ERRass="sre37;#02rf=idC69ode=ahid" cl>id]->, !)
  79n cla93href="+code=key"6classsssssssp72vers/d7ta[1]73ahid"d" class="sreficurn>, !key)gt;74157406{
79n cla93="comment">  } elsea 7ref="7code=ahid" cla90" id="L390" c9ass="line9 name="L383">7475KERN_ERRass="sre37;#02rf=idC69ode=ahid" cl>id]->, !)
7418key)gt;7498
<79n cla93     id]->7440
<79href=9driver7431  */<7span>75c#L402" id="L402" c9ass="line9 name="L398"h7442  */<7span>75c#L402" id="L402" c9ass="line9 name="L453">7443
<79href=9driverd" class="srefid]>ass="sdevcleanup);
]>ass="sdevcleanuprf=idC69ode=ahid" clu name="L398ref=LEu1     d
[0] >x7;#f="+ca 7ref="7code=ahid" cla90" id="L390" c9ass="line9 name="L381">74447445  ef=nC69ode=ahid" cl>d]->7446  forde=keycode" class="s/mach (  */<7span>75c#L402" id="L402" c9ass="line9 name="L398"h7475KERN_ERRlt; 169utopoll)
] && !7
[0] >x7;#f="+&(1t" classC69ode=ahid" cl>lt; 169utopoll)
)) ment">  */<7span>75c#L402" id="L402" c9ass="line9 name="L381">7418KERN_ERRass="sune 37;#02rf=idC69ode=ahid" cl>lt; 169utopoll)
)l=id" class="srefail/a>]98" id="L398" c9a9s="line9 name="L390">7498
<79n cla94     7450
<79href=95            7431  */<7span>75c#L402" id="L402" c9ass="line9 name="L402">7452
<79href=95     d" class="srefid]>f=pb ">keycode) d]>f=pb rf=idvoid ment">  */<7span>75c#L402" id="L402" c9ass="line9 name="L402">7443
<79    <9pan cllass="sreass="srntd AD4410" id="L410" c9ass="line9 name="L402">7444  struc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L383">7445  ef=nC69ode=ahid" cl>d]->, !)
7446  C69ode=ahid" clu name="L398ref=LEu1     d
74477418KERN_ERR);
]input);
]>muse_" a>]ia>)
)l=id" class="srefail/a>]98" id="L398" c9a9s="line9 name="L398">7498
<79     95             KERN_ERR[);
]input);
]>keyboard" a>]ia>)
)l=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L398">7360  79     96     break;
KERN_ERR);
]input);
]>buttons" a>]ia>)
)l=id" class="srefail/a>]98" id="L398" c9ass="line9 name="L431">7361  79     96="comment">  */<7span>75c#L402" id="L402" c9ass="line9 name="L410">7362  79     9              "+code=keycode" class="s/mach ();
);
  79     9      } else if (7a href=nC69ode=ahid" cl>id]->);
id]->73447345);
id]->, !)
7346    F7r ApC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7398
<79     9      id]->7370  79     97            7361  79     97     return;
7362  79     97     i73href="+code=keycodes/macintosh7adbh    clasge_ itbcodsenddseparate srefs "+coleft =in right shift,sremaeP afterqresume.u*id.c#L383" id="L383" c9ass="line9 name="L453">7373  79     97     i73href="+code=keycodes/macintosh7adbh   control, optionnkeys * sremaeP afterqresume.u*id.c#L383" id="L383" c9ass="line9 name="L398"h73547375  79     97rivers/macintosh7adbhode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->  */<7span>75c#L402" id="L402" c9ass="line9 name="L398">7346    H7ndler72macinC69ode=ahid" cl* Ef">key)gt;id]->734773487398
<79     97="comment">    f7llowode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->  */<7span>75c#L402" id="L402" c9ass="line9 name="L398">7380  79     98     key)gt;id]->7381  79    c98     return;
  79     98                7    "71ode=aC69ode=ahid" cl* Ef">key)gt;id]->  79     98an cld" class="sref">ah.c#L381" id="L381" c9ass="line9 name="L398"h7354);
id]->, !, !  79     98rivers/macintosh7adbha h7ef="d780rive 3="srefa>[0] >reg    d|=id" class="srefid]>ass="sree 37;#02ff">KERN_ERRass="sree 37;#02rf=idC69ode=ahid" cl>id]->, !)
7346    d7ta[11111111111111111111111111111111d" class="sreficurn>, !7347    69     98="coma 7ref="7code=ahid" cla90" id="L390" c9a9s="line9 name="L439">6389  69     9      }
);
);
6390  69     99     id]->);
id]->6391#e69if   */<7span>75c#L402" id="L402" c9ass="line9 name="L382">6362  69    }99a href="drivers/6acinC69ode=ahid" cld="sge_idnfo]input);
id]->, !)
6373  69href=99     } else if (7a hr] h7ef="d780rive 3="srefa>[0] >reg    d|=id" class="srefid]>ass="sree 37;#02ff">KERN_ERRass="sree 37;#02rf=idC69ode=ahid" cl>id]->, !)
  69    <99href="+code=key"6clas1111111111111111111111111111111d" class="srefiorgftopoll)
  69    i9 (63466387  69     99="comment">  i73href="+code=keycode"  Trybcods="6rivall m;
6388  69    }99riveri73href="+code=keycodes/macintoshmref =in full resolution. * sremaeP afterqresume.u*id.c#L383" id="L383" c9ass="line9 name="L398">6399  69     99     }
);
);
6399  610ass>10as    id]->);
id]->ss="sreass="srntd AD4410" id="L410" c10a1s="line10aname="L382">6391#e610ana>10a     return;
]->6362  610ana>10a             6373  610ana>10a     } else if (7a hr] h7ef="d780rivd="sge_idnfo]input);
id]->, !)
  610ana>10a                7    <77 byyy1" id="L381" c10a5s="line10aname="L398"h6375  610ana>10arivers/macintosh7adbhode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->634610a="comment">    H7ndler72macinC69ode=ahid" cl* Ef">key)gt;id]->6387  610ana>10arivers/macintosh7adbhi72t_synC69ode=ahid" clmuse_"kinid]->6388  610ana>10a="comment">    F7r Ap6399  610ana>10a="comment">    f7llowelse ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7410  710 na>10 n"comment">    H7ndler72macinC69ode=ahid" cl* Ef">key)gt;id]->7411  710 na>10      return;
]->7420  710 na>10 a href="drivers/6acin7413
<710 na>10      } else if (7a hrelse ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7414  710 na>10 href="+code=key"6classsssssssC69ode=ahid" cl* Ef">key)gt;id]->740510 rivers/macintosh7adbhi72href=reass="srntd ADmuse_"kinid]->746510 ="comment">    H7ndle747510 rivers/macintosh7adbhelse ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7408
<710 na>10 rivers/macintosh7adbhosh7adbhd" class="srefi* Ef">key)gt;id]->7498
<710 na>10      ]->7420
<710 na>10 n"comment">    H7ndle742110      return;
keycode) did]->7420  710 na>10                 7    "71ode=aC69ode=ahid" cl* Ef">key)gt;id]->7413
<710 na>10 ="comment">    d7ta[1]73ahid"d" class="srefimuse_"kinid]->7414  710 na>10 href="+code=key"6clas741510 rivers/macintosh7adbhelse ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7406{
710 na>10 ="comment">    H7ndler72macinC69ode=ahid" cl* Ef">key)gt;id]->747510 rivers/macintosh7adbhi72t_synC69ode=ahid" clmuse_"kinid]->10 ="comment">    F7r Ap7498
<710 na>10 ="comment">    f7llowelse ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7430
<710 na>10 n"comment">    H7ndler72macinC69ode=ahid" cl* Ef">key)gt;id]->743110      return;
]->7412  710 na>10 a href="drivers/6acin7413
<710 na>10      } else if (7a hrelse lass="sreass="srntd AD4410" id="L410" c1034s="line10 name="L398"h7414  710 na>10 href="+code=key"6classsssssssC69ode=ahid" cl* Ef">key)gt;id]->741510 rivers/macintosh7adbhi72href=reass="srntd ADmuse_"kinid]->7406{
710 na>10 ="comment">    H7ndle747510      741810 ="comment">    F7r Apode7dC69ode=ahid" clmuse_"kinid]->  */<7span>75c#L402" id="L402" c10 9s="line10 name="L383">7498
<710 na>10      ]->7440
<710 na>10 nivers/macintosh7adbhi72href=reass="srntd ADinit_microspeeid]->id]->743110      return;
]->10                 7    "71ode=aC69ode=ahid" clrnit_ms_a3d[id]->7443
<710 na>10      } else if (7a hr}welse ode7ERN_ERR" classhmuse_"kinid]->744410 href="+code=key"6classsssssssC73href="+code=keycode" sremaeP afterqresume.u*id.c#L383" id="L383" c10 5s="line10 name="L381">744510 5iveri73href="+code=keycodes/macintoshhhhhhhhhhhhhhh* R 37;#02x1 is usually usede"+coref="+rfemaeP afterqresume.u*id.c#L383" id="L383" c10 6s="line10 name="L382">744610 6iveri73href="+code=keycodes/macintoshhhhhhhhhhhhhhh* idycoification.  Here, we trybcodidycoifysremaeP afterqresume.u*id.c#L383" id="L383" c10 7s="line10 name="L398"h747510 7iveri73href="+code=keycodes/macintoshhhhhhhhhhhhhhh* a kn sC x0f;
741810 riveri73href="+code=keycodes/macintoshhhhhhhhhhhhhhh* init function.rfemaeP afterqresume.u*id.c#L383" id="L383" c10 9s="line10 name="L390">7498
<710 na>10      i73href="+code=keycodes/macintosh7adbh hhhhhhhh* sremaeP afterqresume.u*id.c#L383" id="L383" c105ss="line10 name="L398">7450
<710 na>10 n               7    "71ode=aC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[743110      return;
id]->7452
<710 na>10              7443
<710 na>10 ="comment">    d7ta[1]73ahid"ode7dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply_len="srefa>[0] >reply_lenlass c&&        744410 href="+code=key"6clas111111111111dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[1]odde0x9a c&&e7dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[2]odde0x21 ment">  */<7span>75c#L402" id="L402" c1055s="line10 name="L383">744510 rivers/macintosh7adbhi72href=========||e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[2]odde0x20)) class="sreass="srntd AD4410" id="L410" c1056s="line10 name="L410">744610 ="comment">    d7ta[11111111111111111reass="srntd ADmuse_"kinid]->744710 rivers/macintosh7adbhi72t_syn11111111reass="srntd ADrnit_trackballd[id]->741810 rivers/macintosh7adbhosh7adbh7498
<710 na>10      7360  710 na>10 nref="+code=key"6clas111111111111dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[1]odde0x74 c&&e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[2]odde0x70 c&&        7361  710 na>10      return;
7362  710 na>10                 7    "71ode=a11111111reass="srntd ADmuse_"kinid]->  710 na>10 ="comment">    d7ta[1]73ahid"11111111reass="srntd ADrnit_trackpaid]->id]->734410 href="+code=key"6clas11111111734510 rivers/macintosh7adbhi72href=else ode7dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply_len="srefa>[0] >reply_lenlass clas= 4 c&&        734610 ="comment">    d7ta[1111111111111dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[1]odde0x4b c&&e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[2]odde0x4d c&&        10 rivers/macintosh7adbhi72t_syn11117ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[3]odde0x4c c&&e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[4]odde0x31) class="sreass="srntd AD4410" id="L410" c1068s="line10 name="L398"h7e4810 rivers/macintosh7adbhp72vers/d7ta[1]7reass="srntd ADmuse_"kinid]->7398
<710 na>10      id]->7370  710 na>10 nref="+code=key"6clas111111117361  710 na>10      return;
7362  710 na>10                 7    "71ode=a1111dC69ode=ahid" clreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[1]odde0x4b c&&e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[2]odde0x4f c&&        7373  710 na>10 ="comment">    d7ta[1]73ahid"11117ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[3]odde0x49 c&&e7ERN_ERR" classhreq="srefa>[0] >reqf="+="de=input" clasreply="srefa>[0] >replyf="+[4]odde0x54) class="sreass="srntd AD4410" id="L410" c1074s="line10 name="L398"h735410 href="+code=key"6clas1111111111111111ode7ERN_ERR" classhd="_tryde=input"ce=ig ">keycode) did]->7375  710 na>10 rivers/macintosh7adbhi72href=================C69ode=ahid" cl* Ef">key)gt;id]->734610 ="comment">    d7ta[1111111111111111111111111reass="srntd ADmuse_"kinid]->734710 rivers/macintosh7adbhi72t_syn11111111734810 rivers/macintosh7adbhosh7adbh7398
<710 na>10      7380  710 na>10 n    key)gt;7381  710 na>10 ="comment">  */<7span>75c#L402" id="L402" c10 2s="line10 name="L398"h7362  710 na>10 a href="drivers/6acinC69ode=ahid" cld="sge_idnfo]input);
id]->, !, !  710 na>10      } else if (7a hr] h7ef="d780rive 3="srefa>[0] >reg    d|=id" class="srefid]>ass="sree 37;#02ff">KERN_ERRass="sree 37;#02rf=idC69ode=ahid" cl>id]->, !)
10 href="+code=key"6clas1111111111111111111111111111111d" class="sreficurn>, !]->  710 na>10 (734610 ="comment">  C69ode=ahid" cld="L39>ass="sdevcleanup);
]>ass="sdevcleanuprf=idC69ode=ahid" cle 3="srefa>[0] >reg    cl=id" class="srefail/a>]98" id="L398" c10 7s="line10 name="L398">734710 river  610 na>10 ="coma 7ref="7code=ahid" cla90" id="L390" c10 9s="line10 name="L439">6389  610 na>10      static void a 7ref="7code=ahid" cla90" id="L390" c109ss="line10 name="L410">6390  610 na>10 n    ieass="srntd ADrnit_trackpaid]->id]->  */<7span>75c#L402" id="L402" c1091s="line10 name="L382">6391#e610 na>10 ="comlass="sreass="srntd AD4410" id="L410" c1092s="line10 name="L382">6362  610 na>10 a href="drivestruc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c10 3s="line10 name="L382">6373  610 na>10      } else iunsigned ce=rd
KERN_ERR  610 na>10                 7    <77 byyy1" id="L381" c1095s="line10 name="L398"h6375  610 na>10 5"comment">  C69ode=ahid" cl* Ef">key)gt;634610      6387  610 na>10 7"comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[6388  610 na>10 rivers/macintosh7adbhosh7d" class="srefiPOWEREA_REG) {
id]->6399  610 na>10        */<7span>75c#L402" id="L402" c11ass="line11ass=e="L398">6399  611ass>11as    key)gt;6391#e611ana>11a     return;
elsea 7ref="7code=ahid" cla90" id="L390" c11a2s="line11aname="L382">6362  611ana>110a href="drivelass="sreass="srntd AD4410" id="L410" c11a3s="line11aname="L382">6373  611ana>11a     } else if (7C69ode=ahid" clmemcpy="srefa>[0] >memcpyrf=idC69ode=ahid" cle1_buff02ff">KERN_ERR  611ana>11a                7    <77 byyy1" id="L381" c11a5s="line11aname="L398"h6375  611ana>11arivers/macintosh7C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[634611a="comment">    H7ndled" class="srefiPOWEWRITEREG) {
id]->6387  611ana>11arivers/macintosh7adbhi72t
KERN_ERR6388  611ana>11a="comment">    F7r Api72t
KERN_ERR6399  611ana>11a="comment">    f7llowi72t
KERN_ERR7410  711 na>11 n"comment">    H7ndler72m
KERN_ERR7411  711 na>11      return;
KERN_ERR7420  711 na>11 a href="drivers/6acin"71o
KERN_ERR7413
<711 na>11      } else if (7a hrrrrr0x0d,7414  711 na>11 href="+code=key"6classsss
KERN_ERR740511 river=id" class="srefail/a>]98" id="L398" c1116s="line11 name="L398">746511 ="comment">    H7C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[747511 rivers/macintosh7adbhd" class="srefiPOWEWRITEREG) {
id]->7408
<711 na>11 rivers/macintosh7adbhosh70x99,7498
<711 na>11      7420
<711 na>11 n"comment">    H7ndler72m0x19,742111      return;
7420  711 na>11                 7    "71o0xb2,7413
<711 na>11 ="comment">    d7ta[1]73a0x8a,7414  711 na>11 href="+code=key"6clasr72m0x1b,741511 rivers/macintosh7adbhr72m0x50cl=id" class="srefail/a>]98" id="L398" c11 6s="line11 name="L410">7406{
711 na>112     747511 rivers/macintosh7C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[11 ="comment">    F7r Apd" class="srefiPOWEWRITEREG) {
id]->7498
<711 na>11 ="comment">    f7llowr Apd" class="srefir1_buff02ff">KERN_ERR7430
<711 na>11 n"comment">    H7ndler72m
KERN_ERR743111      return;
KERN_ERR7412  711 na>11 a href="drivers/6acin"71o
KERN_ERR7413
<711 na>11      } else if (7a hr"71o
KERN_ERR  711 na>11 href="+code=key"6classsss
KERN_ERR741511 rivers/macintosh7adbhi72h0x03,sC73href="+code=keycode" r1_buff02[6],* sremaeP afterqresume.u*id.c#L383" id="L383" c1136s="line11 name="L383">7406{
711 na>11 ="comment">    H7ndlessss
KERN_ERR747511      741811 ="comment">    F7i73href="+code=keycode"  Without this flush, th7498
<711 na>11      [0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[id]->7440
<711 na>11 nivers/macint743111      114             7443
<711 na>11      static void a 7ref="7code=ahid" cla90" id="L390" c1144s="line11 name="L381">744411 href=ieass="srntd ADrnit_trackballd[id]->  */<7span>75c#L402" id="L402" c11 5s="line11 name="L381">744511 5iverlass="sreass="srntd AD4410" id="L410" c11 6s="line11 name="L382">7446114="comment">  struc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c11 7s="line11 name="L398"h7475114     7418114="comment">  C69ode=ahid" cl* Ef">key)gt;7498
<711 na>11      =id" class="srefail/a>]98" id="L398" c115ss="line11 name="L398">7450
<711 na>11 n            C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[743111      return;
d" class="srefiPOWEWRITEREG) {
id]->7452
<711 na>11              7443
<711 na>11 ="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[744411 href="+code=kd" class="srefiPOWEWRITEREG) {
id]->7445115river=id" class="srefail/a>]98" id="L398" c1156s="line11 name="L410">7446115="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[74471157"comment">  C69ode=ahid" clPOWEWRITEREG) {
id]->7418115="coma 7ref="7code=ahid" cla90" id="L390" c1159s="line11 name="L398">7498
<711 na>11      [0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7360  711 na>116n            C69ode=ahid" clPOWEWRITEREG) {
id]->7361  711 na>116="comment">  */<7span>75c#L402" id="L402" c1162s="line11 name="L410">7362  711 na>11              C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[  711 na>116="comment">  C69ode=ahid" clPOWEWRITEREG) {
id]->7344116                7    <77 byyy1" id="L381" c1165s="line11 name="L390">73451165"comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7346116="comment">  C69ode=ahid" clPOWEWRITEREG) {
id]->116     116="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7398
<711 na>116     id]->7370  711 na>11 nref==id" class="srefail/a>]98" id="L398" c1171s="line11 name="L398">7361  711 na>117     return;
d" class="srefid="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7362  711 na>117             C69ode=ahid" clPOWEWRITEREG) {
id]->7373  711 na>11 ="com117                7    <77 byyy1" id="L381" c1175s="line11 name="L381">7375  711 na>11 riverstatic void           7    <77 byyy1" id="L381" c1176s="line11 name="L398">734611 ="comieass="srntd ADrnit_turbomuse_d]->id]->  */<7span>75c#L402" id="L402" c1177s="line11 name="L398">734711 riverlass="sreass="srntd AD4410" id="L410" c1178s="line11 name="L398">734811 rivers/macintstruc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c1179s="line11 name="L398">7398
<711 na>117     =id" class="srefail/a>]98" id="L398" c118ss="line11 name="L398">7380  711 na>118n            C69ode=ahid" cl* Ef">key)gt;7381  711 na>11 ="comment">  */<7span>75c#L402" id="L402" c11 2s="line11 name="L398"h7362  711 na>118             C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[id]->  711 na>11      =id" class="srefail/a>]98" id="L398" c11 4s="line11 name="L398"h7354118href="+code=kd" class="srefid="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[  711 na>118river=id" class="srefail/a>]98" id="L398" c11 6s="line11 name="L398">734611 ="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[73471187"comment">  C69ode=ahid" clPOWEWRITEREG) {
  611 na>118="comment">    F70xe7,6389  611 na>118     6390  611 na>119n"comment">    H70,6391#e611 na>119     return;
6362  611 na>119a href="drivers/60,6373  611 na>119     } else if (70xff,  611 na>119href="+code=key"60xff,  611 na>119rivers/macintosh70x94cl=id" class="srefail/a>]98" id="L398" c1196s="line11 name="L398">634611      6387  611 na>11 7"comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[6388  611 na>119="coma 7ref="7code=ahid" cla90" id="L390" c1199s="line11 name="L398">6399  611 na>119     [0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[6399  612ass>120n            C69ode=ahid" clPOWEWRITEREG) {
6391#e612ana>120     return;
6362  612ana>120a href="drivers/60x14,6373  612ana>12a     } else if (70,  612ana>120href="+code=key"60,  612ana>12arivers/macintosh70x69,634612a="comment">    H70xff,6387  612ana>12arivers/macintosh70xff,6388  612ana>12a="comment">    F70x27cl=id" class="srefail/a>]98" id="L398" c12a9s="line12aname="L398">6399  612ana>12a="com7410  712 na>121nref==id" class="srefail/a>]98" id="L398" c1211s="line12 name="L439">7411  712 na>12      static void           7    <77 byyy1" id="L381" c1212s="line12 name="L439">7420  712 na>12 a hreieass="srntd ADrnit_microspeeid]->id]->  */<7span>75c#L402" id="L402" c1213s="line12 name="L398">7413
<712 na>12      lass="sreass="srntd AD4410" id="L410" c1214s="line12 name="L390">7414  712 na>12 href="+code=kstruc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c1215s="line12 name="L390">740512 river=id" class="srefail/a>]98" id="L398" c1216s="line12 name="L398">7465121="comment">  C69ode=ahid" cl* Ef">key)gt;7475121     7408
<712 na>121="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[id]->7498
<712 na>121     =id" class="srefail/a>]98" id="L398" c122ss="line12 name="L410">7420
<712 na>12 n"comment">  i73href="+code=keycode"  This will initialize m;
742112      i73href="+code=keycodes/macintoshoth7420  712 na>12      i73href="+code=keycodes/macintoshrfemaeP afterqresume.u*id.c#L383" id="L383" c1223s="line12 name="L383">7413
<712 na>12 ="comi73href="+code=keycodes/macintoshR 37;#02x1 L7;#0n (4 Bytes)rfemaeP afterqresume.u*id.c#L383" id="L383" c1224s="line12 name="L410">7414  712 na>12 href=i73href="+code=keycodes/macintosh70 -  3tosh7ButtonTis muse_ (setdalsoe"+corouble clickERR!!!)rfemaeP afterqresume.u*id.c#L383" id="L383" c1225s="line12 name="L398">74151225iveri73href="+code=keycodes/macintoshh4 -  7tosh7ButtonTis lockERR (affects ce=ig  speeidalso)rfemaeP afterqresume.u*id.c#L383" id="L383" c1226s="line12 name="L410">7406{
712 na>1226iveri73href="+code=keycodes/macintoshh8 - 11tosh7ButtonTce=ig s speeirfemaeP afterqresume.u*id.c#L383" id="L383" c1227s="line12 name="L439">74751227iveri73href="+code=keycodes/macintosh12 macintosh1 = Extended muse_ m" c,70 = normal muse_ m" crfemaeP afterqresume.u*id.c#L383" id="L383" c1228s="line12 name="L398"h7418122riveri73href="+code=keycodes/macintosh13 - 15ntoshunse_d 0rfemaeP afterqresume.u*id.c#L383" id="L383" c1229s="line12 name="L390">7498
<712 na>122     i73href="+code=keycodes/macintosh16 - 23tosh7normal speeirfemaeP afterqresume.u*id.c#L383" id="L383" c123ss="line12 name="L390">7430
<712 na>12 n"comi73href="+code=keycodes/macintosh24 - 31tosh7ce=ig d speeirfemaeP afterqresume.u*id.c#L383" id="L383" c1231s="line12 name="L431">7431123="comment">  */<7span>75c#L402" id="L402" c1232s="line12 name="L383">7412  712 na>123     i73href="+code=keycodes/macinR 37;#02x1 talk holds pan>ionTani produc=nidycoificationTinformation.rfemaeP afterqresume.u*id.c#L383" id="L383" c1233s="line12 name="L383">7413
<712 na>123="comi73href="+code=keycodes/macinR 37;#02x1 Talk (4 Bytes):rfemaeP afterqresume.u*id.c#L383" id="L383" c1234s="line12 name="L398"h7414  712 na>123href=i73href="+code=keycodes/macintosh70 -  7tosh7Produc=nc" crfemaeP afterqresume.u*id.c#L383" id="L383" c1235s="line12 name="L381">74151235iveri73href="+code=keycodes/macintoshh8 - 23tosh7undef>74i, reserveirfemaeP afterqresume.u*id.c#L383" id="L383" c1236s="line12 name="L383">7406{
712 na>1236iveri73href="+code=keycodes/macintosh24 - 31tosh7Van>ionTnumb02f=emaeP afterqresume.u*id.c#L383" id="L383" c1237s="line12 name="L383">74751237iveri73href="+code=keycodes/macintf=emaeP afterqresume.u*id.c#L383" id="L383" c1238s="line12 name="L383">7418123riveri73href="+code=keycodes/macinSpeeid0Tis max.x1 to 255 setdspeeidinTincreeycos of 1/256 of max.f=emaeP afterqresume.u*id.c#L383" id="L383" c1239s="line12 name="L383">7498
<712 na>123     i73href="+code=keycodes* sremaeP afterqresume.u*id.c#L383" id="L383" c124ss="line12 name="L383">7440
<712 na>124n            C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7431124     return;
d" class="srefiPOWEWRITEREG) {
id]->124a href="drivers/60x20,eturn;
d73href="+code=keycode"  altdspeeid=60x20 (rath7443
<712 na>124     } else if (70x00,eturn;
d73href="+code=keycode"  normdspeeid=60x00 (fa;#0st)s* sremaeP afterqresume.u*id.c#L383" id="L383" c1244s="line12 name="L381">7444124href="+code=key"60x10,eturn;
d73href="+code=keycode"  extended protocol, nodspeeidce=ig  * sremaeP afterqresume.u*id.c#L383" id="L383" c1245s="line12 name="L381">7445124rivers/macintosh70x07);turn;
d73href="+code=keycode"  all buttons enableidas muse_ buttons, nodlockERR * sremaeP afterqresume.u*id.c#L383" id="L383" c1246s="line12 name="L382">7446124     124     7418124="comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[id]->7498
<712 na>124="com7450
<712 na>125nref==id" class="srefail/a>]98" id="L398" c12 1s="line12 name="L390">7431125     static void           7    <77 byyy1" id="L381" c1252s="line12 name="L402">7452
<712 na>125a hreieass="srntd ADrnit_ms_a3d]->id]->  */<7span>75c#L402" id="L402" c1253s="line12 name="L402">7443
<712 na>125     lass="sreass="srntd AD4410" id="L410" c12 4s="line12 name="L402">7444125href="+code=kstruc=nC69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    d
[0] >reqf="+l=id" class="srefail/a>]98" id="L398" c1255s="line12 name="L383">7445125river=id" class="srefail/a>]98" id="L398" c1256s="line12 name="L410">7446125="comment">  C69ode=ahid" cl* Ef">key)gt;74471257"comment">  C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[7418125="comment">  C69ode=ahid" clPOWEWRITEREG) {
id]->7498
<712 na>125     7360  712 na>126n"comment">    H70x07);7361  712 na>126="com a 7ref="7code=ahid" cla90" id="L390" c1262s="line12 name="L410">7362  712 na>12              C69ode=ahid" cld="sreque;#="srefa>[0] >d="sreque;#    (&C69ode=ahid" clreq="srefa>[0] >reqf="+,"d" class="srefiNUid[id]->  712 na>126="com7344126                7    <77 byyy1" id="L381" c1265s="line12 name="L390">7345126riverstatic of=nC69ode=ahid" cl__rnitd]->]->  */<7span>75c#L402" id="L402" c1266s="line12 name="L398">7346126="comlass="sreass="srntd AD4410" id="L410" c1267s="line12 name="L398"h7347126     #ifndefd
]->126="comment">  ode7!
);
);
7398
<712 na>126="comment">    f7llowreturn 0l=id" class="srefail/a>]98" id="L398" c127ss="line12 name="L398">7370  712 na>12 nref=#endif=id" class="srefail/a>]98" id="L398" c1271s="line12 name="L398">7361  712 na>127="comment">  */<7span>75c#L402" id="L402" c1272s="line12 name="L390">7362  712 na>127             C69ode=ahid" clledsreque;#="srefa>[0] >ledsreque;#    ="de=input" clascomplet_d]->7373  712 na>127     =id" class="srefail/a>]98" id="L398" c1274s="line12 name="L398"h7354127href="+code=kd" class="srefid="L38_prob_d]->7375  712 na>127river=id" class="srefail/a>]98" id="L398" c1276s="line12 name="L398">7346127="comment">  C69ode=ahid" clblockERR_nooifier_chain_e 37;#02ff">KERN_ERR[0] >d="sclient_li;#=fai,=id" class="srefail/a>]98" id="L398" c1277s="line12 name="L398">7347127rivers/macintosh7adbhi72ttttt&C69ode=ahid" cld="L38_d="snooifierd]->7348127="coma 7ref="7code=ahid" cla90" id="L390" c1279s="line12 name="L398">7398
<712 na>127="comment">  return 0l=id" class="srefail/a>]98" id="L398" c128ss="line12 name="L398">7380  712 na>128n    7381  712 na>12 ="comment">  */<7span>75c#L402" id="L402" c12 2s="line12 name="L398"h7362  712 na>128     static void C69ode=ahid" cl__exitd]->]->  */<7span>75c#L402" id="L402" c12 3s="line12 name="L398"h7373  712 na>128     lass="sreass="srntd AD4410" id="L410" c12 4s="line12 name="L398"h7354128href=  712 na>12 (7346128="comieass="srntd ADmodule_rnitd]->73471287"comieass="srntd ADmodule_exitd]->  612 na>128="com


The original LXR software by thLXR e=keunity=fai, this experieycoal pan>ionTby id" classmailto:lx2@"h6ux.nogtlx2@"h6ux.no =
lx2."h6ux.no kERdly ho;#0dTby id" classhttp://www.redpill-"h6pro.nogtRedpill Lh6pro AS=fai, provider of Lh6ux e=nsultERR ani operations servic s since 1995.