|
@@ -13,6 +13,7 @@ FILE_LICENCE ( GPL2_OR_LATER )
|
13
|
13
|
#define PNP_SIGNATURE ( '$' + ( 'P' << 8 ) + ( 'n' << 16 ) + ( 'P' << 24 ) )
|
14
|
14
|
#define PMM_SIGNATURE ( '$' + ( 'P' << 8 ) + ( 'M' << 16 ) + ( 'M' << 24 ) )
|
15
|
15
|
#define PCI_SIGNATURE ( 'P' + ( 'C' << 8 ) + ( 'I' << 16 ) + ( ' ' << 24 ) )
|
|
16
|
+#define IBM_SIGNATURE ( ( 'I' << 24 ) + ( 'B' << 16 ) + ( 'M' << 8 ) + ' ' )
|
16
|
17
|
#define STACK_MAGIC ( 'L' + ( 'R' << 8 ) + ( 'E' << 16 ) + ( 'T' << 24 ) )
|
17
|
18
|
#define PMM_ALLOCATE 0x0000
|
18
|
19
|
#define PMM_FIND 0x0001
|
|
@@ -172,6 +173,7 @@ undiheader:
|
172
|
173
|
init:
|
173
|
174
|
/* Preserve registers, clear direction flag, set %ds=%cs */
|
174
|
175
|
pushaw
|
|
176
|
+ pushl %ebx
|
175
|
177
|
pushw %ds
|
176
|
178
|
pushw %es
|
177
|
179
|
pushw %fs
|
|
@@ -180,15 +182,14 @@ init:
|
180
|
182
|
pushw %cs
|
181
|
183
|
popw %ds
|
182
|
184
|
|
183
|
|
- /* Shuffle some registers around. We need %di available for
|
184
|
|
- * the print_xxx functions, and in a register that's
|
185
|
|
- * addressable from %es, so shuffle as follows:
|
|
185
|
+ /* Shuffle some registers around. We need to use %di for the
|
|
186
|
+ * print_xxx functions, so shuffle as follows:
|
186
|
187
|
*
|
187
|
|
- * %di (pointer to PnP structure) => %bx
|
188
|
188
|
* %bx (runtime segment address, for PCI 3.0) => %gs
|
|
189
|
+ * %edi (IBM signature) => %ebx
|
189
|
190
|
*/
|
190
|
191
|
movw %bx, %gs
|
191
|
|
- movw %di, %bx
|
|
192
|
+ movl %edi, %ebx
|
192
|
193
|
|
193
|
194
|
/* Store PCI bus:dev.fn address */
|
194
|
195
|
movw %ax, init_pci_busdevfn
|
|
@@ -263,7 +264,16 @@ no_pci3:
|
263
|
264
|
popl %edx
|
264
|
265
|
popl %ebx
|
265
|
266
|
|
266
|
|
- /* Check for PnP BIOS. Although %es:di should point to the
|
|
267
|
+ /* Check for IBM BIOS, which uses the PnP entry points but
|
|
268
|
+ * doesn't indicate PnP support.
|
|
269
|
+ */
|
|
270
|
+ cmpl $IBM_SIGNATURE, %ebx
|
|
271
|
+ jne no_ibm
|
|
272
|
+ movw $init_message_ibm, %si
|
|
273
|
+ xorw %di, %di
|
|
274
|
+ call print_message
|
|
275
|
+ jmp pnp_done
|
|
276
|
+no_ibm: /* Check for PnP BIOS. Although %es:di should point to the
|
267
|
277
|
* PnP BIOS signature on entry, some BIOSes fail to do this.
|
268
|
278
|
*/
|
269
|
279
|
movw $( 0xf000 - 1 ), %bx
|
|
@@ -416,6 +426,7 @@ no_pmm:
|
416
|
426
|
popw %fs
|
417
|
427
|
popw %es
|
418
|
428
|
popw %ds
|
|
429
|
+ popl %ebx
|
419
|
430
|
popaw
|
420
|
431
|
|
421
|
432
|
/* Indicate boot capability to PnP BIOS, if present */
|
|
@@ -530,6 +541,9 @@ init_message:
|
530
|
541
|
init_message_pci:
|
531
|
542
|
.asciz " PCI"
|
532
|
543
|
.size init_message_pci, . - init_message_pci
|
|
544
|
+init_message_ibm:
|
|
545
|
+ .asciz " IBM"
|
|
546
|
+ .size init_message_ibm, . - init_message_ibm
|
533
|
547
|
init_message_pnp:
|
534
|
548
|
.asciz " PnP"
|
535
|
549
|
.size init_message_pnp, . - init_message_pnp
|