mirror of https://github.com/ipxe/ipxe.git
Reduce binary size by factoring out common parameterised calls to
udelay().pull/1/head
parent
85dd4fd8d6
commit
120192e8d1
|
@ -133,11 +133,16 @@ static inline void isapnp_deactivate ( uint8_t logdev ) {
|
||||||
isapnp_write_byte ( ISAPNP_ACTIVATE, 0 );
|
isapnp_write_byte ( ISAPNP_ACTIVATE, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void isapnp_delay ( void ) {
|
||||||
|
udelay ( 1000 );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The linear feedback shift register as described in Appendix B of
|
* The linear feedback shift register as described in Appendix B of
|
||||||
* the PnP ISA spec. The hardware implementation uses eight D-type
|
* the PnP ISA spec. The hardware implementation uses eight D-type
|
||||||
* latches and two XOR gates. I think this is probably the smallest
|
* latches and two XOR gates. I think this is probably the smallest
|
||||||
* possible implementation in software. :)
|
* possible implementation in software. Six instructions when input_bit
|
||||||
|
* is a constant 0 (for isapnp_send_key). :)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static inline uint8_t isapnp_lfsr_next ( uint8_t lfsr, int input_bit ) {
|
static inline uint8_t isapnp_lfsr_next ( uint8_t lfsr, int input_bit ) {
|
||||||
|
@ -156,12 +161,12 @@ static void isapnp_send_key ( void ) {
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
uint8_t lfsr;
|
uint8_t lfsr;
|
||||||
|
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
isapnp_write_address ( 0x00 );
|
isapnp_write_address ( 0x00 );
|
||||||
isapnp_write_address ( 0x00 );
|
isapnp_write_address ( 0x00 );
|
||||||
|
|
||||||
lfsr = ISAPNP_LFSR_SEED;
|
lfsr = ISAPNP_LFSR_SEED;
|
||||||
for ( i = 0 ; i < 32 ; i-- ) {
|
for ( i = 0 ; i < 32 ; i++ ) {
|
||||||
isapnp_write_address ( lfsr );
|
isapnp_write_address ( lfsr );
|
||||||
lfsr = isapnp_lfsr_next ( lfsr, 0 );
|
lfsr = isapnp_lfsr_next ( lfsr, 0 );
|
||||||
}
|
}
|
||||||
|
@ -200,7 +205,7 @@ static inline uint8_t isapnp_peek_byte ( void ) {
|
||||||
/* Byte ready - read it */
|
/* Byte ready - read it */
|
||||||
return isapnp_read_resourcedata();
|
return isapnp_read_resourcedata();
|
||||||
}
|
}
|
||||||
udelay ( 100 );
|
isapnp_delay ();
|
||||||
}
|
}
|
||||||
/* Data never became ready - return 0xff */
|
/* Data never became ready - return 0xff */
|
||||||
return 0xff;
|
return 0xff;
|
||||||
|
@ -249,7 +254,8 @@ static int isapnp_try_isolate ( void ) {
|
||||||
/* Reset all assigned CSNs */
|
/* Reset all assigned CSNs */
|
||||||
isapnp_reset_csn ();
|
isapnp_reset_csn ();
|
||||||
isapnp_max_csn = 0;
|
isapnp_max_csn = 0;
|
||||||
udelay ( 2000 );
|
isapnp_delay();
|
||||||
|
isapnp_delay();
|
||||||
|
|
||||||
/* Place all cards into the Isolation state */
|
/* Place all cards into the Isolation state */
|
||||||
isapnp_wait_for_key ();
|
isapnp_wait_for_key ();
|
||||||
|
@ -258,7 +264,7 @@ static int isapnp_try_isolate ( void ) {
|
||||||
|
|
||||||
/* Set the read port */
|
/* Set the read port */
|
||||||
isapnp_set_read_port ();
|
isapnp_set_read_port ();
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
|
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
|
|
||||||
|
@ -269,7 +275,7 @@ static int isapnp_try_isolate ( void ) {
|
||||||
|
|
||||||
/* Initiate serial isolation */
|
/* Initiate serial isolation */
|
||||||
isapnp_serialisolation ();
|
isapnp_serialisolation ();
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
|
|
||||||
/* Read identifier serially via the ISAPnP read port. */
|
/* Read identifier serially via the ISAPnP read port. */
|
||||||
memset ( &identifier, 0, sizeof ( identifier ) );
|
memset ( &identifier, 0, sizeof ( identifier ) );
|
||||||
|
@ -278,9 +284,9 @@ static int isapnp_try_isolate ( void ) {
|
||||||
byte = 0;
|
byte = 0;
|
||||||
for ( j = 0 ; j < 8 ; j++ ) {
|
for ( j = 0 ; j < 8 ; j++ ) {
|
||||||
data = isapnp_read_data ();
|
data = isapnp_read_data ();
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
data = ( data << 8 ) | isapnp_read_data ();
|
data = ( data << 8 ) | isapnp_read_data ();
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
if ( data == 0x55aa ) {
|
if ( data == 0x55aa ) {
|
||||||
byte |= 1;
|
byte |= 1;
|
||||||
}
|
}
|
||||||
|
@ -309,13 +315,13 @@ static int isapnp_try_isolate ( void ) {
|
||||||
identifier.checksum, isapnp_max_csn );
|
identifier.checksum, isapnp_max_csn );
|
||||||
|
|
||||||
isapnp_write_csn ( isapnp_max_csn );
|
isapnp_write_csn ( isapnp_max_csn );
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
|
|
||||||
/* Send this card back to Sleep and force all cards
|
/* Send this card back to Sleep and force all cards
|
||||||
* without a CSN into Isolation state
|
* without a CSN into Isolation state
|
||||||
*/
|
*/
|
||||||
isapnp_wake ( 0x00 );
|
isapnp_wake ( 0x00 );
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Place all cards in Wait for Key state */
|
/* Place all cards in Wait for Key state */
|
||||||
|
@ -484,7 +490,7 @@ void activate_isapnp_device ( struct isapnp_device *isapnp,
|
||||||
|
|
||||||
/* Select the specified logical device */
|
/* Select the specified logical device */
|
||||||
isapnp_activate ( logdev );
|
isapnp_activate ( logdev );
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
|
|
||||||
/* Return all cards to Wait for Key state */
|
/* Return all cards to Wait for Key state */
|
||||||
isapnp_wait_for_key ();
|
isapnp_wait_for_key ();
|
||||||
|
@ -503,7 +509,7 @@ void deactivate_isapnp_device ( struct isapnp_device *isapnp,
|
||||||
|
|
||||||
/* Select the specified logical device */
|
/* Select the specified logical device */
|
||||||
isapnp_deactivate ( logdev );
|
isapnp_deactivate ( logdev );
|
||||||
udelay ( 1000 );
|
isapnp_delay();
|
||||||
|
|
||||||
/* Return all cards to Wait for Key state */
|
/* Return all cards to Wait for Key state */
|
||||||
isapnp_wait_for_key ();
|
isapnp_wait_for_key ();
|
||||||
|
|
Loading…
Reference in New Issue