aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ppbus
diff options
context:
space:
mode:
authorNicolas Souchu <nsouch@FreeBSD.org>1999-01-30 15:35:39 +0000
committerNicolas Souchu <nsouch@FreeBSD.org>1999-01-30 15:35:39 +0000
commit20240fa3ad284d37c77b569550834ff75be7e589 (patch)
tree01a33e1f93b9df1298023453f674ba352a0e641a /sys/dev/ppbus
parent88ec80ed82e4d7c1fee8a938b641bc4c1bd2a575 (diff)
downloadsrc-20240fa3ad284d37c77b569550834ff75be7e589.tar.gz
src-20240fa3ad284d37c77b569550834ff75be7e589.zip
Distinguish EPP address/data register. Add EPP address register access to ppi.
Change microseq offsets. Previously, offsets of the program counter where added to the index of the current microinstruction. Make them rely on the index of the next executed microinstruction. Suggested by: Luigi Rizzo <luigi@labinfo.iet.unipi.it>
Notes
Notes: svn path=/head/; revision=43433
Diffstat (limited to 'sys/dev/ppbus')
-rw-r--r--sys/dev/ppbus/if_plip.c9
-rw-r--r--sys/dev/ppbus/immio.c24
-rw-r--r--sys/dev/ppbus/ppb_msq.h5
-rw-r--r--sys/dev/ppbus/ppbconf.h18
-rw-r--r--sys/dev/ppbus/ppi.c17
-rw-r--r--sys/dev/ppbus/ppi.h9
-rw-r--r--sys/dev/ppbus/pps.c8
-rw-r--r--sys/dev/ppbus/vpoio.c28
8 files changed, 72 insertions, 46 deletions
diff --git a/sys/dev/ppbus/if_plip.c b/sys/dev/ppbus/if_plip.c
index d3b85a4b421a..886158cc844e 100644
--- a/sys/dev/ppbus/if_plip.c
+++ b/sys/dev/ppbus/if_plip.c
@@ -24,7 +24,7 @@
* SUCH DAMAGE.
*
* From Id: lpt.c,v 1.55.2.1 1996/11/12 09:08:38 phk Exp
- * $Id: if_plip.c,v 1.7 1999/01/09 18:10:37 nsouch Exp $
+ * $Id: if_plip.c,v 1.8 1999/01/23 17:07:49 nsouch Exp $
*/
/*
@@ -131,11 +131,12 @@
#define LPIPTBLSIZE 256 /* Size of octet translation table */
-#ifndef PLIP_DEBUG
-#define lprintf (void)
-#else
#define lprintf if (lptflag) printf
+
+#ifdef PLIP_DEBUG
static int volatile lptflag = 1;
+#else
+static int volatile lptflag = 0;
#endif
struct lpt_softc {
diff --git a/sys/dev/ppbus/immio.c b/sys/dev/ppbus/immio.c
index 67054f79bea2..c02202924b02 100644
--- a/sys/dev/ppbus/immio.c
+++ b/sys/dev/ppbus/immio.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: immio.c,v 1.4 1998/10/31 11:35:21 nsouch Exp $
+ * $Id: immio.c,v 1.5 1999/01/10 12:04:54 nsouch Exp $
*
*/
@@ -72,8 +72,8 @@ struct ppb_microseq select_microseq[] = { \
/* first, check there is nothing holding onto the bus */ \
MS_SET(VP0_SELTMO), \
/* _loop: */ \
- MS_BRCLEAR(0x8, 3 /* _ready */), \
- MS_DBRA(-1 /* _loop */), \
+ MS_BRCLEAR(0x8, 2 /* _ready */), \
+ MS_DBRA(-2 /* _loop */), \
MS_RET(2), /* bus busy */ \
/* _ready: */ \
MS_CASS(0x4), \
@@ -84,8 +84,8 @@ struct ppb_microseq select_microseq[] = { \
/* now, wait until the drive is ready */ \
MS_SET(VP0_SELTMO), \
/* loop: */ \
- MS_BRSET(0x8, 4 /* ready */), \
- MS_DBRA(-1 /* loop */), \
+ MS_BRSET(0x8, 3 /* ready */), \
+ MS_DBRA(-2 /* loop */), \
/* error: */ \
MS_CASS(0xc), \
MS_RET(VP0_ESELECT_TIMEOUT), \
@@ -138,7 +138,7 @@ static struct ppb_microseq negociate_microseq[] = { \
MS_DELAY(100), \
MS_CASS(0x6), \
MS_DELAY(5), \
- MS_BRSET(0x20, 6 /* continue */), \
+ MS_BRSET(0x20, 5 /* continue */), \
MS_DELAY(5), \
MS_CASS(0x7), \
MS_DELAY(5), \
@@ -217,7 +217,7 @@ static struct ppb_microseq nibble_inbyte_submicroseq[] = {
/* do a C call to format the received nibbles */
MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */),
- MS_DBRA(-6 /* loop */),
+ MS_DBRA(-7 /* loop */),
MS_RET(0)
};
@@ -231,7 +231,7 @@ static struct ppb_microseq ps2_inbyte_submicroseq[] = {
MS_CASS(PCD | 0x6),
MS_RFETCH_P(1, MS_REG_DTR, MS_FETCH_ALL),
MS_CASS(PCD | 0x5),
- MS_DBRA(-3 /* loop */),
+ MS_DBRA(-4 /* loop */),
MS_RET(0)
};
@@ -245,10 +245,10 @@ static struct ppb_microseq spp_outbyte_submicroseq[] = {
/* loop: */
MS_RASSERT_P(1, MS_REG_DTR),
MS_CASS(0x5),
- MS_DBRA(1), /* decrement counter */
+ MS_DBRA(0), /* decrement counter */
MS_RASSERT_P(1, MS_REG_DTR),
MS_CASS(0x0),
- MS_DBRA(-5 /* loop */),
+ MS_DBRA(-6 /* loop */),
/* return from the put call */
MS_CASS(0x4),
@@ -258,14 +258,14 @@ static struct ppb_microseq spp_outbyte_submicroseq[] = {
/* EPP 1.7 microsequences, ptr and len set at runtime */
static struct ppb_microseq epp17_outstr[] = {
MS_CASS(0x4),
- MS_RASSERT_P(MS_ACCUM, MS_REG_EPP),
+ MS_RASSERT_P(MS_ACCUM, MS_REG_EPP_D),
MS_CASS(0xc),
MS_RET(0),
};
static struct ppb_microseq epp17_instr[] = {
MS_CASS(PCD | 0x4),
- MS_RFETCH_P(MS_ACCUM, MS_REG_EPP, MS_FETCH_ALL),
+ MS_RFETCH_P(MS_ACCUM, MS_REG_EPP_D, MS_FETCH_ALL),
MS_CASS(PCD | 0xc),
MS_RET(0),
};
diff --git a/sys/dev/ppbus/ppb_msq.h b/sys/dev/ppbus/ppb_msq.h
index 7de698bf37dc..ff43a3634bad 100644
--- a/sys/dev/ppbus/ppb_msq.h
+++ b/sys/dev/ppbus/ppb_msq.h
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: ppb_msq.h,v 1.3 1999/01/10 12:04:54 nsouch Exp $
+ * $Id: ppb_msq.h,v 1.4 1999/01/27 21:49:53 dillon Exp $
*
*/
#ifndef __PPB_MSQ_H
@@ -98,7 +98,8 @@
#define MS_REG_DTR 0x0
#define MS_REG_STR 0x1
#define MS_REG_CTR 0x2
-#define MS_REG_EPP 0x4
+#define MS_REG_EPP_A 0x3
+#define MS_REG_EPP_D 0x4
/*
* Microsequence macro abstraction level
diff --git a/sys/dev/ppbus/ppbconf.h b/sys/dev/ppbus/ppbconf.h
index be0ff33f75e1..af08c5df72a4 100644
--- a/sys/dev/ppbus/ppbconf.h
+++ b/sys/dev/ppbus/ppbconf.h
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: ppbconf.h,v 1.11 1999/01/10 16:41:14 nsouch Exp $
+ * $Id: ppbconf.h,v 1.12 1999/01/27 19:44:05 dillon Exp $
*
*/
#ifndef __PPBCONF_H
@@ -204,14 +204,16 @@ struct ppb_adapter {
u_char (*r_dtr)(int);
u_char (*r_str)(int);
u_char (*r_ctr)(int);
- u_char (*r_epp)(int);
+ u_char (*r_epp_A)(int);
+ u_char (*r_epp_D)(int);
u_char (*r_ecr)(int);
u_char (*r_fifo)(int);
void (*w_dtr)(int, char);
void (*w_str)(int, char);
void (*w_ctr)(int, char);
- void (*w_epp)(int, char);
+ void (*w_epp_A)(int, char);
+ void (*w_epp_D)(int, char);
void (*w_ecr)(int, char);
void (*w_fifo)(int, char);
};
@@ -315,6 +317,8 @@ extern int ppb_write(struct ppb_device *, char *, int, int);
#define ppb_get_mode(dev) ((dev)->mode)
+/* This set of function access only to the EPP _data_ registers
+ * in 8, 16 and 32 bit modes */
#define ppb_outsb_epp(dev,buf,cnt) \
(*(dev)->ppb->ppb_link->adapter->outsb_epp) \
((dev)->ppb->ppb_link->adapter_unit, buf, cnt)
@@ -334,13 +338,17 @@ extern int ppb_write(struct ppb_device *, char *, int, int);
(*(dev)->ppb->ppb_link->adapter->insl_epp) \
((dev)->ppb->ppb_link->adapter_unit, buf, cnt)
-#define ppb_repp(dev) (*(dev)->ppb->ppb_link->adapter->r_epp) \
+#define ppb_repp_A(dev) (*(dev)->ppb->ppb_link->adapter->r_epp_A) \
+ ((dev)->ppb->ppb_link->adapter_unit)
+#define ppb_repp_D(dev) (*(dev)->ppb->ppb_link->adapter->r_epp_D) \
((dev)->ppb->ppb_link->adapter_unit)
#define ppb_recr(dev) (*(dev)->ppb->ppb_link->adapter->r_ecr) \
((dev)->ppb->ppb_link->adapter_unit)
#define ppb_rfifo(dev) (*(dev)->ppb->ppb_link->adapter->r_fifo) \
((dev)->ppb->ppb_link->adapter_unit)
-#define ppb_wepp(dev,byte) (*(dev)->ppb->ppb_link->adapter->w_epp) \
+#define ppb_wepp_A(dev,byte) (*(dev)->ppb->ppb_link->adapter->w_epp_A) \
+ ((dev)->ppb->ppb_link->adapter_unit, byte)
+#define ppb_wepp_D(dev,byte) (*(dev)->ppb->ppb_link->adapter->w_epp_D) \
((dev)->ppb->ppb_link->adapter_unit, byte)
#define ppb_wecr(dev,byte) (*(dev)->ppb->ppb_link->adapter->w_ecr) \
((dev)->ppb->ppb_link->adapter_unit, byte)
diff --git a/sys/dev/ppbus/ppi.c b/sys/dev/ppbus/ppi.c
index 95d7644f7516..7b04ce4fd629 100644
--- a/sys/dev/ppbus/ppi.c
+++ b/sys/dev/ppbus/ppi.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: ppi.c,v 1.9 1999/01/10 12:04:55 nsouch Exp $
+ * $Id: ppi.c,v 1.10 1999/01/27 21:49:53 dillon Exp $
*
*/
#include "ppi.h"
@@ -487,8 +487,8 @@ ppiioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p)
case PPIGCTRL: /* get control bits */
*val = ppb_rctr(&ppi->ppi_dev);
break;
- case PPIGEPP: /* get EPP bits */
- *val = ppb_repp(&ppi->ppi_dev);
+ case PPIGEPPD: /* get EPP data bits */
+ *val = ppb_repp_D(&ppi->ppi_dev);
break;
case PPIGECR: /* get ECP bits */
*val = ppb_recr(&ppi->ppi_dev);
@@ -506,8 +506,8 @@ ppiioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p)
case PPISCTRL: /* set control bits */
ppb_wctr(&ppi->ppi_dev, *val);
break;
- case PPISEPP: /* set EPP bits */
- ppb_wepp(&ppi->ppi_dev, *val);
+ case PPISEPPD: /* set EPP data bits */
+ ppb_wepp_D(&ppi->ppi_dev, *val);
break;
case PPISECR: /* set ECP bits */
ppb_wecr(&ppi->ppi_dev, *val);
@@ -515,6 +515,13 @@ ppiioctl(dev_t dev, u_long cmd, caddr_t data, int flags, struct proc *p)
case PPISFIFO: /* write FIFO */
ppb_wfifo(&ppi->ppi_dev, *val);
break;
+
+ case PPIGEPPA: /* get EPP address bits */
+ *val = ppb_repp_A(&ppi->ppi_dev);
+ break;
+ case PPISEPPA: /* set EPP address bits */
+ ppb_wepp_A(&ppi->ppi_dev, *val);
+ break;
default:
error = ENOTTY;
break;
diff --git a/sys/dev/ppbus/ppi.h b/sys/dev/ppbus/ppi.h
index f20416ff72e7..243c87fa63c7 100644
--- a/sys/dev/ppbus/ppi.h
+++ b/sys/dev/ppbus/ppi.h
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: ppi.h,v 1.1 1997/08/14 13:57:43 msmith Exp $
+ * $Id: ppi.h,v 1.2 1998/01/02 09:30:39 msmith Exp $
*
*/
#ifndef __PPI_H
@@ -37,15 +37,18 @@
#define PPIGDATA _IOR('P', 10, u_int8_t)
#define PPIGSTATUS _IOR('P', 11, u_int8_t)
#define PPIGCTRL _IOR('P', 12, u_int8_t)
-#define PPIGEPP _IOR('P', 13, u_int8_t)
+#define PPIGEPPD _IOR('P', 13, u_int8_t)
#define PPIGECR _IOR('P', 14, u_int8_t)
#define PPIGFIFO _IOR('P', 15, u_int8_t)
#define PPISDATA _IOW('P', 16, u_int8_t)
#define PPISSTATUS _IOW('P', 17, u_int8_t)
#define PPISCTRL _IOW('P', 18, u_int8_t)
-#define PPISEPP _IOW('P', 19, u_int8_t)
+#define PPISEPPD _IOW('P', 19, u_int8_t)
#define PPISECR _IOW('P', 20, u_int8_t)
#define PPISFIFO _IOW('P', 21, u_int8_t)
+#define PPIGEPPA _IOR('P', 22, u_int8_t)
+#define PPISEPPA _IOR('P', 23, u_int8_t)
+
#endif
diff --git a/sys/dev/ppbus/pps.c b/sys/dev/ppbus/pps.c
index 95b255cb1bb3..24be094eaf04 100644
--- a/sys/dev/ppbus/pps.c
+++ b/sys/dev/ppbus/pps.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: pps.c,v 1.11 1998/08/24 16:31:27 phk Exp $
+ * $Id: pps.c,v 1.12 1998/12/07 21:58:16 archie Exp $
*
* This driver implements a draft-mogul-pps-api-02.txt PPS source.
*
@@ -16,6 +16,7 @@
*/
#include "opt_devfs.h"
+#include "opt_ntp.h"
#include <sys/param.h>
#include <sys/kernel.h>
@@ -133,6 +134,7 @@ ppsopen(dev_t dev, int flags, int fmt, struct proc *p)
if (ppb_request_bus(&sc->pps_dev, PPB_WAIT|PPB_INTR))
return (EINTR);
+ ppb_wctr(&sc->pps_dev, 0);
ppb_wctr(&sc->pps_dev, IRQENABLE);
return(0);
@@ -144,6 +146,10 @@ ppsclose(dev_t dev, int flags, int fmt, struct proc *p)
struct pps_data *sc = softc[minor(dev)];
sc->ppsparam.mode = 0;
+
+ ppb_wdtr(&sc->pps_dev, 0);
+ ppb_wctr(&sc->pps_dev, 0);
+
ppb_release_bus(&sc->pps_dev);
return(0);
}
diff --git a/sys/dev/ppbus/vpoio.c b/sys/dev/ppbus/vpoio.c
index 54791ee44dcc..17c25dd03469 100644
--- a/sys/dev/ppbus/vpoio.c
+++ b/sys/dev/ppbus/vpoio.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: vpoio.c,v 1.4 1998/12/07 21:58:16 archie Exp $
+ * $Id: vpoio.c,v 1.5 1999/01/10 12:04:55 nsouch Exp $
*
*/
@@ -186,7 +186,7 @@ static struct ppb_microseq nibble_inbyte_submicroseq[] = {
/* do a C call to format the received nibbles */
MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */),
- MS_DBRA(-6 /* loop */),
+ MS_DBRA(-7 /* loop */),
MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_RET(0)
@@ -202,7 +202,7 @@ static struct ppb_microseq ps2_inbyte_submicroseq[] = {
MS_RFETCH_P(1, MS_REG_DTR, MS_FETCH_ALL),
MS_CASS(PCD | H_nAUTO | H_SELIN | H_INIT | H_nSTROBE),
MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_nSTROBE),
- MS_DBRA(-3 /* loop */),
+ MS_DBRA(-4 /* loop */),
MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_RET(0)
@@ -218,7 +218,7 @@ static struct ppb_microseq spp_outbyte_submicroseq[] = {
MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE),
MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_DELAY(VP0_PULSE),
- MS_DBRA(-4 /* loop */),
+ MS_DBRA(-5 /* loop */),
/* return from the put call */
MS_RET(0)
@@ -229,9 +229,9 @@ static struct ppb_microseq epp17_outstr_body[] = {
MS_CASS(H_AUTO | H_SELIN | H_INIT | H_STROBE),
/* loop: */
- MS_RASSERT_P(1, MS_REG_EPP),
- MS_BRSET(TIMEOUT, 4 /* error */), /* EPP timeout? */
- MS_DBRA(-2 /* loop */),
+ MS_RASSERT_P(1, MS_REG_EPP_D),
+ MS_BRSET(TIMEOUT, 3 /* error */), /* EPP timeout? */
+ MS_DBRA(-3 /* loop */),
MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_RET(0),
@@ -244,9 +244,9 @@ static struct ppb_microseq epp17_instr_body[] = {
MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_STROBE),
/* loop: */
- MS_RFETCH_P(1, MS_REG_EPP, MS_FETCH_ALL),
- MS_BRSET(TIMEOUT, 4 /* error */), /* EPP timeout? */
- MS_DBRA(-2 /* loop */),
+ MS_RFETCH_P(1, MS_REG_EPP_D, MS_FETCH_ALL),
+ MS_BRSET(TIMEOUT, 3 /* error */), /* EPP timeout? */
+ MS_DBRA(-3 /* loop */),
MS_CASS(PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_RET(0),
@@ -259,9 +259,9 @@ static struct ppb_microseq in_disk_mode[] = {
MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE),
MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE),
- MS_BRCLEAR(H_FLT, 4 /* error */),
+ MS_BRCLEAR(H_FLT, 3 /* error */),
MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE),
- MS_BRSET(H_FLT, 2 /* error */),
+ MS_BRSET(H_FLT, 1 /* error */),
MS_RET(1),
/* error: */
@@ -510,8 +510,8 @@ vpoio_select(struct vpoio_data *vpo, int initiator, int target)
/* now, wait until the drive is ready */
MS_SET(VP0_SELTMO),
-/* loop: */ MS_BRSET(H_ACK, 3 /* ready */),
- MS_DBRA(-1 /* loop */),
+/* loop: */ MS_BRSET(H_ACK, 2 /* ready */),
+ MS_DBRA(-2 /* loop */),
/* error: */ MS_RET(1),
/* ready: */ MS_RET(0)
};