1 /* $NetBSD: cyber.c,v 1.4 2007/10/19 12:00:42 ad Exp $ */
4 * Copyright (c) 2004 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Frederick S. Bruckman.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 /* Store one "Usr" register on an SIIG Cyberserial multiport PCI card. */
34 #include <sys/cdefs.h>
35 __KERNEL_RCSID(0, "$NetBSD: cyber.c,v 1.4 2007/10/19 12:00:42 ad Exp $");
37 #include <sys/param.h>
38 #include <sys/device.h>
39 #include <sys/termios.h> /* XXX for tcflag_t in comvar.h */
43 #include <dev/pci/cyberreg.h>
44 #include <dev/pci/cybervar.h>
47 write_siig10x_usrreg(pci_chipset_tag_t pc
, pcitag_t tag
, int usrregno
,
50 pcireg_t curregs
, newregs
;
52 newregs
= curregs
= pci_conf_read(pc
, tag
, SIIG10x_USR_BASE
);
54 if (high_speed
) /* Clear bit. */
57 newregs
&= ~SIIG10x_USR0_MASK
;
60 newregs
&= ~SIIG10x_USR1_MASK
;
63 newregs
&= ~SIIG10x_USR2_MASK
;
66 newregs
&= ~SIIG10x_USR3_MASK
;
68 else /* if (!high_speed) */ /* Set bit. */
71 newregs
|= SIIG10x_USR0_MASK
;
74 newregs
|= SIIG10x_USR1_MASK
;
77 newregs
|= SIIG10x_USR2_MASK
;
80 newregs
|= SIIG10x_USR3_MASK
;
83 if (newregs
!= curregs
)
84 pci_conf_write(pc
, tag
, SIIG10x_USR_BASE
, newregs
);
88 write_siig20x_usrreg(pci_chipset_tag_t pc
, pcitag_t tag
, int usrregno
,
91 pcireg_t curreg
, newreg
;
96 offset
= SIIG20x_USR0
;
99 offset
= SIIG20x_USR1
;
105 newreg
= curreg
= pci_conf_read(pc
, tag
, offset
);
107 if (high_speed
) /* Clear bit. */
108 newreg
&= ~SIIG20x_USR_MASK
;
109 else /* if (!high_speed) */ /* Set bit. */
110 newreg
|= SIIG20x_USR_MASK
;
112 if (newreg
!= curreg
)
113 pci_conf_write(pc
, tag
, offset
, newreg
);