Writing Device Drivers

Well-known ioctl Interfaces

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

ioctl command 

Affected data structure 

Reference 

DKIOCGAPART 

DKIOCSAPART 

struct dk_map 

struct dk_allmap 

dkio(4) 

DKIOGVTOC 

DKIOSVTOC 

struct partition 

struct vtoc 

dkio(4) 

FBIOPUTCMAP 

FBIOGETCMAP 

struct fbcmap 

fbio(4) 

FBIOPUTCMAPI 

FBIOGETCMAPI 

struct fbcmap_i 

fbio(4) 

FBIOSCURSOR 

FBIOSCURSOR 

struct fbcursor 

fbio(4) 

CDROMREADMODE1 

CDROMREADMODE2 

struct cdrom_read 

cdio(4) 

CDROMCDDA 

struct cdrom_cdda 

cdio(4) 

CDROMCDXA 

struct cdrom_cdxa 

cdio(4) 

CDROMSUBCODE 

struct cdrom_subcode 

cdio(4) 

FDIOCMD 

struct fd_cmd 

fdio(4) 

FDRAW 

struct fd_raw 

fdio(4) 

MTIOCTOP 

struct mtop 

mtio(4) 

MTIOCGET 

struct mtget 

mtio(4) 

MTIOCGETDRIVETYPE 

struct mtdrivetype_request 

mtio(4) 

USCSICMD 

struct uscsi_cmd 

scsi(4) 

Device Sizes

The nblocks property is exported by each slice of a block device driver. 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 size of a slice to 1 Tbyte.

Disk devices that provide more than 1 Tbyte 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.