| .. | .. | 
|---|
| 3 | 3 |   * NSC/Cyrix CPU indexed register access. Must be inlined instead of | 
|---|
| 4 | 4 |   * macros to ensure correct access ordering | 
|---|
| 5 | 5 |   * Access order is always 0x22 (=offset), 0x23 (=value) | 
|---|
| 6 |  | - *  | 
|---|
| 7 |  | - * When using the old macros a line like  | 
|---|
| 8 |  | - *   setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);  | 
|---|
| 9 |  | - * gets expanded to:  | 
|---|
| 10 |  | - *  do {  | 
|---|
| 11 |  | - *    outb((CX86_CCR2), 0x22);  | 
|---|
| 12 |  | - *    outb((({  | 
|---|
| 13 |  | - *        outb((CX86_CCR2), 0x22);  | 
|---|
| 14 |  | - *        inb(0x23);  | 
|---|
| 15 |  | - *    }) | 0x88), 0x23);  | 
|---|
| 16 |  | - *  } while (0);  | 
|---|
| 17 |  | - *  | 
|---|
| 18 |  | - * which in fact violates the access order (= 0x22, 0x22, 0x23, 0x23).  | 
|---|
| 19 | 6 |   */ | 
|---|
| 20 | 7 |   | 
|---|
| 21 | 8 |  static inline u8 getCx86(u8 reg) | 
|---|
| .. | .. | 
|---|
| 29 | 16 |  	outb(reg, 0x22); | 
|---|
| 30 | 17 |  	outb(data, 0x23); | 
|---|
| 31 | 18 |  } | 
|---|
| 32 |  | -  | 
|---|
| 33 |  | -#define getCx86_old(reg) ({ outb((reg), 0x22); inb(0x23); })  | 
|---|
| 34 |  | -  | 
|---|
| 35 |  | -#define setCx86_old(reg, data) do { \  | 
|---|
| 36 |  | -	outb((reg), 0x22); \  | 
|---|
| 37 |  | -	outb((data), 0x23); \  | 
|---|
| 38 |  | -} while (0)  | 
|---|
| 39 |  | -  | 
|---|