viapm.c (158651) | viapm.c (162234) |
---|---|
1/*- 2 * Copyright (c) 2001 Alcove - Nicolas Souchu 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2001 Alcove - Nicolas Souchu 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/pci/viapm.c 158651 2006-05-16 14:37:58Z phk $"); | 28__FBSDID("$FreeBSD: head/sys/pci/viapm.c 162234 2006-09-11 20:52:41Z jhb $"); |
29 30#include "opt_isa.h" 31 32#include <sys/param.h> 33#include <sys/kernel.h> 34#include <sys/systm.h> 35#include <sys/module.h> 36#include <sys/bus.h> --- 598 unchanged lines hidden (view full) --- 635static int 636viasmb_quick(device_t dev, u_char slave, int how) 637{ 638 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 639 int error; 640 641 viapm_clear(viapm); 642 if (viapm_busy(viapm)) | 29 30#include "opt_isa.h" 31 32#include <sys/param.h> 33#include <sys/kernel.h> 34#include <sys/systm.h> 35#include <sys/module.h> 36#include <sys/bus.h> --- 598 unchanged lines hidden (view full) --- 635static int 636viasmb_quick(device_t dev, u_char slave, int how) 637{ 638 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 639 int error; 640 641 viapm_clear(viapm); 642 if (viapm_busy(viapm)) |
643 return (EBUSY); | 643 return (SMB_EBUSY); |
644 645 switch (how) { 646 case SMB_QWRITE: 647 VIAPM_DEBUG(printf("viapm: QWRITE to 0x%x", slave)); 648 VIAPM_OUTB(SMBHADDR, slave & ~LSB); 649 break; 650 case SMB_QREAD: 651 VIAPM_DEBUG(printf("viapm: QREAD to 0x%x", slave)); --- 13 unchanged lines hidden (view full) --- 665static int 666viasmb_sendb(device_t dev, u_char slave, char byte) 667{ 668 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 669 int error; 670 671 viapm_clear(viapm); 672 if (viapm_busy(viapm)) | 644 645 switch (how) { 646 case SMB_QWRITE: 647 VIAPM_DEBUG(printf("viapm: QWRITE to 0x%x", slave)); 648 VIAPM_OUTB(SMBHADDR, slave & ~LSB); 649 break; 650 case SMB_QREAD: 651 VIAPM_DEBUG(printf("viapm: QREAD to 0x%x", slave)); --- 13 unchanged lines hidden (view full) --- 665static int 666viasmb_sendb(device_t dev, u_char slave, char byte) 667{ 668 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 669 int error; 670 671 viapm_clear(viapm); 672 if (viapm_busy(viapm)) |
673 return (EBUSY); | 673 return (SMB_EBUSY); |
674 675 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 676 VIAPM_OUTB(SMBHCMD, byte); 677 678 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV); 679 680 error = viapm_wait(viapm); 681 --- 5 unchanged lines hidden (view full) --- 687static int 688viasmb_recvb(device_t dev, u_char slave, char *byte) 689{ 690 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 691 int error; 692 693 viapm_clear(viapm); 694 if (viapm_busy(viapm)) | 674 675 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 676 VIAPM_OUTB(SMBHCMD, byte); 677 678 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV); 679 680 error = viapm_wait(viapm); 681 --- 5 unchanged lines hidden (view full) --- 687static int 688viasmb_recvb(device_t dev, u_char slave, char *byte) 689{ 690 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 691 int error; 692 693 viapm_clear(viapm); 694 if (viapm_busy(viapm)) |
695 return (EBUSY); | 695 return (SMB_EBUSY); |
696 697 VIAPM_OUTB(SMBHADDR, slave | LSB); 698 699 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV); 700 701 if ((error = viapm_wait(viapm)) == SMB_ENOERR) 702 *byte = VIAPM_INB(SMBHDATA0); 703 --- 5 unchanged lines hidden (view full) --- 709static int 710viasmb_writeb(device_t dev, u_char slave, char cmd, char byte) 711{ 712 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 713 int error; 714 715 viapm_clear(viapm); 716 if (viapm_busy(viapm)) | 696 697 VIAPM_OUTB(SMBHADDR, slave | LSB); 698 699 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV); 700 701 if ((error = viapm_wait(viapm)) == SMB_ENOERR) 702 *byte = VIAPM_INB(SMBHDATA0); 703 --- 5 unchanged lines hidden (view full) --- 709static int 710viasmb_writeb(device_t dev, u_char slave, char cmd, char byte) 711{ 712 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 713 int error; 714 715 viapm_clear(viapm); 716 if (viapm_busy(viapm)) |
717 return (EBUSY); | 717 return (SMB_EBUSY); |
718 719 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 720 VIAPM_OUTB(SMBHCMD, cmd); 721 VIAPM_OUTB(SMBHDATA0, byte); 722 723 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE); 724 725 error = viapm_wait(viapm); --- 6 unchanged lines hidden (view full) --- 732static int 733viasmb_readb(device_t dev, u_char slave, char cmd, char *byte) 734{ 735 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 736 int error; 737 738 viapm_clear(viapm); 739 if (viapm_busy(viapm)) | 718 719 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 720 VIAPM_OUTB(SMBHCMD, cmd); 721 VIAPM_OUTB(SMBHDATA0, byte); 722 723 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE); 724 725 error = viapm_wait(viapm); --- 6 unchanged lines hidden (view full) --- 732static int 733viasmb_readb(device_t dev, u_char slave, char cmd, char *byte) 734{ 735 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 736 int error; 737 738 viapm_clear(viapm); 739 if (viapm_busy(viapm)) |
740 return (EBUSY); | 740 return (SMB_EBUSY); |
741 742 VIAPM_OUTB(SMBHADDR, slave | LSB); 743 VIAPM_OUTB(SMBHCMD, cmd); 744 745 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE); 746 747 if ((error = viapm_wait(viapm)) == SMB_ENOERR) 748 *byte = VIAPM_INB(SMBHDATA0); --- 6 unchanged lines hidden (view full) --- 755static int 756viasmb_writew(device_t dev, u_char slave, char cmd, short word) 757{ 758 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 759 int error; 760 761 viapm_clear(viapm); 762 if (viapm_busy(viapm)) | 741 742 VIAPM_OUTB(SMBHADDR, slave | LSB); 743 VIAPM_OUTB(SMBHCMD, cmd); 744 745 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE); 746 747 if ((error = viapm_wait(viapm)) == SMB_ENOERR) 748 *byte = VIAPM_INB(SMBHDATA0); --- 6 unchanged lines hidden (view full) --- 755static int 756viasmb_writew(device_t dev, u_char slave, char cmd, short word) 757{ 758 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 759 int error; 760 761 viapm_clear(viapm); 762 if (viapm_busy(viapm)) |
763 return (EBUSY); | 763 return (SMB_EBUSY); |
764 765 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 766 VIAPM_OUTB(SMBHCMD, cmd); 767 VIAPM_OUTB(SMBHDATA0, word & 0x00ff); 768 VIAPM_OUTB(SMBHDATA1, (word & 0xff00) >> 8); 769 770 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD); 771 --- 8 unchanged lines hidden (view full) --- 780viasmb_readw(device_t dev, u_char slave, char cmd, short *word) 781{ 782 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 783 int error; 784 u_char high, low; 785 786 viapm_clear(viapm); 787 if (viapm_busy(viapm)) | 764 765 VIAPM_OUTB(SMBHADDR, slave & ~ LSB); 766 VIAPM_OUTB(SMBHCMD, cmd); 767 VIAPM_OUTB(SMBHDATA0, word & 0x00ff); 768 VIAPM_OUTB(SMBHDATA1, (word & 0xff00) >> 8); 769 770 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD); 771 --- 8 unchanged lines hidden (view full) --- 780viasmb_readw(device_t dev, u_char slave, char cmd, short *word) 781{ 782 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); 783 int error; 784 u_char high, low; 785 786 viapm_clear(viapm); 787 if (viapm_busy(viapm)) |
788 return (EBUSY); | 788 return (SMB_EBUSY); |
789 790 VIAPM_OUTB(SMBHADDR, slave | LSB); 791 VIAPM_OUTB(SMBHCMD, cmd); 792 793 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD); 794 795 if ((error = viapm_wait(viapm)) == SMB_ENOERR) { 796 low = VIAPM_INB(SMBHDATA0); --- 6 unchanged lines hidden (view full) --- 803 804 return (error); 805} 806 807static int 808viasmb_bwrite(device_t dev, u_char slave, char cmd, u_char count, char *buf) 809{ 810 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); | 789 790 VIAPM_OUTB(SMBHADDR, slave | LSB); 791 VIAPM_OUTB(SMBHCMD, cmd); 792 793 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD); 794 795 if ((error = viapm_wait(viapm)) == SMB_ENOERR) { 796 low = VIAPM_INB(SMBHDATA0); --- 6 unchanged lines hidden (view full) --- 803 804 return (error); 805} 806 807static int 808viasmb_bwrite(device_t dev, u_char slave, char cmd, u_char count, char *buf) 809{ 810 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); |
811 u_char remain, len, i; 812 int error = SMB_ENOERR; | 811 u_char i; 812 int error; |
813 | 813 |
814 if (count < 1 || count > 32) 815 return (SMB_EINVAL); 816 |
|
814 viapm_clear(viapm); 815 if (viapm_busy(viapm)) | 817 viapm_clear(viapm); 818 if (viapm_busy(viapm)) |
816 return (EBUSY); | 819 return (SMB_EBUSY); |
817 | 820 |
818 remain = count; 819 while (remain) { 820 len = min(remain, 32); | 821 VIAPM_OUTB(SMBHADDR, slave & ~LSB); 822 VIAPM_OUTB(SMBHCMD, cmd); 823 VIAPM_OUTB(SMBHDATA0, count); 824 i = VIAPM_INB(SMBHCTRL); |
821 | 825 |
822 VIAPM_OUTB(SMBHADDR, slave & ~LSB); 823 VIAPM_OUTB(SMBHCMD, cmd); 824 VIAPM_OUTB(SMBHDATA0, len); 825 i = VIAPM_INB(SMBHCTRL); 826 827 /* fill the 32-byte internal buffer */ 828 for (i=0; i<len; i++) { 829 VIAPM_OUTB(SMBHBLOCK, buf[count-remain+i]); 830 DELAY(2); 831 } 832 VIAPM_OUTB(SMBHCMD, cmd); 833 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK); 834 835 if ((error = viapm_wait(viapm)) != SMB_ENOERR) 836 goto error; 837 838 remain -= len; | 826 /* fill the 32-byte internal buffer */ 827 for (i = 0; i < count; i++) { 828 VIAPM_OUTB(SMBHBLOCK, buf[i]); 829 DELAY(2); |
839 } | 830 } |
831 VIAPM_OUTB(SMBHCMD, cmd); 832 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK); |
|
840 | 833 |
841error: | 834 error = viapm_wait(viapm); 835 |
842 VIAPM_DEBUG(printf("viapm: WRITEBLK to 0x%x, count=0x%x, cmd=0x%x, error=0x%x", slave, count, cmd, error)); 843 844 return (error); 845 846} 847 848static int | 836 VIAPM_DEBUG(printf("viapm: WRITEBLK to 0x%x, count=0x%x, cmd=0x%x, error=0x%x", slave, count, cmd, error)); 837 838 return (error); 839 840} 841 842static int |
849viasmb_bread(device_t dev, u_char slave, char cmd, u_char count, char *buf) | 843viasmb_bread(device_t dev, u_char slave, char cmd, u_char *count, char *buf) |
850{ 851 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); | 844{ 845 struct viapm_softc *viapm = (struct viapm_softc *)device_get_softc(dev); |
852 u_char remain, len, i; 853 int error = SMB_ENOERR; | 846 u_char data, len, i; 847 int error; |
854 | 848 |
849 if (*count < 1 || *count > 32) 850 return (SMB_EINVAL); 851 |
|
855 viapm_clear(viapm); 856 if (viapm_busy(viapm)) | 852 viapm_clear(viapm); 853 if (viapm_busy(viapm)) |
857 return (EBUSY); | 854 return (SMB_EBUSY); |
858 | 855 |
859 remain = count; 860 while (remain) { 861 VIAPM_OUTB(SMBHADDR, slave | LSB); 862 VIAPM_OUTB(SMBHCMD, cmd); 863 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK); | 856 VIAPM_OUTB(SMBHADDR, slave | LSB); 857 VIAPM_OUTB(SMBHCMD, cmd); 858 VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK); |
864 | 859 |
865 if ((error = viapm_wait(viapm)) != SMB_ENOERR) 866 goto error; | 860 if ((error = viapm_wait(viapm)) != SMB_ENOERR) 861 goto error; |
867 | 862 |
868 len = VIAPM_INB(SMBHDATA0); 869 i = VIAPM_INB(SMBHCTRL); /* reset counter */ | 863 len = VIAPM_INB(SMBHDATA0); 864 i = VIAPM_INB(SMBHCTRL); /* reset counter */ |
870 | 865 |
871 len = min(len, remain); 872 873 /* read the 32-byte internal buffer */ 874 for (i=0; i<len; i++) { 875 buf[count-remain+i] = VIAPM_INB(SMBHBLOCK); 876 DELAY(2); 877 } 878 879 remain -= len; | 866 /* read the 32-byte internal buffer */ 867 for (i = 0; i < len; i++) { 868 data = VIAPM_INB(SMBHBLOCK); 869 if (i < *count) 870 buf[i] = data; 871 DELAY(2); |
880 } | 872 } |
873 *count = len; 874 |
|
881error: | 875error: |
882 VIAPM_DEBUG(printf("viapm: READBLK to 0x%x, count=0x%x, cmd=0x%x, error=0x%x", slave, count, cmd, error)); | 876 VIAPM_DEBUG(printf("viapm: READBLK to 0x%x, count=0x%x, cmd=0x%x, error=0x%x", slave, *count, cmd, error)); |
883 884 return (error); 885} 886 887static device_method_t viapm_methods[] = { 888 /* device interface */ 889 DEVMETHOD(device_probe, viapm_586b_probe), 890 DEVMETHOD(device_attach, viapm_586b_attach), --- 58 unchanged lines hidden (view full) --- 949static driver_t viapropm_driver = { 950 "viapropm", 951 viapropm_methods, 952 sizeof(struct viapm_softc), 953}; 954 955DRIVER_MODULE(viapm, pci, viapm_driver, viapm_devclass, 0, 0); 956DRIVER_MODULE(viapropm, pci, viapropm_driver, viapropm_devclass, 0, 0); | 877 878 return (error); 879} 880 881static device_method_t viapm_methods[] = { 882 /* device interface */ 883 DEVMETHOD(device_probe, viapm_586b_probe), 884 DEVMETHOD(device_attach, viapm_586b_attach), --- 58 unchanged lines hidden (view full) --- 943static driver_t viapropm_driver = { 944 "viapropm", 945 viapropm_methods, 946 sizeof(struct viapm_softc), 947}; 948 949DRIVER_MODULE(viapm, pci, viapm_driver, viapm_devclass, 0, 0); 950DRIVER_MODULE(viapropm, pci, viapropm_driver, viapropm_devclass, 0, 0); |
951DRIVER_MODULE(smbus, viapropm, smbus_driver, smbus_devclass, 0, 0); |
|
957 958MODULE_DEPEND(viapm, pci, 1, 1, 1); 959MODULE_DEPEND(viapropm, pci, 1, 1, 1); 960MODULE_DEPEND(viapm, iicbb, IICBB_MINVER, IICBB_PREFVER, IICBB_MAXVER); 961MODULE_DEPEND(viapropm, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); 962MODULE_VERSION(viapm, 1); 963 964#ifdef DEV_ISA 965DRIVER_MODULE(isa, viapm, isa_driver, isa_devclass, 0, 0); 966DRIVER_MODULE(isa, viapropm, isa_driver, isa_devclass, 0, 0); 967MODULE_DEPEND(viapm, isa, 1, 1, 1); 968MODULE_DEPEND(viapropm, isa, 1, 1, 1); 969#endif | 952 953MODULE_DEPEND(viapm, pci, 1, 1, 1); 954MODULE_DEPEND(viapropm, pci, 1, 1, 1); 955MODULE_DEPEND(viapm, iicbb, IICBB_MINVER, IICBB_PREFVER, IICBB_MAXVER); 956MODULE_DEPEND(viapropm, smbus, SMBUS_MINVER, SMBUS_PREFVER, SMBUS_MAXVER); 957MODULE_VERSION(viapm, 1); 958 959#ifdef DEV_ISA 960DRIVER_MODULE(isa, viapm, isa_driver, isa_devclass, 0, 0); 961DRIVER_MODULE(isa, viapropm, isa_driver, isa_devclass, 0, 0); 962MODULE_DEPEND(viapm, isa, 1, 1, 1); 963MODULE_DEPEND(viapropm, isa, 1, 1, 1); 964#endif |