Declared in: drivers/Drivers.h
This section covers constants and types defined for use by kernel drivers and modules.
#defineB_CUR_DRIVER_API_VERSION
N
The B_CUR_DRIVER_API_VERSION
constant
indicates what version of the driver API your driver will be built to.
See also: "Symbols Drivers Export"
Constant | Description |
---|---|
| Returns a size_t indicating the device size in bytes. |
| Sets the device size to the value pointed to by data. |
| Sets the device to use nonblocking I/O. |
| Sets the device to use blocking I/O. |
| Returns |
| Returns |
| Fills out the specified device_geometry structure to describe the device. |
| Returns the path of the driver executable handling the device. |
| Returns a partition_info structure for the device. |
| Creates a user-defined partition. data points to a partition_info structure. |
| Formats the device. data should point to a boolean value: If
|
| Ejects the device. |
| Fills out the specified device_icon structure to describe the device's icon. |
| Fills out a device_geometry structure to describe the device as the BIOS sees it. |
| Gets the status of the media in the device by placing a status_t at the location pointed to by data.
|
| Loads the media. |
| Returns the BIOS ID for the device. |
| Prevents control+C from interrupting I/O. |
| Allows control+C to interrupt I/O. |
| Flushes the drive's cache. |
| Iterates through open devices; data points to an open_device_iterator. |
| For internal use only. |
| For internal use only. |
| Base for codes in |
| Base for codes in |
| Base for codes in |
| Base for codes in |
| End of Be-defined control IDs. |
typedef struct { uint32bytes_per_sector
; uint32sectors_per_track
; uint32cylinder_count
; uint32head_count
; uchardevice_type
; boolremovable
; boolread_only
; boolwrite_once
; } device_geometry
The device_geometry structure is returned
by the B_GET_GEOMETRY
driver
control function. Its fields are:
Field | Description |
---|---|
| Indicates how many bytes each sector of the disk contains. |
| Indicates how many sectors each disk track contains. |
| Indicates the number of cylinders the disk contains. |
| Indicates how many heads the disk has. |
| Specifies the type of device; there's a list of device type definitions below. |
| Is |
| Is |
| Is |
If you need to compute the total size of the device in bytes, you can obtain this figure using the following simple formula:
disk_size
=geometry
.cylinder_count
*geometry
.sectors_per_track
*geometry
.head_count
*geometry
.bytes_per_sector
;
The device type returned in device_type
is one of:
Constant | Description |
---|---|
| Hard disk, floppy disk, etc. |
| Tape drive. |
| Printer. |
| CPU device. |
| Write-once, read-many device (such as CD-recordable). |
| CD-ROM. |
| Scanner. |
| Optical device |
| Jukebox device. |
| Network device. |
typedef struct { device_open_hookopen
; device_close_hookclose
; device_free_hookfree
; device_control_hookcontrol
; device_read_hookread
; device_write_hookwrite
; device_select_hookselect
; device_deselect_hookdeselect
; device_readv_hookreadv
; device_writev_hookwritev
; } device_hooks
This structure is used by device drivers to export their function hooks to the kernel.
typedef struct { int32icon_size
; void*icon_data
; } device_icon
When you want to obtain an icon for a specific device, call ioctl()
on
the open device, specifying the B_GET_ICON
opcode. Pass in data a pointer
to a device_icon structure in which icon_size
indicates the size of icon
you want and icon_data
points to a buffer large enough to receive the
icon's data.
icon_size
can be either B_MINI_ICON
, in which case the buffer pointed to
by icon_data
should be large enough to receive a 16x16 8-bit bitmap
(256-byte), or B_LARGE_ICON
, in which case the buffer should be large
enough to receive a 32x32 8-bit bitmap (1024-byte). The most obvious way
to set up this buffer would be to create a
BBitmap
of the appropriate
size and color depth and use its buffer, like this:
BBitmap
bits
(BRect
(0, 0,B_MINI_ICON
-1,B_MINI_ICON
-1, 0,B_CMAP8
)); device_iconiconrec
;iconrec
.icon_size
=B_MINI_ICON
;iconrec
.icon_data
=bits
.Bits
(); status_terr
=ioctl
(dev_fd
,B_GET_ICON
, &iconrec
); if (err
==B_OK
) { /* enjoy the icon */ ...view
->DrawBitmap
(bits
); } else { /* I don't like icons anyway */ }
typedef char driver_path[256];
Used by the B_GET_DRIVER_FOR_DEVICE
control function to return the
pathname of the specified device.
typedef struct { uint32cookie
; chardevice
[256]; } open_device_iterator
Used by the B_GET_NEXT_OPEN_DEVICE
control function. The first time you
call this function, your open_device_iterator should have cookie
initialized to 0. Then just keep calling it over and over; each time
you'll get the name of the next open device. When an error is returned,
you're done.
typedef struct { off_toffset
; off_tsize
; int32logical_block_size
; int32session
; int32partition
; chardevice
[256]; } partition_info
The partition_info structure describes a disk partition, and
is used by the B_GET_PARTITION_INFO
and
B_SET_PARTITION
control commands.
The fields are:
Field | Description |
---|---|
| Is the offset, in bytes, from the beginning of the disk to the beginning of the partition. |
| Is the size, in bytes, of the partition. |
| Is the block size with which the file system was written to the partition. |
| Are the session and partition ID numbers for the partition. |
| Is the pathname of the physical device on which the partition is located. |