📄 sl_x400p.c
字号:
#if 0/* * SL_OPTMGMT_ACK * ----------------------------------- */STATIC noinline fastcall __unlikely intsl_optmgmt_ack(struct xp *xp, queue_t *q, caddr_t opt_ptr, size_t opt_len, sl_ulong flags){ mblk_t *mp; sl_optmgmt_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p) + opt_len, BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_OPTMGMT_ACK; p->opt_length = opt_len; p->opt_offset = opt_len ? sizeof(*p) : 0; p->mgmt_flags = flags; bcopy(opt_ptr, mp->b_wptr, opt_len); mp->b_wptr += opt_len; printd(("%s: %p: <- SL_OPTMGMT_ACK\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SL_NOTIFY_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsl_notify_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sl_notify_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sl_primitive = SL_NOTIFY_IND; printd(("%s: %p: <- SL_NOTIFY_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#endif/* * LMI_INFO_ACK * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_info_ack(struct xp *xp, queue_t *q, caddr_t ppa_ptr, size_t ppa_len){ mblk_t *mp; lmi_info_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p) + ppa_len, BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_INFO_ACK; p->lmi_version = 1; p->lmi_state = xp->i_state; p->lmi_max_sdu = xp->sdt.config.m + 1 + ((xp->option.popt & SS7_POPT_XSN) ? 6 : 3); p->lmi_min_sdu = ((xp->option.popt & SS7_POPT_XSN) ? 6 : 3); p->lmi_header_len = 0; p->lmi_ppa_style = LMI_STYLE2; bcopy(ppa_ptr, mp->b_wptr, ppa_len); mp->b_wptr += ppa_len; printd(("%s: %p: <- LMI_INFO_ACK\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_SIGNAL_UNIT_IND * ----------------------------------- * We prefer to send M_DATA blocks. When the count is 1, we simply send * M_DATA. When the count is greater than one, we send an * SDT_RC_SIGNAL_UNIT_IND which also includes the count. This is so that * upper layer modules can collect SU statistics. * * Can't use buffer service. */STATIC inline fastcall __hot_in intsdt_rc_signal_unit_ind(struct xp *xp, queue_t *q, mblk_t *dp, sl_ulong count){ if (likely(count)) { if (likely(canput(RD(q)))) { mblk_t *mp; sdt_rc_signal_unit_ind_t *p; if (likely(!!(mp = allocb(sizeof(*p), BPRI_MED)))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_SIGNAL_UNIT_IND; p->sdt_count = count; mp->b_cont = dp; _printd(("%s: %p: <- SDT_RC_SIGNAL_UNIT_IND\n", DRV_NAME, xp)); put(RD(q), mp); return (QR_ABSORBED); } rare(); return (-ENOBUFS); } rare(); return (-EBUSY); } swerr(); return (-EFAULT);}#if 0/* * SDT_RC_CONGESTION_ACCEPT_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsdt_rc_congestion_accept_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_rc_congestion_accept_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_CONGESTION_ACCEPT_IND; printd(("%s: %p: <- SDT_RC_CONGESTION_ACCEPT_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_CONGESTION_DISCARD_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsdt_rc_congestion_discard_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_rc_congestion_discard_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_CONGESTION_DISCARD_IND; printd(("%s: %p: <- SDT_RC_CONGESTION_DISCARD_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_RC_NO_CONGESTION_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsdt_rc_no_congestion_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_rc_no_congestion_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_RC_NO_CONGESTION_IND; printd(("%s: %p: <- SDT_RC_NO_CONGESTION_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#endif/* * SDT_IAC_CORRECT_SU_IND * ----------------------------------- */STATIC inline fastcall __hot_read intsdt_iac_correct_su_ind(struct xp *xp, queue_t *q){ if (canputnext(RD(q))) { mblk_t *mp; sdt_iac_correct_su_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_IAC_CORRECT_SU_IND; printd(("%s: %p: <- SDT_IAC_CORRECT_SU_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS); } rare(); return (-EBUSY);}#if 0/* * SDT_IAC_ABORT_PROVING_IND * ----------------------------------- */STATIC noinline fastcall intsdt_iac_abort_proving_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_iac_abort_proving_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_IAC_ABORT_PROVING_IND; printd(("%s: %p: <- SDT_IAC_ABORT_PROVING_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDT_LSC_LINK_FAILURE_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsdt_lsc_link_failure_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_lsc_link_failure_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_LSC_LINK_FAILURE_IND; printd(("%s: %p: <- SDT_LSC_LINK_FAILURE_IND\n", DRV_NAME, xp)); put(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#endif/* * SDT_TXC_TRANSMISSION_REQUEST_IND * ----------------------------------- */STATIC inline fastcall __hot_out intsdt_txc_transmission_request_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdt_txc_transmission_request_ind_t *p; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdt_primitive = SDT_TXC_TRANSMISSION_REQUEST_IND; _printd(("%s: %p: <- SDT_TXC_TRANSMISSION_REQUEST_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * SDL_RECEIVED_BITS_IND * ----------------------------------- * Quickly we just copy the buffer and leave the original for the lower level * driver. */STATIC inline fastcall __hot_in intsdl_received_bits_ind(struct xp *xp, queue_t *q, mblk_t *dp){ if (canput(RD(q))) { _printd(("%s: %p: <- SDL_RECEIVED_BITS_IND\n", DRV_NAME, xp)); put(RD(q), dp); return (QR_ABSORBED); } rare(); dp->b_wptr = dp->b_rptr; /* discard contents */ return (-EBUSY);}#if 0/* * SDL_DISCONNECT_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intsdl_disconnect_ind(struct xp *xp, queue_t *q){ mblk_t *mp; sdl_disconnect_ind_t *p; (void) xp; if ((mp = allocb(sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->sdl_primitive = SDL_DISCONNECT_IND; printd(("%s: %p: <- SDL_DISCONNECT_IND\n", DRV_NAME, xp)); put(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}#endif/* * LMI_OK_ACK * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_ok_ack(struct xp *xp, queue_t *q, sl_ulong state, sl_long prim){ mblk_t *mp; lmi_ok_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_OK_ACK; p->lmi_correct_primitive = prim; p->lmi_state = xp->i_state = state; printd(("%s: %p: <- LMI_OK_ACK\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * LMI_ERROR_ACK * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_error_ack(struct xp *xp, queue_t *q, sl_ulong state, sl_long prim, sl_ulong errno, sl_ulong reason){ mblk_t *mp; lmi_error_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_ERROR_ACK; p->lmi_errno = errno; p->lmi_reason = reason; p->lmi_error_primitive = prim; p->lmi_state = xp->i_state = state; printd(("%s: %p: <- LMI_ERROR_ACK\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * LMI_ENABLE_CON * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_enable_con(struct xp *xp, queue_t *q){ mblk_t *mp; lmi_enable_con_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_ENABLE_CON; p->lmi_state = xp->i_state = LMI_ENABLED; printd(("%s: %p: <- LMI_ENABLE_CON\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * LMI_DISABLE_CON * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_disable_con(struct xp *xp, queue_t *q){ mblk_t *mp; lmi_disable_con_t *p; if (putctl2(RD(q), M_FLUSH, FLUSHRW, 0)) { if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_DISABLE_CON; p->lmi_state = xp->i_state = LMI_DISABLED; printd(("%s: %p: <- LMI_DISABLE_CON\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } } rare(); return (-ENOBUFS);}#if 0/* * LMI_OPTMGMT_ACK * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_optmgmt_ack(struct xp *xp, queue_t *q, sl_ulong flags, caddr_t opt_ptr, size_t opt_len){ mblk_t *mp; lmi_optmgmt_ack_t *p; if ((mp = ss7_allocb(q, sizeof(*p) + opt_len, BPRI_MED))) { mp->b_datap->db_type = M_PCPROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_OPTMGMT_ACK; p->lmi_opt_length = opt_len; p->lmi_opt_offset = opt_len ? sizeof(*p) : 0; p->lmi_mgmt_flags = flags; printd(("%s: %p: <- LMI_OPTMGMT_ACK\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * LMI_ERROR_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_error_ind(struct xp *xp, queue_t *q, sl_ulong errno, sl_ulong reason){ mblk_t *mp; lmi_error_ind_t *p; if ((mp = ss7_allocb(q, sizeof(*p), BPRI_MED))) { mp->b_datap->db_type = M_PROTO; p = (typeof(p)) mp->b_wptr; mp->b_wptr += sizeof(*p); p->lmi_primitive = LMI_ERROR_IND; p->lmi_errno = errno; p->lmi_reason = reason; p->lmi_state = xp->i_state; printd(("%s: %p: <- LMI_ERROR_IND\n", DRV_NAME, xp)); put(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS);}/* * LMI_STATS_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_stats_ind(struct xp *xp, queue_t *q, sl_ulong interval)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -