vpoio.c (42475) | vpoio.c (43433) |
---|---|
1/*- 2 * Copyright (c) 1998 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 --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * | 1/*- 2 * Copyright (c) 1998 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 --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 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 * $Id: vpoio.c,v 1.4 1998/12/07 21:58:16 archie Exp $ | 26 * $Id: vpoio.c,v 1.5 1999/01/10 12:04:55 nsouch Exp $ |
27 * 28 */ 29 30#ifdef KERNEL 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/malloc.h> 34#include <sys/buf.h> --- 146 unchanged lines hidden (view full) --- 181 MS_CASS( H_AUTO | H_SELIN | H_INIT | H_STROBE), 182 MS_DELAY(VP0_PULSE), 183 MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* high nibble */), 184 MS_CASS(H_nAUTO | H_SELIN | H_INIT | H_STROBE), 185 MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* low nibble */), 186 187 /* do a C call to format the received nibbles */ 188 MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */), | 27 * 28 */ 29 30#ifdef KERNEL 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/malloc.h> 34#include <sys/buf.h> --- 146 unchanged lines hidden (view full) --- 181 MS_CASS( H_AUTO | H_SELIN | H_INIT | H_STROBE), 182 MS_DELAY(VP0_PULSE), 183 MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* high nibble */), 184 MS_CASS(H_nAUTO | H_SELIN | H_INIT | H_STROBE), 185 MS_RFETCH(MS_REG_STR, MS_FETCH_ALL, MS_UNKNOWN /* low nibble */), 186 187 /* do a C call to format the received nibbles */ 188 MS_C_CALL(MS_UNKNOWN /* C hook */, MS_UNKNOWN /* param */), |
189 MS_DBRA(-6 /* loop */), | 189 MS_DBRA(-7 /* loop */), |
190 191 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 192 MS_RET(0) 193}; 194 195/* 196 * This is the sub-microseqence for MS_GET in PS2 mode 197 */ 198static struct ppb_microseq ps2_inbyte_submicroseq[] = { 199 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_nSTROBE), 200 201/* loop: */ 202 MS_RFETCH_P(1, MS_REG_DTR, MS_FETCH_ALL), 203 MS_CASS(PCD | H_nAUTO | H_SELIN | H_INIT | H_nSTROBE), 204 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_nSTROBE), | 190 191 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 192 MS_RET(0) 193}; 194 195/* 196 * This is the sub-microseqence for MS_GET in PS2 mode 197 */ 198static struct ppb_microseq ps2_inbyte_submicroseq[] = { 199 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_nSTROBE), 200 201/* loop: */ 202 MS_RFETCH_P(1, MS_REG_DTR, MS_FETCH_ALL), 203 MS_CASS(PCD | H_nAUTO | H_SELIN | H_INIT | H_nSTROBE), 204 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_nSTROBE), |
205 MS_DBRA(-3 /* loop */), | 205 MS_DBRA(-4 /* loop */), |
206 207 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 208 MS_RET(0) 209}; 210 211/* 212 * This is the sub-microsequence for MS_PUT in both NIBBLE and PS2 modes 213 */ 214static struct ppb_microseq spp_outbyte_submicroseq[] = { 215 216/* loop: */ 217 MS_RASSERT_P(1, MS_REG_DTR), 218 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 219 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 220 MS_DELAY(VP0_PULSE), | 206 207 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 208 MS_RET(0) 209}; 210 211/* 212 * This is the sub-microsequence for MS_PUT in both NIBBLE and PS2 modes 213 */ 214static struct ppb_microseq spp_outbyte_submicroseq[] = { 215 216/* loop: */ 217 MS_RASSERT_P(1, MS_REG_DTR), 218 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 219 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 220 MS_DELAY(VP0_PULSE), |
221 MS_DBRA(-4 /* loop */), | 221 MS_DBRA(-5 /* loop */), |
222 223 /* return from the put call */ 224 MS_RET(0) 225}; 226 227/* EPP 1.7 microsequences, ptr and len set at runtime */ 228static struct ppb_microseq epp17_outstr_body[] = { 229 MS_CASS(H_AUTO | H_SELIN | H_INIT | H_STROBE), 230 231/* loop: */ | 222 223 /* return from the put call */ 224 MS_RET(0) 225}; 226 227/* EPP 1.7 microsequences, ptr and len set at runtime */ 228static struct ppb_microseq epp17_outstr_body[] = { 229 MS_CASS(H_AUTO | H_SELIN | H_INIT | H_STROBE), 230 231/* loop: */ |
232 MS_RASSERT_P(1, MS_REG_EPP), 233 MS_BRSET(TIMEOUT, 4 /* error */), /* EPP timeout? */ 234 MS_DBRA(-2 /* loop */), | 232 MS_RASSERT_P(1, MS_REG_EPP_D), 233 MS_BRSET(TIMEOUT, 3 /* error */), /* EPP timeout? */ 234 MS_DBRA(-3 /* loop */), |
235 236 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 237 MS_RET(0), 238/* error: */ 239 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 240 MS_RET(1) 241}; 242 243static struct ppb_microseq epp17_instr_body[] = { 244 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_STROBE), 245 246/* loop: */ | 235 236 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 237 MS_RET(0), 238/* error: */ 239 MS_CASS(H_AUTO | H_nSELIN | H_INIT | H_STROBE), 240 MS_RET(1) 241}; 242 243static struct ppb_microseq epp17_instr_body[] = { 244 MS_CASS(PCD | H_AUTO | H_SELIN | H_INIT | H_STROBE), 245 246/* loop: */ |
247 MS_RFETCH_P(1, MS_REG_EPP, MS_FETCH_ALL), 248 MS_BRSET(TIMEOUT, 4 /* error */), /* EPP timeout? */ 249 MS_DBRA(-2 /* loop */), | 247 MS_RFETCH_P(1, MS_REG_EPP_D, MS_FETCH_ALL), 248 MS_BRSET(TIMEOUT, 3 /* error */), /* EPP timeout? */ 249 MS_DBRA(-3 /* loop */), |
250 251 MS_CASS(PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE), 252 MS_RET(0), 253/* error: */ 254 MS_CASS(PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE), 255 MS_RET(1) 256}; 257 258static struct ppb_microseq in_disk_mode[] = { 259 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 260 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 261 | 250 251 MS_CASS(PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE), 252 MS_RET(0), 253/* error: */ 254 MS_CASS(PCD | H_AUTO | H_nSELIN | H_INIT | H_STROBE), 255 MS_RET(1) 256}; 257 258static struct ppb_microseq in_disk_mode[] = { 259 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 260 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 261 |
262 MS_BRCLEAR(H_FLT, 4 /* error */), | 262 MS_BRCLEAR(H_FLT, 3 /* error */), |
263 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), | 263 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), |
264 MS_BRSET(H_FLT, 2 /* error */), | 264 MS_BRSET(H_FLT, 1 /* error */), |
265 266 MS_RET(1), 267/* error: */ 268 MS_RET(0) 269}; 270 271static int 272vpoio_disconnect(struct vpoio_data *vpo) --- 232 unchanged lines hidden (view full) --- 505 MS_DASS(MS_UNKNOWN), 506 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 507 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 508 MS_DASS(MS_UNKNOWN), 509 MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE), 510 511 /* now, wait until the drive is ready */ 512 MS_SET(VP0_SELTMO), | 265 266 MS_RET(1), 267/* error: */ 268 MS_RET(0) 269}; 270 271static int 272vpoio_disconnect(struct vpoio_data *vpo) --- 232 unchanged lines hidden (view full) --- 505 MS_DASS(MS_UNKNOWN), 506 MS_CASS(H_nAUTO | H_nSELIN | H_INIT | H_STROBE), 507 MS_CASS( H_AUTO | H_nSELIN | H_INIT | H_STROBE), 508 MS_DASS(MS_UNKNOWN), 509 MS_CASS( H_AUTO | H_nSELIN | H_nINIT | H_STROBE), 510 511 /* now, wait until the drive is ready */ 512 MS_SET(VP0_SELTMO), |
513/* loop: */ MS_BRSET(H_ACK, 3 /* ready */), 514 MS_DBRA(-1 /* loop */), | 513/* loop: */ MS_BRSET(H_ACK, 2 /* ready */), 514 MS_DBRA(-2 /* loop */), |
515/* error: */ MS_RET(1), 516/* ready: */ MS_RET(0) 517 }; 518 519 /* initialize the select microsequence */ 520 ppb_MS_init_msq(select_microseq, 2, 521 SELECT_TARGET, 1 << target, 522 SELECT_INITIATOR, 1 << initiator); --- 319 unchanged lines hidden --- | 515/* error: */ MS_RET(1), 516/* ready: */ MS_RET(0) 517 }; 518 519 /* initialize the select microsequence */ 520 ppb_MS_init_msq(select_microseq, 2, 521 SELECT_TARGET, 1 << target, 522 SELECT_INITIATOR, 1 << initiator); --- 319 unchanged lines hidden --- |