Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 
0003 /*
0004  * IBM ASM Service Processor Device Driver
0005  *
0006  * Copyright (C) IBM Corporation, 2004
0007  *
0008  * Author: Max Asböck <amax@us.ibm.com>
0009  *
0010  * Originally written by Pete Reynolds
0011  */
0012 
0013 #ifndef _IBMASM_REMOTE_H_
0014 #define _IBMASM_REMOTE_H_
0015 
0016 #include <asm/io.h>
0017 
0018 /* pci offsets */
0019 #define CONDOR_MOUSE_DATA       0x000AC000
0020 #define CONDOR_MOUSE_ISR_CONTROL    0x00
0021 #define CONDOR_MOUSE_ISR_STATUS     0x04
0022 #define CONDOR_MOUSE_Q_READER       0x08
0023 #define CONDOR_MOUSE_Q_WRITER       0x0C
0024 #define CONDOR_MOUSE_Q_BEGIN        0x10
0025 #define CONDOR_MOUSE_MAX_X      0x14
0026 #define CONDOR_MOUSE_MAX_Y      0x18
0027 
0028 #define CONDOR_INPUT_DESKTOP_INFO   0x1F0
0029 #define CONDOR_INPUT_DISPLAY_RESX   0x1F4
0030 #define CONDOR_INPUT_DISPLAY_RESY   0x1F8
0031 #define CONDOR_INPUT_DISPLAY_BITS   0x1FC
0032 #define CONDOR_OUTPUT_VNC_STATUS    0x200
0033 
0034 #define CONDOR_MOUSE_INTR_STATUS_MASK   0x00000001
0035 
0036 #define INPUT_TYPE_MOUSE    0x1
0037 #define INPUT_TYPE_KEYBOARD 0x2
0038 
0039 
0040 /* mouse button states received from SP */
0041 #define REMOTE_DOUBLE_CLICK 0xF0
0042 #define REMOTE_BUTTON_LEFT  0x01
0043 #define REMOTE_BUTTON_MIDDLE    0x02
0044 #define REMOTE_BUTTON_RIGHT 0x04
0045 
0046 /* size of keysym/keycode translation matrices */
0047 #define XLATE_SIZE 256
0048 
0049 struct mouse_input {
0050     unsigned short  y;
0051     unsigned short  x;
0052 };
0053 
0054 
0055 struct keyboard_input {
0056     unsigned short  key_code;
0057     unsigned char   key_flag;
0058     unsigned char   key_down;
0059 };
0060 
0061 
0062 
0063 struct remote_input {
0064     union {
0065         struct mouse_input  mouse;
0066         struct keyboard_input   keyboard;
0067     } data;
0068 
0069     unsigned char   type;
0070     unsigned char   pad1;
0071     unsigned char   mouse_buttons;
0072     unsigned char   pad3;
0073 };
0074 
0075 #define mouse_addr(sp)      (sp->base_address + CONDOR_MOUSE_DATA)
0076 #define display_width(sp)   (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESX)
0077 #define display_height(sp)  (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_RESY)
0078 #define display_depth(sp)   (mouse_addr(sp) + CONDOR_INPUT_DISPLAY_BITS)
0079 #define desktop_info(sp)    (mouse_addr(sp) + CONDOR_INPUT_DESKTOP_INFO)
0080 #define vnc_status(sp)      (mouse_addr(sp) + CONDOR_OUTPUT_VNC_STATUS)
0081 #define isr_control(sp)     (mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL)
0082 
0083 #define mouse_interrupt_pending(sp) readl(mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS)
0084 #define clear_mouse_interrupt(sp)   writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_STATUS)
0085 #define enable_mouse_interrupts(sp) writel(1, mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL)
0086 #define disable_mouse_interrupts(sp)    writel(0, mouse_addr(sp) + CONDOR_MOUSE_ISR_CONTROL)
0087 
0088 /* remote input queue operations */
0089 #define REMOTE_QUEUE_SIZE   60
0090 
0091 #define get_queue_writer(sp)    readl(mouse_addr(sp) + CONDOR_MOUSE_Q_WRITER)
0092 #define get_queue_reader(sp)    readl(mouse_addr(sp) + CONDOR_MOUSE_Q_READER)
0093 #define set_queue_reader(sp, reader)    writel(reader, mouse_addr(sp) + CONDOR_MOUSE_Q_READER)
0094 
0095 #define queue_begin (mouse_addr(sp) + CONDOR_MOUSE_Q_BEGIN)
0096 
0097 #define get_queue_entry(sp, read_index) \
0098     ((void*)(queue_begin + read_index * sizeof(struct remote_input)))
0099 
0100 static inline int advance_queue_reader(struct service_processor *sp, unsigned long reader)
0101 {
0102     reader++;
0103     if (reader == REMOTE_QUEUE_SIZE)
0104         reader = 0;
0105 
0106     set_queue_reader(sp, reader);
0107     return reader;
0108 }
0109 
0110 #define NO_KEYCODE 0
0111 #define KEY_SYM_BK_SPC   0xFF08
0112 #define KEY_SYM_TAB      0xFF09
0113 #define KEY_SYM_ENTER    0xFF0D
0114 #define KEY_SYM_SCR_LOCK 0xFF14
0115 #define KEY_SYM_ESCAPE   0xFF1B
0116 #define KEY_SYM_HOME     0xFF50
0117 #define KEY_SYM_LARROW   0xFF51
0118 #define KEY_SYM_UARROW   0xFF52
0119 #define KEY_SYM_RARROW   0xFF53
0120 #define KEY_SYM_DARROW   0xFF54
0121 #define KEY_SYM_PAGEUP   0xFF55
0122 #define KEY_SYM_PAGEDOWN 0xFF56
0123 #define KEY_SYM_END      0xFF57
0124 #define KEY_SYM_INSERT   0xFF63
0125 #define KEY_SYM_NUM_LOCK 0xFF7F
0126 #define KEY_SYM_KPSTAR   0xFFAA
0127 #define KEY_SYM_KPPLUS   0xFFAB
0128 #define KEY_SYM_KPMINUS  0xFFAD
0129 #define KEY_SYM_KPDOT    0xFFAE
0130 #define KEY_SYM_KPSLASH  0xFFAF
0131 #define KEY_SYM_KPRIGHT  0xFF96
0132 #define KEY_SYM_KPUP     0xFF97
0133 #define KEY_SYM_KPLEFT   0xFF98
0134 #define KEY_SYM_KPDOWN   0xFF99
0135 #define KEY_SYM_KP0      0xFFB0
0136 #define KEY_SYM_KP1      0xFFB1
0137 #define KEY_SYM_KP2      0xFFB2
0138 #define KEY_SYM_KP3      0xFFB3
0139 #define KEY_SYM_KP4      0xFFB4
0140 #define KEY_SYM_KP5      0xFFB5
0141 #define KEY_SYM_KP6      0xFFB6
0142 #define KEY_SYM_KP7      0xFFB7
0143 #define KEY_SYM_KP8      0xFFB8
0144 #define KEY_SYM_KP9      0xFFB9
0145 #define KEY_SYM_F1       0xFFBE      // 1B 5B 5B 41
0146 #define KEY_SYM_F2       0xFFBF      // 1B 5B 5B 42
0147 #define KEY_SYM_F3       0xFFC0      // 1B 5B 5B 43
0148 #define KEY_SYM_F4       0xFFC1      // 1B 5B 5B 44
0149 #define KEY_SYM_F5       0xFFC2      // 1B 5B 5B 45
0150 #define KEY_SYM_F6       0xFFC3      // 1B 5B 31 37 7E
0151 #define KEY_SYM_F7       0xFFC4      // 1B 5B 31 38 7E
0152 #define KEY_SYM_F8       0xFFC5      // 1B 5B 31 39 7E
0153 #define KEY_SYM_F9       0xFFC6      // 1B 5B 32 30 7E
0154 #define KEY_SYM_F10      0xFFC7      // 1B 5B 32 31 7E
0155 #define KEY_SYM_F11      0xFFC8      // 1B 5B 32 33 7E
0156 #define KEY_SYM_F12      0xFFC9      // 1B 5B 32 34 7E
0157 #define KEY_SYM_SHIFT    0xFFE1
0158 #define KEY_SYM_CTRL     0xFFE3
0159 #define KEY_SYM_ALT      0xFFE9
0160 #define KEY_SYM_CAP_LOCK 0xFFE5
0161 #define KEY_SYM_DELETE   0xFFFF
0162 #define KEY_SYM_TILDE    0x60
0163 #define KEY_SYM_BKTIC    0x7E
0164 #define KEY_SYM_ONE      0x31
0165 #define KEY_SYM_BANG     0x21
0166 #define KEY_SYM_TWO      0x32
0167 #define KEY_SYM_AT       0x40
0168 #define KEY_SYM_THREE    0x33
0169 #define KEY_SYM_POUND    0x23
0170 #define KEY_SYM_FOUR     0x34
0171 #define KEY_SYM_DOLLAR   0x24
0172 #define KEY_SYM_FIVE     0x35
0173 #define KEY_SYM_PERCENT  0x25
0174 #define KEY_SYM_SIX      0x36
0175 #define KEY_SYM_CARAT    0x5E
0176 #define KEY_SYM_SEVEN    0x37
0177 #define KEY_SYM_AMPER    0x26
0178 #define KEY_SYM_EIGHT    0x38
0179 #define KEY_SYM_STAR     0x2A
0180 #define KEY_SYM_NINE     0x39
0181 #define KEY_SYM_LPAREN   0x28
0182 #define KEY_SYM_ZERO     0x30
0183 #define KEY_SYM_RPAREN   0x29
0184 #define KEY_SYM_MINUS    0x2D
0185 #define KEY_SYM_USCORE   0x5F
0186 #define KEY_SYM_EQUAL    0x2B
0187 #define KEY_SYM_PLUS     0x3D
0188 #define KEY_SYM_LBRKT    0x5B
0189 #define KEY_SYM_LCURLY   0x7B
0190 #define KEY_SYM_RBRKT    0x5D
0191 #define KEY_SYM_RCURLY   0x7D
0192 #define KEY_SYM_SLASH    0x5C
0193 #define KEY_SYM_PIPE     0x7C
0194 #define KEY_SYM_TIC      0x27
0195 #define KEY_SYM_QUOTE    0x22
0196 #define KEY_SYM_SEMIC    0x3B
0197 #define KEY_SYM_COLON    0x3A
0198 #define KEY_SYM_COMMA    0x2C
0199 #define KEY_SYM_LT       0x3C
0200 #define KEY_SYM_PERIOD   0x2E
0201 #define KEY_SYM_GT       0x3E
0202 #define KEY_SYM_BSLASH   0x2F
0203 #define KEY_SYM_QMARK    0x3F
0204 #define KEY_SYM_A        0x41
0205 #define KEY_SYM_B        0x42
0206 #define KEY_SYM_C        0x43
0207 #define KEY_SYM_D        0x44
0208 #define KEY_SYM_E        0x45
0209 #define KEY_SYM_F        0x46
0210 #define KEY_SYM_G        0x47
0211 #define KEY_SYM_H        0x48
0212 #define KEY_SYM_I        0x49
0213 #define KEY_SYM_J        0x4A
0214 #define KEY_SYM_K        0x4B
0215 #define KEY_SYM_L        0x4C
0216 #define KEY_SYM_M        0x4D
0217 #define KEY_SYM_N        0x4E
0218 #define KEY_SYM_O        0x4F
0219 #define KEY_SYM_P        0x50
0220 #define KEY_SYM_Q        0x51
0221 #define KEY_SYM_R        0x52
0222 #define KEY_SYM_S        0x53
0223 #define KEY_SYM_T        0x54
0224 #define KEY_SYM_U        0x55
0225 #define KEY_SYM_V        0x56
0226 #define KEY_SYM_W        0x57
0227 #define KEY_SYM_X        0x58
0228 #define KEY_SYM_Y        0x59
0229 #define KEY_SYM_Z        0x5A
0230 #define KEY_SYM_a        0x61
0231 #define KEY_SYM_b        0x62
0232 #define KEY_SYM_c        0x63
0233 #define KEY_SYM_d        0x64
0234 #define KEY_SYM_e        0x65
0235 #define KEY_SYM_f        0x66
0236 #define KEY_SYM_g        0x67
0237 #define KEY_SYM_h        0x68
0238 #define KEY_SYM_i        0x69
0239 #define KEY_SYM_j        0x6A
0240 #define KEY_SYM_k        0x6B
0241 #define KEY_SYM_l        0x6C
0242 #define KEY_SYM_m        0x6D
0243 #define KEY_SYM_n        0x6E
0244 #define KEY_SYM_o        0x6F
0245 #define KEY_SYM_p        0x70
0246 #define KEY_SYM_q        0x71
0247 #define KEY_SYM_r        0x72
0248 #define KEY_SYM_s        0x73
0249 #define KEY_SYM_t        0x74
0250 #define KEY_SYM_u        0x75
0251 #define KEY_SYM_v        0x76
0252 #define KEY_SYM_w        0x77
0253 #define KEY_SYM_x        0x78
0254 #define KEY_SYM_y        0x79
0255 #define KEY_SYM_z        0x7A
0256 #define KEY_SYM_SPACE    0x20
0257 #endif /* _IBMASM_REMOTE_H_ */