Note: This function is supported in AIX® 5.1 and earlier only.
Provides the means for kernel-mode users to transmit data to the Serial Optical Link (SOL) device driver.
#include <sys/device.h> #include <sys/comio.h> #include <sys/soluser.h> #include <sys/mbuf.h> int sol_fastwrt ( m, chan) struct mbuf *m; int chan;
Item | Description |
---|---|
m | Points to an mbuf structure containing caller data. |
chan | Specifies the channel number assigned by the sol_mpx entry point. |
A kernel user can transmit data more quickly using the sol_fastwrt entry point than through a normal write system call. The address of the sol_fastwrt entry point, along with the chan parameter, is given to a kernel-mode caller by way of the CIO_GET_FASTWRT sol_ioctl call.
If there is more than one path to the destination, the device handler uses any link that is available. If the S (serialized) option was specified on the open, and the connection is point to point, the data is guaranteed to have been received in the order in which it was sent. See the sol_mpx entry point for a description of the S option.
The data packet must start with a 4-byte field for the destination processor ID (the ID goes in the low-order byte), followed by a 1-byte field for the destination network ID. When the data is received at the destination, the 1-byte processor ID is stripped off, so that the first byte is the 1-byte network ID.
The maximum packet size allowed is SOL_MAX_XMIT, as defined in the /usr/include/sys/soluser.h file.
The sol_fastwrt entry point functions with a Serial Link Adapter and Serial Optical Channel Converter that have been correctly configured for use on a qualified network. Consult hardware specifications for more detailed information on configuring hardware and network qualifications.
The sol_fastwrt entry point can be called from the kernel process environment or the interrupt environment. If the sol_fastwrt function is called from the interrupt environment, it is the responsibility of the caller to ensure that the interrupt level is SOL_OFF_LEVEL, as defined in the /usr/include/sys/soluser.h file, or a less-favored priority.
The sol_fastwrt entry point does not support a multiple-packet write. The m_nextpkt field in the mbuf structure is ignored by the device driver.
The sol_fastwrt entry point does not support a write extension. The mbufs are freed when the transmit is complete, and there will be no transmit acknowledgement sent to the caller. If these defaults are not appropriate, use the normal sol_write entry point.
The sol_fastwrt entry point assumes a trusted caller. The parameter checking done in the normal sol_write entry point is not done in sol_fastwrt. The caller should ensure such things as a valid channel, page-aligned and page-length mbuf clusters, and a valid packet length.
Item | Description |
---|---|
ENODEV | Indicates a minor number was specified that was not valid. |
ENETDOWN | Indicates the network is down. The device is not able to process the write. |
ENOCONNECT | Indicates the device has not been started. |
EAGAIN | Indicates the transmit queue is full. |
EINVAL | Indicates a parameter was specified that was not valid. |
ENOMEM | Indicates the device driver was not able to allocate the required memory. |
EFAULT | Indicates an invalid address was supplied. |
EIO | Indicates an error occurred. |