Diff for /src/sys/net/i4b/capi/iavc/iavc.h between versions 1.2 and 1.3

version 1.2, 2003/06/17 04:28:39 version 1.3, 2004/04/16 15:40:21
Line 24 Line 24
  *   *
  * capi/iavc/iavc.h     The AVM ISDN controllers' common declarations.   * capi/iavc/iavc.h     The AVM ISDN controllers' common declarations.
  *   *
  * $FreeBSD: src/sys/i4b/capi/iavc/iavc.h,v 1.1.2.1 2001/08/10 14:08:34 obrien Exp $   * $FreeBSD: src/sys/i4b/capi/iavc/iavc.h,v 1.2 2003/07/23 17:58:41 phk Exp $
  * $DragonFly: src/sys/i4b/capi/iavc/iavc.h,v 1.1 2003/06/16 06:22:17 dillon Exp $   * $DragonFly$
  */   */
   
 #ifndef _CAPI_IAVC_H_  #ifndef _CAPI_IAVC_H_
Line 314  static __inline int b1io_tx_empty(iavc_s Line 314  static __inline int b1io_tx_empty(iavc_s
 //      I/O registers.  //      I/O registers.
 */  */
   
 static __inline u_int8_t b1io_get_byte(iavc_softc_t *sc)  u_int8_t b1io_get_byte(iavc_softc_t *sc);
 {  int b1io_put_byte(iavc_softc_t *sc, u_int8_t val);
     int spin = 0;  
     while (!b1io_rx_full(sc) && spin < B1IO_WAIT_MAX) {  
         spin++; DELAY(B1IO_WAIT_DLY);  
     }  
     if (b1io_rx_full(sc))  
         return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, B1_READ);  
     printf("iavc%d: rx not completed\n", sc->sc_unit);  
     return 0xff;  
 }  
   
 static __inline int b1io_put_byte(iavc_softc_t *sc, u_int8_t val)  
 {  
     int spin = 0;  
     while (!b1io_tx_empty(sc) && spin < B1IO_WAIT_MAX) {  
         spin++; DELAY(B1IO_WAIT_DLY);  
     }  
     if (b1io_tx_empty(sc)) {  
         bus_space_write_1(sc->sc_io_bt, sc->sc_io_bh, B1_WRITE, val);  
         return 0;  
     }  
     printf("iavc%d: tx not emptied\n", sc->sc_unit);  
     return -1;  
 }  
   
 static __inline int b1io_save_put_byte(iavc_softc_t *sc, u_int8_t val)  
 {  
     int spin = 0;  
     while (!b1io_tx_empty(sc) && spin < B1IO_WAIT_MAX) {  
         spin++; DELAY(B1IO_WAIT_DLY);  
     }  
     if (b1io_tx_empty(sc)) {  
         b1io_outp(sc, B1_WRITE, val);  
         return 0;  
     }  
     printf("iavc%d: tx not emptied\n", sc->sc_unit);  
     return -1;  
 }  
   
 static __inline u_int32_t b1io_get_word(iavc_softc_t *sc)  
 {  
     u_int32_t val = 0;  
     val |= b1io_get_byte(sc);  
     val |= (b1io_get_byte(sc) << 8);  
     val |= (b1io_get_byte(sc) << 16);  
     val |= (b1io_get_byte(sc) << 24);  
     return val;  
 }  
   
 static __inline void b1io_put_word(iavc_softc_t *sc, u_int32_t val)  int b1io_save_put_byte(iavc_softc_t *sc, u_int8_t val);
 {  
     b1io_put_byte(sc, (val & 0xff));  
     b1io_put_byte(sc, (val >> 8) & 0xff);  
     b1io_put_byte(sc, (val >> 16) & 0xff);  
     b1io_put_byte(sc, (val >> 24) & 0xff);  
 }  
   
 static __inline int b1io_get_slice(iavc_softc_t *sc, u_int8_t *dp)  u_int32_t b1io_get_word(iavc_softc_t *sc);
 {  void b1io_put_word(iavc_softc_t *sc, u_int32_t val);
     int len, i;  
     len = i = b1io_get_word(sc);  
     while (i--) *dp++ = b1io_get_byte(sc);  
     return len;  
 }  
   
 static __inline void b1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len)  int b1io_get_slice(iavc_softc_t *sc, u_int8_t *dp);
 {  void b1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len);
     b1io_put_word(sc, len);  
     while (len--) b1io_put_byte(sc, *dp++);  
 }  
   
 /*  /*
 //  b1io_{read,write}_reg  //  b1io_{read,write}_reg
Line 392  static __inline void b1io_put_slice(iavc Line 331  static __inline void b1io_put_slice(iavc
 //      ports.  //      ports.
 */  */
   
 static __inline u_int32_t b1io_read_reg(iavc_softc_t *sc, int reg)  u_int32_t b1io_read_reg(iavc_softc_t *sc, int reg);
 {  u_int32_t b1io_write_reg(iavc_softc_t *sc, int reg, u_int32_t val);
     b1io_put_byte(sc, READ_REGISTER);  
     b1io_put_word(sc, reg);  
     return b1io_get_word(sc);  
 }  
   
 static __inline u_int32_t b1io_write_reg(iavc_softc_t *sc, int reg, u_int32_t val)  
 {  
     b1io_put_byte(sc, WRITE_REGISTER);  
     b1io_put_word(sc, reg);  
     b1io_put_word(sc, val);  
     return b1io_get_word(sc);  
 }  
   
 /*  /*
 //  t1io_outp  //  t1io_outp
Line 433  static __inline u_int8_t t1io_fifostatus Line 360  static __inline u_int8_t t1io_fifostatus
     return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, T1_FIFOSTAT);      return bus_space_read_1(sc->sc_io_bt, sc->sc_io_bh, T1_FIFOSTAT);
 }  }
   
 static __inline int t1io_get_slice(iavc_softc_t *sc, u_int8_t *dp)  int t1io_get_slice(iavc_softc_t *sc, u_int8_t *dp);
 {  void t1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len);
     int len, i;  
     len = i = b1io_get_word(sc);  
     if (t1io_isfastlink(sc)) {  
         int status;  
         while (i) {  
             status = t1io_fifostatus(sc) & (T1F_IREADY|T1F_IHALF);  
             if (i >= FIFO_INPBSIZE) status |= T1F_IFULL;  
   
             switch (status) {  
             case T1F_IREADY|T1F_IHALF|T1F_IFULL:  
                 bus_space_read_multi_1(sc->sc_io_bt, sc->sc_io_bh,  
                                        T1_READ, dp, FIFO_INPBSIZE);  
                 dp += FIFO_INPBSIZE;  
                 i -= FIFO_INPBSIZE;  
                 break;  
   
             case T1F_IREADY|T1F_IHALF:  
                 bus_space_read_multi_1(sc->sc_io_bt, sc->sc_io_bh,  
                                        T1_READ, dp, i);  
                 dp += i;  
                 i = 0;  
                 break;  
   
             default:  
                 *dp++ = b1io_get_byte(sc);  
                 i--;  
             }  
         }  
     } else { /* not fastlink */  
         if (i--) *dp++ = b1io_get_byte(sc);  
     }  
     return len;  
 }  
   
 static __inline void t1io_put_slice(iavc_softc_t *sc, u_int8_t *dp, int len)  
 {  
     int i = len;  
     b1io_put_word(sc, i);  
     if (t1io_isfastlink(sc)) {  
         int status;  
         while (i) {  
             status = t1io_fifostatus(sc) & (T1F_OREADY|T1F_OHALF);  
             if (i >= FIFO_OUTBSIZE) status |= T1F_OFULL;  
   
             switch (status) {  
             case T1F_OREADY|T1F_OHALF|T1F_OFULL:  
                 bus_space_write_multi_1(sc->sc_io_bt, sc->sc_io_bh,  
                                         T1_WRITE, dp, FIFO_OUTBSIZE);  
                 dp += FIFO_OUTBSIZE;  
                 i -= FIFO_OUTBSIZE;  
                 break;  
   
             case T1F_OREADY|T1F_OHALF:  
                 bus_space_write_multi_1(sc->sc_io_bt, sc->sc_io_bh,  
                                         T1_WRITE, dp, i);  
                 dp += i;  
                 i = 0;  
                 break;  
   
             default:  
                 b1io_put_byte(sc, *dp++);  
                 i--;  
             }  
         }  
     } else {  
         while (i--) b1io_put_byte(sc, *dp++);  
     }  
 }  
   
 /*  /*
 //  An attempt to bring it all together:  //  An attempt to bring it all together:

Removed from v.1.2  
changed lines
  Added in v.1.3