[BACK]Return to if_tl.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / dev / pci

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/dev/pci/if_tl.c between version 1.57 and 1.58

version 1.57, 2003/03/19 17:23:26 version 1.58, 2003/09/30 00:35:30
Line 100  __KERNEL_RCSID(0, "$NetBSD$");
Line 100  __KERNEL_RCSID(0, "$NetBSD$");
 #include <dev/pci/pcivar.h>  #include <dev/pci/pcivar.h>
 #include <dev/pci/pcidevs.h>  #include <dev/pci/pcidevs.h>
   
 #include <dev/i2c/i2c_bus.h>  #include <dev/i2c/i2cvar.h>
 #include <dev/i2c/i2c_eeprom.h>  #include <dev/i2c/i2c_bitbang.h>
   #include <dev/i2c/at24cxxvar.h>
   
 #include <dev/mii/mii.h>  #include <dev/mii/mii.h>
 #include <dev/mii/miivar.h>  #include <dev/mii/miivar.h>
Line 156  void tl_mii_write __P((struct device *, 
Line 157  void tl_mii_write __P((struct device *, 
   
 void tl_statchg __P((struct device *));  void tl_statchg __P((struct device *));
   
 void tl_i2c_set __P((void*, u_int8_t));          /* I2C glue */
 void tl_i2c_clr __P((void*, u_int8_t));  static int tl_i2c_acquire_bus(void *, int);
 int tl_i2c_read __P((void*, u_int8_t));  static void tl_i2c_release_bus(void *, int);
   static int tl_i2c_send_start(void *, int);
   static int tl_i2c_send_stop(void *, int);
   static int tl_i2c_initiate_xfer(void *, i2c_addr_t, int);
   static int tl_i2c_read_byte(void *, uint8_t *, int);
   static int tl_i2c_write_byte(void *, uint8_t, int);
   
           /* I2C bit-bang glue */
   static void tl_i2cbb_set_bits(void *, uint32_t);
   static void tl_i2cbb_set_dir(void *, uint32_t);
   static uint32_t tl_i2cbb_read(void *);
   static const struct i2c_bitbang_ops tl_i2cbb_ops = {
           tl_i2cbb_set_bits,
           tl_i2cbb_set_dir,
           tl_i2cbb_read,
           {
                   TL_NETSIO_EDATA,        /* SDA */
                   TL_NETSIO_ECLOCK,       /* SCL */
                   TL_NETSIO_ETXEN,        /* SDA is output */
                   0,                      /* SDA is input */
           }
   };
   
 static __inline void netsio_clr __P((tl_softc_t*, u_int8_t));  static __inline void netsio_clr __P((tl_softc_t*, u_int8_t));
 static __inline void netsio_set __P((tl_softc_t*, u_int8_t));  static __inline void netsio_set __P((tl_softc_t*, u_int8_t));
Line 282  tl_pci_attach(parent, self, aux)
Line 304  tl_pci_attach(parent, self, aux)
         bus_space_handle_t ioh, memh;          bus_space_handle_t ioh, memh;
         pci_intr_handle_t intrhandle;          pci_intr_handle_t intrhandle;
         const char *intrstr;          const char *intrstr;
         int i, tmp, ioh_valid, memh_valid;          int ioh_valid, memh_valid;
         int reg_io, reg_mem;          int reg_io, reg_mem;
         pcireg_t reg10, reg14;          pcireg_t reg10, reg14;
         pcireg_t csr;          pcireg_t csr;
Line 353  tl_pci_attach(parent, self, aux)
Line 375  tl_pci_attach(parent, self, aux)
   
         tl_reset(sc);          tl_reset(sc);
   
         /* fill in the i2c struct */          /* fill in the i2c tag */
         sc->i2cbus.adapter_softc = sc;          sc->sc_i2c.ic_cookie = sc;
         sc->i2cbus.set_bit = tl_i2c_set;          sc->sc_i2c.ic_acquire_bus = tl_i2c_acquire_bus;
         sc->i2cbus.clr_bit = tl_i2c_clr;          sc->sc_i2c.ic_release_bus = tl_i2c_release_bus;
         sc->i2cbus.read_bit = tl_i2c_read;          sc->sc_i2c.ic_send_start = tl_i2c_send_start;
           sc->sc_i2c.ic_send_stop = tl_i2c_send_stop;
           sc->sc_i2c.ic_initiate_xfer = tl_i2c_initiate_xfer;
           sc->sc_i2c.ic_read_byte = tl_i2c_read_byte;
           sc->sc_i2c.ic_write_byte = tl_i2c_write_byte;
   
 #ifdef TLDEBUG  #ifdef TLDEBUG
         printf("default values of INTreg: 0x%x\n",          printf("default values of INTreg: 0x%x\n",
Line 365  tl_pci_attach(parent, self, aux)
Line 391  tl_pci_attach(parent, self, aux)
 #endif  #endif
   
         /* read mac addr */          /* read mac addr */
         for (i=0; i<ETHER_ADDR_LEN; i++) {          if (seeprom_bootstrap_read(&sc->sc_i2c, 0x50, 0x83, 512/*?*/,
                 tmp = i2c_eeprom_read(&sc->i2cbus, 0x83 + i);                                     sc->tl_enaddr, ETHER_ADDR_LEN)) {
                 if (tmp < 0) {                  printf("%s: error reading Ethernet adress\n",
                         printf("%s: error reading Ethernet adress\n",                      sc->sc_dev.dv_xname);
                             sc->sc_dev.dv_xname);  
                         return;                          return;
                 } else {  
                         sc->tl_enaddr[i] = tmp;  
                 }  
         }          }
         printf("%s: Ethernet address %s\n", sc->sc_dev.dv_xname,          printf("%s: Ethernet address %s\n", sc->sc_dev.dv_xname,
             ether_sprintf(sc->tl_enaddr));              ether_sprintf(sc->tl_enaddr));
Line 889  tl_statchg(self)
Line 911  tl_statchg(self)
         tl_intreg_write_byte(sc, TL_INT_NET + TL_INT_NetCmd, reg);          tl_intreg_write_byte(sc, TL_INT_NET + TL_INT_NetCmd, reg);
 }  }
   
 void tl_i2c_set(v, bit)  /********** I2C glue **********/
         void *v;  
         u_int8_t bit;  static int
   tl_i2c_acquire_bus(void *cookie, int flags)
 {  {
         tl_softc_t *sc = v;  
   
         switch (bit) {          /* private bus */
         case I2C_DATA:          return (0);
                 netsio_set(sc, TL_NETSIO_EDATA);  
                 break;  
         case I2C_CLOCK:  
                 netsio_set(sc, TL_NETSIO_ECLOCK);  
                 break;  
         case I2C_TXEN:  
                 netsio_set(sc, TL_NETSIO_ETXEN);  
                 break;  
         default:  
                 printf("tl_i2c_set: unknown bit %d\n", bit);  
         }  
         return;  
 }  }
   
 void tl_i2c_clr(v, bit)  static void
         void *v;  tl_i2c_release_bus(void *cookie, int flags)
         u_int8_t bit;  
 {  {
         tl_softc_t *sc = v;  
   
         switch (bit) {          /* private bus */
         case I2C_DATA:  
                 netsio_clr(sc, TL_NETSIO_EDATA);  
                 break;  
         case I2C_CLOCK:  
                 netsio_clr(sc, TL_NETSIO_ECLOCK);  
                 break;  
         case I2C_TXEN:  
                 netsio_clr(sc, TL_NETSIO_ETXEN);  
                 break;  
         default:  
                 printf("tl_i2c_clr: unknown bit %d\n", bit);  
         }  
         return;  
 }  }
   
 int tl_i2c_read(v, bit)  static int
         void *v;  tl_i2c_send_start(void *cookie, int flags)
         u_int8_t bit;  
 {  {
         tl_softc_t *sc = v;  
   
         switch (bit) {          return (i2c_bitbang_send_start(cookie, flags, &tl_i2cbb_ops));
         case I2C_DATA:  }
                 return netsio_read(sc, TL_NETSIO_EDATA);  
                 break;  static int
         case I2C_CLOCK:  tl_i2c_send_stop(void *cookie, int flags)
                 return netsio_read(sc, TL_NETSIO_ECLOCK);  {
                 break;  
         case I2C_TXEN:          return (i2c_bitbang_send_stop(cookie, flags, &tl_i2cbb_ops));
                 return netsio_read(sc, TL_NETSIO_ETXEN);  }
                 break;  
         default:  static int
                 printf("tl_i2c_read: unknown bit %d\n", bit);  tl_i2c_initiate_xfer(void *cookie, i2c_addr_t addr, int flags)
                 return -1;  {
         }  
           return (i2c_bitbang_initiate_xfer(cookie, addr, flags, &tl_i2cbb_ops));
 }  }
   
 static int  static int
   tl_i2c_read_byte(void *cookie, uint8_t *valp, int flags)
   {
   
           return (i2c_bitbang_read_byte(cookie, valp, flags, &tl_i2cbb_ops));
   }
   
   static int
   tl_i2c_write_byte(void *cookie, uint8_t val, int flags)
   {
   
           return (i2c_bitbang_write_byte(cookie, val, flags, &tl_i2cbb_ops));
   }
   
   /********** I2C bit-bang glue **********/
   
   static void
   tl_i2cbb_set_bits(void *cookie, uint32_t bits)
   {
           struct tl_softc *sc = cookie;
           uint8_t reg;
   
           reg = tl_intreg_read_byte(sc, TL_INT_NET + TL_INT_NetSio);
           reg = (reg & ~(TL_NETSIO_EDATA|TL_NETSIO_ECLOCK)) | bits;
           tl_intreg_write_byte(sc, TL_INT_NET + TL_INT_NetSio, reg);
   }
   
   static void
   tl_i2cbb_set_dir(void *cookie, uint32_t bits)
   {
           struct tl_softc *sc = cookie;
           uint8_t reg;
   
           reg = tl_intreg_read_byte(sc, TL_INT_NET + TL_INT_NetSio);
           reg = (reg & ~TL_NETSIO_ETXEN) | bits;
           tl_intreg_write_byte(sc, TL_INT_NET + TL_INT_NetSio, reg);
   }
   
   static uint32_t
   tl_i2cbb_read(void *cookie)
   {
   
           return (tl_intreg_read_byte(cookie, TL_INT_NET + TL_INT_NetSio));
   }
   
   /********** End of I2C stuff **********/
   
   static int
 tl_intr(v)  tl_intr(v)
         void *v;          void *v;
 {  {

Legend:
Removed from v.1.57  
changed lines
  Added in v.1.58

CVSweb <webmaster@jp.NetBSD.org>