mcd.c (2526) | mcd.c (2762) |
---|---|
1/* 2 * Copyright 1993 by Holger Veit (data part) 3 * Copyright 1993 by Brian Moore (audio part) 4 * Changes Copyright 1993 by Gary Clark II 5 * 6 * Rewrote probe routine to work on newer Mitsumi drives. 7 * Additional changes (C) 1994 by Jordan K. Hubbard 8 * --- 25 unchanged lines hidden (view full) --- 34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 35 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 * | 1/* 2 * Copyright 1993 by Holger Veit (data part) 3 * Copyright 1993 by Brian Moore (audio part) 4 * Changes Copyright 1993 by Gary Clark II 5 * 6 * Rewrote probe routine to work on newer Mitsumi drives. 7 * Additional changes (C) 1994 by Jordan K. Hubbard 8 * --- 25 unchanged lines hidden (view full) --- 34 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 35 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 36 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 37 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 38 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 39 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 40 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 * |
42 * $Id: mcd.c,v 1.23 1994/09/03 16:48:12 ache Exp $ | 42 * $Id: mcd.c,v 1.24 1994/09/06 21:56:09 se Exp $ |
43 */ 44static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 45 46#include "mcd.h" 47#if NMCD > 0 48#include <sys/types.h> 49#include <sys/param.h> 50#include <sys/systm.h> --- 139 unchanged lines hidden (view full) --- 190#define MCDRBLK 2352 /* for raw mode */ 191 192/* several delays */ 193#define RDELAY_WAITSTAT 300 194#define RDELAY_WAITMODE 300 195#define RDELAY_WAITREAD 800 196 197#define MIN_DELAY 15 | 43 */ 44static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; 45 46#include "mcd.h" 47#if NMCD > 0 48#include <sys/types.h> 49#include <sys/param.h> 50#include <sys/systm.h> --- 139 unchanged lines hidden (view full) --- 190#define MCDRBLK 2352 /* for raw mode */ 191 192/* several delays */ 193#define RDELAY_WAITSTAT 300 194#define RDELAY_WAITMODE 300 195#define RDELAY_WAITREAD 800 196 197#define MIN_DELAY 15 |
198#define DELAY_GETREPLY 1200000 | 198#define DELAY_GETREPLY 1300000 |
199 200int mcd_attach(struct isa_device *dev) 201{ 202 struct mcd_data *cd = mcd_data + dev->id_unit; 203 int i; 204 205 cd->iobase = dev->id_iobase; 206 cd->flags |= MCDINIT; --- 740 unchanged lines hidden (view full) --- 947 mcd_put(com_port,rbuf.start_msf[0]); 948 mcd_put(com_port,rbuf.start_msf[1]); 949 mcd_put(com_port,rbuf.start_msf[2]); 950 mcd_put(com_port,0); 951 mcd_put(com_port,0); 952 mcd_put(com_port,1); 953 enable_intr(); 954 | 199 200int mcd_attach(struct isa_device *dev) 201{ 202 struct mcd_data *cd = mcd_data + dev->id_unit; 203 int i; 204 205 cd->iobase = dev->id_iobase; 206 cd->flags |= MCDINIT; --- 740 unchanged lines hidden (view full) --- 947 mcd_put(com_port,rbuf.start_msf[0]); 948 mcd_put(com_port,rbuf.start_msf[1]); 949 mcd_put(com_port,rbuf.start_msf[2]); 950 mcd_put(com_port,0); 951 mcd_put(com_port,0); 952 mcd_put(com_port,1); 953 enable_intr(); 954 |
955 /* Spin briefly (<= 2ms) to avoid missing next block */ 956 for (i = 0; i < 20; i++) { 957 k = inb(port+mcd_xfer); 958 if (!(k & 2)) 959 goto got_it; 960 DELAY(100); 961 } 962 |
|
955 mbx->count = RDELAY_WAITREAD; 956 timeout((timeout_func_t)mcd_doread, 957 (caddr_t)MCD_S_WAITREAD,hz/100); /* XXX */ 958 return; 959 case MCD_S_WAITREAD: 960 untimeout((timeout_func_t)mcd_doread,(caddr_t)MCD_S_WAITREAD); 961 if (mbx->count-- > 0) { 962 k = inb(port+mcd_xfer); 963 if (!(k & 2)) { /* XXX */ 964 MCD_TRACE("got data delay=%d\n", 965 RDELAY_WAITREAD-mbx->count,0,0,0); | 963 mbx->count = RDELAY_WAITREAD; 964 timeout((timeout_func_t)mcd_doread, 965 (caddr_t)MCD_S_WAITREAD,hz/100); /* XXX */ 966 return; 967 case MCD_S_WAITREAD: 968 untimeout((timeout_func_t)mcd_doread,(caddr_t)MCD_S_WAITREAD); 969 if (mbx->count-- > 0) { 970 k = inb(port+mcd_xfer); 971 if (!(k & 2)) { /* XXX */ 972 MCD_TRACE("got data delay=%d\n", 973 RDELAY_WAITREAD-mbx->count,0,0,0); |
974 got_it: |
|
966 /* data is ready */ 967 addr = bp->b_un.b_addr + mbx->skip; 968 969 outb(port+mcd_ctl2,0x04); /* XXX */ 970 for (i=0; i<mbx->sz; i++) 971 *addr++ = inb(data_port); 972 outb(port+mcd_ctl2,0x0c); /* XXX */ 973 --- 473 unchanged lines hidden --- | 975 /* data is ready */ 976 addr = bp->b_un.b_addr + mbx->skip; 977 978 outb(port+mcd_ctl2,0x04); /* XXX */ 979 for (i=0; i<mbx->sz; i++) 980 *addr++ = inb(data_port); 981 outb(port+mcd_ctl2,0x0c); /* XXX */ 982 --- 473 unchanged lines hidden --- |