Date: Sat, 13 Jul 2002 23:47:14 +0200 From: Nicolas Souchu <nsouch@free.fr> To: Martin Faxer <gmh003532@brfmasthugget.se> Cc: hackers@FreeBSD.ORG Subject: Re: ppbus questions Message-ID: <20020713234714.B26323@armor.fastether> In-Reply-To: <20020623101501.GA53454@lockdown.spectrum.fearmuffs.net>; from gmh003532@brfmasthugget.se on Sun, Jun 23, 2002 at 12:15:01PM %2B0200 References: <20020623101501.GA53454@lockdown.spectrum.fearmuffs.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Jun 23, 2002 at 12:15:01PM +0200, Martin Faxer wrote: > hi! > > i'm trying to write a driver for an old cd-rom drive that you connect > to the parallel port. it is a shuttletech "para drive" 525. > > i don't have any driver docs or technical specifications but i believe > that it uses some kind of a SCSI to parallel chipset. The problem will be that FreeBSD ppbus framework is much more timing-sensitive than Linux parport. Without the tech sheets it may be hard. > the linux tree seems to have drivers for shuttletech EPSA-2 chipsets, > so i'm currently trying to port their probe routines to FreeBSD to see > if my cd-rom is indeed equipped with one of those chipsets. The best is certainly to install Linux on some partition and check that your drive is supported, then port the driver. > the linux code uses outb() and inb() directly to communicate with the > parallel port so i have to port it to use the ppbus interface. > > here are my questions: > 1) do the ppb_[rw][dcs]tr() functions have any "side effects", like > eg. does ppb_wdtr() drive strobe high or something like that to > tell the device that there is data waiting, or is it simply a > wrapper around outb() ? (ps. i tried to find the code for these A wrapper. > functions but didn't succeed since the macros make use of PPBUS_IO() > which is generated and calls some other function.) > > if the ppb_[rw][dcs]tr() function have side effects, are there any > lower level functions which simply wrap around inb() and outb() ? > > 2) do the ppb_[rw][dcs]tr() functions wait, or do i have to call some > function to do that, like DELAY() ? the linux code calls usleep() > after sending commands to the device. (i believe it is bad to call > DELAY() in a _probe() routine, but perhaps i can do that to start > with...) > > 3) should i use micro sequences instead of doing ppb_*() calls ? > i looked briefly at the man page but it seemed pretty complicated > and i'm not a very experienced kernel hacker yet. Yes, certainly. Microsequences offer you a general mechanism for bypassing the overhead of the newbus framework. > i would be very grateful for any answers or tips you might have! The task will not be easy :) Note that the first version of the vpo driver was a port of Linux driver. Then I rewrote it completly from specs. outb and inb might be used as well, but they're not portable. You should use ppb_xxx() routines preferably or even microsequences. Nicholas -- Nicholas Souchu - nsouch@free.fr - nsouch@FreeBSD.org To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020713234714.B26323>