0001 #ifndef _HIL_H_
0002 #define _HIL_H_
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040 #include <asm/types.h>
0041
0042
0043
0044
0045 #define HIL_CLOCK 8MHZ
0046 #define HIL_EK1_CLOCK 30HZ
0047 #define HIL_EK2_CLOCK 60HZ
0048
0049 #define HIL_TIMEOUT_DEV 5
0050 #define HIL_TIMEOUT_DEVS 10
0051 #define HIL_TIMEOUT_NORESP 10
0052 #define HIL_TIMEOUT_DEVS_DATA 16
0053 #define HIL_TIMEOUT_SELFTEST 200
0054
0055
0056
0057
0058
0059
0060 #define HIL_WIRE_PACKET_LEN 15
0061 enum hil_wire_bitpos {
0062 HIL_WIRE_START = 0,
0063 HIL_WIRE_ADDR2,
0064 HIL_WIRE_ADDR1,
0065 HIL_WIRE_ADDR0,
0066 HIL_WIRE_COMMAND,
0067 HIL_WIRE_DATA7,
0068 HIL_WIRE_DATA6,
0069 HIL_WIRE_DATA5,
0070 HIL_WIRE_DATA4,
0071 HIL_WIRE_DATA3,
0072 HIL_WIRE_DATA2,
0073 HIL_WIRE_DATA1,
0074 HIL_WIRE_DATA0,
0075 HIL_WIRE_PARITY,
0076 HIL_WIRE_STOP
0077 };
0078
0079
0080
0081
0082 enum hil_pkt_bitpos {
0083 HIL_PKT_CMD = 0x00000800,
0084 HIL_PKT_ADDR2 = 0x00000400,
0085 HIL_PKT_ADDR1 = 0x00000200,
0086 HIL_PKT_ADDR0 = 0x00000100,
0087 HIL_PKT_ADDR_MASK = 0x00000700,
0088 HIL_PKT_ADDR_SHIFT = 8,
0089 HIL_PKT_DATA7 = 0x00000080,
0090 HIL_PKT_DATA6 = 0x00000040,
0091 HIL_PKT_DATA5 = 0x00000020,
0092 HIL_PKT_DATA4 = 0x00000010,
0093 HIL_PKT_DATA3 = 0x00000008,
0094 HIL_PKT_DATA2 = 0x00000004,
0095 HIL_PKT_DATA1 = 0x00000002,
0096 HIL_PKT_DATA0 = 0x00000001,
0097 HIL_PKT_DATA_MASK = 0x000000FF,
0098 HIL_PKT_DATA_SHIFT = 0
0099 };
0100
0101
0102
0103
0104
0105
0106
0107
0108 enum hil_error_bitpos {
0109 HIL_ERR_OB = 0x00000800,
0110
0111
0112 HIL_ERR_INT = 0x00010000,
0113 HIL_ERR_NMI = 0x00020000,
0114 HIL_ERR_LERR = 0x00040000,
0115 HIL_ERR_PERR = 0x01000000,
0116 HIL_ERR_FERR = 0x02000000,
0117 HIL_ERR_FOF = 0x04000000
0118 };
0119
0120 enum hil_control_bitpos {
0121 HIL_CTRL_TEST = 0x00010000,
0122 HIL_CTRL_IPF = 0x00040000,
0123 HIL_CTRL_APE = 0x02000000
0124 };
0125
0126
0127 #define HIL_DO_ALTER_CTRL 0x40000000
0128
0129 #define HIL_CTRL_ONLY 0xc0000000
0130
0131
0132
0133 typedef u32 hil_packet;
0134
0135
0136
0137
0138 enum hil_command {
0139 HIL_CMD_IFC = 0x00,
0140 HIL_CMD_EPT = 0x01,
0141 HIL_CMD_ELB = 0x02,
0142 HIL_CMD_IDD = 0x03,
0143 HIL_CMD_DSR = 0x04,
0144 HIL_CMD_PST = 0x05,
0145 HIL_CMD_RRG = 0x06,
0146 HIL_CMD_WRG = 0x07,
0147 HIL_CMD_ACF = 0x08,
0148 HIL_CMDID_ACF = 0x07,
0149 HIL_CMD_POL = 0x10,
0150 HIL_CMDCT_POL = 0x0f,
0151 HIL_CMD_RPL = 0x20,
0152 HIL_CMDCT_RPL = 0x0f,
0153 HIL_CMD_RNM = 0x30,
0154 HIL_CMD_RST = 0x31,
0155 HIL_CMD_EXD = 0x32,
0156 HIL_CMD_RSC = 0x33,
0157
0158
0159
0160 HIL_CMD_DKA = 0x3d,
0161 HIL_CMD_EK1 = 0x3e,
0162 HIL_CMD_EK2 = 0x3f,
0163 HIL_CMD_PR1 = 0x40,
0164 HIL_CMD_PR2 = 0x41,
0165 HIL_CMD_PR3 = 0x42,
0166 HIL_CMD_PR4 = 0x43,
0167 HIL_CMD_PR5 = 0x44,
0168 HIL_CMD_PR6 = 0x45,
0169 HIL_CMD_PR7 = 0x46,
0170 HIL_CMD_PRM = 0x47,
0171 HIL_CMD_AK1 = 0x48,
0172 HIL_CMD_AK2 = 0x49,
0173 HIL_CMD_AK3 = 0x4a,
0174 HIL_CMD_AK4 = 0x4b,
0175 HIL_CMD_AK5 = 0x4c,
0176 HIL_CMD_AK6 = 0x4d,
0177 HIL_CMD_AK7 = 0x4e,
0178 HIL_CMD_ACK = 0x4f,
0179
0180
0181
0182
0183
0184 HIL_CMD_RIO = 0xfa,
0185 HIL_CMD_SHR = 0xfb,
0186 HIL_CMD_TER = 0xfc,
0187 HIL_CMD_CAE = 0xfd,
0188 HIL_CMD_DHR = 0xfe,
0189
0190
0191 };
0192
0193
0194
0195
0196
0197
0198
0199
0200 #define HIL_IDD_DID_TYPE_MASK 0xe0
0201 #define HIL_IDD_DID_TYPE_KB_INTEGRAL 0xa0
0202 #define HIL_IDD_DID_TYPE_KB_ITF 0xc0
0203 #define HIL_IDD_DID_TYPE_KB_RSVD 0xe0
0204 #define HIL_IDD_DID_TYPE_KB_LANG_MASK 0x1f
0205 #define HIL_IDD_DID_KBLANG_USE_ESD 0x00
0206 #define HIL_IDD_DID_TYPE_ABS 0x80
0207 #define HIL_IDD_DID_ABS_RSVD1_MASK 0xf8
0208 #define HIL_IDD_DID_ABS_RSVD1 0x98
0209 #define HIL_IDD_DID_ABS_TABLET_MASK 0xf8
0210 #define HIL_IDD_DID_ABS_TABLET 0x90
0211 #define HIL_IDD_DID_ABS_TSCREEN_MASK 0xfc
0212 #define HIL_IDD_DID_ABS_TSCREEN 0x8c
0213 #define HIL_IDD_DID_ABS_RSVD2_MASK 0xfc
0214 #define HIL_IDD_DID_ABS_RSVD2 0x88
0215 #define HIL_IDD_DID_ABS_RSVD3_MASK 0xfc
0216 #define HIL_IDD_DID_ABS_RSVD3 0x80
0217 #define HIL_IDD_DID_TYPE_REL 0x60
0218 #define HIL_IDD_DID_REL_RSVD1_MASK 0xf0
0219 #define HIL_IDD_DID_REL_RSVD1 0x70
0220 #define HIL_IDD_DID_REL_RSVD2_MASK 0xfc
0221 #define HIL_IDD_DID_REL_RSVD2 0x6c
0222 #define HIL_IDD_DID_REL_MOUSE_MASK 0xfc
0223 #define HIL_IDD_DID_REL_MOUSE 0x68
0224 #define HIL_IDD_DID_REL_QUAD_MASK 0xf8
0225 #define HIL_IDD_DID_REL_QUAD 0x60
0226 #define HIL_IDD_DID_TYPE_CHAR 0x40
0227 #define HIL_IDD_DID_CHAR_BARCODE_MASK 0xfc
0228 #define HIL_IDD_DID_CHAR_BARCODE 0x5c
0229 #define HIL_IDD_DID_CHAR_RSVD1_MASK 0xfc
0230 #define HIL_IDD_DID_CHAR_RSVD1 0x58
0231 #define HIL_IDD_DID_CHAR_RSVD2_MASK 0xf8
0232 #define HIL_IDD_DID_CHAR_RSVD2 0x50
0233 #define HIL_IDD_DID_CHAR_RSVD3_MASK 0xf0
0234 #define HIL_IDD_DID_CHAR_RSVD3 0x40
0235 #define HIL_IDD_DID_TYPE_OTHER 0x20
0236 #define HIL_IDD_DID_OTHER_RSVD1_MASK 0xf0
0237 #define HIL_IDD_DID_OTHER_RSVD1 0x30
0238 #define HIL_IDD_DID_OTHER_BARCODE_MASK 0xfc
0239 #define HIL_IDD_DID_OTHER_BARCODE 0x2c
0240 #define HIL_IDD_DID_OTHER_RSVD2_MASK 0xfc
0241 #define HIL_IDD_DID_OTHER_RSVD2 0x28
0242 #define HIL_IDD_DID_OTHER_RSVD3_MASK 0xf8
0243 #define HIL_IDD_DID_OTHER_RSVD3 0x20
0244 #define HIL_IDD_DID_TYPE_KEYPAD 0x00
0245
0246
0247
0248 #define HIL_IDD_HEADER_AXSET_MASK 0x03
0249 #define HIL_IDD_HEADER_RSC 0x04
0250 #define HIL_IDD_HEADER_EXD 0x08
0251 #define HIL_IDD_HEADER_IOD 0x10
0252 #define HIL_IDD_HEADER_16BIT 0x20
0253 #define HIL_IDD_HEADER_ABS 0x40
0254 #define HIL_IDD_HEADER_2X_AXIS 0x80
0255
0256
0257
0258 #define HIL_IDD_IOD_NBUTTON_MASK 0x07
0259 #define HIL_IDD_IOD_PROXIMITY 0x08
0260 #define HIL_IDD_IOD_PROMPT_MASK 0x70
0261 #define HIL_IDD_IOD_PROMPT_SHIFT 4
0262 #define HIL_IDD_IOD_PROMPT 0x80
0263
0264 #define HIL_IDD_NUM_AXES_PER_SET(header_packet) \
0265 ((header_packet) & HIL_IDD_HEADER_AXSET_MASK)
0266
0267 #define HIL_IDD_NUM_AXSETS(header_packet) \
0268 (2 - !((header_packet) & HIL_IDD_HEADER_2X_AXIS))
0269
0270 #define HIL_IDD_LEN(header_packet) \
0271 ((4 - !(header_packet & HIL_IDD_HEADER_IOD) - \
0272 2 * !(HIL_IDD_NUM_AXES_PER_SET(header_packet))) + \
0273 2 * HIL_IDD_NUM_AXES_PER_SET(header_packet) * \
0274 !!((header_packet) & HIL_IDD_HEADER_ABS))
0275
0276
0277
0278
0279
0280
0281 #define HIL_IDD_AXIS_COUNTS_PER_M(header_ptr) \
0282 (!(HIL_IDD_NUM_AXSETS(*(header_ptr))) ? -1 : \
0283 (((*(header_ptr + 1) & HIL_PKT_DATA_MASK) + \
0284 ((*(header_ptr + 2) & HIL_PKT_DATA_MASK)) << 8) \
0285 * ((*(header_ptr) & HIL_IDD_HEADER_16BIT) ? 100 : 1)))
0286
0287 #define HIL_IDD_AXIS_MAX(header_ptr, __axnum) \
0288 ((!(*(header_ptr) & HIL_IDD_HEADER_ABS) || \
0289 (HIL_IDD_NUM_AXES_PER_SET(*(header_ptr)) <= __axnum)) ? 0 : \
0290 ((HIL_PKT_DATA_MASK & *((header_ptr) + 3 + 2 * __axnum)) + \
0291 ((HIL_PKT_DATA_MASK & *((header_ptr) + 4 + 2 * __axnum)) << 8)))
0292
0293 #define HIL_IDD_IOD(header_ptr) \
0294 (*(header_ptr + HIL_IDD_LEN((*header_ptr)) - 1))
0295
0296 #define HIL_IDD_HAS_GEN_PROMPT(header_ptr) \
0297 ((*header_ptr & HIL_IDD_HEADER_IOD) && \
0298 (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROMPT))
0299
0300 #define HIL_IDD_HAS_GEN_PROXIMITY(header_ptr) \
0301 ((*header_ptr & HIL_IDD_HEADER_IOD) && \
0302 (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_PROXIMITY))
0303
0304 #define HIL_IDD_NUM_BUTTONS(header_ptr) \
0305 ((*header_ptr & HIL_IDD_HEADER_IOD) ? \
0306 (HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NBUTTON_MASK) : 0)
0307
0308 #define HIL_IDD_NUM_PROMPTS(header_ptr) \
0309 ((*header_ptr & HIL_IDD_HEADER_IOD) ? \
0310 ((HIL_IDD_IOD(header_ptr) & HIL_IDD_IOD_NPROMPT_MASK) \
0311 >> HIL_IDD_IOD_PROMPT_SHIFT) : 0)
0312
0313
0314 #define HIL_EXD_HEADER_WRG 0x03
0315 #define HIL_EXD_HEADER_WRG_TYPE1 0x01
0316 #define HIL_EXD_HEADER_WRG_TYPE2 0x02
0317 #define HIL_EXD_HEADER_RRG 0x04
0318 #define HIL_EXD_HEADER_RNM 0x10
0319 #define HIL_EXD_HEADER_RST 0x20
0320 #define HIL_EXD_HEADER_LOCALE 0x40
0321
0322 #define HIL_EXD_NUM_RRG(header_ptr) \
0323 ((*header_ptr & HIL_EXD_HEADER_RRG) ? \
0324 (*(header_ptr + 1) & HIL_PKT_DATA_MASK) : 0)
0325
0326 #define HIL_EXD_NUM_WWG(header_ptr) \
0327 ((*header_ptr & HIL_EXD_HEADER_WRG) ? \
0328 (*(header_ptr + 2 - !(*header_ptr & HIL_EXD_HEADER_RRG)) & \
0329 HIL_PKT_DATA_MASK) : 0)
0330
0331 #define HIL_EXD_LEN(header_ptr) \
0332 (!!(*header_ptr & HIL_EXD_HEADER_RRG) + \
0333 !!(*header_ptr & HIL_EXD_HEADER_WRG) + \
0334 !!(*header_ptr & HIL_EXD_HEADER_LOCALE) + \
0335 2 * !!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) + 1)
0336
0337 #define HIL_EXD_LOCALE(header_ptr) \
0338 (!(*header_ptr & HIL_EXD_HEADER_LOCALE) ? -1 : \
0339 (*(header_ptr + HIL_EXD_LEN(header_ptr) - 1) & HIL_PKT_DATA_MASK))
0340
0341 #define HIL_EXD_WRG_TYPE2_LEN(header_ptr) \
0342 (!(*header_ptr & HIL_EXD_HEADER_WRG_TYPE2) ? -1 : \
0343 (*(header_ptr + HIL_EXD_LEN(header_ptr) - 2 - \
0344 !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) + \
0345 ((*(header_ptr + HIL_EXD_LEN(header_ptr) - 1 - \
0346 !!(*header_ptr & HIL_EXD_HEADER_LOCALE)) & HIL_PKT_DATA_MASK) << 8))
0347
0348
0349
0350
0351
0352
0353 #define HIL_LOCALE_MAX 0x1f
0354
0355
0356
0357
0358 #define HIL_LOCALE_MAP \
0359 "", \
0360 "", \
0361 "", \
0362 "swiss.french", \
0363 "portuguese", \
0364 "arabic", \
0365 "hebrew", \
0366 "english.canadian", \
0367 "turkish", \
0368 "greek", \
0369 "thai", \
0370 "italian", \
0371 "korean", \
0372 "dutch", \
0373 "swedish", \
0374 "german", \
0375 "chinese", \
0376 "chinese", \
0377 "swiss.french", \
0378 "spanish", \
0379 "swiss.german", \
0380 "flemish", \
0381 "finnish", \
0382 "english.uk", \
0383 "french.canadian", \
0384 "swiss.german", \
0385 "norwegian", \
0386 "french", \
0387 "danish", \
0388 "japanese", \
0389 "spanish", \
0390 "english.us" \
0391
0392
0393
0394 #define HIL_KEYCODES_SET1_TBLSIZE 128
0395 #define HIL_KEYCODES_SET1 \
0396 KEY_5, KEY_RESERVED, KEY_RIGHTALT, KEY_LEFTALT, \
0397 KEY_RIGHTSHIFT, KEY_LEFTSHIFT, KEY_LEFTCTRL, KEY_SYSRQ, \
0398 KEY_KP4, KEY_KP8, KEY_KP5, KEY_KP9, \
0399 KEY_KP6, KEY_KP7, KEY_KPCOMMA, KEY_KPENTER, \
0400 KEY_KP1, KEY_KPSLASH, KEY_KP2, KEY_KPPLUS, \
0401 KEY_KP3, KEY_KPASTERISK, KEY_KP0, KEY_KPMINUS, \
0402 KEY_B, KEY_V, KEY_C, KEY_X, \
0403 KEY_Z, KEY_RESERVED, KEY_RESERVED, KEY_ESC, \
0404 KEY_6, KEY_F10, KEY_3, KEY_F11, \
0405 KEY_KPDOT, KEY_F9, KEY_TAB , KEY_F12, \
0406 KEY_H, KEY_G, KEY_F, KEY_D, \
0407 KEY_S, KEY_A, KEY_RESERVED, KEY_CAPSLOCK, \
0408 KEY_U, KEY_Y, KEY_T, KEY_R, \
0409 KEY_E, KEY_W, KEY_Q, KEY_TAB, \
0410 KEY_7, KEY_6, KEY_5, KEY_4, \
0411 KEY_3, KEY_2, KEY_1, KEY_GRAVE, \
0412 KEY_F13, KEY_F14, KEY_F15, KEY_F16, \
0413 KEY_F17, KEY_F18, KEY_F19, KEY_F20, \
0414 KEY_MENU, KEY_F4, KEY_F3, KEY_F2, \
0415 KEY_F1, KEY_VOLUMEUP, KEY_STOP, KEY_SENDFILE, \
0416 KEY_SYSRQ, KEY_F5, KEY_F6, KEY_F7, \
0417 KEY_F8, KEY_VOLUMEDOWN, KEY_DEL_EOL, KEY_DEL_EOS, \
0418 KEY_8, KEY_9, KEY_0, KEY_MINUS, \
0419 KEY_EQUAL, KEY_BACKSPACE, KEY_INS_LINE, KEY_DEL_LINE, \
0420 KEY_I, KEY_O, KEY_P, KEY_LEFTBRACE, \
0421 KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_INSERT, KEY_DELETE, \
0422 KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \
0423 KEY_APOSTROPHE, KEY_ENTER, KEY_HOME, KEY_PAGEUP, \
0424 KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH, \
0425 KEY_BACKSLASH, KEY_SELECT, KEY_102ND, KEY_PAGEDOWN, \
0426 KEY_N, KEY_SPACE, KEY_NEXT, KEY_RESERVED, \
0427 KEY_LEFT, KEY_DOWN, KEY_UP, KEY_RIGHT
0428
0429
0430 #define HIL_KEYCODES_SET3_TBLSIZE 128
0431 #define HIL_KEYCODES_SET3 \
0432 KEY_RESERVED, KEY_ESC, KEY_1, KEY_2, \
0433 KEY_3, KEY_4, KEY_5, KEY_6, \
0434 KEY_7, KEY_8, KEY_9, KEY_0, \
0435 KEY_MINUS, KEY_EQUAL, KEY_BACKSPACE, KEY_TAB, \
0436 KEY_Q, KEY_W, KEY_E, KEY_R, \
0437 KEY_T, KEY_Y, KEY_U, KEY_I, \
0438 KEY_O, KEY_P, KEY_LEFTBRACE, KEY_RIGHTBRACE, \
0439 KEY_ENTER, KEY_LEFTCTRL, KEY_A, KEY_S, \
0440 KEY_D, KEY_F, KEY_G, KEY_H, \
0441 KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, \
0442 KEY_APOSTROPHE,KEY_GRAVE, KEY_LEFTSHIFT, KEY_BACKSLASH, \
0443 KEY_Z, KEY_X, KEY_C, KEY_V, \
0444 KEY_B, KEY_N, KEY_M, KEY_COMMA, \
0445 KEY_DOT, KEY_SLASH, KEY_RIGHTSHIFT, KEY_KPASTERISK, \
0446 KEY_LEFTALT, KEY_SPACE, KEY_CAPSLOCK, KEY_F1, \
0447 KEY_F2, KEY_F3, KEY_F4, KEY_F5, \
0448 KEY_F6, KEY_F7, KEY_F8, KEY_F9, \
0449 KEY_F10, KEY_NUMLOCK, KEY_SCROLLLOCK, KEY_KP7, \
0450 KEY_KP8, KEY_KP9, KEY_KPMINUS, KEY_KP4, \
0451 KEY_KP5, KEY_KP6, KEY_KPPLUS, KEY_KP1, \
0452 KEY_KP2, KEY_KP3, KEY_KP0, KEY_KPDOT, \
0453 KEY_SYSRQ, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
0454 KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
0455 KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
0456 KEY_UP, KEY_LEFT, KEY_DOWN, KEY_RIGHT, \
0457 KEY_HOME, KEY_PAGEUP, KEY_END, KEY_PAGEDOWN, \
0458 KEY_INSERT, KEY_DELETE, KEY_102ND, KEY_RESERVED, \
0459 KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
0460 KEY_F1, KEY_F2, KEY_F3, KEY_F4, \
0461 KEY_F5, KEY_F6, KEY_F7, KEY_F8, \
0462 KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, \
0463 KEY_RESERVED, KEY_RESERVED, KEY_RESERVED, KEY_RESERVED
0464
0465
0466
0467
0468 #define HIL_POL_NUM_AXES_MASK 0x03
0469 #define HIL_POL_CTS 0x04
0470 #define HIL_POL_STATUS_PENDING 0x08
0471 #define HIL_POL_CHARTYPE_MASK 0x70
0472 #define HIL_POL_CHARTYPE_NONE 0x00
0473 #define HIL_POL_CHARTYPE_RSVD1 0x10
0474 #define HIL_POL_CHARTYPE_ASCII 0x20
0475 #define HIL_POL_CHARTYPE_BINARY 0x30
0476 #define HIL_POL_CHARTYPE_SET1 0x40
0477 #define HIL_POL_CHARTYPE_RSVD2 0x50
0478 #define HIL_POL_CHARTYPE_SET2 0x60
0479 #define HIL_POL_CHARTYPE_SET3 0x70
0480 #define HIL_POL_AXIS_ALT 0x80
0481
0482
0483 #endif