From 2512522d49c0b42338cbc59f38083b81de0a3ed8 Mon Sep 17 00:00:00 2001 From: Zachary Amsden Date: Fri, 6 Jan 2006 00:11:56 -0800 Subject: [PATCH] --- yaml --- r: 16375 b: refs/heads/master c: e6a9918c9617ed21f71f2f20b45efe06822c8f00 h: refs/heads/master i: 16373: a073e60a8ac266c61059e84e631b4a6b029e4891 16371: 46387e49dc864b29a4023e66da19237ff90304c9 16367: 2d5e057e812be99caf664003b3650eafb580e8c4 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/head.S | 12 ++++++++---- trunk/drivers/pnp/pnpbios/bioscalls.c | 15 ++++----------- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index 40ba1de8a5d3..1f6a0796fe27 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5fe9fe3c6f9a1ae7aa224bb7a66eb9aad9e4abef +refs/heads/master: e6a9918c9617ed21f71f2f20b45efe06822c8f00 diff --git a/trunk/arch/i386/kernel/head.S b/trunk/arch/i386/kernel/head.S index 58d2746670b7..5884469f6bfe 100644 --- a/trunk/arch/i386/kernel/head.S +++ b/trunk/arch/i386/kernel/head.S @@ -504,10 +504,14 @@ ENTRY(cpu_gdt_table) .quad 0x0000000000000000 /* 0x80 TSS descriptor */ .quad 0x0000000000000000 /* 0x88 LDT descriptor */ - /* Segments used for calling PnP BIOS have byte granularity */ - .quad 0x00409a0000000000 /* 0x90 32-bit code */ - .quad 0x00009a0000000000 /* 0x98 16-bit code */ - .quad 0x0000920000000000 /* 0xa0 16-bit data */ + /* + * Segments used for calling PnP BIOS have byte granularity. + * They code segments and data segments have fixed 64k limits, + * the transfer segment sizes are set at run time. + */ + .quad 0x00409a000000ffff /* 0x90 32-bit code */ + .quad 0x00009a000000ffff /* 0x98 16-bit code */ + .quad 0x000092000000ffff /* 0xa0 16-bit data */ .quad 0x0000920000000000 /* 0xa8 16-bit data */ .quad 0x0000920000000000 /* 0xb0 16-bit data */ diff --git a/trunk/drivers/pnp/pnpbios/bioscalls.c b/trunk/drivers/pnp/pnpbios/bioscalls.c index a72126180e97..a1f0b0ba2bfe 100644 --- a/trunk/drivers/pnp/pnpbios/bioscalls.c +++ b/trunk/drivers/pnp/pnpbios/bioscalls.c @@ -58,13 +58,6 @@ __asm__( ".previous \n" ); -#define Q_SET_SEL(cpu, selname, address, size) \ -do { \ -struct desc_struct *gdt = get_cpu_gdt_table((cpu)); \ -set_base(gdt[(selname) >> 3], __va((u32)(address))); \ -set_limit(gdt[(selname) >> 3], size); \ -} while(0) - #define Q2_SET_SEL(cpu, selname, address, size) \ do { \ struct desc_struct *gdt = get_cpu_gdt_table((cpu)); \ @@ -535,8 +528,8 @@ void pnpbios_calls_init(union pnp_bios_install_struct *header) struct desc_struct *gdt = get_cpu_gdt_table(i); if (!gdt) continue; - Q2_SET_SEL(i, PNP_CS32, &pnp_bios_callfunc, 64 * 1024); - Q_SET_SEL(i, PNP_CS16, header->fields.pm16cseg, 64 * 1024); - Q_SET_SEL(i, PNP_DS, header->fields.pm16dseg, 64 * 1024); - } + set_base(gdt[GDT_ENTRY_PNPBIOS_CS32], &pnp_bios_callfunc); + set_base(gdt[GDT_ENTRY_PNPBIOS_CS16], __va(header->fields.pm16cseg)); + set_base(gdt[GDT_ENTRY_PNPBIOS_DS], __va(header->fields.pm16dseg)); + } }