Skip to content

Commit f6db755

Browse files
fyin1jren1
authored andcommitted
DM: add deinit function for ps2kbd and ps2mouse
Add deinit function for ps2kbd and ps2mouse. To support deinit function for ps2kbd and ps2mouse which has struct atkbdc_base as parameter, we make struct atkbdc_base exported as public. We also add console unregister function for keyboard and mouse. Which are called in ps2mouse/ps2kbd deinit function. Signed-off-by: Yin Fengwei <fengwei.yin@intel.com> Acked-by: Eddie Dong <Eddie.dong@intel.com>
1 parent f0b7401 commit f6db755

File tree

8 files changed

+121
-83
lines changed

8 files changed

+121
-83
lines changed

devicemodel/core/console.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
* SUCH DAMAGE.
2525
*/
2626

27+
#include <stdio.h>
2728
#include <sys/cdefs.h>
2829
#include <sys/types.h>
2930

@@ -91,6 +92,14 @@ console_kbd_register(kbd_event_func_t event_cb, void *arg, int pri)
9192
}
9293
}
9394

95+
void
96+
console_kbd_unregister(void)
97+
{
98+
console.kbd_event_cb = NULL;
99+
console.kbd_arg = NULL;
100+
console.kbd_priority = 0;
101+
}
102+
94103
void
95104
console_ptr_register(ptr_event_func_t event_cb, void *arg, int pri)
96105
{
@@ -101,6 +110,14 @@ console_ptr_register(ptr_event_func_t event_cb, void *arg, int pri)
101110
}
102111
}
103112

