RMCreateDevice: Difference between revisions
Appearance
Created page with "This rmcall service obtains a device handle and allows a driver to register a device with the Resource Manager and assign the device to an adapter. A device handle (HDEVICE) i..." |
mNo edit summary |
||
Line 1: | Line 1: | ||
This rmcall service obtains a device handle and allows a driver to register a device with the Resource Manager and assign the device to an adapter. A device handle (HDEVICE) is returned by this service to identify the device. | This rmcall service obtains a device handle and allows a driver to register a device with the Resource Manager and assign the device to an adapter. A device handle (HDEVICE) is returned by this service to identify the device. | ||
==Syntax== | ==Syntax== | ||
rc = RMCreateDevice(hDriver, hDevice, DeviceStruct, hParentAdapter, ResourceList); | rc = RMCreateDevice(hDriver, hDevice, DeviceStruct, hParentAdapter, ResourceList); | ||
==Parameters== | ==Parameters== | ||
; | ;hDriver (HDRIVER) - input: Handle of the device driver creating this device. | ||
;hDevice (PHDEVICE) - output: Pointer to a variable to receive the returned device handle. | |||
; hDevice (PHDEVICE) - output : Pointer to a variable to receive the returned device handle. | ;DeviceStruct (PDEVICESTRUCT) - output: Pointer to the [[DEVICESTRUCT]] structure. | ||
;hParentAdapter (HADAPTER) - input: Handle of the parent adapter for the device being created. | |||
; DeviceStruct (PDEVICESTRUCT) - output : Pointer to the DEVICESTRUCT structure. | ;ResourceList (PAHRESOURCE) - output: Pointer to the [[AHRESOURCE]] structure, which contains a count and a list of resource handles to be assigned to this device. | ||
; hParentAdapter (HADAPTER) - input : Handle of the parent adapter for the device being created. | |||
; ResourceList (PAHRESOURCE) - output : Pointer to the AHRESOURCE structure, which contains a count and a list of resource handles to be assigned to this device. | |||
==Return Code== | ==Return Code== | ||
; rc (APIRET) - returns : On systems where the Resource Manager driver is not installed, the library interface code will return RMRC_SUCCESS and an adapter handle of -1L. | ;rc (APIRET) - returns: On systems where the Resource Manager driver is not installed, the library interface code will return RMRC_SUCCESS and an adapter handle of -1L. | ||
:: RMRC_IRQ_ENTRY_ILLEGAL : A Resource Manager service was issued at interrupt time. The Resource Manager service request can be issued only at task time or INIT time. | |||
:: RMRC_NULL_POINTER : A Resource Manager service received a NULL value for a pointer that was expected to contain a valid 16:16 address. | |||
:: RMRC_NULL_STRINGS : A descriptive text pointer in a DRIVERSTRUCT, ADAPTERSTRUCT, or DEVICESTRUCT datatype was found to be NULL rather than pointing to the expected ASCIIZ text data. | |||
:: RMRC_BAD_DRIVERHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required. | |||
:: RMRC_BAD_ADAPTERHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required. | |||
:: RMRC_BAD_RESOURCEHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required. | |||
==Remarks== | ==Remarks== | ||
Line 33: | Line 25: | ||
Information about the device being registered is passed in a DEVICESTRUCT. | Information about the device being registered is passed in a DEVICESTRUCT. | ||
Resources are usually assigned to the adapter (parent) that owns the device. In some cases, resources are used specifically by a particular device rather than shared between multiple devices supported by an adapter. In this case, resources should be assigned to the device, as appropriate. | Resources are usually assigned to the adapter (parent) that owns the device. In some cases, resources are used specifically by a particular device rather than shared between multiple devices supported by an adapter. In this case, resources should be assigned to the device, as appropriate. | ||
==Example Code== | ==Example Code== |
Latest revision as of 12:52, 7 June 2021
This rmcall service obtains a device handle and allows a driver to register a device with the Resource Manager and assign the device to an adapter. A device handle (HDEVICE) is returned by this service to identify the device.
Syntax
rc = RMCreateDevice(hDriver, hDevice, DeviceStruct, hParentAdapter, ResourceList);
Parameters
- hDriver (HDRIVER) - input
- Handle of the device driver creating this device.
- hDevice (PHDEVICE) - output
- Pointer to a variable to receive the returned device handle.
- DeviceStruct (PDEVICESTRUCT) - output
- Pointer to the DEVICESTRUCT structure.
- hParentAdapter (HADAPTER) - input
- Handle of the parent adapter for the device being created.
- ResourceList (PAHRESOURCE) - output
- Pointer to the AHRESOURCE structure, which contains a count and a list of resource handles to be assigned to this device.
Return Code
- rc (APIRET) - returns
- On systems where the Resource Manager driver is not installed, the library interface code will return RMRC_SUCCESS and an adapter handle of -1L.
- RMRC_IRQ_ENTRY_ILLEGAL : A Resource Manager service was issued at interrupt time. The Resource Manager service request can be issued only at task time or INIT time.
- RMRC_NULL_POINTER : A Resource Manager service received a NULL value for a pointer that was expected to contain a valid 16:16 address.
- RMRC_NULL_STRINGS : A descriptive text pointer in a DRIVERSTRUCT, ADAPTERSTRUCT, or DEVICESTRUCT datatype was found to be NULL rather than pointing to the expected ASCIIZ text data.
- RMRC_BAD_DRIVERHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required.
- RMRC_BAD_ADAPTERHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required.
- RMRC_BAD_RESOURCEHANDLE: The expected Resource Manager handles were not provided because the handle was not a valid Resource Manager handle or the handle did not point to the type of object the service required.
Remarks
When a device is registered, a list of resource handles (representing hardware resources used by this device) can be assigned optionally to the device.
Information about the device being registered is passed in a DEVICESTRUCT.
Resources are usually assigned to the adapter (parent) that owns the device. In some cases, resources are used specifically by a particular device rather than shared between multiple devices supported by an adapter. In this case, resources should be assigned to the device, as appropriate.
Example Code
C
#include <os2.h> #include <rmcalls.h> HDRIVER hDriver; PHDEVICE hDevice; PDEVICESTRUCT DeviceStruct; HADAPTER hParentAdapter; PAHRESOURCE ResourceList; APIRET rc; rc = RMCreateDevice(hDriver, hDevice, DeviceStruct, hParentAdapter, ResourceList);