[coreboot] Seabios problems
congedete at voila.fr
congedete at voila.fr
Wed Jan 20 17:46:25 CET 2010
Hello, I can't apply the diff to the biosvar.h, so I do it by hand. All other diffs applied correctly.
The compiler throws errors:
Compiling whole program out/ccode.16.s
src/mouse.c: In function ‘disable_mouse’:
src/mouse.c:34: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:34: warning: type defaults to ‘int’ in declaration of ‘__val’
src/mouse.c:34: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:34: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:34: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:34: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: warning: type defaults to ‘int’ in declaration of ‘__sfv_val’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:37: warning: type defaults to ‘int’ in declaration of ‘__value_tmp’
src/mouse.c:34: error: memory input 1 is not directly addressable
src/mouse.c:34: error: memory input 1 is not directly addressable
src/mouse.c:34: error: memory input 1 is not directly addressable
src/mouse.c: In function ‘mouse_15c20001’:
src/mouse.c:65: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:65: warning: type defaults to ‘int’ in declaration of ‘__val’
src/mouse.c:65: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:65: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:65: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:65: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: warning: type defaults to ‘int’ in declaration of ‘__sfv_val’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/mouse.c:68: warning: type defaults to ‘int’ in declaration of ‘__value_tmp’
src/mouse.c:65: error: memory input 1 is not directly addressable
src/mouse.c:65: error: memory input 1 is not directly addressable
src/mouse.c:65: error: memory input 1 is not directly addressable
src/kbd.c: In function ‘set_leds’:
src/kbd.c:226: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:226: warning: type defaults to ‘int’ in declaration of ‘__val’
src/kbd.c:226: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:226: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:226: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:226: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: warning: type defaults to ‘int’ in declaration of ‘__sfv_val’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: error: ‘struct bios_data_area_s’ has no member named ‘kbd_led’
src/kbd.c:236: warning: type defaults to ‘int’ in declaration of ‘__value_tmp’
src/kbd.c:226: error: memory input 1 is not directly addressable
src/kbd.c:226: error: memory input 1 is not directly addressable
src/kbd.c:226: error: memory input 1 is not directly addressable
src/ps2port.c: In function ‘ps2_command’:
src/ps2port.c:217: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:217: warning: type defaults to ‘int’ in declaration of ‘__val’
src/ps2port.c:217: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:217: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:217: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:217: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:217: error: memory input 1 is not directly addressable
src/ps2port.c:217: error: memory input 1 is not directly addressable
src/ps2port.c:217: error: memory input 1 is not directly addressable
src/ps2port.c: In function ‘keyboard_init’:
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: warning: type defaults to ‘int’ in declaration of ‘__sfv_val’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: error: ‘struct extended_bios_data_area_s’ has no member named ‘ps2ctr’
src/ps2port.c:406: warning: type defaults to ‘int’ in declaration of ‘__value_tmp’
I tried with the last git, 0.5.1 released or 0.50, but without luck.
I need a little more help.
Thanks.
> Message du 18/01/10 à 22h24
> De : "Kevin O'Connor" <kevin at koconnor.net>
> A : congedete at voila.fr
> Copie à : seabios at seabios.org, "coreboot" <coreboot at coreboot.org>
> Objet : Re: [coreboot] Seabios problems
>
>
> On Mon, Jan 18, 2010 at 07:07:55PM +0100, congedete at voila.fr wrote:
> > The report tells the keyboard is initialized, but I wasn't able to
> > use my keyboard. The ps2 timeout seems to be the problem no?
>
> The earlier patch was just a test. Can you remove the old patches and
> try again with the patch below applied to the latest SeaBIOS git?
>
> -Kevin
>
>
> diff --git a/src/biosvar.h b/src/biosvar.h
> index b6e061b..2e43f8b 100644
> --- a/src/biosvar.h
> +++ b/src/biosvar.h
> @@ -97,7 +97,7 @@ struct bios_data_area_s {
> u8 floppy_media_state[4];
> u8 floppy_track[2];
> u8 kbd_flag2;
> - u8 kbd_led;
> + u8 kbd_flag3;
> struct segoff_s user_wait_complete_flag;
> u32 user_wait_timeout;
> // 40:A0
> @@ -123,6 +123,33 @@ struct bios_data_area_s {
> #define FMS_DOUBLE_STEPPING (1<<5)
> #define FMS_DATA_RATE_MASK (0xc0)
>
> +// Bit definitions for kbd_flag[0123]
> +#define KF0_RSHIFT (1<<0)
> +#define KF0_LSHIFT (1<<1)
> +#define KF0_CTRLACTIVE (1<<2)
> +#define KF0_ALTACTIVE (1<<3)
> +#define KF0_SCROLLACTIVE (1<<4)
> +#define KF0_NUMACTIVE (1<<5)
> +#define KF0_CAPSACTIVE (1<<6)
> +
> +#define KF1_LCTRL (1<<0)
> +#define KF1_LALT (1<<1)
> +#define KF1_PAUSEACTIVE (1<<3)
> +#define KF1_SCROLL (1<<4)
> +#define KF1_NUM (1<<5)
> +#define KF1_CAPS (1<<6)
> +
> +#define KF2_LAST_E1 (1<<0)
> +#define KF2_LAST_E0 (1<<1)
> +#define KF2_RCTRL (1<<2)
> +#define KF2_RALT (1<<3)
> +#define KF2_101KBD (1<<4)
> +
> +#define KF3_SCROLL_LED (1<<0)
> +#define KF3_NUM_LED (1<<1)
> +#define KF3_CAPS_LED (1<<2)
> +#define KF3_CMD_PENDING (1<<6)
> +
> // Accessor functions
> #define GET_BDA(var) \
> GET_FARVAR(SEG_BDA, ((struct bios_data_area_s *)0)->var)
> @@ -205,7 +232,6 @@ struct extended_bios_data_area_s {
> u8 other2[0xC4];
>
> // 0x121 - Begin custom storage.
> - u8 ps2ctr;
> int RTCusers;
>
> // El Torito Emulation data
> diff --git a/src/kbd.c b/src/kbd.c
> index 6f3ae15..44dce57 100644
> --- a/src/kbd.c
> +++ b/src/kbd.c
> @@ -11,28 +11,6 @@
> #include "bregs.h" // struct bregs
> #include "ps2port.h" // kbd_command
>
> -// Bit definitions for BDA kbd_flag[012]
> -#define KF0_RSHIFT (1<<0)
> -#define KF0_LSHIFT (1<<1)
> -#define KF0_CTRLACTIVE (1<<2)
> -#define KF0_ALTACTIVE (1<<3)
> -#define KF0_SCROLLACTIVE (1<<4)
> -#define KF0_NUMACTIVE (1<<5)
> -#define KF0_CAPSACTIVE (1<<6)
> -
> -#define KF1_LCTRL (1<<0)
> -#define KF1_LALT (1<<1)
> -#define KF1_PAUSEACTIVE (1<<3)
> -#define KF1_SCROLL (1<<4)
> -#define KF1_NUM (1<<5)
> -#define KF1_CAPS (1<<6)
> -
> -#define KF2_LAST_E1 (1<<0)
> -#define KF2_LAST_E0 (1<<1)
> -#define KF2_RCTRL (1<<2)
> -#define KF2_RALT (1<<3)
> -#define KF2_101KBD (1<<4)
> -
> void
> kbd_setup(void)
> {
> @@ -223,7 +201,7 @@ static void
> set_leds(void)
> {
> u8 shift_flags = (GET_BDA(kbd_flag0) >> 4) & 0x07;
> - u8 kbd_led = GET_BDA(kbd_led);
> + u8 kbd_led = GET_BDA(kbd_flag3);
> u8 led_flags = kbd_led & 0x07;
> if (shift_flags == led_flags)
> return;
> @@ -233,7 +211,7 @@ set_leds(void)
> // Error
> return;
> kbd_led = (kbd_led & ~0x07) | shift_flags;
> - SET_BDA(kbd_led, kbd_led);
> + SET_BDA(kbd_flag3, kbd_led);
> }
>
> // INT 16h Keyboard Service Entry Point
> diff --git a/src/mouse.c b/src/mouse.c
> index 52e225c..888d32d 100644
> --- a/src/mouse.c
> +++ b/src/mouse.c
> @@ -29,13 +29,8 @@ mouse_setup(void)
> #define RET_ENOHANDLER 0x05
>
> static int
> -disable_mouse(u16 ebda_seg)
> +disable_mouse(void)
> {
> - u8 ps2ctr = GET_EBDA2(ebda_seg, ps2ctr);
> - ps2ctr |= I8042_CTR_AUXDIS;
> - ps2ctr &= ~I8042_CTR_AUXINT;
> - SET_EBDA2(ebda_seg, ps2ctr, ps2ctr);
> -
> return aux_command(PSMOUSE_CMD_DISABLE, NULL);
> }
>
> @@ -43,8 +38,7 @@ disable_mouse(u16 ebda_seg)
> static void
> mouse_15c20000(struct bregs *regs)
> {
> - u16 ebda_seg = get_ebda_seg();
> - int ret = disable_mouse(ebda_seg);
> + int ret = disable_mouse();
> if (ret)
> set_code_invalid(regs, RET_ENEEDRESEND);
> else
> @@ -55,18 +49,12 @@ mouse_15c20000(struct bregs *regs)
> static void
> mouse_15c20001(struct bregs *regs)
> {
> - u16 ebda_seg = get_ebda_seg();
> - u8 mouse_flags_2 = GET_EBDA2(ebda_seg, mouse_flag2);
> + u8 mouse_flags_2 = GET_EBDA(mouse_flag2);
> if ((mouse_flags_2 & 0x80) == 0) {
> set_code_invalid(regs, RET_ENOHANDLER);
> return;
> }
>
> - u8 ps2ctr = GET_EBDA2(ebda_seg, ps2ctr);
> - ps2ctr &= ~I8042_CTR_AUXDIS;
> - ps2ctr |= I8042_CTR_AUXINT;
> - SET_EBDA2(ebda_seg, ps2ctr, ps2ctr);
> -
> int ret = aux_command(PSMOUSE_CMD_ENABLE, NULL);
> if (ret)
> set_code_invalid(regs, RET_ENEEDRESEND);
> @@ -241,7 +229,7 @@ mouse_15c207(struct bregs *regs)
> /* remove handler */
> if ((mouse_flags_2 & 0x80) != 0) {
> mouse_flags_2 &= ~0x80;
> - disable_mouse(ebda_seg);
> + disable_mouse();
> }
> } else {
> /* install handler */
> diff --git a/src/ps2port.c b/src/ps2port.c
> index fb9d24a..b52f994 100644
> --- a/src/ps2port.c
> +++ b/src/ps2port.c
> @@ -151,6 +151,18 @@ process_ps2byte(u8 status, u8 data)
> process_key(data);
> }
>
> +static void
> +process_ps2bytes(void)
> +{
> + for (;;) {
> + u8 status = inb(PORT_PS2_STATUS);
> + if (!(status & I8042_STR_OBF))
> + return;
> + u8 data = inb(PORT_PS2_DATA);
> + process_ps2byte(status, data);
> + }
> +}
> +
> static int
> ps2_recvbyte(int aux, int needack, int timeout)
> {
> @@ -209,22 +221,13 @@ ps2_sendbyte(int aux, u8 command, int timeout)
> static int
> ps2_command(int aux, int command, u8 *param)
> {
> - int ret2;
> + int ret;
> int receive = (command >> 8) & 0xf;
> int send = (command >> 12) & 0xf;
>
> - // Disable interrupts and keyboard/mouse.
> - u8 ps2ctr = GET_EBDA(ps2ctr);
> - u8 newctr = ps2ctr;
> - if (aux)
> - newctr |= I8042_CTR_KBDDIS;
> - else
> - newctr |= I8042_CTR_AUXDIS;
> - newctr &= ~(I8042_CTR_KBDINT|I8042_CTR_AUXINT);
> - dprintf(6, "i8042 ctr old=%x new=%x\n", ps2ctr, newctr);
> - int ret = i8042_command(I8042_CMD_CTL_WCTR, &newctr);
> - if (ret)
> - return ret;
> + // Disable processing of interrupts.
> + u8 kbdflag = GET_BDA(kbd_flag3);
> + SET_BDA(kbd_flag3, kbdflag | KF3_CMD_PENDING);
>
> if (command == ATKBD_CMD_RESET_BAT) {
> // Reset is special wrt timeouts.
> @@ -270,10 +273,10 @@ ps2_command(int aux, int command, u8 *param)
> ret = 0;
>
> fail:
> - // Restore interrupts and keyboard/mouse.
> - ret2 = i8042_command(I8042_CMD_CTL_WCTR, &ps2ctr);
> - if (ret2)
> - return ret2;
> + // Restore processing of interrupts.
> + if (!(kbdflag & KF3_CMD_PENDING))
> + process_ps2bytes();
> + SET_BDA(kbd_flag3, kbdflag);
>
> return ret;
> }
> @@ -306,14 +309,10 @@ aux_command(int command, u8 *param)
> static void
> process_ps2irq(void)
> {
> - u8 status = inb(PORT_PS2_STATUS);
> - if (!(status & I8042_STR_OBF)) {
> - dprintf(1, "ps2 irq but no data.\n");
> + if (GET_BDA(kbd_flag3) & KF3_CMD_PENDING)
> + // PS/2 command in progress - it will handle this event.
> return;
> - }
> - u8 data = inb(PORT_PS2_DATA);
> -
> - process_ps2byte(status, data);
> + process_ps2bytes();
> }
>
> // INT74h : PS/2 mouse hardware interrupt
> @@ -402,8 +401,12 @@ keyboard_init(void *data)
> if (ret)
> return;
>
> - // Keyboard Mode: scan code convert, disable mouse, enable IRQ 1
> - SET_EBDA(ps2ctr, I8042_CTR_AUXDIS | I8042_CTR_XLATE | I8042_CTR_KBDINT);
> + // Mode: scan code convert, enable IRQ 1, enable IRQ 12
> + param[0] = I8042_CTR_XLATE | I8042_CTR_KBDINT | I8042_CTR_AUXINT;
> + ret = i8042_command(I8042_CMD_CTL_WCTR, param);
> + if (ret)
> + return;
> + CLEARBITS_BDA(kbd_flag3, KF3_CMD_PENDING);
>
> /* Enable keyboard */
> ret = kbd_command(ATKBD_CMD_ENABLE, NULL);
> @@ -420,6 +423,8 @@ ps2port_setup(void)
> return;
> dprintf(3, "init ps2port\n");
>
> + // Setup irqs, but disable them until init complete.
> + SETBITS_BDA(kbd_flag3, KF3_CMD_PENDING);
> enable_hwirq(1, entry_09);
> enable_hwirq(12, entry_74);
>
>
> --
> coreboot mailing list: coreboot at coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot
>
>
____________________________________________________
Je m’évite la cohue dans les magasins et je profite des petits prix sur http://shopping.voila.fr
More information about the coreboot
mailing list