mcd.c (2762) | mcd.c (3816) |
---|---|
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.24 1994/09/06 21:56:09 se Exp $ | 42 * $Id: mcd.c,v 1.25 1994/09/14 20:28:25 ache 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> 51#include <sys/conf.h> 52#include <sys/file.h> 53#include <sys/buf.h> 54#include <sys/stat.h> 55#include <sys/uio.h> 56#include <sys/ioctl.h> 57#include <sys/cdio.h> 58#include <sys/errno.h> 59#include <sys/dkbad.h> 60#include <sys/disklabel.h> | 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> 51#include <sys/conf.h> 52#include <sys/file.h> 53#include <sys/buf.h> 54#include <sys/stat.h> 55#include <sys/uio.h> 56#include <sys/ioctl.h> 57#include <sys/cdio.h> 58#include <sys/errno.h> 59#include <sys/dkbad.h> 60#include <sys/disklabel.h> |
61#include <sys/devconf.h> 62 |
|
61#include <i386/isa/isa.h> 62#include <i386/isa/isa_device.h> 63#include <i386/isa/mcdreg.h> 64 65#define MCD_TRACE(fmt,a,b,c,d) {if (mcd_data[unit].debug) {printf("mcd%d: status=0x%02x: ",unit,mcd_data[unit].status); printf(fmt,a,b,c,d);}} 66 67#define mcd_part(dev) ((minor(dev)) & 7) 68#define mcd_unit(dev) (((minor(dev)) & 0x38) >> 3) --- 123 unchanged lines hidden (view full) --- 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 1300000 199 | 63#include <i386/isa/isa.h> 64#include <i386/isa/isa_device.h> 65#include <i386/isa/mcdreg.h> 66 67#define MCD_TRACE(fmt,a,b,c,d) {if (mcd_data[unit].debug) {printf("mcd%d: status=0x%02x: ",unit,mcd_data[unit].status); printf(fmt,a,b,c,d);}} 68 69#define mcd_part(dev) ((minor(dev)) & 7) 70#define mcd_unit(dev) (((minor(dev)) & 0x38) >> 3) --- 123 unchanged lines hidden (view full) --- 194/* several delays */ 195#define RDELAY_WAITSTAT 300 196#define RDELAY_WAITMODE 300 197#define RDELAY_WAITREAD 800 198 199#define MIN_DELAY 15 200#define DELAY_GETREPLY 1300000 201 |
202static struct kern_devconf kdc_mcd[NMCD] = { { 203 0, 0, 0, /* filled in by dev_attach */ 204 "mcd", 0, { MDDT_ISA, 0, "bio" }, 205 isa_generic_externalize, 0, 0, ISA_EXTERNALLEN, 206 &kdc_isa0, /* parent */ 207 0, /* parentdata */ 208 DC_IDLE, /* status */ 209 "Mitsumi CD-ROM controller" 210} }; 211 212static inline void 213mcd_registerdev(struct isa_device *id) 214{ 215 if(id->id_unit) 216 kdc_mcd[id->id_unit] = kdc_mcd[0]; 217 kdc_mcd[id->id_unit].kdc_unit = id->id_unit; 218 kdc_mcd[id->id_unit].kdc_isa = id; 219 dev_attach(&kdc_mcd[id->id_unit]); 220} 221 222 |
|
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; 207 mcd_soft_reset(dev->id_unit); 208 209#ifdef NOTYET 210 /* wire controller for interrupts and dma */ 211 mcd_configure(cd); 212#endif | 223int mcd_attach(struct isa_device *dev) 224{ 225 struct mcd_data *cd = mcd_data + dev->id_unit; 226 int i; 227 228 cd->iobase = dev->id_iobase; 229 cd->flags |= MCDINIT; 230 mcd_soft_reset(dev->id_unit); 231 232#ifdef NOTYET 233 /* wire controller for interrupts and dma */ 234 mcd_configure(cd); 235#endif |
236 mcd_registerdev(dev); |
|
213 214 return 1; 215} 216 217int mcdopen(dev_t dev) 218{ 219 int unit,part,phys; 220 struct mcd_data *cd; --- 40 unchanged lines hidden (view full) --- 261 262 if (part == RAW_PART || 263 (part < cd->dlabel.d_npartitions && 264 cd->dlabel.d_partitions[part].p_fstype != FS_UNUSED)) { 265 cd->partflags[part] |= MCDOPEN; 266 cd->openflags |= (1<<part); 267 if (part == RAW_PART && phys != 0) 268 cd->partflags[part] |= MCDREADRAW; | 237 238 return 1; 239} 240 241int mcdopen(dev_t dev) 242{ 243 int unit,part,phys; 244 struct mcd_data *cd; --- 40 unchanged lines hidden (view full) --- 285 286 if (part == RAW_PART || 287 (part < cd->dlabel.d_npartitions && 288 cd->dlabel.d_partitions[part].p_fstype != FS_UNUSED)) { 289 cd->partflags[part] |= MCDOPEN; 290 cd->openflags |= (1<<part); 291 if (part == RAW_PART && phys != 0) 292 cd->partflags[part] |= MCDREADRAW; |
293 kdc_mcd[unit].kdc_state = DC_BUSY; |
|
269 return 0; 270 } 271 272 return ENXIO; 273} 274 275int mcdclose(dev_t dev) 276{ --- 6 unchanged lines hidden (view full) --- 283 284 cd = mcd_data + unit; 285 part = mcd_part(dev); 286 phys = mcd_phys(dev); 287 288 if (!(cd->flags & MCDINIT)) 289 return ENXIO; 290 | 294 return 0; 295 } 296 297 return ENXIO; 298} 299 300int mcdclose(dev_t dev) 301{ --- 6 unchanged lines hidden (view full) --- 308 309 cd = mcd_data + unit; 310 part = mcd_part(dev); 311 phys = mcd_phys(dev); 312 313 if (!(cd->flags & MCDINIT)) 314 return ENXIO; 315 |
316 kdc_mcd[unit].kdc_state = DC_IDLE; |
|
291 if (mcd_getstat(unit,1) == -2) 292 return 0; 293 294 /* close channel */ 295 cd->partflags[part] &= ~(MCDOPEN|MCDREADRAW); 296 cd->openflags &= ~(1<<part); 297 MCD_TRACE("close: partition=%d\n",part,0,0,0); 298 --- 1157 unchanged lines hidden --- | 317 if (mcd_getstat(unit,1) == -2) 318 return 0; 319 320 /* close channel */ 321 cd->partflags[part] &= ~(MCDOPEN|MCDREADRAW); 322 cd->openflags &= ~(1<<part); 323 MCD_TRACE("close: partition=%d\n",part,0,0,0); 324 --- 1157 unchanged lines hidden --- |