Logo Search packages:      
Sourcecode: xmbmon version File versions  Download package

tyan_tiger.c

/* Specific treatment for Tyan TigerMP motherboard */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#undef TyanTigerMP_SMBUS

#include <fcntl.h>
#include <unistd.h>

#include "io_static.c"

#define TTPortCTR 0x2E
#define TTPortDAT 0x2F

#define SENS2_IO_PORT   0xC00

/* external (global) data */
extern int isa_port_base;

#define INDEX_REG_PORT (isa_port_base + 0x05)
#define DATA_PORT      (isa_port_base + 0x06)

/* Winbond Registors */
#define     WINBD_CONFIG      0x40
#define     WINBD_SMBADDR     0x48
#define     WINBD_VENDEX      0x4E
#define     WINBD_VENDID      0x4F
#define     WINBD_TEMPADDR    0x4A

static int readbyte(int addr)
{
      int ret;
      OUTb(INDEX_REG_PORT, addr); WAIT;
      ret = INb(DATA_PORT); WAIT;
      return (ret & 0xFF);
}

static void writebyte(int addr, int value)
{
      OUTb(INDEX_REG_PORT, addr); WAIT;
      OUTb(DATA_PORT, value); WAIT;
}

static int vendercheck(void)
{
      int nv, save, ret;

      ret = 0;
      save = isa_port_base;
      isa_port_base = SENS2_IO_PORT;
      nv = readbyte(WINBD_VENDID) & 0xFF;
      if (nv == 0xA3) {
            writebyte(WINBD_VENDEX, 0x80);
            nv = readbyte(WINBD_VENDID) & 0xFF;
            if (nv == 0x5C)
                  ret = 1;
      }
      isa_port_base = save;
      return ret;
}

/* attach 2nd winbond 627HF */
void TyanTigerMPinit()
{
      unsigned char c;

      OpenIO();
      if (vendercheck()) {
            CloseIO();
            /* change ISA IO-port to 627HF */
            isa_port_base = SENS2_IO_PORT;
            return;
      }

      OUTb(TTPortCTR, 0x87);  /* get access to 627HF on TTPortCTR */
      OUTb(TTPortCTR, 0x87);

      OUTb(TTPortCTR, 0x07);
      OUTb(TTPortDAT, 0x0B);  /* want device as 0x0B access */

      OUTb(TTPortCTR, 0x60);  /* want device 0x0B on ISA port base 0x0C00 */
      c = SENS2_IO_PORT >> 8;
      OUTb(TTPortDAT, c);
      OUTb(TTPortCTR, 0x61);
      c = SENS2_IO_PORT & 0xFF;
      OUTb(TTPortDAT, c);

      /* change ISA IO-port to 627HF */
      isa_port_base = SENS2_IO_PORT;
      
      OUTb(TTPortCTR, 0x30);  /* now enabled */
      OUTb(TTPortDAT, 0x01);

#ifdef TyanTigerMP_SMBUS
      OUTb(TTPortCTR, 0x2B);  /* SMBus access enabled */
      c = INb(TTPortDAT) & 0x3F;
      OUTb(TTPortCTR, 0x2B);
      OUTb(TTPortDAT, c);

      writebyte(WINBD_SMBADDR, 0x2E); /* set 627HF on SMBus slave 0x5C(0x2E) */
      writebyte(WINBD_TEMPADDR, 0x32); /* set temp2,3 on SMBus slave 0x94,0x96 */
#endif

      writebyte(WINBD_CONFIG, 0x80);      /* kickstart it */
      writebyte(WINBD_CONFIG, 0x01);

      CloseIO();

      return;
}

Generated by  Doxygen 1.6.0   Back to index