Writing Device Drivers

Convert Well-Known Ioctl Interfaces

Many ioctl operations are common to the same class of device driver. For example, most disk drivers implement many of the dkio(7I) family of ioctls. Many of these interfaces copy in or copy out data structures from the kernel, and some of these data structures have changed size as a result of the LP64 data model. The following section lists the ioctls that now require explicit conversion in 64-bit driver ioctl routines for the dkio(7I), fdio(7I), fbio(7I),cdio(7I) and mtio(7I) families of ioctls.

Table F-3 Data Structures

ioctl Command 

Affected Data Structure 

Reference 

 DKIOCGAPARTstruct dk_map()dkio(7I)
 DKIOCSAPARTstruct dk_allmap()
 DKIOGVTOC struct partition()dkio(7I)
 DKIOSVTOCstruct vtoc()
 FBIOPUTCMAPstruct fbcmap()fbio(7I)
 FBIOPUTCMAPIstruct fbcmap_i()fbio(7I)
 FBIOGETCMAPI 
 FBIOSCURSORstruct fbcursor()fbio(7I)
 FBIOSCURSOR 
 CDROMREADMODE1struct cdrom_read()cdio(7I)
 CDROMREADMODE2 
 CDROMCDDAstruct cdrom_cdda()cdio(7I)
 CDROMCDXAstruct cdrom_cdxa()cdio(7I)
 CDROMSUBCODEstruct cdrom_subcode()cdio(7I)
 FDIOCMDstruct fd_cmd()fdio(7I)
 FDRAWstruct fd_raw()fdio(7I)
 MTIOCTOPstruct mtop()mtio(7I)
 MTIOCGETstruct mtget()mtio(7I)
 MTIOCGETDRIVETYPEstruct mtdrivetype_request()mtio(7I)
 USCSICMDstruct uscsi_cmd() Undocumented

Device Sizes

The nblocks property is exported by each slice of a block device drivers. It contains the number of 512 byte blocks that each slice of the device can support. The nblocks property is defined as a signed 32-bit quantity, which limits the maximum number of disk blocks to 1Tbyte.

Disk devices that provide more than 1Tbyte of storage per disk, must define the Nblocks property, which should still contain the number of 512 byte blocks that the device can support. However, Nblocks is a signed 64-bit quantity, which removes any practical limit on disk space.

The nblocks property is now deprecated; all disk devices should provide the Nblocks property.