|
Kernel Functions for Drivers | makecom(9F) |
| makecom, makecom_g0, makecom_g0_s, makecom_g1, makecom_g5 - make a packet for SCSI commands |
SYNOPSIS
|
#include <sys/scsi/scsi.h> void makecom_g0(struct scsi_pkt *pkt, struct scsi_device *devp, int flag, int cmd, int addr, int cnt); |
| void makecom_g0_s(struct scsi_pkt *pkt, struct scsi_device *devp, int flag, int cmd, int cnt, int fixbit); |
| void makecom_g1(struct scsi_pkt *pkt, struct scsi_device *devp, int flag, int cmd, int addr, int cnt); |
| void makecom_g5(struct scsi_pkt *pkt, struct scsi_device *devp, int flag, int cmd, int addr, int cnt); |
|
Solaris DDI specific (Solaris DDI).
|
|
-
pkt
- Pointer to an allocated scsi_pkt(9S) structure.
-
devp
- Pointer to the target's scsi_device(9S) structure.
-
flag
- Flags for the pkt_flags member.
-
cmd
- First byte of a group 0 or 1 or 5 SCSI CDB.
-
addr
- Pointer to the location of the data.
-
cnt
- Data transfer length in units defined by the SCSI device type. For sequential devices cnt is the number
of bytes. For block devices, cnt is the number of blocks.
-
fixbit
- Fixed bit in sequential access device commands.
|
|
makecom functions initialize a packet with the specified command descriptor block, devp and transport flags. The pkt_address, pkt_flags, and the command descriptor block pointed to by pkt_cdbp are initialized using the remaining arguments. Target drivers may use makecom_g0() for
Group 0 commands (except for sequential access devices), or makecom_g0_s() for Group 0 commands for sequential access devices, or makecom_g1() for Group 1 commands,
or makecom_g5() for Group 5 commands. fixbit is used by sequential access devices for accessing fixed block sizes and sets the the tag portion of the SCSI CDB.
|
|
These functions can be called from user or interrupt context.
|
| Example 1. Using makecom Functions
|
|
if (blkno >= (1<<20)) {
makecom_g1(pkt, SD_SCSI_DEVP, pflag, SCMD_WRITE_G1,
(int) blkno, nblk);
} else {
makecom_g0(pkt, SD_SCSI_DEVP, pflag, SCMD_WRITE,
(int) blkno, nblk);
}
|
|
|
| |