📄 sl_x400p.c
字号:
{ if (canputnext(RD(q))) { mblk_t *mp; lmi_stats_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_STATS_IND; p->lmi_interval = interval; p->lmi_timestamp = jiffies; printd(("%s: %p: <- LMI_STATS_IND\n", DRV_NAME, xp)); putnext(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS); } rare(); return (-EBUSY);}/* * LMI_EVENT_IND * ----------------------------------- */STATIC noinline fastcall __unlikely intlmi_event_ind(struct xp *xp, queue_t *q, sl_ulong oid, sl_ulong level){ if (canput(RD(q))) { mblk_t *mp; lmi_event_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_EVENT_IND; p->lmi_objectid = oid; p->lmi_timestamp = jiffies; p->lmi_severity = level; printd(("%s: %p: <- LMI_EVENT_IND\n", DRV_NAME, xp)); put(RD(q), mp); return (QR_DONE); } rare(); return (-ENOBUFS); } rare(); return (-EBUSY);}#endif/* * ========================================================================= * * PROTOCOL STATE MACHINE FUNCTIONS * * ========================================================================= *//* * ------------------------------------------------------------------------ * * Default Configuration * * ------------------------------------------------------------------------ */STATIC lmi_option_t lmi_default_e1_chan = { .pvar = SS7_PVAR_ITUT_00, .popt = 0,};STATIC lmi_option_t lmi_default_t1_chan = { .pvar = SS7_PVAR_ANSI_00, .popt = SS7_POPT_MPLEV,};STATIC lmi_option_t lmi_default_j1_chan = { .pvar = SS7_PVAR_JTTC_94, .popt = SS7_POPT_MPLEV,};STATIC lmi_option_t lmi_default_e1_span = { .pvar = SS7_PVAR_ITUT_00, .popt = SS7_POPT_HSL | SS7_POPT_XSN,};STATIC lmi_option_t lmi_default_t1_span = { .pvar = SS7_PVAR_ANSI_00, .popt = SS7_POPT_MPLEV | SS7_POPT_HSL | SS7_POPT_XSN,};STATIC lmi_option_t lmi_default_j1_span = { .pvar = SS7_PVAR_JTTC_94, .popt = SS7_POPT_MPLEV | SS7_POPT_HSL | SS7_POPT_XSN,};STATIC sl_config_t sl_default_e1_chan = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sl_config_t sl_default_e1_span = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sl_config_t sl_default_t1_chan = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sl_config_t sl_default_t1_span = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sl_config_t sl_default_j1_chan = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sl_config_t sl_default_j1_span = { .t1 = 45 * 1000, .t2 = 5 * 1000, .t2l = 20 * 1000, .t2h = 100 * 1000, .t3 = 1 * 1000, .t4n = 8 * 1000, .t4e = 500, .t5 = 100, .t6 = 4 * 1000, .t7 = 1 * 1000, .rb_abate = 3, .rb_accept = 6, .rb_discard = 9, .tb_abate_1 = 128 * 272, .tb_onset_1 = 256 * 272, .tb_discd_1 = 384 * 272, .tb_abate_2 = 512 * 272, .tb_onset_2 = 640 * 272, .tb_discd_2 = 768 * 272, .tb_abate_3 = 896 * 272, .tb_onset_3 = 1024 * 272, .tb_discd_3 = 1152 * 272, .N1 = 127, .N2 = 8192, .M = 5,};STATIC sdt_config_t sdt_default_e1_span = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 793544, .De = 11328000, .Ue = 198384000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdt_config_t sdt_default_t1_span = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 577169, .De = 9308000, .Ue = 144292000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdt_config_t sdt_default_j1_span = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 577169, .De = 9308000, .Ue = 144292000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdt_config_t sdt_default_e1_chan = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 793544, .De = 11328000, .Ue = 198384000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdt_config_t sdt_default_t1_chan = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 577169, .De = 9308000, .Ue = 144292000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdt_config_t sdt_default_j1_chan = { .Tin = 4, .Tie = 1, .T = 64, .D = 256, .t8 = 100, .Te = 577169, .De = 9308000, .Ue = 144292000, .N = 16, .m = 272, .b = 8, .f = SDT_FLAGS_ONE,};STATIC sdl_config_t sdl_default_e1_chan = { .ifname = NULL, .ifflags = 0, .iftype = SDL_TYPE_DS0, .ifrate = 64000, .ifgtype = SDL_GTYPE_E1, .ifgrate = 2048000, .ifmode = SDL_MODE_PEER, .ifgmode = SDL_GMODE_NONE, .ifgcrc = SDL_GCRC_CRC5, .ifclock = SDL_CLOCK_SLAVE, .ifcoding = SDL_CODING_HDB3, .ifframing = SDL_FRAMING_CCS, .ifblksize = 8, .ifleads = 0, .ifbpv = 0, .ifalarms = 0, .ifrxlevel = 0, .iftxlevel = 1, .ifsync = 0, .ifsyncsrc = {0, 0, 0, 0} ,};STATIC sdl_config_t sdl_default_t1_chan = { .ifname = NULL, .ifflags = 0, .iftype = SDL_TYPE_DS0, .ifrate = 64000, .ifgtype = SDL_GTYPE_T1, .ifgrate = 1544000, .ifmode = SDL_MODE_PEER, .ifgmode = SDL_GMODE_NONE, .ifgcrc = SDL_GCRC_CRC6, .ifclock = SDL_CLOCK_LOOP, .ifcoding = SDL_CODING_B8ZS, .ifframing = SDL_FRAMING_ESF, .ifblksize = 8, .ifleads = 0, .ifbpv = 0, .ifalarms = 0, .ifrxlevel = 0, .iftxlevel = 0, .ifsync = 0, .ifsyncsrc = {0, 0, 0, 0} ,};STATIC sdl_config_t sdl_default_j1_chan = { .ifname = NULL, .ifflags = 0, .iftype = SDL_TYPE_DS0A, .ifrate = 64000, .ifgtype = SDL_GTYPE_J1, .ifgrate = 1544000, .ifmode = SDL_MODE_PEER, .ifgmode = SDL_GMODE_NONE, .ifgcrc = SDL_GCRC_CRC6J, .ifclock = SDL_CLOCK_LOOP, .ifcoding = SDL_CODING_B8ZS, .ifframing = SDL_FRAMING_ESF, .ifblksize = 8, .ifleads = 0, .ifbpv = 0, .ifalarms = 0, .ifrxlevel = 0, .iftxlevel = 0, .ifsync = 0, .ifsyncsrc = {0, 0, 0, 0} ,};STATIC noinline __unlikely intxp_span_config(struct cd *cd, int span, bool timeouts){ struct sp *sp = cd->spans[span]; volatile unsigned char *xlb = &cd->xlb[span << 8]; int offset; unsigned long timeout; switch (cd->board) { case V400PE: case E400P: case E400PSS7: { uint8_t ccr1 = 0, tcr1 = 0, reg18 = 0, regac = 0; xlb[0x1a] = 0x04; /* CCR2: set LOTCMC */#if 1 /* wierd thing to do */ for (offset = 0; offset <= 8; offset++) xlb[offset] = 0x00; for (offset = 0x10; offset <= 0x4f; offset++) if (offset != 0x1a) xlb[offset] = 0x00;#endif xlb[0x10] = 0x20; /* RCR1: Rsync as input */ xlb[0x11] = 0x06; /* RCR2: Sysclk = 2.048 Mhz */ xlb[0x12] = 0x09; /* TCR1: TSiS mode */ tcr1 = 0x09; /* TCR1: TSiS mode */ switch (sp->config.ifframing) { default: case SDL_FRAMING_CCS: ccr1 |= 0x08; break; case SDL_FRAMING_CAS: tcr1 |= 0x20; break; } switch (sp->config.ifcoding) { default: case SDL_CODING_HDB3: ccr1 |= 0x44; break; case SDL_CODING_AMI: ccr1 |= 0x00; break; } switch (sp->config.ifgcrc) { case SDL_GCRC_CRC4: ccr1 |= 0x11; break; default: ccr1 |= 0x00; break; } xlb[0x12] = tcr1; xlb[0x14] = ccr1; if (sp->config.iftxlevel < 8) { /* not monitoring mode */ regac = 0x00; /* TEST3 no gain */ reg18 = 0x00; /* 75 Ohm, Normal, transmitter on */ reg18 |= ((sp->config.iftxlevel & 0x7) << 5); /* LBO */ } else { /* monitoring mode */ regac = 0x00; /* TEST3 no gain */ reg18 = 0x01; /* 75 Ohm norm, transmitter off */ switch (sp->config.iftxlevel & 0x3) { case 0: break; case 1: regac |= 0x72; /* TEST3 12dB gain */ break; case 2: case 3: regac |= 0x70; /* TEST3 30dB gain */ break; } } // reg18 |= 0x01; /* disable transmitter */ xlb[0xac] = regac; xlb[0x18] = reg18; xlb[0x1b] = 0x8a; /* CRC3: LIRST & TSCLKM */ xlb[0x20] = 0x1b; /* TAFR */ xlb[0x21] = 0x5f; /* TNAFR */ xlb[0x40] = 0x0b; /* TSR1 */ if (timeouts) { /* wierd thing to do */ for (offset = 0x41; offset <= 0x4f; offset++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -