| 
				
			 | 
			
			
				
				@@ -29,9 +29,9 @@ 
			 | 
		
		
	
		
			
			| 
				29
			 | 
			
				29
			 | 
			
			
				
				 #include "pxe.h" 
			 | 
		
		
	
		
			
			| 
				30
			 | 
			
				30
			 | 
			
			
				
				 #include "pxe_export.h" 
			 | 
		
		
	
		
			
			| 
				31
			 | 
			
				31
			 | 
			
			
				
				 #include "pxe_callbacks.h" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				32
			 | 
			
			
				
				+#include "dev.h" 
			 | 
		
		
	
		
			
			| 
				32
			 | 
			
				33
			 | 
			
			
				
				 #include "nic.h" 
			 | 
		
		
	
		
			
			| 
				33
			 | 
			
				34
			 | 
			
			
				
				 #include "pci.h" 
			 | 
		
		
	
		
			
			| 
				34
			 | 
			
				
			 | 
			
			
				
				-#include "dev.h" 
			 | 
		
		
	
		
			
			| 
				35
			 | 
			
				35
			 | 
			
			
				
				 #include "cpu.h" 
			 | 
		
		
	
		
			
			| 
				36
			 | 
			
				36
			 | 
			
			
				
				 #include "timer.h" 
			 | 
		
		
	
		
			
			| 
				37
			 | 
			
				37
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -121,10 +121,13 @@ pxe_stack_t *pxe_stack = NULL; 
			 | 
		
		
	
		
			
			| 
				121
			 | 
			
				121
			 | 
			
			
				
				 int pxe_initialise_nic ( void ) { 
			 | 
		
		
	
		
			
			| 
				122
			 | 
			
				122
			 | 
			
			
				
				 	if ( pxe_stack->state >= READY ) return 1; 
			 | 
		
		
	
		
			
			| 
				123
			 | 
			
				123
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				124
			 | 
			
				
			 | 
			
			
				
				-	/* Check if NIC is initialised.  nic.dev.disable is set to 0 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				124
			 | 
			
			
				
				+#warning "device probing mechanism has completely changed" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				125
			 | 
			
			
				
				+#if 0 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				126
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				127
			 | 
			
			
				
				+	/* Check if NIC is initialised.  dev.disable is set to 0 
			 | 
		
		
	
		
			
			| 
				125
			 | 
			
				128
			 | 
			
			
				
				 	 * when disable() is called, so we use this. 
			 | 
		
		
	
		
			
			| 
				126
			 | 
			
				129
			 | 
			
			
				
				 	 */ 
			 | 
		
		
	
		
			
			| 
				127
			 | 
			
				
			 | 
			
			
				
				-	if ( nic.dev.disable ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				130
			 | 
			
			
				
				+	if ( dev.disable ) { 
			 | 
		
		
	
		
			
			| 
				128
			 | 
			
				131
			 | 
			
			
				
				 		/* NIC may have been initialised independently 
			 | 
		
		
	
		
			
			| 
				129
			 | 
			
				132
			 | 
			
			
				
				 		 * (e.g. when we set up the stack prior to calling the 
			 | 
		
		
	
		
			
			| 
				130
			 | 
			
				133
			 | 
			
			
				
				 		 * NBP). 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -137,22 +140,26 @@ int pxe_initialise_nic ( void ) { 
			 | 
		
		
	
		
			
			| 
				137
			 | 
			
				140
			 | 
			
			
				
				 	 * PROBE_AWAKE.  If one was specifed via PXENV_START_UNDI, try 
			 | 
		
		
	
		
			
			| 
				138
			 | 
			
				141
			 | 
			
			
				
				 	 * that one first.  Otherwise, set PROBE_FIRST. 
			 | 
		
		
	
		
			
			| 
				139
			 | 
			
				142
			 | 
			
			
				
				 	 */ 
			 | 
		
		
	
		
			
			| 
				140
			 | 
			
				
			 | 
			
			
				
				-	if ( nic.dev.state.pci.dev.use_specified == 1 ) { 
			 | 
		
		
	
		
			
			| 
				141
			 | 
			
				
			 | 
			
			
				
				-		nic.dev.how_probe = PROBE_NEXT; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				143
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				144
			 | 
			
			
				
				+	if ( dev.state.pci.dev.use_specified == 1 ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				145
			 | 
			
			
				
				+		dev.how_probe = PROBE_NEXT; 
			 | 
		
		
	
		
			
			| 
				142
			 | 
			
				146
			 | 
			
			
				
				 		DBG ( " initialising NIC specified via START_UNDI" ); 
			 | 
		
		
	
		
			
			| 
				143
			 | 
			
				
			 | 
			
			
				
				-	} else if ( nic.dev.state.pci.dev.driver ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				147
			 | 
			
			
				
				+	} else if ( dev.state.pci.dev.driver ) { 
			 | 
		
		
	
		
			
			| 
				144
			 | 
			
				148
			 | 
			
			
				
				 		DBG ( " reinitialising NIC" ); 
			 | 
		
		
	
		
			
			| 
				145
			 | 
			
				
			 | 
			
			
				
				-		nic.dev.how_probe = PROBE_AWAKE; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				149
			 | 
			
			
				
				+		dev.how_probe = PROBE_AWAKE; 
			 | 
		
		
	
		
			
			| 
				146
			 | 
			
				150
			 | 
			
			
				
				 	} else { 
			 | 
		
		
	
		
			
			| 
				147
			 | 
			
				151
			 | 
			
			
				
				 		DBG ( " probing for any NIC" ); 
			 | 
		
		
	
		
			
			| 
				148
			 | 
			
				
			 | 
			
			
				
				-		nic.dev.how_probe = PROBE_FIRST; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				152
			 | 
			
			
				
				+		dev.how_probe = PROBE_FIRST; 
			 | 
		
		
	
		
			
			| 
				149
			 | 
			
				153
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				150
			 | 
			
				
			 | 
			
			
				
				-	 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				154
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				151
			 | 
			
				155
			 | 
			
			
				
				 	/* Call probe routine to bring up the NIC */ 
			 | 
		
		
	
		
			
			| 
				152
			 | 
			
				
			 | 
			
			
				
				-	if ( eth_probe ( &nic.dev ) != PROBE_WORKED ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				156
			 | 
			
			
				
				+	if ( eth_probe ( &dev ) != PROBE_WORKED ) { 
			 | 
		
		
	
		
			
			| 
				153
			 | 
			
				157
			 | 
			
			
				
				 		DBG ( " failed" ); 
			 | 
		
		
	
		
			
			| 
				154
			 | 
			
				158
			 | 
			
			
				
				 		return 0; 
			 | 
		
		
	
		
			
			| 
				155
			 | 
			
				159
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				160
			 | 
			
			
				
				+#endif 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				161
			 | 
			
			
				
				+	 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				162
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				156
			 | 
			
				163
			 | 
			
			
				
				 	pxe_stack->state = READY; 
			 | 
		
		
	
		
			
			| 
				157
			 | 
			
				164
			 | 
			
			
				
				 	return 1; 
			 | 
		
		
	
		
			
			| 
				158
			 | 
			
				165
			 | 
			
			
				
				 } 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -204,8 +211,6 @@ int ensure_pxe_state ( pxe_stack_state_t wanted ) { 
			 | 
		
		
	
		
			
			| 
				204
			 | 
			
				211
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				205
			 | 
			
				212
			 | 
			
			
				
				 PXENV_EXIT_t pxenv_start_undi ( t_PXENV_START_UNDI *start_undi ) { 
			 | 
		
		
	
		
			
			| 
				206
			 | 
			
				213
			 | 
			
			
				
				 	unsigned char bus, devfn; 
			 | 
		
		
	
		
			
			| 
				207
			 | 
			
				
			 | 
			
			
				
				-	struct pci_probe_state *pci = &nic.dev.state.pci; 
			 | 
		
		
	
		
			
			| 
				208
			 | 
			
				
			 | 
			
			
				
				-	struct dev *dev = &nic.dev; 
			 | 
		
		
	
		
			
			| 
				209
			 | 
			
				214
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				210
			 | 
			
				215
			 | 
			
			
				
				 	DBG ( "PXENV_START_UNDI" ); 
			 | 
		
		
	
		
			
			| 
				211
			 | 
			
				216
			 | 
			
			
				
				 	ENSURE_MIDWAY(start_undi); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -220,6 +225,8 @@ PXENV_EXIT_t pxenv_start_undi ( t_PXENV_START_UNDI *start_undi ) { 
			 | 
		
		
	
		
			
			| 
				220
			 | 
			
				225
			 | 
			
			
				
				 	bus = ( start_undi->ax >> 8 ) & 0xff; 
			 | 
		
		
	
		
			
			| 
				221
			 | 
			
				226
			 | 
			
			
				
				 	devfn = start_undi->ax & 0xff; 
			 | 
		
		
	
		
			
			| 
				222
			 | 
			
				227
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				228
			 | 
			
			
				
				+#warning "device probing mechanism has completely changed" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				229
			 | 
			
			
				
				+#if 0 
			 | 
		
		
	
		
			
			| 
				223
			 | 
			
				230
			 | 
			
			
				
				 	if ( ( pci->dev.driver == NULL ) || 
			 | 
		
		
	
		
			
			| 
				224
			 | 
			
				231
			 | 
			
			
				
				 	     ( pci->dev.bus != bus ) || ( pci->dev.devfn != devfn ) ) { 
			 | 
		
		
	
		
			
			| 
				225
			 | 
			
				232
			 | 
			
			
				
				 		/* This is quite a bit of a hack and relies on 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -236,6 +243,7 @@ PXENV_EXIT_t pxenv_start_undi ( t_PXENV_START_UNDI *start_undi ) { 
			 | 
		
		
	
		
			
			| 
				236
			 | 
			
				243
			 | 
			
			
				
				 		pci->dev.bus = bus; 
			 | 
		
		
	
		
			
			| 
				237
			 | 
			
				244
			 | 
			
			
				
				 		pci->dev.devfn = devfn; 
			 | 
		
		
	
		
			
			| 
				238
			 | 
			
				245
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				246
			 | 
			
			
				
				+#endif 
			 | 
		
		
	
		
			
			| 
				239
			 | 
			
				247
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				240
			 | 
			
				248
			 | 
			
			
				
				 	start_undi->Status = PXENV_STATUS_SUCCESS; 
			 | 
		
		
	
		
			
			| 
				241
			 | 
			
				249
			 | 
			
			
				
				 	return PXENV_EXIT_SUCCESS; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -424,7 +432,7 @@ PXENV_EXIT_t pxenv_undi_set_station_address ( t_PXENV_UNDI_SET_STATION_ADDRESS 
			 | 
		
		
	
		
			
			| 
				424
			 | 
			
				432
			 | 
			
			
				
				 	 * the current value anyway then return success, otherwise 
			 | 
		
		
	
		
			
			| 
				425
			 | 
			
				433
			 | 
			
			
				
				 	 * return UNSUPPORTED. 
			 | 
		
		
	
		
			
			| 
				426
			 | 
			
				434
			 | 
			
			
				
				 	 */ 
			 | 
		
		
	
		
			
			| 
				427
			 | 
			
				
			 | 
			
			
				
				-	if ( memcmp ( nic.node_addr, 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				435
			 | 
			
			
				
				+	if ( memcmp ( nic->node_addr, 
			 | 
		
		
	
		
			
			| 
				428
			 | 
			
				436
			 | 
			
			
				
				 		      &undi_set_station_address->StationAddress, 
			 | 
		
		
	
		
			
			| 
				429
			 | 
			
				437
			 | 
			
			
				
				 		      ETH_ALEN ) == 0 ) { 
			 | 
		
		
	
		
			
			| 
				430
			 | 
			
				438
			 | 
			
			
				
				 		undi_set_station_address->Status = PXENV_STATUS_SUCCESS; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -456,8 +464,8 @@ PXENV_EXIT_t pxenv_undi_get_information ( t_PXENV_UNDI_GET_INFORMATION 
			 | 
		
		
	
		
			
			| 
				456
			 | 
			
				464
			 | 
			
			
				
				 	DBG ( "PXENV_UNDI_GET_INFORMATION" ); 
			 | 
		
		
	
		
			
			| 
				457
			 | 
			
				465
			 | 
			
			
				
				 	ENSURE_READY ( undi_get_information ); 
			 | 
		
		
	
		
			
			| 
				458
			 | 
			
				466
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				459
			 | 
			
				
			 | 
			
			
				
				-	undi_get_information->BaseIo = nic.ioaddr; 
			 | 
		
		
	
		
			
			| 
				460
			 | 
			
				
			 | 
			
			
				
				-	undi_get_information->IntNumber = nic.irqno; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				467
			 | 
			
			
				
				+	undi_get_information->BaseIo = nic->ioaddr; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				468
			 | 
			
			
				
				+	undi_get_information->IntNumber = nic->irqno; 
			 | 
		
		
	
		
			
			| 
				461
			 | 
			
				469
			 | 
			
			
				
				 	/* Cheat: assume all cards can cope with this */ 
			 | 
		
		
	
		
			
			| 
				462
			 | 
			
				470
			 | 
			
			
				
				 	undi_get_information->MaxTranUnit = ETH_MAX_MTU; 
			 | 
		
		
	
		
			
			| 
				463
			 | 
			
				471
			 | 
			
			
				
				 	/* Cheat: we only ever have Ethernet cards */ 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -467,11 +475,12 @@ PXENV_EXIT_t pxenv_undi_get_information ( t_PXENV_UNDI_GET_INFORMATION 
			 | 
		
		
	
		
			
			| 
				467
			 | 
			
				475
			 | 
			
			
				
				 	 * node address.  This is a valid assumption within Etherboot 
			 | 
		
		
	
		
			
			| 
				468
			 | 
			
				476
			 | 
			
			
				
				 	 * at the time of writing. 
			 | 
		
		
	
		
			
			| 
				469
			 | 
			
				477
			 | 
			
			
				
				 	 */ 
			 | 
		
		
	
		
			
			| 
				470
			 | 
			
				
			 | 
			
			
				
				-	memcpy ( &undi_get_information->CurrentNodeAddress, nic.node_addr, 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				478
			 | 
			
			
				
				+	memcpy ( &undi_get_information->CurrentNodeAddress, nic->node_addr, 
			 | 
		
		
	
		
			
			| 
				471
			 | 
			
				479
			 | 
			
			
				
				 		 ETH_ALEN ); 
			 | 
		
		
	
		
			
			| 
				472
			 | 
			
				
			 | 
			
			
				
				-	memcpy ( &undi_get_information->PermNodeAddress, nic.node_addr, 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				480
			 | 
			
			
				
				+	memcpy ( &undi_get_information->PermNodeAddress, nic->node_addr, 
			 | 
		
		
	
		
			
			| 
				473
			 | 
			
				481
			 | 
			
			
				
				 		 ETH_ALEN ); 
			 | 
		
		
	
		
			
			| 
				474
			 | 
			
				
			 | 
			
			
				
				-	undi_get_information->ROMAddress = nic.rom_info->rom_segment; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				482
			 | 
			
			
				
				+	undi_get_information->ROMAddress = 0; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				483
			 | 
			
			
				
				+		/* nic->rom_info->rom_segment; */ 
			 | 
		
		
	
		
			
			| 
				475
			 | 
			
				484
			 | 
			
			
				
				 	/* We only provide the ability to receive or transmit a single 
			 | 
		
		
	
		
			
			| 
				476
			 | 
			
				485
			 | 
			
			
				
				 	 * packet at a time.  This is a bootloader, not an OS. 
			 | 
		
		
	
		
			
			| 
				477
			 | 
			
				486
			 | 
			
			
				
				 	 */ 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -552,7 +561,10 @@ PXENV_EXIT_t pxenv_undi_get_mcast_address ( t_PXENV_UNDI_GET_MCAST_ADDRESS 
			 | 
		
		
	
		
			
			| 
				552
			 | 
			
				561
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				553
			 | 
			
				562
			 | 
			
			
				
				 PXENV_EXIT_t pxenv_undi_get_nic_type ( t_PXENV_UNDI_GET_NIC_TYPE 
			 | 
		
		
	
		
			
			| 
				554
			 | 
			
				563
			 | 
			
			
				
				 				       *undi_get_nic_type ) { 
			 | 
		
		
	
		
			
			| 
				555
			 | 
			
				
			 | 
			
			
				
				-	struct dev *dev = &nic.dev; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				564
			 | 
			
			
				
				+#warning "device probing mechanism has changed completely" 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				565
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				566
			 | 
			
			
				
				+#if 0 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				567
			 | 
			
			
				
				+	struct dev *dev = &dev; 
			 | 
		
		
	
		
			
			| 
				556
			 | 
			
				568
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				557
			 | 
			
				569
			 | 
			
			
				
				 	DBG ( "PXENV_UNDI_GET_NIC_TYPE" ); 
			 | 
		
		
	
		
			
			| 
				558
			 | 
			
				570
			 | 
			
			
				
				 	ENSURE_READY ( undi_get_nic_type ); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -594,6 +606,8 @@ PXENV_EXIT_t pxenv_undi_get_nic_type ( t_PXENV_UNDI_GET_NIC_TYPE 
			 | 
		
		
	
		
			
			| 
				594
			 | 
			
				606
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				595
			 | 
			
				607
			 | 
			
			
				
				 	undi_get_nic_type->Status = PXENV_STATUS_SUCCESS; 
			 | 
		
		
	
		
			
			| 
				596
			 | 
			
				608
			 | 
			
			
				
				 	return PXENV_EXIT_SUCCESS; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				609
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				610
			 | 
			
			
				
				+#endif 
			 | 
		
		
	
		
			
			| 
				597
			 | 
			
				611
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				598
			 | 
			
				612
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				599
			 | 
			
				613
			 | 
			
			
				
				 /* PXENV_UNDI_GET_IFACE_INFO 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -622,7 +636,7 @@ PXENV_EXIT_t pxenv_undi_get_iface_info ( t_PXENV_UNDI_GET_IFACE_INFO 
			 | 
		
		
	
		
			
			| 
				622
			 | 
			
				636
			 | 
			
			
				
				  * Status: working 
			 | 
		
		
	
		
			
			| 
				623
			 | 
			
				637
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				624
			 | 
			
				638
			 | 
			
			
				
				 PXENV_EXIT_t pxenv_undi_isr ( t_PXENV_UNDI_ISR *undi_isr ) { 
			 | 
		
		
	
		
			
			| 
				625
			 | 
			
				
			 | 
			
			
				
				-	media_header_t *media_header = (media_header_t*)nic.packet; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				639
			 | 
			
			
				
				+	media_header_t *media_header = (media_header_t*)nic->packet; 
			 | 
		
		
	
		
			
			| 
				626
			 | 
			
				640
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				627
			 | 
			
				641
			 | 
			
			
				
				 	DBG ( "PXENV_UNDI_ISR" ); 
			 | 
		
		
	
		
			
			| 
				628
			 | 
			
				642
			 | 
			
			
				
				 	/* We can't call ENSURE_READY, because this could be being 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -668,8 +682,8 @@ PXENV_EXIT_t pxenv_undi_isr ( t_PXENV_UNDI_ISR *undi_isr ) { 
			 | 
		
		
	
		
			
			| 
				668
			 | 
			
				682
			 | 
			
			
				
				 		 */ 
			 | 
		
		
	
		
			
			| 
				669
			 | 
			
				683
			 | 
			
			
				
				 		DBG ( " PROCESS" ); 
			 | 
		
		
	
		
			
			| 
				670
			 | 
			
				684
			 | 
			
			
				
				 		if ( eth_poll ( 1 ) ) { 
			 | 
		
		
	
		
			
			| 
				671
			 | 
			
				
			 | 
			
			
				
				-			DBG ( " RECEIVE %d", nic.packetlen ); 
			 | 
		
		
	
		
			
			| 
				672
			 | 
			
				
			 | 
			
			
				
				-			if ( nic.packetlen > sizeof(pxe_stack->packet) ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				685
			 | 
			
			
				
				+			DBG ( " RECEIVE %d", nic->packetlen ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				686
			 | 
			
			
				
				+			if ( nic->packetlen > sizeof(pxe_stack->packet) ) { 
			 | 
		
		
	
		
			
			| 
				673
			 | 
			
				687
			 | 
			
			
				
				 				/* Should never happen */ 
			 | 
		
		
	
		
			
			| 
				674
			 | 
			
				688
			 | 
			
			
				
				 				undi_isr->FuncFlag = PXENV_UNDI_ISR_OUT_DONE; 
			 | 
		
		
	
		
			
			| 
				675
			 | 
			
				689
			 | 
			
			
				
				 				undi_isr->Status = 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -677,10 +691,10 @@ PXENV_EXIT_t pxenv_undi_isr ( t_PXENV_UNDI_ISR *undi_isr ) { 
			 | 
		
		
	
		
			
			| 
				677
			 | 
			
				691
			 | 
			
			
				
				 				return PXENV_EXIT_FAILURE; 
			 | 
		
		
	
		
			
			| 
				678
			 | 
			
				692
			 | 
			
			
				
				 			} 
			 | 
		
		
	
		
			
			| 
				679
			 | 
			
				693
			 | 
			
			
				
				 			undi_isr->FuncFlag = PXENV_UNDI_ISR_OUT_RECEIVE; 
			 | 
		
		
	
		
			
			| 
				680
			 | 
			
				
			 | 
			
			
				
				-			undi_isr->BufferLength = nic.packetlen; 
			 | 
		
		
	
		
			
			| 
				681
			 | 
			
				
			 | 
			
			
				
				-			undi_isr->FrameLength = nic.packetlen; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				694
			 | 
			
			
				
				+			undi_isr->BufferLength = nic->packetlen; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				695
			 | 
			
			
				
				+			undi_isr->FrameLength = nic->packetlen; 
			 | 
		
		
	
		
			
			| 
				682
			 | 
			
				696
			 | 
			
			
				
				 			undi_isr->FrameHeaderLength = ETH_HLEN; 
			 | 
		
		
	
		
			
			| 
				683
			 | 
			
				
			 | 
			
			
				
				-			memcpy ( pxe_stack->packet, nic.packet, nic.packetlen); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				697
			 | 
			
			
				
				+			memcpy ( pxe_stack->packet, nic->packet, nic->packetlen); 
			 | 
		
		
	
		
			
			| 
				684
			 | 
			
				698
			 | 
			
			
				
				 			PTR_TO_SEGOFF16 ( pxe_stack->packet, undi_isr->Frame ); 
			 | 
		
		
	
		
			
			| 
				685
			 | 
			
				699
			 | 
			
			
				
				 			switch ( ntohs(media_header->nstype) ) { 
			 | 
		
		
	
		
			
			| 
				686
			 | 
			
				700
			 | 
			
			
				
				 			case IP :	undi_isr->ProtType = P_IP;	break; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -1011,7 +1025,7 @@ PXENV_EXIT_t pxenv_udp_read ( t_PXENV_UDP_READ *udp_read ) { 
			 | 
		
		
	
		
			
			| 
				1011
			 | 
			
				1025
			 | 
			
			
				
				 PXENV_EXIT_t pxenv_udp_write ( t_PXENV_UDP_WRITE *udp_write ) { 
			 | 
		
		
	
		
			
			| 
				1012
			 | 
			
				1026
			 | 
			
			
				
				 	uint16_t src_port; 
			 | 
		
		
	
		
			
			| 
				1013
			 | 
			
				1027
			 | 
			
			
				
				 	uint16_t dst_port; 
			 | 
		
		
	
		
			
			| 
				1014
			 | 
			
				
			 | 
			
			
				
				-	struct udppacket *packet = (struct udppacket *)nic.packet; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				1028
			 | 
			
			
				
				+	struct udppacket *packet = (struct udppacket *)nic->packet; 
			 | 
		
		
	
		
			
			| 
				1015
			 | 
			
				1029
			 | 
			
			
				
				 	int packet_size; 
			 | 
		
		
	
		
			
			| 
				1016
			 | 
			
				1030
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				1017
			 | 
			
				1031
			 | 
			
			
				
				 	DBG ( "PXENV_UDP_WRITE" ); 
			 |