Quellcode durchsuchen

Use fixed-width fields in struct undi_device, so that pxeprefix.S will be

able to populate the structure.
tags/v0.9.3
Michael Brown vor 18 Jahren
Ursprung
Commit
cea2221737
2 geänderte Dateien mit 29 neuen und 23 gelöschten Zeilen
  1. 4
    4
      src/arch/i386/drivers/net/undiload.c
  2. 25
    19
      src/arch/i386/include/undi.h

+ 4
- 4
src/arch/i386/drivers/net/undiload.c Datei anzeigen

@@ -76,13 +76,13 @@ static int undi_load ( struct undi_device *undi, struct undi_rom *undirom ) {
76 76
 	/* Debug info */
77 77
 	DBGC ( undi, "UNDI %p loading UNDI ROM %p to CS %04x DS %04x for ",
78 78
 	       undi, undirom, undi_loader.UNDI_CS, undi_loader.UNDI_DS );
79
-	if ( undi->pci_busdevfn ) {
79
+	if ( undi->pci_busdevfn != 0xffff ) {
80 80
 		unsigned int bus = ( undi->pci_busdevfn >> 8 );
81 81
 		unsigned int devfn = ( undi->pci_busdevfn & 0xff );
82 82
 		DBGC ( undi, "PCI %02x:%02x.%x\n",
83 83
 		       bus, PCI_SLOT ( devfn ), PCI_FUNC ( devfn ) );
84 84
 	}
85
-	if ( undi->isapnp_csn != -1U ) {
85
+	if ( undi->isapnp_csn != 0xffff ) {
86 86
 		DBGC ( undi, "ISAPnP(%04x) CSN %04x\n",
87 87
 		       undi->isapnp_read_port, undi->isapnp_csn );
88 88
 	}
@@ -149,8 +149,8 @@ static int undi_load ( struct undi_device *undi, struct undi_rom *undirom ) {
149 149
 int undi_load_pci ( struct undi_device *undi, struct undi_rom *undirom,
150 150
 		    unsigned int bus, unsigned int devfn ) {
151 151
 	undi->pci_busdevfn = ( ( bus << 8 ) | devfn );
152
-	undi->isapnp_csn = -1U;
153
-	undi->isapnp_read_port = -1U;
152
+	undi->isapnp_csn = 0xffff;
153
+	undi->isapnp_read_port = 0xffff;
154 154
 	return undi_load ( undi, undirom );
155 155
 }
156 156
 

+ 25
- 19
src/arch/i386/include/undi.h Datei anzeigen

@@ -10,8 +10,31 @@
10 10
 #include <gpxe/device.h>
11 11
 #include <pxe_types.h>
12 12
 
13
-/** An UNDI device */
13
+/** An UNDI device
14
+ *
15
+ * This structure is used by assembly code as well as C; do not alter
16
+ * this structure without editing pxeprefix.S to match.
17
+ */
14 18
 struct undi_device {
19
+	/** PXENV+ structure address */
20
+	SEGOFF16_t pxenv;
21
+	/** !PXE structure address */
22
+	SEGOFF16_t ppxe;
23
+	/** Entry point */
24
+	SEGOFF16_t entry;
25
+	/** Free base memory after load */
26
+	UINT16_t fbms;
27
+	/** Free base memory prior to load */
28
+	UINT16_t restore_fbms;
29
+	/** PCI bus:dev.fn, or 0xffff */
30
+	UINT16_t pci_busdevfn;
31
+	/** ISAPnP card select number, or 0xffff */
32
+	UINT16_t isapnp_csn;
33
+	/** ISAPnP read port, or 0xffff */
34
+	UINT16_t isapnp_read_port;
35
+	/** Padding */
36
+	UINT16_t pad;
37
+
15 38
 	/** Generic device */
16 39
 	struct device dev;
17 40
 	/** Driver-private data
@@ -20,24 +43,7 @@ struct undi_device {
20 43
 	 * field.
21 44
 	 */
22 45
 	void *priv;
23
-
24
-	/** PXENV+ structure address */
25
-	SEGOFF16_t pxenv;
26
-	/** !PXE structure address */
27
-	SEGOFF16_t ppxe;
28
-	/** Entry point */
29
-	SEGOFF16_t entry;
30
-	/** PCI bus:dev.fn, or 0 */
31
-	unsigned int pci_busdevfn;
32
-	/** ISAPnP card select number, or -1U */
33
-	unsigned int isapnp_csn;
34
-	/** ISAPnP read port, or -1U */
35
-	unsigned int isapnp_read_port;
36
-	/** Free base memory prior to load */
37
-	unsigned int restore_fbms;
38
-	/** Free base memory after load */
39
-	unsigned int fbms;
40
-};
46
+} __attribute__ (( packed ));
41 47
 
42 48
 /**
43 49
  * Set UNDI driver-private data

Laden…
Abbrechen
Speichern