| 
				
			 | 
			
			
				
				@@ -133,11 +133,16 @@ static inline void isapnp_deactivate ( uint8_t logdev ) { 
			 | 
		
		
	
		
			
			| 
				133
			 | 
			
				133
			 | 
			
			
				
				 	isapnp_write_byte ( ISAPNP_ACTIVATE, 0 ); 
			 | 
		
		
	
		
			
			| 
				134
			 | 
			
				134
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				135
			 | 
			
				135
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				136
			 | 
			
			
				
				+static void isapnp_delay ( void ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				137
			 | 
			
			
				
				+	udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				138
			 | 
			
			
				
				+} 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				139
			 | 
			
			
				
				+ 
			 | 
		
		
	
		
			
			| 
				136
			 | 
			
				140
			 | 
			
			
				
				 /* 
			 | 
		
		
	
		
			
			| 
				137
			 | 
			
				141
			 | 
			
			
				
				  * The linear feedback shift register as described in Appendix B of 
			 | 
		
		
	
		
			
			| 
				138
			 | 
			
				142
			 | 
			
			
				
				  * the PnP ISA spec.  The hardware implementation uses eight D-type 
			 | 
		
		
	
		
			
			| 
				139
			 | 
			
				143
			 | 
			
			
				
				  * latches and two XOR gates.  I think this is probably the smallest 
			 | 
		
		
	
		
			
			| 
				140
			 | 
			
				
			 | 
			
			
				
				- * possible implementation in software.  :) 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				144
			 | 
			
			
				
				+ * possible implementation in software.  Six instructions when input_bit 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				145
			 | 
			
			
				
				+ * is a constant 0 (for isapnp_send_key).  :) 
			 | 
		
		
	
		
			
			| 
				141
			 | 
			
				146
			 | 
			
			
				
				  * 
			 | 
		
		
	
		
			
			| 
				142
			 | 
			
				147
			 | 
			
			
				
				  */ 
			 | 
		
		
	
		
			
			| 
				143
			 | 
			
				148
			 | 
			
			
				
				 static inline uint8_t isapnp_lfsr_next ( uint8_t lfsr, int input_bit ) { 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -156,12 +161,12 @@ static void isapnp_send_key ( void ) { 
			 | 
		
		
	
		
			
			| 
				156
			 | 
			
				161
			 | 
			
			
				
				 	unsigned int i; 
			 | 
		
		
	
		
			
			| 
				157
			 | 
			
				162
			 | 
			
			
				
				 	uint8_t lfsr; 
			 | 
		
		
	
		
			
			| 
				158
			 | 
			
				163
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				159
			 | 
			
				
			 | 
			
			
				
				-	udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				164
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				160
			 | 
			
				165
			 | 
			
			
				
				 	isapnp_write_address ( 0x00 ); 
			 | 
		
		
	
		
			
			| 
				161
			 | 
			
				166
			 | 
			
			
				
				 	isapnp_write_address ( 0x00 ); 
			 | 
		
		
	
		
			
			| 
				162
			 | 
			
				167
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				163
			 | 
			
				168
			 | 
			
			
				
				 	lfsr = ISAPNP_LFSR_SEED; 
			 | 
		
		
	
		
			
			| 
				164
			 | 
			
				
			 | 
			
			
				
				-	for ( i = 0 ; i < 32 ; i-- ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				169
			 | 
			
			
				
				+	for ( i = 0 ; i < 32 ; i++ ) { 
			 | 
		
		
	
		
			
			| 
				165
			 | 
			
				170
			 | 
			
			
				
				 		isapnp_write_address ( lfsr ); 
			 | 
		
		
	
		
			
			| 
				166
			 | 
			
				171
			 | 
			
			
				
				 		lfsr = isapnp_lfsr_next ( lfsr, 0 ); 
			 | 
		
		
	
		
			
			| 
				167
			 | 
			
				172
			 | 
			
			
				
				 	} 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -200,7 +205,7 @@ static inline uint8_t isapnp_peek_byte ( void ) { 
			 | 
		
		
	
		
			
			| 
				200
			 | 
			
				205
			 | 
			
			
				
				 			/* Byte ready - read it */ 
			 | 
		
		
	
		
			
			| 
				201
			 | 
			
				206
			 | 
			
			
				
				 			return isapnp_read_resourcedata(); 
			 | 
		
		
	
		
			
			| 
				202
			 | 
			
				207
			 | 
			
			
				
				 		} 
			 | 
		
		
	
		
			
			| 
				203
			 | 
			
				
			 | 
			
			
				
				-		udelay ( 100 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				208
			 | 
			
			
				
				+		isapnp_delay (); 
			 | 
		
		
	
		
			
			| 
				204
			 | 
			
				209
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				205
			 | 
			
				210
			 | 
			
			
				
				 	/* Data never became ready - return 0xff */ 
			 | 
		
		
	
		
			
			| 
				206
			 | 
			
				211
			 | 
			
			
				
				 	return 0xff; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -249,7 +254,8 @@ static int isapnp_try_isolate ( void ) { 
			 | 
		
		
	
		
			
			| 
				249
			 | 
			
				254
			 | 
			
			
				
				 	/* Reset all assigned CSNs */ 
			 | 
		
		
	
		
			
			| 
				250
			 | 
			
				255
			 | 
			
			
				
				 	isapnp_reset_csn (); 
			 | 
		
		
	
		
			
			| 
				251
			 | 
			
				256
			 | 
			
			
				
				 	isapnp_max_csn = 0; 
			 | 
		
		
	
		
			
			| 
				252
			 | 
			
				
			 | 
			
			
				
				-	udelay ( 2000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				257
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				258
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				253
			 | 
			
				259
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				254
			 | 
			
				260
			 | 
			
			
				
				 	/* Place all cards into the Isolation state */ 
			 | 
		
		
	
		
			
			| 
				255
			 | 
			
				261
			 | 
			
			
				
				 	isapnp_wait_for_key (); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -258,7 +264,7 @@ static int isapnp_try_isolate ( void ) { 
			 | 
		
		
	
		
			
			| 
				258
			 | 
			
				264
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				259
			 | 
			
				265
			 | 
			
			
				
				 	/* Set the read port */ 
			 | 
		
		
	
		
			
			| 
				260
			 | 
			
				266
			 | 
			
			
				
				 	isapnp_set_read_port (); 
			 | 
		
		
	
		
			
			| 
				261
			 | 
			
				
			 | 
			
			
				
				-	udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				267
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				262
			 | 
			
				268
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				263
			 | 
			
				269
			 | 
			
			
				
				 	while ( 1 ) { 
			 | 
		
		
	
		
			
			| 
				264
			 | 
			
				270
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -269,7 +275,7 @@ static int isapnp_try_isolate ( void ) { 
			 | 
		
		
	
		
			
			| 
				269
			 | 
			
				275
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				270
			 | 
			
				276
			 | 
			
			
				
				 		/* Initiate serial isolation */ 
			 | 
		
		
	
		
			
			| 
				271
			 | 
			
				277
			 | 
			
			
				
				 		isapnp_serialisolation (); 
			 | 
		
		
	
		
			
			| 
				272
			 | 
			
				
			 | 
			
			
				
				-		udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				278
			 | 
			
			
				
				+		isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				273
			 | 
			
				279
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				274
			 | 
			
				280
			 | 
			
			
				
				 		/* Read identifier serially via the ISAPnP read port. */ 
			 | 
		
		
	
		
			
			| 
				275
			 | 
			
				281
			 | 
			
			
				
				 		memset ( &identifier, 0, sizeof ( identifier ) ); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -278,9 +284,9 @@ static int isapnp_try_isolate ( void ) { 
			 | 
		
		
	
		
			
			| 
				278
			 | 
			
				284
			 | 
			
			
				
				 			byte = 0; 
			 | 
		
		
	
		
			
			| 
				279
			 | 
			
				285
			 | 
			
			
				
				 			for ( j = 0 ; j < 8 ; j++ ) { 
			 | 
		
		
	
		
			
			| 
				280
			 | 
			
				286
			 | 
			
			
				
				 				data = isapnp_read_data (); 
			 | 
		
		
	
		
			
			| 
				281
			 | 
			
				
			 | 
			
			
				
				-				udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				287
			 | 
			
			
				
				+				isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				282
			 | 
			
				288
			 | 
			
			
				
				 				data = ( data << 8 ) | isapnp_read_data (); 
			 | 
		
		
	
		
			
			| 
				283
			 | 
			
				
			 | 
			
			
				
				-				udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				289
			 | 
			
			
				
				+				isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				284
			 | 
			
				290
			 | 
			
			
				
				 				if ( data == 0x55aa ) { 
			 | 
		
		
	
		
			
			| 
				285
			 | 
			
				291
			 | 
			
			
				
				 					byte |= 1; 
			 | 
		
		
	
		
			
			| 
				286
			 | 
			
				292
			 | 
			
			
				
				 				} 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -309,13 +315,13 @@ static int isapnp_try_isolate ( void ) { 
			 | 
		
		
	
		
			
			| 
				309
			 | 
			
				315
			 | 
			
			
				
				 		      identifier.checksum, isapnp_max_csn ); 
			 | 
		
		
	
		
			
			| 
				310
			 | 
			
				316
			 | 
			
			
				
				 		 
			 | 
		
		
	
		
			
			| 
				311
			 | 
			
				317
			 | 
			
			
				
				 		isapnp_write_csn ( isapnp_max_csn ); 
			 | 
		
		
	
		
			
			| 
				312
			 | 
			
				
			 | 
			
			
				
				-		udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				318
			 | 
			
			
				
				+		isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				313
			 | 
			
				319
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				314
			 | 
			
				320
			 | 
			
			
				
				 		/* Send this card back to Sleep and force all cards 
			 | 
		
		
	
		
			
			| 
				315
			 | 
			
				321
			 | 
			
			
				
				 		 * without a CSN into Isolation state 
			 | 
		
		
	
		
			
			| 
				316
			 | 
			
				322
			 | 
			
			
				
				 		 */ 
			 | 
		
		
	
		
			
			| 
				317
			 | 
			
				323
			 | 
			
			
				
				 		isapnp_wake ( 0x00 ); 
			 | 
		
		
	
		
			
			| 
				318
			 | 
			
				
			 | 
			
			
				
				-		udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				324
			 | 
			
			
				
				+		isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				319
			 | 
			
				325
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				320
			 | 
			
				326
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				321
			 | 
			
				327
			 | 
			
			
				
				 	/* Place all cards in Wait for Key state */ 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -484,7 +490,7 @@ void activate_isapnp_device ( struct isapnp_device *isapnp, 
			 | 
		
		
	
		
			
			| 
				484
			 | 
			
				490
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				485
			 | 
			
				491
			 | 
			
			
				
				 	/* Select the specified logical device */ 
			 | 
		
		
	
		
			
			| 
				486
			 | 
			
				492
			 | 
			
			
				
				 	isapnp_activate ( logdev ); 
			 | 
		
		
	
		
			
			| 
				487
			 | 
			
				
			 | 
			
			
				
				-	udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				493
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				488
			 | 
			
				494
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				489
			 | 
			
				495
			 | 
			
			
				
				 	/* Return all cards to Wait for Key state */ 
			 | 
		
		
	
		
			
			| 
				490
			 | 
			
				496
			 | 
			
			
				
				 	isapnp_wait_for_key (); 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -503,7 +509,7 @@ void deactivate_isapnp_device ( struct isapnp_device *isapnp, 
			 | 
		
		
	
		
			
			| 
				503
			 | 
			
				509
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				504
			 | 
			
				510
			 | 
			
			
				
				 	/* Select the specified logical device */ 
			 | 
		
		
	
		
			
			| 
				505
			 | 
			
				511
			 | 
			
			
				
				 	isapnp_deactivate ( logdev ); 
			 | 
		
		
	
		
			
			| 
				506
			 | 
			
				
			 | 
			
			
				
				-	udelay ( 1000 ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				512
			 | 
			
			
				
				+	isapnp_delay(); 
			 | 
		
		
	
		
			
			| 
				507
			 | 
			
				513
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				508
			 | 
			
				514
			 | 
			
			
				
				 	/* Return all cards to Wait for Key state */ 
			 | 
		
		
	
		
			
			| 
				509
			 | 
			
				515
			 | 
			
			
				
				 	isapnp_wait_for_key (); 
			 |