svn commit: r233091 - in projects/nand: sbin/fdisk sys/sys
Grzegorz Bernacki
gjb at semihalf.com
Sun Mar 18 00:08:54 UTC 2012
W dniu 2012-03-17 22:51, Pawel Jakub Dawidek pisze:
> On Sat, Mar 17, 2012 at 05:10:15PM +0000, Grzegorz Bernacki wrote:
>> Author: gber
>> Date: Sat Mar 17 17:10:14 2012
>> New Revision: 233091
>> URL: http://svn.freebsd.org/changeset/base/233091
>>
>> Log:
>> Add ioctl and structures for accessing nand disk devices.
> Grzegorz, this is really wrong way to do it. Neither geom_dev nor
> geom_disk are the places to add NAND specific ioctls.
>
> The DEV GEOM class will forward unknown ioctl to provider's class. In
> this case to the DISK class. The DISK class will also forward ioctls to
> your method. Take a look at the g_disk_ioctl() function. When you
> configure your disk structure between disk_alloc() and disk_create() you
> just need to set d_ioctl field to your ioctl method and handle all
> ioctls specific to your class there. See disk(9) for more info.
>
> Ioctl is also the way you should send/receive metadata (eventually
> BIO_GETATTR) and not to introduce new BIO types that will only be used
> by one GEOM class.
>
> Don't hesitate to discuss this stuff on the freebsd-geom@ mailing list
> to avoid surprises on the commit day.
Thanks for comments. Let me check it one more time and I'll talk with
you later.
grzesiek
>> Modified: projects/nand/sys/sys/disk.h
>> ==============================================================================
>> --- projects/nand/sys/sys/disk.h Sat Mar 17 16:40:15 2012 (r233090)
>> +++ projects/nand/sys/sys/disk.h Sat Mar 17 17:10:14 2012 (r233091)
>> @@ -116,6 +116,32 @@ void disk_err(struct bio *bp, const char
>> * This should be a multiple of the sector size.
>> */
>>
>> +#define DIOCNOOBSIZE _IOR('d', 141, u_int) /* Get oob size */
>> + /*-
>> + * Get the OOB area size of NAND flash device.
>> + */
>> +
>> +#define DIOCNBLKSIZE _IOR('d', 142, u_int) /* Get block size */
>> + /* -
>> + * Get the block size of NAND flash device.
>> + */
>> +
>> +struct nand_oob_request {
>> + off_t offset; /* offset in bytes, page-aligned */
>> + off_t length; /* length */
>> + void * ubuf; /* buffer supplied by user */
>> +};
>> +
>> +#define DIOCNREADOOB _IOW('d', 143, struct nand_oob_request) /* Read OOB area */
>> + /*-
>> + * Read page OOB area from NAND flash device.
>> + */
>> +
>> +#define DIOCNWRITEOOB _IOW('d', 144, struct nand_oob_request) /* Write OOB area */
>> + /*-
>> + * Write page OOB area to NAND flash device.
>> + */
>> +
>> #define DIOCGPHYSPATH _IOR('d', 141, char[MAXPATHLEN])
>> /*
>> * Get a string defining the physical path for a given provider.
More information about the svn-src-projects
mailing list