113+
void
114+
console_ptr_unregister()
115+
{
116+
console.ptr_event_cb = NULL;
117+
console.ptr_arg = NULL;
118+
console.ptr_priority = 0;
119+
}
120+
104121
void
105122
console_key_event(int down, uint32_t keysym)
106123
{

devicemodel/hw/platform/atkbdc.c

Lines changed: 1 addition & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -42,93 +42,12 @@
4242
#include "pci_core.h"
4343
#include "irq.h"
4444
#include "lpc.h"
45+
#include "atkbdc.h"
4546
#include "ps2kbd.h"
4647
#include "ps2mouse.h"
4748
#include "vmm.h"
4849
#include "vmmapi.h"
4950

50-
#define KBD_DATA_PORT 0x60
51-
52-
#define KBD_STS_CTL_PORT 0x64
53-
54-
#define KBDC_RESET 0xfe
55-
56-
#define KBD_DEV_IRQ 1
57-
#define AUX_DEV_IRQ 12
58-
59-
/* controller commands */
60-
#define KBDC_SET_COMMAND_BYTE 0x60
61-
#define KBDC_GET_COMMAND_BYTE 0x20
62-
#define KBDC_DISABLE_AUX_PORT 0xa7
63-
#define KBDC_ENABLE_AUX_PORT 0xa8
64-
#define KBDC_TEST_AUX_PORT 0xa9
65-
#define KBDC_TEST_CTRL 0xaa
66-
#define KBDC_TEST_KBD_PORT 0xab
67-
#define KBDC_DISABLE_KBD_PORT 0xad
68-
#define KBDC_ENABLE_KBD_PORT 0xae
69-
#define KBDC_READ_INPORT 0xc0
70-
#define KBDC_READ_OUTPORT 0xd0
71-
#define KBDC_WRITE_OUTPORT 0xd1
72-
#define KBDC_WRITE_KBD_OUTBUF 0xd2
73-
#define KBDC_WRITE_AUX_OUTBUF 0xd3
74-
#define KBDC_WRITE_TO_AUX 0xd4
75-
76-
/* controller command byte (set by KBDC_SET_COMMAND_BYTE) */
77-
#define KBD_TRANSLATION 0x40
78-
#define KBD_SYS_FLAG_BIT 0x04
79-
#define KBD_DISABLE_KBD_PORT 0x10
80-
#define KBD_DISABLE_AUX_PORT 0x20
81-
#define KBD_ENABLE_AUX_INT 0x02
82-
#define KBD_ENABLE_KBD_INT 0x01
83-
#define KBD_KBD_CONTROL_BITS (KBD_DISABLE_KBD_PORT | KBD_ENABLE_KBD_INT)
84-
#define KBD_AUX_CONTROL_BITS (KBD_DISABLE_AUX_PORT | KBD_ENABLE_AUX_INT)
85-
86-
/* controller status bits */
87-
#define KBDS_KBD_BUFFER_FULL 0x01
88-
#define KBDS_SYS_FLAG 0x04
89-
#define KBDS_CTRL_FLAG 0x08
90-
#define KBDS_AUX_BUFFER_FULL 0x20
91-
92-
/* controller output port */
93-
#define KBDO_KBD_OUTFULL 0x10
94-
#define KBDO_AUX_OUTFULL 0x20
95-
96-
#define RAMSZ 32
97-
#define FIFOSZ 15
98-
#define CTRL_CMD_FLAG 0x8000
99-
100-
struct kbd_dev {
101-
bool irq_active;
102-
int irq;
103-
104-
uint8_t buffer[FIFOSZ];
105-
int brd, bwr;
106-
int bcnt;
107-
};
108-
109-
struct aux_dev {
110-
bool irq_active;
111-
int irq;
112-
};
113-
114-
struct atkbdc_base {
115-
struct vmctx *ctx;
116-
pthread_mutex_t mtx;
117-
118-
struct ps2kbd_info *ps2kbd;
119-
struct ps2mouse_info *ps2mouse;
120-
121-
uint8_t status; /* status register */
122-
uint8_t outport; /* controller output port */
123-
uint8_t ram[RAMSZ]; /* byte0 = controller config */
124-
125-
uint32_t curcmd; /* current command for next byte */
126-
uint32_t ctrlbyte;
127-
128-
struct kbd_dev kbd;
129-
struct aux_dev aux;
130-
};
131-
13251
static void
13352
atkbdc_assert_kbd_intr(struct atkbdc_base *base)
13453
{

devicemodel/hw/platform/ps2kbd.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,3 +475,11 @@ ps2kbd_init(struct atkbdc_base *base)
475475

476476
return kbd;
477477
}
478+
479+
void
480+
ps2kbd_deinit(struct atkbdc_base *base)
481+
{
482+
console_kbd_unregister();
483+
free(base->ps2kbd);
484+
base->ps2kbd = NULL;
485+
}

devicemodel/hw/platform/ps2mouse.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,3 +410,12 @@ ps2mouse_init(struct atkbdc_base *base)
410410

411411
return mouse;
412412
}
413+
414+
void
415+
ps2mouse_deinit(struct atkbdc_base *base)
416+
{
417+
console_ptr_unregister();
418+
fifo_reset(base->ps2mouse);
419+
free(base->ps2mouse);
420+
base->ps2mouse = NULL;
421+
}

devicemodel/include/atkbdc.h

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,90 @@
2929
#ifndef _ATKBDC_H_
3030
#define _ATKBDC_H_
3131

