162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci/* 462306a36Sopenharmony_ci * IBM ASM Service Processor Device Driver 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) IBM Corporation, 2004 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Author: Max Asböck <amax@us.ibm.com> 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Originally written by Pete Reynolds 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#ifndef _IBMASM_REMOTE_H_ 1462306a36Sopenharmony_ci#define _IBMASM_REMOTE_H_ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <asm/io.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* pci offsets */ 1962306a36Sopenharmony_ci#define CONDOR_MOUSE_DATA 0x000AC000 2062306a36Sopenharmony_ci#define CONDOR_MOUSE_ISR_CONTROL 0x00 2162306a36Sopenharmony_ci#define CONDOR_MOUSE_ISR_STATUS 0x04 2262306a36Sopenharmony_ci#define CONDOR_MOUSE_Q_READER 0x08 2362306a36Sopenharmony_ci#define CONDOR_MOUSE_Q_WRITER 0x0C 2462306a36Sopenharmony_ci#define CONDOR_MOUSE_Q_BEGIN 0x10 2562306a36Sopenharmony_ci#define CONDOR_MOUSE_MAX_X 0x14 2662306a36Sopenharmony_ci#define CONDOR_MOUSE_MAX_Y 0x18 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define CONDOR_INPUT_DESKTOP_INFO 0x1F0 2962306a36Sopenharmony_ci#define CONDOR_INPUT_DISPLAY_RESX 0x1F4 3062306a36Sopenharmony_ci#define CONDOR_INPUT_DISPLAY_RESY 0x1F8 3162306a36Sopenharmony_ci#define CONDOR_INPUT_DISPLAY_BITS 0x1FC 3262306a36Sopenharmony_ci#define CONDOR_OUTPUT_VNC_STATUS 0x200 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#define CONDOR_MOUSE_INTR_STATUS_MASK 0x00000001 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define INPUT_TYPE_MOUSE 0x1 3762306a36Sopenharmony_ci#define INPUT_TYPE_KEYBOARD 0x2 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* mouse button states received from SP */ 4162306a36Sopenharmony_ci#define REMOTE_DOUBLE_CLICK 0xF0 4262306a36Sopenharmony_ci#define REMOTE_BUTTON_LEFT 0x01 4362306a36Sopenharmony_ci#define REMOTE_BUTTON_MIDDLE 0x02 4462306a36Sopenharmony_ci#define REMOTE_BUTTON_RIGHT 0x04 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/* size of keysym/keycode translation matrices */ 4762306a36Sopenharmony_ci#define XLATE_SIZE 256 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_cistruct mouse_input { 5062306a36Sopenharmony_ci unsigned short y; 5162306a36Sopenharmony_ci unsigned short x; 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct keyboard_input { 5662306a36Sopenharmony_ci unsigned short key_code; 5762306a36Sopenharmony_ci unsigned char key_flag; 5862306a36Sopenharmony_ci unsigned char key_down; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cistruct remote_input { 6462306a36Sopenharmony_ci union { 6562306a36Sopenharmony_ci struct mouse_input mouse; 6662306a36Sopenharmony_ci struct keyboard_input keyboard; 6762306a36Sopenharmony_ci } data; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci unsigned char type; 7062306a36Sopenharmony_ci unsigned char pad1; 7162306a36Sopenharmony_ci unsigned char mouse_buttons; 7262306a36Sopenharmony_ci unsigned char pad3; 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#define mouse_addr(sp) (sp->base_address + CONDOR_MOUSE_DATA) 7662306a36Sopenharmony_ci#define display_width(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESX) 7762306a36Sopenharmony_ci#define display_height(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESY) 7862306a36Sopenharmony_ci#define display_depth(sp) (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_BITS) 7962306a36Sopenharmony_ci#define desktop_info(sp) (mouse_addr(sp) + CONDOR_INPUT_DESKTOP_INFO) 8062306a36Sopenharmony_ci#define vnc_status(sp) (mouse_addr(sp) + CONDOR_OUTPUT_VNC_STATUS) 8162306a36Sopenharmony_ci#define isr_control(sp) (mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL) 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci#define mouse_interrupt_pending(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS) 8462306a36Sopenharmony_ci#define clear_mouse_interrupt(sp) writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS) 8562306a36Sopenharmony_ci#define enable_mouse_interrupts(sp) writel(1, mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL) 8662306a36Sopenharmony_ci#define disable_mouse_interrupts(sp) writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL) 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci/* remote input queue operations */ 8962306a36Sopenharmony_ci#define REMOTE_QUEUE_SIZE 60 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define get_queue_writer(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_Q_WRITER) 9262306a36Sopenharmony_ci#define get_queue_reader(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_Q_READER) 9362306a36Sopenharmony_ci#define set_queue_reader(sp, reader) writel(reader, mouse_addr(sp) + CONDOR_MOUSE_Q_READER) 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#define queue_begin (mouse_addr(sp) + CONDOR_MOUSE_Q_BEGIN) 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#define get_queue_entry(sp, read_index) \ 9862306a36Sopenharmony_ci ((void*)(queue_begin + read_index * sizeof(struct remote_input))) 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_cistatic inline int advance_queue_reader(struct service_processor *sp, unsigned long reader) 10162306a36Sopenharmony_ci{ 10262306a36Sopenharmony_ci reader++; 10362306a36Sopenharmony_ci if (reader == REMOTE_QUEUE_SIZE) 10462306a36Sopenharmony_ci reader = 0; 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci set_queue_reader(sp, reader); 10762306a36Sopenharmony_ci return reader; 10862306a36Sopenharmony_ci} 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci#define NO_KEYCODE 0 11162306a36Sopenharmony_ci#define KEY_SYM_BK_SPC 0xFF08 11262306a36Sopenharmony_ci#define KEY_SYM_TAB 0xFF09 11362306a36Sopenharmony_ci#define KEY_SYM_ENTER 0xFF0D 11462306a36Sopenharmony_ci#define KEY_SYM_SCR_LOCK 0xFF14 11562306a36Sopenharmony_ci#define KEY_SYM_ESCAPE 0xFF1B 11662306a36Sopenharmony_ci#define KEY_SYM_HOME 0xFF50 11762306a36Sopenharmony_ci#define KEY_SYM_LARROW 0xFF51 11862306a36Sopenharmony_ci#define KEY_SYM_UARROW 0xFF52 11962306a36Sopenharmony_ci#define KEY_SYM_RARROW 0xFF53 12062306a36Sopenharmony_ci#define KEY_SYM_DARROW 0xFF54 12162306a36Sopenharmony_ci#define KEY_SYM_PAGEUP 0xFF55 12262306a36Sopenharmony_ci#define KEY_SYM_PAGEDOWN 0xFF56 12362306a36Sopenharmony_ci#define KEY_SYM_END 0xFF57 12462306a36Sopenharmony_ci#define KEY_SYM_INSERT 0xFF63 12562306a36Sopenharmony_ci#define KEY_SYM_NUM_LOCK 0xFF7F 12662306a36Sopenharmony_ci#define KEY_SYM_KPSTAR 0xFFAA 12762306a36Sopenharmony_ci#define KEY_SYM_KPPLUS 0xFFAB 12862306a36Sopenharmony_ci#define KEY_SYM_KPMINUS 0xFFAD 12962306a36Sopenharmony_ci#define KEY_SYM_KPDOT 0xFFAE 13062306a36Sopenharmony_ci#define KEY_SYM_KPSLASH 0xFFAF 13162306a36Sopenharmony_ci#define KEY_SYM_KPRIGHT 0xFF96 13262306a36Sopenharmony_ci#define KEY_SYM_KPUP 0xFF97 13362306a36Sopenharmony_ci#define KEY_SYM_KPLEFT 0xFF98 13462306a36Sopenharmony_ci#define KEY_SYM_KPDOWN 0xFF99 13562306a36Sopenharmony_ci#define KEY_SYM_KP0 0xFFB0 13662306a36Sopenharmony_ci#define KEY_SYM_KP1 0xFFB1 13762306a36Sopenharmony_ci#define KEY_SYM_KP2 0xFFB2 13862306a36Sopenharmony_ci#define KEY_SYM_KP3 0xFFB3 13962306a36Sopenharmony_ci#define KEY_SYM_KP4 0xFFB4 14062306a36Sopenharmony_ci#define KEY_SYM_KP5 0xFFB5 14162306a36Sopenharmony_ci#define KEY_SYM_KP6 0xFFB6 14262306a36Sopenharmony_ci#define KEY_SYM_KP7 0xFFB7 14362306a36Sopenharmony_ci#define KEY_SYM_KP8 0xFFB8 14462306a36Sopenharmony_ci#define KEY_SYM_KP9 0xFFB9 14562306a36Sopenharmony_ci#define KEY_SYM_F1 0xFFBE // 1B 5B 5B 41 14662306a36Sopenharmony_ci#define KEY_SYM_F2 0xFFBF // 1B 5B 5B 42 14762306a36Sopenharmony_ci#define KEY_SYM_F3 0xFFC0 // 1B 5B 5B 43 14862306a36Sopenharmony_ci#define KEY_SYM_F4 0xFFC1 // 1B 5B 5B 44 14962306a36Sopenharmony_ci#define KEY_SYM_F5 0xFFC2 // 1B 5B 5B 45 15062306a36Sopenharmony_ci#define KEY_SYM_F6 0xFFC3 // 1B 5B 31 37 7E 15162306a36Sopenharmony_ci#define KEY_SYM_F7 0xFFC4 // 1B 5B 31 38 7E 15262306a36Sopenharmony_ci#define KEY_SYM_F8 0xFFC5 // 1B 5B 31 39 7E 15362306a36Sopenharmony_ci#define KEY_SYM_F9 0xFFC6 // 1B 5B 32 30 7E 15462306a36Sopenharmony_ci#define KEY_SYM_F10 0xFFC7 // 1B 5B 32 31 7E 15562306a36Sopenharmony_ci#define KEY_SYM_F11 0xFFC8 // 1B 5B 32 33 7E 15662306a36Sopenharmony_ci#define KEY_SYM_F12 0xFFC9 // 1B 5B 32 34 7E 15762306a36Sopenharmony_ci#define KEY_SYM_SHIFT 0xFFE1 15862306a36Sopenharmony_ci#define KEY_SYM_CTRL 0xFFE3 15962306a36Sopenharmony_ci#define KEY_SYM_ALT 0xFFE9 16062306a36Sopenharmony_ci#define KEY_SYM_CAP_LOCK 0xFFE5 16162306a36Sopenharmony_ci#define KEY_SYM_DELETE 0xFFFF 16262306a36Sopenharmony_ci#define KEY_SYM_TILDE 0x60 16362306a36Sopenharmony_ci#define KEY_SYM_BKTIC 0x7E 16462306a36Sopenharmony_ci#define KEY_SYM_ONE 0x31 16562306a36Sopenharmony_ci#define KEY_SYM_BANG 0x21 16662306a36Sopenharmony_ci#define KEY_SYM_TWO 0x32 16762306a36Sopenharmony_ci#define KEY_SYM_AT 0x40 16862306a36Sopenharmony_ci#define KEY_SYM_THREE 0x33 16962306a36Sopenharmony_ci#define KEY_SYM_POUND 0x23 17062306a36Sopenharmony_ci#define KEY_SYM_FOUR 0x34 17162306a36Sopenharmony_ci#define KEY_SYM_DOLLAR 0x24 17262306a36Sopenharmony_ci#define KEY_SYM_FIVE 0x35 17362306a36Sopenharmony_ci#define KEY_SYM_PERCENT 0x25 17462306a36Sopenharmony_ci#define KEY_SYM_SIX 0x36 17562306a36Sopenharmony_ci#define KEY_SYM_CARAT 0x5E 17662306a36Sopenharmony_ci#define KEY_SYM_SEVEN 0x37 17762306a36Sopenharmony_ci#define KEY_SYM_AMPER 0x26 17862306a36Sopenharmony_ci#define KEY_SYM_EIGHT 0x38 17962306a36Sopenharmony_ci#define KEY_SYM_STAR 0x2A 18062306a36Sopenharmony_ci#define KEY_SYM_NINE 0x39 18162306a36Sopenharmony_ci#define KEY_SYM_LPAREN 0x28 18262306a36Sopenharmony_ci#define KEY_SYM_ZERO 0x30 18362306a36Sopenharmony_ci#define KEY_SYM_RPAREN 0x29 18462306a36Sopenharmony_ci#define KEY_SYM_MINUS 0x2D 18562306a36Sopenharmony_ci#define KEY_SYM_USCORE 0x5F 18662306a36Sopenharmony_ci#define KEY_SYM_EQUAL 0x2B 18762306a36Sopenharmony_ci#define KEY_SYM_PLUS 0x3D 18862306a36Sopenharmony_ci#define KEY_SYM_LBRKT 0x5B 18962306a36Sopenharmony_ci#define KEY_SYM_LCURLY 0x7B 19062306a36Sopenharmony_ci#define KEY_SYM_RBRKT 0x5D 19162306a36Sopenharmony_ci#define KEY_SYM_RCURLY 0x7D 19262306a36Sopenharmony_ci#define KEY_SYM_SLASH 0x5C 19362306a36Sopenharmony_ci#define KEY_SYM_PIPE 0x7C 19462306a36Sopenharmony_ci#define KEY_SYM_TIC 0x27 19562306a36Sopenharmony_ci#define KEY_SYM_QUOTE 0x22 19662306a36Sopenharmony_ci#define KEY_SYM_SEMIC 0x3B 19762306a36Sopenharmony_ci#define KEY_SYM_COLON 0x3A 19862306a36Sopenharmony_ci#define KEY_SYM_COMMA 0x2C 19962306a36Sopenharmony_ci#define KEY_SYM_LT 0x3C 20062306a36Sopenharmony_ci#define KEY_SYM_PERIOD 0x2E 20162306a36Sopenharmony_ci#define KEY_SYM_GT 0x3E 20262306a36Sopenharmony_ci#define KEY_SYM_BSLASH 0x2F 20362306a36Sopenharmony_ci#define KEY_SYM_QMARK 0x3F 20462306a36Sopenharmony_ci#define KEY_SYM_A 0x41 20562306a36Sopenharmony_ci#define KEY_SYM_B 0x42 20662306a36Sopenharmony_ci#define KEY_SYM_C 0x43 20762306a36Sopenharmony_ci#define KEY_SYM_D 0x44 20862306a36Sopenharmony_ci#define KEY_SYM_E 0x45 20962306a36Sopenharmony_ci#define KEY_SYM_F 0x46 21062306a36Sopenharmony_ci#define KEY_SYM_G 0x47 21162306a36Sopenharmony_ci#define KEY_SYM_H 0x48 21262306a36Sopenharmony_ci#define KEY_SYM_I 0x49 21362306a36Sopenharmony_ci#define KEY_SYM_J 0x4A 21462306a36Sopenharmony_ci#define KEY_SYM_K 0x4B 21562306a36Sopenharmony_ci#define KEY_SYM_L 0x4C 21662306a36Sopenharmony_ci#define KEY_SYM_M 0x4D 21762306a36Sopenharmony_ci#define KEY_SYM_N 0x4E 21862306a36Sopenharmony_ci#define KEY_SYM_O 0x4F 21962306a36Sopenharmony_ci#define KEY_SYM_P 0x50 22062306a36Sopenharmony_ci#define KEY_SYM_Q 0x51 22162306a36Sopenharmony_ci#define KEY_SYM_R 0x52 22262306a36Sopenharmony_ci#define KEY_SYM_S 0x53 22362306a36Sopenharmony_ci#define KEY_SYM_T 0x54 22462306a36Sopenharmony_ci#define KEY_SYM_U 0x55 22562306a36Sopenharmony_ci#define KEY_SYM_V 0x56 22662306a36Sopenharmony_ci#define KEY_SYM_W 0x57 22762306a36Sopenharmony_ci#define KEY_SYM_X 0x58 22862306a36Sopenharmony_ci#define KEY_SYM_Y 0x59 22962306a36Sopenharmony_ci#define KEY_SYM_Z 0x5A 23062306a36Sopenharmony_ci#define KEY_SYM_a 0x61 23162306a36Sopenharmony_ci#define KEY_SYM_b 0x62 23262306a36Sopenharmony_ci#define KEY_SYM_c 0x63 23362306a36Sopenharmony_ci#define KEY_SYM_d 0x64 23462306a36Sopenharmony_ci#define KEY_SYM_e 0x65 23562306a36Sopenharmony_ci#define KEY_SYM_f 0x66 23662306a36Sopenharmony_ci#define KEY_SYM_g 0x67 23762306a36Sopenharmony_ci#define KEY_SYM_h 0x68 23862306a36Sopenharmony_ci#define KEY_SYM_i 0x69 23962306a36Sopenharmony_ci#define KEY_SYM_j 0x6A 24062306a36Sopenharmony_ci#define KEY_SYM_k 0x6B 24162306a36Sopenharmony_ci#define KEY_SYM_l 0x6C 24262306a36Sopenharmony_ci#define KEY_SYM_m 0x6D 24362306a36Sopenharmony_ci#define KEY_SYM_n 0x6E 24462306a36Sopenharmony_ci#define KEY_SYM_o 0x6F 24562306a36Sopenharmony_ci#define KEY_SYM_p 0x70 24662306a36Sopenharmony_ci#define KEY_SYM_q 0x71 24762306a36Sopenharmony_ci#define KEY_SYM_r 0x72 24862306a36Sopenharmony_ci#define KEY_SYM_s 0x73 24962306a36Sopenharmony_ci#define KEY_SYM_t 0x74 25062306a36Sopenharmony_ci#define KEY_SYM_u 0x75 25162306a36Sopenharmony_ci#define KEY_SYM_v 0x76 25262306a36Sopenharmony_ci#define KEY_SYM_w 0x77 25362306a36Sopenharmony_ci#define KEY_SYM_x 0x78 25462306a36Sopenharmony_ci#define KEY_SYM_y 0x79 25562306a36Sopenharmony_ci#define KEY_SYM_z 0x7A 25662306a36Sopenharmony_ci#define KEY_SYM_SPACE 0x20 25762306a36Sopenharmony_ci#endif /* _IBMASM_REMOTE_H_ */ 258