1 /* $Id: ioc.c,v 1.2.10.1 2004-02-29 15:25:09 bfernhomberg Exp $
6 #endif /* HAVE_CONFIG_H */
9 #include <sys/stream.h>
10 #include <sys/cmn_err.h>
21 ioc_ok_ack( queue_t *q, mblk_t *m, int rval )
26 if (( m0 = unlinkb( m )) != NULL ) {
30 if ( m->b_wptr - m->b_rptr < sizeof( struct iocblk )) {
31 cmn_err( CE_CONT, "ioc_ok_ack too small\n" );
35 m->b_datap->db_type = M_IOCACK;
36 m->b_wptr = m->b_rptr + sizeof( struct iocblk );
37 ioc = (struct iocblk *)m->b_rptr;
46 ioc_error_ack( queue_t *q, mblk_t *m, int errno )
51 if (( m0 = unlinkb( m )) != NULL ) {
55 if ( m->b_wptr - m->b_rptr < sizeof( struct iocblk )) {
56 cmn_err( CE_CONT, "ioc_error_ack too small\n" );
60 m->b_datap->db_type = M_IOCNAK;
61 m->b_wptr = m->b_rptr + sizeof( struct iocblk );
62 ioc = (struct iocblk *)m->b_rptr;
63 ioc->ioc_error = errno;
71 ioc_copyin( queue_t *q, mblk_t *m, mblk_t *private, caddr_t addr, uint size )
76 if (( m0 = unlinkb( m )) != NULL ) {
81 /* supposedly this will fit anyway */
82 if ( m->b_wptr - m->b_rptr < sizeof( struct copyreq )) {
83 cmn_err( CE_CONT, "ioc_copyin too small\n" );
88 m->b_datap->db_type = M_COPYIN;
89 m->b_wptr = m->b_rptr + sizeof( struct copyreq );
90 cq = (struct copyreq *)m->b_rptr;
94 cq->cq_private = private;
100 ioc_copyout( queue_t *q, mblk_t *m, mblk_t *private, caddr_t data,
101 caddr_t addr, uint size )
106 if (( m0 = unlinkb( m )) != NULL ) {
111 /* supposedly this will fit anyway */
112 if ( m->b_wptr - m->b_rptr < sizeof( struct copyreq )) {
113 cmn_err( CE_CONT, "ioc_copyout too small\n" );
118 if (( m0 = allocb( size, BPRI_MED )) == NULL ) {
119 cmn_err( CE_CONT, "ioc_copyout nomem\n" );
123 m0->b_wptr = m0->b_rptr + size;
124 bcopy( data, m0->b_rptr, size );
127 m->b_datap->db_type = M_COPYOUT;
128 m->b_wptr = m->b_rptr + sizeof( struct copyreq );
129 cq = (struct copyreq *)m->b_rptr;
133 cq->cq_private = private;