2969 nack = TLan_GetBit(TLAN_NET_SIO_MDATA, sio);
2970 TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
2971 if (nack) {
2972 for (i = 0; i < 16; i++) {
2973 TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);
2974 TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
2975 }
2976 tmp = 0xffff;
2977 err = TRUE;
2978 } else {
2979 for (tmp = 0, i = 0x8000; i; i >>= 1) {
2980 TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);
2981 if (TLan_GetBit(TLAN_NET_SIO_MDATA, sio))
2982 tmp |= i;
2983 TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
2984 }
2985 }
2986
2987
2988 TLan_ClearBit(TLAN_NET_SIO_MCLK, sio);
2989 TLan_SetBit(TLAN_NET_SIO_MCLK, sio);
2990
2991 if ( minten )
2992 TLan_SetBit(TLAN_NET_SIO_MINTEN, sio);
2993
2994 *val = tmp;
2995
2996 if (!in_irq())
2997 spin_unlock_irqrestore(&priv->lock, flags);
2998
2999 return err;
3000
3001}
3002
3003
3004
3005
3006
3007
3008
3009