Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 03 Mar 2000 14:31:39 -0800
From:      Mike Smith <msmith@freebsd.org>
To:        nanda@procsys.com
Cc:        freebsd-scsi@FreeBSD.ORG
Subject:   Re: IOCTL support in SCSI block driver 
Message-ID:  <200003032231.OAA01856@mass.cdrom.com>
In-Reply-To: Your message of "Fri, 03 Mar 2000 12:36:08 %2B0530." <38BF6460.703A@procsys.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
> I am just resending the mail. After going through the code i am almost
> lost.
>  
>  I went through the mylex code to find how they implement the control
>  interface. But i have some doubts regarding this. Mainly these doubts
>  come since i am still quiete new to the FreeBSD world and don't have
>  good text books regarding how to write device drivers etc.
>  
>  1). In the user space how do i specify a controller to communicate with
>  that ? For eg. if i want to open the device and a send an IOCTL how do
> i specify that ? In our case actual disks will be seen as part of target
>  discovery done through the CAM SCSI interface.

The controller code instantiates a device for each controller.  The Mylex 
driver is still doing this the "old" way:

    /*
     * Register the control device on first attach.
     */
    if (cdev_registered++ == 0)
        cdevsw_add(&mlx_cdevsw);


It would be more correct for it to use:

    sc->mlx_dev_t = make_dev(&mlx_cdevsw, device_get_unit(sc->mlx_dev),
                             0, 0, S_IRUSR|S_IRUSRW, 
                             "mlx%d", device_get_unit(sc->mlx_dev));

and then use

    destroy_dev(sc->mlx_dev_t);

in the corresponding detach method.

(makes note to self to fix Mylex driver thusly).

>  2). I found that the while registering the character device the "softc"
>  structure does not come to picture at all. But later while opening the
>  device the "softc" structure is obtained using "devclass_get_softc".
> How is it obtained ? If there are some documents regarding these you can
>  tell me and i will go through it.

The bus code is responsible for tracking the softc structure; the minor 
number for the device maps directly to the controller instance number, so
/dev/mlx0 has minor number 0, and thus you ask for the softc pointer for 
instance 0 of mlx_devclass.

-- 
\\ Give a man a fish, and you feed him for a day. \\  Mike Smith
\\ Tell him he should learn how to fish himself,  \\  msmith@freebsd.org
\\ and he'll hate you for a lifetime.             \\  msmith@cdrom.com




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-scsi" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003032231.OAA01856>