Переглянути джерело

[tg3] Remove x86-specific inline assembly

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 8 роки тому
джерело
коміт
86f96a40f4
1 змінених файлів з 9 додано та 27 видалено
  1. 9
    27
      src/drivers/net/tg3/tg3.h

+ 9
- 27
src/drivers/net/tg3/tg3.h Переглянути файл

@@ -3320,43 +3320,25 @@ void tg3_write_indirect_mbox(struct tg3 *tp, u32 off, u32 val);
3320 3320
 
3321 3321
 /* Functions & macros to verify TG3_FLAGS types */
3322 3322
 
3323
-static inline int variable_test_bit(int nr, volatile const unsigned long *addr)
3324
-{
3325
-	int oldbit;
3326
-
3327
-	asm volatile("bt %2,%1\n\t"
3328
-	             "sbb %0,%0"
3329
-	             : "=r" (oldbit)
3330
-	             : "m" (*(unsigned long *)addr), "Ir" (nr));
3331
-
3332
-	return oldbit;
3333
-}
3334
-
3335 3323
 static inline int _tg3_flag(enum TG3_FLAGS flag, unsigned long *bits)
3336 3324
 {
3337
-	return variable_test_bit(flag, bits);
3338
-}
3339
-
3340
-#define BITOP_ADDR(x) "+m" (*(volatile long *) (x))
3341
-
3342
-static inline void __set_bit(int nr, volatile unsigned long *addr)
3343
-{
3344
-	asm volatile("bts %1,%0" : BITOP_ADDR(addr) : "Ir" (nr) : "memory");
3325
+	unsigned int index = ( flag / ( 8 * sizeof ( *bits ) ) );
3326
+	unsigned int bit = ( flag % ( 8 * sizeof ( *bits ) ) );
3327
+	return ( bits[index] & ( 1UL << bit ) );
3345 3328
 }
3346 3329
 
3347 3330
 static inline void _tg3_flag_set(enum TG3_FLAGS flag, unsigned long *bits)
3348 3331
 {
3349
-	__set_bit(flag, bits);
3350
-}
3351
-
3352
-static inline void __clear_bit(int nr, volatile unsigned long *addr)
3353
-{
3354
-	asm volatile("btr %1,%0" : BITOP_ADDR(addr) : "Ir" (nr));
3332
+	unsigned int index = ( flag / ( 8 * sizeof ( *bits ) ) );
3333
+	unsigned int bit = ( flag % ( 8 * sizeof ( *bits ) ) );
3334
+	bits[index] |= ( 1UL << bit );
3355 3335
 }
3356 3336
 
3357 3337
 static inline void _tg3_flag_clear(enum TG3_FLAGS flag, unsigned long *bits)
3358 3338
 {
3359
-	__clear_bit(flag, bits);
3339
+	unsigned int index = ( flag / ( 8 * sizeof ( *bits ) ) );
3340
+	unsigned int bit = ( flag % ( 8 * sizeof ( *bits ) ) );
3341
+	bits[index] &= ~( 1UL << bit );
3360 3342
 }
3361 3343
 
3362 3344
 #define tg3_flag(tp, flag)				\

Завантаження…
Відмінити
Зберегти