Deleted Added
full compact
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