32-
struct atkbdc_base;
32+
#define KBD_DATA_PORT 0x60
33+
34+
#define KBD_STS_CTL_PORT 0x64
35+
36+
#define KBDC_RESET 0xfe
37+
38+
#define KBD_DEV_IRQ 1
39+
#define AUX_DEV_IRQ 12
40+
41+
/* controller commands */
42+
#define KBDC_SET_COMMAND_BYTE 0x60
43+
#define KBDC_GET_COMMAND_BYTE 0x20
44+
#define KBDC_DISABLE_AUX_PORT 0xa7
45+
#define KBDC_ENABLE_AUX_PORT 0xa8
46+
#define KBDC_TEST_AUX_PORT 0xa9
47+
#define KBDC_TEST_CTRL 0xaa
48+
#define KBDC_TEST_KBD_PORT 0xab
49+
#define KBDC_DISABLE_KBD_PORT 0xad
50+
#define KBDC_ENABLE_KBD_PORT 0xae
51+
#define KBDC_READ_INPORT 0xc0
52+
#define KBDC_READ_OUTPORT 0xd0
53+
#define KBDC_WRITE_OUTPORT 0xd1
54+
#define KBDC_WRITE_KBD_OUTBUF 0xd2
55+
#define KBDC_WRITE_AUX_OUTBUF 0xd3
56+
#define KBDC_WRITE_TO_AUX 0xd4
57+
58+
/* controller command byte (set by KBDC_SET_COMMAND_BYTE) */
59+
#define KBD_TRANSLATION 0x40
60+
#define KBD_SYS_FLAG_BIT 0x04
61+
#define KBD_DISABLE_KBD_PORT 0x10
62+
#define KBD_DISABLE_AUX_PORT 0x20
63+
#define KBD_ENABLE_AUX_INT 0x02
64+
#define KBD_ENABLE_KBD_INT 0x01
65+
#define KBD_KBD_CONTROL_BITS (KBD_DISABLE_KBD_PORT | KBD_ENABLE_KBD_INT)
66+
#define KBD_AUX_CONTROL_BITS (KBD_DISABLE_AUX_PORT | KBD_ENABLE_AUX_INT)
67+
68+
/* controller status bits */
69+
#define KBDS_KBD_BUFFER_FULL 0x01
70+
#define KBDS_SYS_FLAG 0x04
71+
#define KBDS_CTRL_FLAG 0x08
72+
#define KBDS_AUX_BUFFER_FULL 0x20
73+
74+
/* controller output port */
75+
#define KBDO_KBD_OUTFULL 0x10
76+
#define KBDO_AUX_OUTFULL 0x20
77+
78+
#define RAMSZ 32
79+
#define FIFOSZ 15
80+
#define CTRL_CMD_FLAG 0x8000
81+
3382
struct vmctx;
3483

84+
struct kbd_dev {
85+
bool irq_active;
86+
int irq;
87+
88+
uint8_t buffer[FIFOSZ];
89+
int brd, bwr;
90+
int bcnt;
91+
};
92+
93+
struct aux_dev {
94+
bool irq_active;
95+
int irq;
96+
};
97+
98+
struct atkbdc_base {
99+
struct vmctx *ctx;
100+
pthread_mutex_t mtx;
101+
102+
struct ps2kbd_info *ps2kbd;
103+
struct ps2mouse_info *ps2mouse;
104+
105+
uint8_t status; /* status register */
106+
uint8_t outport; /* controller output port */
107+
uint8_t ram[RAMSZ]; /* byte0 = controller config */
108+
109+
uint32_t curcmd; /* current command for next byte */
110+
uint32_t ctrlbyte;
111+
112+
struct kbd_dev kbd;
113+
struct aux_dev aux;
114+
};
115+
35116
void atkbdc_init(struct vmctx *ctx);
36117
void atkbdc_event(struct atkbdc_base *base, int iskbd);
37118

devicemodel/include/console.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@ void console_fb_register(fb_render_func_t render_cb, void *arg);
4545
void console_refresh(void);
4646

4747
void console_kbd_register(kbd_event_func_t event_cb, void *arg, int pri);
48+
void console_kbd_unregister(void);
4849
void console_key_event(int down, uint32_t keysym);
4950

5051
void console_ptr_register(ptr_event_func_t event_cb, void *arg, int pri);
52+
void console_ptr_unregister(void);
5153
void console_ptr_event(uint8_t button, int x, int y);
5254

5355
#endif /* _CONSOLE_H_ */

devicemodel/include/ps2kbd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
struct atkbdc_base;
3333

3434
struct ps2kbd_info *ps2kbd_init(struct atkbdc_base *base);
35+
void ps2kbd_deinit(struct atkbdc_base *base);
3536

3637
int ps2kbd_read(struct ps2kbd_info *kbd, uint8_t *val);
3738
void ps2kbd_write(struct ps2kbd_info *kbd, uint8_t val);

devicemodel/include/ps2mouse.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
struct atkbdc_base;
3333

3434
struct ps2mouse_info *ps2mouse_init(struct atkbdc_base *base);
35+
void ps2mouse_deinit(struct atkbdc_base *base);
3536

3637
int ps2mouse_read(struct ps2mouse_info *mouse, uint8_t *val);
3738
void ps2mouse_write(struct ps2mouse_info *mouse, uint8_t val, int insert);

0 commit comments

Comments
 (0)