2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 1998 Nicolas Souchu
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * The ZIP drive cannot act as an initiator.
37 #define VP0_INITIATOR 0x7
39 #define VP0_ESELECT_TIMEOUT 1
40 #define VP0_ECMD_TIMEOUT 2
41 #define VP0_ECONNECT 3
42 #define VP0_ESTATUS_TIMEOUT 4
43 #define VP0_EDATA_OVERFLOW 5
44 #define VP0_EDISCONNECT 6
45 #define VP0_EPPDATA_TIMEOUT 7
46 #define VP0_ENEGOCIATE 8
48 #define VP0_EINITFAILED 10
53 #define VP0_OPENNINGS 1
56 * Data structure used during microsequence execution
57 * when characters are received in nibble mode
60 char h; /* most significant nibble */
61 char l; /* less significant nibble */
64 /* Mode found during initialisation */
65 #define VP0_MODE_UNDEFINED 0x0
66 #define VP0_MODE_NIBBLE 0x1
67 #define VP0_MODE_PS2 0x2
68 #define VP0_MODE_EPP 0x3
71 int vpo_mode_found; /* Mode found during init */
73 struct vpo_nibble vpo_nibble;
75 /* each device must have its own nibble inbyte microsequence */
76 struct ppb_microseq *vpo_nibble_inbyte_msq;
81 int vpoio_probe(device_t dev, struct vpoio_data *vpo);
83 int vpoio_attach(struct vpoio_data *vpo);
84 int vpoio_reset_bus(struct vpoio_data *vpo);
86 int vpoio_do_scsi(struct vpoio_data *vpo, int host, int target, char *command,
87 int clen, char *buffer, int blen, int *result, int *count,
90 int imm_probe(device_t dev, struct vpoio_data *vpo);
92 int imm_attach(struct vpoio_data *vpo);
93 int imm_reset_bus(struct vpoio_data *vpo);
95 int imm_do_scsi(struct vpoio_data *vpo, int host, int target, char *command,
96 int clen, char *buffer, int blen, int *result, int *count,