linux/drivers/hid/hid-roccat-koneplus.h
<<
xist /spap /form a xist href="../linux+v3.6.1/drivers/hid/hid-roccat-koneplus.h">xist img src="../.static/gfx/right.png" alt=">>">xi /spap xi spap class="lxr_search">xistxist input typhe"hidden" namhe"navtarget" =='che"">xist input typhe"text" namhe"search" ide"search">xist butt pjtyphe"submit">Searchxist Prefs /a>xi /spap st /div st form ac = p="ajax+*" method="post" onsubmit="return false;">xi input typhe"hidden" namhe"ajax_lookup" ide"ajax_lookup" =='che"">xst /form xst div class="headingbott m">
div ide"file_contents"
   1 /a>#ifndef  a href="+code=__HID_ROCCAT_KONEPLUS_H" class="sref">__HID_ROCCAT_KONEPLUS_H /a>x   2 /a>#define  a href="+code=__HID_ROCCAT_KONEPLUS_H" class="sref">__HID_ROCCAT_KONEPLUS_H /a>x   3 /a>x   4 /a> spap class="comment">/* /spap     5 /a> spap class="comment"> * Copyright (c) 2010 Stefap Achatz <erazor_de@users.sourceforge.net> /spap     6 /a> spap class="comment"> */ /spap     7 /a>x   8 /a> spap class="comment">/* /spap     9 /a> spap class="comment"> * This program is free software; you cap redistribute it and/or modify it /spap    10 spap class="comment"> * under the terms of the GNU General Public License as published by the Free /spap    11 spap class="comment"> * Software Founda = p; either vers= pj2 of the License, or (at your op = p) /spap    12 spap class="comment"> * any later vers= p. /spap    13 /a> spap class="comment"> */ /spap    14 /a>x  15 /a>#include <linux/typhs.h /a>>x  16 /a>x  17 /a>struct  a href="+code=koneplus_talk" class="sref">koneplus_talk /a> {x  18 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_TALK */ /spap    19 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 0x10 */ /spap    20 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[14];x  21}  a href="+code=__packed" class="sref">__packed /a>;x  22 /a>x  23 /a>enum  a href="+code=koneplus_control_requests" class="sref">koneplus_control_requests /a> {x  24 /a>         a href="+code=KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS" class="sref">KONEPLUS_CONTROL_REQUEST_PROFILE_SETTINGS /a> = 0x80,x  25 /a>         a href="+code=KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS" class="sref">KONEPLUS_CONTROL_REQUEST_PROFILE_BUTTONS /a> = 0x90,x  26 /a>};x  27 /a>x  28 /a>struct  a href="+code=koneplus_actual_profile" class="sref">koneplus_actual_profile /a> {x  29 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_ACTUAL_PROFILE */ /spap    30 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 3 */ /spap    31 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=actual_profile" class="sref">actual_profile /a>;  spap class="comment">/* Range 0-4! */ /spap    32}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  33 /a>x  34 /a>struct  a href="+code=koneplus_profile_settings" class="sref">koneplus_profile_settings /a> {x  35 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_PROFILE_SETTINGS */ /spap    36 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 43 */ /spap    37 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=number" class="sref">number /a>;  spap class="comment">/* range 0-4 */ /spap    38 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=advanced_sensitivity" class="sref">advanced_sensitivity /a>;x  39 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=sensitivity_x" class="sref">sensitivity_x /a>;x  40 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=sensitivity_y" class="sref">sensitivity_y /a>;x  41 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=cpi_levels_enabled" class="sref">cpi_levels_enabled /a>;x  42 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=cpi_levels_x" class="sref">cpi_levels_x /a>[5];x  43 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=cpi_startup_level" class="sref">cpi_startup_level /a>;  spap class="comment">/* range 0-4 */ /spap    44 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=cpi_levels_y" class="sref">cpi_levels_y /a>[5];  spap class="comment">/* range 1-60 means 100-6000 cpi */ /spap    45 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown1" class="sref">unknown1 /a>;x  46 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=polling_rate" class="sref">polling_rate /a>;x  47 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=lights_enabled" class="sref">lights_enabled /a>;x  48 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=light_effect_mode" class="sref">light_effect_mode /a>;x  49 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=color_flow_effect" class="sref">color_flow_effect /a>;x  50 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=light_effect_typh" class="sref">light_effect_typh /a>;x  51 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=light_effect_speed" class="sref">light_effect_speed /a>;x  52 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=lights" class="sref">lights /a>[16];x  53 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=checksum" class="sref">checksum /a>;x  54}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  55 /a>x  56 /a>struct  a href="+code=koneplus_profile_butt ps" class="sref">koneplus_profile_butt ps /a> {x  57 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_PROFILE_BUTTONS */ /spap    58 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 77 */ /spap    59 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=number" class="sref">number /a>;  spap class="comment">/* range 0-4 */ /spap    60 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[72];x  61 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=checksum" class="sref">checksum /a>;x  62}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  63 /a>x  64 /a>struct  a href="+code=koneplus_macro" class="sref">koneplus_macro /a> {x  65 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_MACRO */ /spap    66 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 0x822 little endiap */ /spap    67 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=profile" class="sref">profile /a>;  spap class="comment">/* range 0-4 */ /spap    68 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=butt p" class="sref">butt p /a>;  spap class="comment">/* range 0-23 */ /spap    69 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[2075];x  70 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=checksum" class="sref">checksum /a>;x  71}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  72 /a>x  73 /a>struct  a href="+code=koneplus_info" class="sref">koneplus_info /a> {x  74 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_INFO */ /spap    75 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 6 */ /spap    76 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=firmware_vers= p" class="sref">firmware_vers= p /a>;x  77 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown" class="sref">unknown /a>[3];x  78}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  79 /a>x  80 /a>struct  a href="+code=koneplus_e" class="sref">koneplus_e /a> {x  81 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_E */ /spap    82 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 3 */ /spap    83 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown" class="sref">unknown /a>;  spap class="comment">/* TODO 1; 0 before firmware upda e */ /spap    84}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  85 /a>x  86 /a>struct  a href="+code=koneplus_sensor" class="sref">koneplus_sensor /a> {x  87 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;   spap class="comment">/* KONEPLUS_COMMAND_SENSOR */ /spap    88 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=size" class="sref">size /a>;  spap class="comment">/* always 6 */ /spap    89 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[4];x  90}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  91 /a>x  92 /a>struct  a href="+code=koneplus_firmware_write" class="sref">koneplus_firmware_write /a> {x  93 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_FIRMWARE_WRITE */ /spap    94 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown" class="sref">unknown /a>[1025];x  95}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x  96 /a>x  97 /a>struct  a href="+code=koneplus_firmware_write_control" class="sref">koneplus_firmware_write_control /a> {x  98 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=command" class="sref">command /a>;  spap class="comment">/* KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL */ /spap    99 /a>         spap class="comment">/* /spap   100 /a> spap class="comment">         * =='ch is 1 on success /spap   101 spap class="comment">         * 3 means "not finished yet" /spap   102 spap class="comment">         */ /spap   103 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code==='ch" class="sref">=='ch /a>;x 104 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown" class="sref">unknown /a>;  spap class="comment">/* always 0x75 */ /spap   105}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x 106 /a>x 107 /a>struct  a href="+code=koneplus_tcu" class="sref">koneplus_tcu /a> {x 108 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=usb_command" class="sref">usb_command /a>;  spap class="comment">/* KONEPLUS_USB_COMMAND_TCU */ /spap   109 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[2];x 110}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x 111 /a>x 112 /a>struct  a href="+code=koneplus_tcu_image" class="sref">koneplus_tcu_image /a> {x 113 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=usb_command" class="sref">usb_command /a>;  spap class="comment">/* KONEPLUS_USB_COMMAND_TCU */ /spap   114 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a" class="sref">da a /a>[1024];x 115 /a>         a href="+code=uint16_t" class="sref">uint16_t /a>  a href="+code=checksum" class="sref">checksum /a>;x 116 /a>}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x 117 /a>x 118 /a>enum  a href="+code=koneplus_commands" class="sref">koneplus_commands /a> {x 119 /a>         a href="+code=KONEPLUS_COMMAND_ACTUAL_PROFILE" class="sref">KONEPLUS_COMMAND_ACTUAL_PROFILE /a> = 0x5,x 120 /a>         a href="+code=KONEPLUS_COMMAND_PROFILE_SETTINGS" class="sref">KONEPLUS_COMMAND_PROFILE_SETTINGS /a> = 0x6,x 121 /a>         a href="+code=KONEPLUS_COMMAND_PROFILE_BUTTONS" class="sref">KONEPLUS_COMMAND_PROFILE_BUTTONS /a> = 0x7,x 122 /a>         a href="+code=KONEPLUS_COMMAND_MACRO" class="sref">KONEPLUS_COMMAND_MACRO /a> = 0x8,x 123 /a>         a href="+code=KONEPLUS_COMMAND_INFO" class="sref">KONEPLUS_COMMAND_INFO /a> = 0x9,x 124 /a>         a href="+code=KONEPLUS_COMMAND_TCU" class="sref">KONEPLUS_COMMAND_TCU /a> = 0xc,x 125 /a>         a href="+code=KONEPLUS_COMMAND_E" class="sref">KONEPLUS_COMMAND_E /a> = 0xe,x 126 /a>         a href="+code=KONEPLUS_COMMAND_SENSOR" class="sref">KONEPLUS_COMMAND_SENSOR /a> = 0xf,x 127 /a>         a href="+code=KONEPLUS_COMMAND_TALK" class="sref">KONEPLUS_COMMAND_TALK /a> = 0x10,x 128 /a>         a href="+code=KONEPLUS_COMMAND_FIRMWARE_WRITE" class="sref">KONEPLUS_COMMAND_FIRMWARE_WRITE /a> = 0x1b,x 129 /a>         a href="+code=KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL" class="sref">KONEPLUS_COMMAND_FIRMWARE_WRITE_CONTROL /a> = 0x1c,x 130 /a>};x 131 /a>x 132enum  a href="+code=koneplus_mouse_report_numbers" class="sref">koneplus_mouse_report_numbers /a> {x 133 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_NUMBER_HID" class="sref">KONEPLUS_MOUSE_REPORT_NUMBER_HID /a> = 1,x 134 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO" class="sref">KONEPLUS_MOUSE_REPORT_NUMBER_AUDIO /a> = 2,x 135 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON" class="sref">KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON /a> = 3,x 136 /a>};x 137 /a>x 138 /a>struct  a href="+code=koneplus_mouse_report_butt p" class="sref">koneplus_mouse_report_butt p /a> {x 139 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=report_number" class="sref">report_number /a>;  spap class="comment">/* always KONEPLUS_MOUSE_REPORT_NUMBER_BUTTON */ /spap   140 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=zero1" class="sref">zero1 /a>;x 141 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=typh" class="sref">typh /a>;x 142 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a1" class="sref">da a1 /a>;x 143 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a2" class="sref">da a2 /a>;x 144 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=zero2" class="sref">zero2 /a>;x 145 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=unknown" class="sref">unknown /a>[2];x 146 /a>}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x 147 /a>x 148 /a>enum  a href="+code=koneplus_mouse_report_butt p_typhs" class="sref">koneplus_mouse_report_butt p_typhs /a> {x 149 /a>         spap class="comment">/* da a1 = new profile range 1-5 */ /spap   150 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_PROFILE /a> = 0x20,x 151 /a>x 152 /a>         spap class="comment">/* da a1 = butt pjnumber range 1-24; da a2 = ac = p */ /spap   153 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_QUICKLAUNCH /a> = 0x60,x 154 /a>x 155 /a>         spap class="comment">/* da a1 = butt pjnumber range 1-24; da a2 = ac = p */ /spap   156 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_TIMER /a> = 0x80,x 157 /a>x 158 /a>         spap class="comment">/* da a1 = settingjnumber range 1-5 */ /spap   159 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI /a> = 0xb0,x 160 /a>x 161 /a>         spap class="comment">/* da a1 and da a2 = range 0x1-0xb */ /spap   162 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY /a> = 0xc0,x 163 /a>x 164 /a>         spap class="comment">/* da a1 = 22 = next track... /spap   165 /a> spap class="comment">         * da a2 = ac = p /spap   166 /a> spap class="comment">         */ /spap   167 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_TYPE_MULTIMEDIA /a> = 0xf0,x 168 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_TALK" class="sref">KONEPLUS_MOUSE_REPORT_TALK /a> = 0xff,x 169 /a>};x 170 /a>x 171enum  a href="+code=koneplus_mouse_report_butt p_ac = p" class="sref">koneplus_mouse_report_butt p_ac = p /a> {x 172 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_PRESS /a> = 0,x 173 /a>         a href="+code=KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE" class="sref">KONEPLUS_MOUSE_REPORT_BUTTON_ACTION_RELEASE /a> = 1,x 174 /a>};x 175 /a>x 176 /a>struct  a href="+code=koneplus_roccat_report" class="sref">koneplus_roccat_report /a> {x 177 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=typh" class="sref">typh /a>;x 178 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a1" class="sref">da a1 /a>;x 179 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=da a2" class="sref">da a2 /a>;x 180 /a>         a href="+code=uint8_t" class="sref">uint8_t /a>  a href="+code=profile" class="sref">profile /a>;x 181}  a href="+code=__attribute__" class="sref">__attribute__ /a> (( a href="+code=__packed__" class="sref">__packed__ /a>));x 182 /a>x 183 /a>struct  a href="+code=koneplus_device" class="sref">koneplus_device /a> {x 184 /a>        int  a href="+code=actual_profile" class="sref">actual_profile /a>;x 185 /a>x 186 /a>        int  a href="+code=roccat_claimed" class="sref">roccat_claimed /a>;x 187 /a>        int  a href="+code=chrdev_minor" class="sref">chrdev_minor /a>;x 188 /a>x 189 /a>        struct  a href="+code=mutex" class="sref">mutex /a>  a href="+code=koneplus_lock" class="sref">koneplus_lock /a>;x 190 /a>x 191 /a>        struct  a href="+code=koneplus_info" class="sref">koneplus_info /a>  a href="+code=info" class="sref">info /a>;x 192 /a>        struct  a href="+code=koneplus_profile_settings" class="sref">koneplus_profile_settings /a>  a href="+code=profile_settings" class="sref">profile_settings /a>[5];x 193 /a>        struct  a href="+code=koneplus_profile_butt ps" class="sref">koneplus_profile_butt ps /a>  a href="+code=profile_butt ps" class="sref">profile_butt ps /a>[5];x 194 /a>};x 195 /a>x 196 /a>#endifx 197 /a>
lxr.linux.no kindly hosted by Redpill Linpro AS /a>, provider of Linux consultingjand opera = ps services since 1995.