Lines Matching refs:smc
43 static void build_claim_beacon(struct s_smc *smc, u_long t_request);
44 static int init_mac(struct s_smc *smc, int all);
45 static void rtm_init(struct s_smc *smc);
46 static void smt_split_up_fifo(struct s_smc *smc);
53 #define DUMMY_READ() smc->hw.mc_dummy = (u_short) inp(ADDR(B0_RAP))
58 SMT_PANIC(smc,SMT_E0130, SMT_E0130_MSG) ; \
65 SMT_PANIC(smc,SMT_E0131, SMT_E0131_MSG) ; \
80 #define MA smc->hw.fddi_canon_addr
82 #define MA smc->hw.fddi_home_addr
107 static u_long mac_get_tneg(struct s_smc *smc) in mac_get_tneg() argument
116 void mac_update_counter(struct s_smc *smc) in mac_update_counter() argument
118 smc->mib.m[MAC0].fddiMACFrame_Ct = in mac_update_counter()
119 (smc->mib.m[MAC0].fddiMACFrame_Ct & 0xffff0000L) in mac_update_counter()
121 smc->mib.m[MAC0].fddiMACLost_Ct = in mac_update_counter()
122 (smc->mib.m[MAC0].fddiMACLost_Ct & 0xffff0000L) in mac_update_counter()
124 smc->mib.m[MAC0].fddiMACError_Ct = in mac_update_counter()
125 (smc->mib.m[MAC0].fddiMACError_Ct & 0xffff0000L) in mac_update_counter()
127 smc->mib.m[MAC0].fddiMACT_Neg = mac_get_tneg(smc) ; in mac_update_counter()
134 smt_emulate_token_ct( smc, MAC0 ); in mac_update_counter()
141 static void write_mdr(struct s_smc *smc, u_long val) in write_mdr() argument
151 static u_long read_mdr(struct s_smc *smc, unsigned int addr)
170 static void init_ram(struct s_smc *smc) in init_ram() argument
174 smc->hw.fp.fifo.rbc_ram_start = 0 ; in init_ram()
175 smc->hw.fp.fifo.rbc_ram_end = in init_ram()
176 smc->hw.fp.fifo.rbc_ram_start + RBC_MEM_SIZE ; in init_ram()
178 MARW(smc->hw.fp.fifo.rbc_ram_start) ; in init_ram()
179 for (i = smc->hw.fp.fifo.rbc_ram_start; in init_ram()
180 i < (u_short) (smc->hw.fp.fifo.rbc_ram_end-1); i++) in init_ram()
181 write_mdr(smc,0L) ; in init_ram()
183 write_mdr(smc,0L) ; in init_ram()
189 static void set_recvptr(struct s_smc *smc) in set_recvptr() argument
194 outpw(FM_A(FM_RPR1),smc->hw.fp.fifo.rx1_fifo_start) ; /* RPR1 */ in set_recvptr()
195 outpw(FM_A(FM_SWPR1),smc->hw.fp.fifo.rx1_fifo_start) ; /* SWPR1 */ in set_recvptr()
196 outpw(FM_A(FM_WPR1),smc->hw.fp.fifo.rx1_fifo_start) ; /* WPR1 */ in set_recvptr()
197 outpw(FM_A(FM_EARV1),smc->hw.fp.fifo.tx_s_start-1) ; /* EARV1 */ in set_recvptr()
202 if (smc->hw.fp.fifo.rx2_fifo_size) { in set_recvptr()
203 outpw(FM_A(FM_RPR2),smc->hw.fp.fifo.rx2_fifo_start) ; in set_recvptr()
204 outpw(FM_A(FM_SWPR2),smc->hw.fp.fifo.rx2_fifo_start) ; in set_recvptr()
205 outpw(FM_A(FM_WPR2),smc->hw.fp.fifo.rx2_fifo_start) ; in set_recvptr()
206 outpw(FM_A(FM_EARV2),smc->hw.fp.fifo.rbc_ram_end-1) ; in set_recvptr()
209 outpw(FM_A(FM_RPR2),smc->hw.fp.fifo.rbc_ram_end-1) ; in set_recvptr()
210 outpw(FM_A(FM_SWPR2),smc->hw.fp.fifo.rbc_ram_end-1) ; in set_recvptr()
211 outpw(FM_A(FM_WPR2),smc->hw.fp.fifo.rbc_ram_end-1) ; in set_recvptr()
212 outpw(FM_A(FM_EARV2),smc->hw.fp.fifo.rbc_ram_end-1) ; in set_recvptr()
219 static void set_txptr(struct s_smc *smc) in set_txptr() argument
226 outpw(FM_A(FM_RPXA0),smc->hw.fp.fifo.tx_a0_start) ; /* RPXA0 */ in set_txptr()
227 outpw(FM_A(FM_SWPXA0),smc->hw.fp.fifo.tx_a0_start) ; /* SWPXA0 */ in set_txptr()
228 outpw(FM_A(FM_WPXA0),smc->hw.fp.fifo.tx_a0_start) ; /* WPXA0 */ in set_txptr()
229 outpw(FM_A(FM_EAA0),smc->hw.fp.fifo.rx2_fifo_start-1) ; /* EAA0 */ in set_txptr()
234 if (smc->hw.fp.fifo.tx_s_size) { in set_txptr()
235 outpw(FM_A(FM_RPXS),smc->hw.fp.fifo.tx_s_start) ; in set_txptr()
236 outpw(FM_A(FM_SWPXS),smc->hw.fp.fifo.tx_s_start) ; in set_txptr()
237 outpw(FM_A(FM_WPXS),smc->hw.fp.fifo.tx_s_start) ; in set_txptr()
238 outpw(FM_A(FM_EAS),smc->hw.fp.fifo.tx_a0_start-1) ; in set_txptr()
241 outpw(FM_A(FM_RPXS),smc->hw.fp.fifo.tx_a0_start-1) ; in set_txptr()
242 outpw(FM_A(FM_SWPXS),smc->hw.fp.fifo.tx_a0_start-1) ; in set_txptr()
243 outpw(FM_A(FM_WPXS),smc->hw.fp.fifo.tx_a0_start-1) ; in set_txptr()
244 outpw(FM_A(FM_EAS),smc->hw.fp.fifo.tx_a0_start-1) ; in set_txptr()
251 static void init_rbc(struct s_smc *smc) in init_rbc() argument
258 rbc_ram_addr = smc->hw.fp.fifo.rx2_fifo_start - 1 ; in init_rbc()
265 set_recvptr(smc) ; in init_rbc()
266 set_txptr(smc) ; in init_rbc()
272 static void init_rx(struct s_smc *smc) in init_rx() argument
279 smc->hw.fp.rx[QUEUE_R1] = queue = &smc->hw.fp.rx_q[QUEUE_R1] ; in init_rx()
286 smc->hw.fp.rx[QUEUE_R2] = queue = &smc->hw.fp.rx_q[QUEUE_R2] ; in init_rx()
294 void set_formac_tsync(struct s_smc *smc, long sync_bw) in set_formac_tsync() argument
302 static void init_tx(struct s_smc *smc) in init_tx() argument
309 smc->hw.fp.tx[QUEUE_S] = queue = &smc->hw.fp.tx_q[QUEUE_S] ; in init_tx()
314 set_formac_tsync(smc,smc->ess.sync_bw) ; in init_tx()
320 smc->hw.fp.tx[QUEUE_A0] = queue = &smc->hw.fp.tx_q[QUEUE_A0] ; in init_tx()
325 llc_recover_tx(smc) ; in init_tx()
328 static void mac_counter_init(struct s_smc *smc) in mac_counter_init() argument
342 ec = (u_long *)&smc->hw.fp.err_stats ; in mac_counter_init()
345 smc->mib.m[MAC0].fddiMACRingOp_Ct = 0 ; in mac_counter_init()
351 static void set_formac_addr(struct s_smc *smc) in set_formac_addr() argument
353 long t_requ = smc->mib.m[MAC0].fddiMACT_Req ; in set_formac_addr()
356 outpw(FM_A(FM_LAIL),(unsigned short)((smc->hw.fddi_home_addr.a[4]<<8) + in set_formac_addr()
357 smc->hw.fddi_home_addr.a[5])) ; in set_formac_addr()
358 outpw(FM_A(FM_LAIC),(unsigned short)((smc->hw.fddi_home_addr.a[2]<<8) + in set_formac_addr()
359 smc->hw.fddi_home_addr.a[3])) ; in set_formac_addr()
360 outpw(FM_A(FM_LAIM),(unsigned short)((smc->hw.fddi_home_addr.a[0]<<8) + in set_formac_addr()
361 smc->hw.fddi_home_addr.a[1])) ; in set_formac_addr()
365 outpw(FM_A(FM_LAGL),(unsigned short)((smc->hw.fp.group_addr.a[4]<<8) + in set_formac_addr()
366 smc->hw.fp.group_addr.a[5])) ; in set_formac_addr()
367 outpw(FM_A(FM_LAGC),(unsigned short)((smc->hw.fp.group_addr.a[2]<<8) + in set_formac_addr()
368 smc->hw.fp.group_addr.a[3])) ; in set_formac_addr()
369 outpw(FM_A(FM_LAGM),(unsigned short)((smc->hw.fp.group_addr.a[0]<<8) + in set_formac_addr()
370 smc->hw.fp.group_addr.a[1])) ; in set_formac_addr()
393 static void copy_tx_mac(struct s_smc *smc, u_long td, struct fddi_mac *mac, in copy_tx_mac() argument
412 write_mdr(smc,le32_to_cpu(*p)) ; in copy_tx_mac()
417 write_mdr(smc,td) ; /* write over memory data reg to buffer */ in copy_tx_mac()
442 static void directed_beacon(struct s_smc *smc) in directed_beacon() argument
453 memcpy((char *)a+1, (char *) &smc->mib.m[MAC0].fddiMACUpstreamNbr, ETH_ALEN); in directed_beacon()
457 MARW(smc->hw.fp.fifo.rbc_ram_start+DBEACON_FRAME_OFF+4) ; in directed_beacon()
458 write_mdr(smc,le32_to_cpu(a[0])) ; in directed_beacon()
460 write_mdr(smc,le32_to_cpu(a[1])) ; in directed_beacon()
462 outpw(FM_A(FM_SABC),smc->hw.fp.fifo.rbc_ram_start + DBEACON_FRAME_OFF) ; in directed_beacon()
471 static void build_claim_beacon(struct s_smc *smc, u_long t_request) in build_claim_beacon() argument
482 mac = &smc->hw.fp.mac_sfb ; in build_claim_beacon()
489 copy_tx_mac(smc,td,(struct fddi_mac *)mac, in build_claim_beacon()
490 smc->hw.fp.fifo.rbc_ram_start + CLAIM_FRAME_OFF,len) ; in build_claim_beacon()
492 outpw(FM_A(FM_SACL),smc->hw.fp.fifo.rbc_ram_start + CLAIM_FRAME_OFF) ; in build_claim_beacon()
504 copy_tx_mac(smc,td,(struct fddi_mac *)mac, in build_claim_beacon()
505 smc->hw.fp.fifo.rbc_ram_start + BEACON_FRAME_OFF,len) ; in build_claim_beacon()
507 outpw(FM_A(FM_SABC),smc->hw.fp.fifo.rbc_ram_start + BEACON_FRAME_OFF) ; in build_claim_beacon()
522 copy_tx_mac(smc,td,(struct fddi_mac *)mac, in build_claim_beacon()
523 smc->hw.fp.fifo.rbc_ram_start + DBEACON_FRAME_OFF,len) ; in build_claim_beacon()
526 outpw(FM_A(FM_EACB),smc->hw.fp.fifo.rx1_fifo_start-1) ; in build_claim_beacon()
532 static void formac_rcv_restart(struct s_smc *smc) in formac_rcv_restart() argument
535 SETMASK(FM_A(FM_MDREG1),smc->hw.fp.rx_mode,FM_ADDRX) ; in formac_rcv_restart()
540 void formac_tx_restart(struct s_smc *smc) in formac_tx_restart() argument
546 static void enable_formac(struct s_smc *smc) in enable_formac() argument
586 void enable_tx_irq(struct s_smc *smc, u_short queue)
621 void disable_tx_irq(struct s_smc *smc, u_short queue)
637 static void disable_formac(struct s_smc *smc) in disable_formac() argument
649 static void mac_ring_up(struct s_smc *smc, int up) in mac_ring_up() argument
652 formac_rcv_restart(smc) ; /* enable receive function */ in mac_ring_up()
653 smc->hw.mac_ring_is_up = TRUE ; in mac_ring_up()
654 llc_restart_tx(smc) ; /* TX queue */ in mac_ring_up()
663 smc->hw.mac_ring_is_up = FALSE ; in mac_ring_up()
676 void mac2_irq(struct s_smc *smc, u_short code_s2u, u_short code_s2l) in mac2_irq() argument
685 queue_event(smc,EVENT_RMT,RM_TX_STATE_CHANGE) ; in mac2_irq()
688 queue_event(smc,EVENT_RMT,RM_TX_STATE_CHANGE) ; in mac2_irq()
694 change_s2l = smc->hw.fp.s2l ^ code_s2l ; in mac2_irq()
695 change_s2u = smc->hw.fp.s2u ^ code_s2u ; in mac2_irq()
698 (!smc->hw.mac_ring_is_up && ((code_s2l & FM_SRNGOP)))) { in mac2_irq()
700 mac_ring_up(smc,1) ; in mac2_irq()
701 queue_event(smc,EVENT_RMT,RM_RING_OP) ; in mac2_irq()
702 smc->mib.m[MAC0].fddiMACRingOp_Ct++ ; in mac2_irq()
705 mac_ring_up(smc,0) ; in mac2_irq()
706 queue_event(smc,EVENT_RMT,RM_RING_NON_OP) ; in mac2_irq()
711 smc->mib.m[MAC0].fddiMACNotCopied_Ct++ ; in mac2_irq()
715 smc->hw.mac_ct.mac_r_restart_counter++ ; in mac2_irq()
717 smt_stat_counter(smc,1) ; in mac2_irq()
721 queue_event(smc,EVENT_RMT,RM_OTHER_BEACON) ; in mac2_irq()
723 queue_event(smc,EVENT_RMT,RM_MY_BEACON) ; in mac2_irq()
732 queue_event(smc,EVENT_RMT,RM_MY_CLAIM) ; in mac2_irq()
742 queue_event(smc,EVENT_RMT,RM_VALID_CLAIM) ; in mac2_irq()
749 queue_event(smc,EVENT_RMT,RM_TRT_EXP) ; in mac2_irq()
756 smc->r.dup_addr_test = DA_FAILED ; in mac2_irq()
757 queue_event(smc,EVENT_RMT,RM_DUP_ADDR) ; in mac2_irq()
760 smc->hw.fp.err_stats.err_bec_stat++ ; in mac2_irq()
762 smc->hw.fp.err_stats.err_clm_stat++ ; in mac2_irq()
764 smc->mib.m[MAC0].fddiMACTvxExpired_Ct++ ; in mac2_irq()
766 if (!(change_s2l & FM_SRNGOP) && (smc->hw.fp.s2l & FM_SRNGOP)) { in mac2_irq()
767 mac_ring_up(smc,0) ; in mac2_irq()
768 queue_event(smc,EVENT_RMT,RM_RING_NON_OP) ; in mac2_irq()
770 mac_ring_up(smc,1) ; in mac2_irq()
771 queue_event(smc,EVENT_RMT,RM_RING_OP) ; in mac2_irq()
772 smc->mib.m[MAC0].fddiMACRingOp_Ct++ ; in mac2_irq()
776 smc->hw.fp.err_stats.err_phinv++ ; in mac2_irq()
778 smc->hw.fp.err_stats.err_sifg_det++ ; in mac2_irq()
780 smc->hw.fp.err_stats.err_tkiss++ ; in mac2_irq()
782 smc->hw.fp.err_stats.err_tkerr++ ; in mac2_irq()
784 smc->mib.m[MAC0].fddiMACFrame_Ct += 0x10000L ; in mac2_irq()
786 smc->mib.m[MAC0].fddiMACError_Ct += 0x10000L ; in mac2_irq()
788 smc->mib.m[MAC0].fddiMACLost_Ct += 0x10000L ; in mac2_irq()
790 SMT_PANIC(smc,SMT_E0114, SMT_E0114_MSG) ; in mac2_irq()
794 smc->hw.fp.s2l = code_s2l ; in mac2_irq()
795 smc->hw.fp.s2u = code_s2u ; in mac2_irq()
802 void mac3_irq(struct s_smc *smc, u_short code_s3u, u_short code_s3l) in mac3_irq() argument
808 smc->hw.mac_ct.mac_r_restart_counter++ ; in mac3_irq()
809 smt_stat_counter(smc,1); in mac3_irq()
814 SMT_PANIC(smc,SMT_E0115, SMT_E0115_MSG) ; in mac3_irq()
817 SMT_PANIC(smc,SMT_E0116, SMT_E0116_MSG) ; in mac3_irq()
825 static void formac_offline(struct s_smc *smc) in formac_offline() argument
835 disable_formac(smc) ; in formac_offline()
836 smc->hw.mac_ring_is_up = FALSE ; in formac_offline()
837 smc->hw.hw_state = STOPPED ; in formac_offline()
843 static void formac_online(struct s_smc *smc) in formac_online() argument
845 enable_formac(smc) ; in formac_online()
847 smc->hw.fp.rx_mode, FM_MMODE | FM_SELRA | FM_ADDRX) ; in formac_online()
853 int init_fplus(struct s_smc *smc) in init_fplus() argument
855 smc->hw.fp.nsa_mode = FM_MRNNSAFNMA ; in init_fplus()
856 smc->hw.fp.rx_mode = FM_MDAMA ; in init_fplus()
857 smc->hw.fp.group_addr = fddi_broadcast ; in init_fplus()
858 smc->hw.fp.func_addr = 0 ; in init_fplus()
859 smc->hw.fp.frselreg_init = 0 ; in init_fplus()
861 init_driver_fplus(smc) ; in init_fplus()
862 if (smc->s.sas == SMT_DAS) in init_fplus()
863 smc->hw.fp.mdr3init |= FM_MENDAS ; in init_fplus()
865 smc->hw.mac_ct.mac_nobuf_counter = 0 ; in init_fplus()
866 smc->hw.mac_ct.mac_r_restart_counter = 0 ; in init_fplus()
868 smc->hw.fp.fm_st1u = (HW_PTR) ADDR(B0_ST1U) ; in init_fplus()
869 smc->hw.fp.fm_st1l = (HW_PTR) ADDR(B0_ST1L) ; in init_fplus()
870 smc->hw.fp.fm_st2u = (HW_PTR) ADDR(B0_ST2U) ; in init_fplus()
871 smc->hw.fp.fm_st2l = (HW_PTR) ADDR(B0_ST2L) ; in init_fplus()
872 smc->hw.fp.fm_st3u = (HW_PTR) ADDR(B0_ST3U) ; in init_fplus()
873 smc->hw.fp.fm_st3l = (HW_PTR) ADDR(B0_ST3L) ; in init_fplus()
875 smc->hw.fp.s2l = smc->hw.fp.s2u = 0 ; in init_fplus()
876 smc->hw.mac_ring_is_up = 0 ; in init_fplus()
878 mac_counter_init(smc) ; in init_fplus()
881 smc->hw.mac_pa.t_neg = (u_long)0 ; in init_fplus()
882 smc->hw.mac_pa.t_pri = (u_long)0 ; in init_fplus()
885 mac_do_pci_fix(smc) ; in init_fplus()
887 return init_mac(smc, 1); in init_fplus()
891 static int init_mac(struct s_smc *smc, int all) in init_mac() argument
900 set_formac_addr(smc) ; in init_mac()
903 outpw(FM_A(FM_MDREG2),smc->hw.fp.mdr2init) ; in init_mac()
906 init_ram(smc) ; in init_mac()
913 time = hwt_quick_read(smc) ; in init_mac()
919 smt_split_up_fifo(smc) ; in init_mac()
921 init_tx(smc) ; in init_mac()
922 init_rx(smc) ; in init_mac()
923 init_rbc(smc) ; in init_mac()
925 build_claim_beacon(smc,smc->mib.m[MAC0].fddiMACT_Req) ; in init_mac()
932 outpw(FM_A(FM_MDREG1),MDR1INIT | FM_SELRA | smc->hw.fp.rx_mode) ; in init_mac()
933 outpw(FM_A(FM_MDREG2),smc->hw.fp.mdr2init) ; in init_mac()
934 outpw(FM_A(FM_MDREG3),smc->hw.fp.mdr3init) ; in init_mac()
935 outpw(FM_A(FM_FRSELREG),smc->hw.fp.frselreg_init) ; in init_mac()
943 t_max = (u_short)(smc->mib.m[MAC0].fddiMACT_Max/32) ; in init_mac()
951 if (smc->mib.m[MAC0].fddiMACTvxValue < (u_long) (- US2BCLK(52))) { in init_mac()
955 (u_short)((smc->mib.m[MAC0].fddiMACTvxValue/255) & MB)) ; in init_mac()
965 rtm_init(smc) ; /* RT-Monitor */ in init_mac()
971 hwt_wait_time(smc,time,MS2BCLK(10)) ; in init_mac()
979 if (!smc->hw.hw_is_64bit) { in init_mac()
984 smc->hw.hw_state = STOPPED ; in init_mac()
985 mac_drv_repair_descr(smc) ; in init_mac()
987 smc->hw.hw_state = STARTED ; in init_mac()
996 void config_mux(struct s_smc *smc, int mux) in config_mux() argument
998 plc_config_mux(smc,mux) ; in config_mux()
1010 void sm_mac_check_beacon_claim(struct s_smc *smc) in sm_mac_check_beacon_claim() argument
1015 formac_rcv_restart(smc) ; in sm_mac_check_beacon_claim()
1016 process_receive(smc) ; in sm_mac_check_beacon_claim()
1023 void sm_ma_control(struct s_smc *smc, int mode) in sm_ma_control() argument
1028 formac_offline(smc) ; in sm_ma_control()
1031 (void)init_mac(smc,0) ; in sm_ma_control()
1034 formac_online(smc) ; in sm_ma_control()
1037 directed_beacon(smc) ; in sm_ma_control()
1047 int sm_mac_get_tx_state(struct s_smc *smc) in sm_mac_get_tx_state() argument
1056 static struct s_fpmc* mac_get_mc_table(struct s_smc *smc, in mac_get_mc_table() argument
1076 for (i = 0, tb = smc->hw.fp.mc.table ; i < FPMAX_MULTICAST ; i++, tb++){ in mac_get_mc_table()
1100 void mac_clear_multicast(struct s_smc *smc) in mac_clear_multicast() argument
1105 smc->hw.fp.os_slots_used = 0 ; /* note the SMT addresses */ in mac_clear_multicast()
1107 for (i = 0, tb = smc->hw.fp.mc.table ; i < FPMAX_MULTICAST ; i++, tb++){ in mac_clear_multicast()
1142 int mac_add_multicast(struct s_smc *smc, struct fddi_addr *addr, int can) in mac_add_multicast() argument
1151 if (smc->hw.fp.smt_slots_used >= SMT_MAX_MULTI) { in mac_add_multicast()
1156 if (smc->hw.fp.os_slots_used >= FPMAX_MULTICAST-SMT_MAX_MULTI) { in mac_add_multicast()
1164 if (!(tb = mac_get_mc_table(smc,addr,&own,0,can & ~0x80))) in mac_add_multicast()
1171 smc->hw.fp.smt_slots_used++ ; in mac_add_multicast()
1173 smc->hw.fp.os_slots_used++ ; in mac_add_multicast()
1196 void mac_update_multicast(struct s_smc *smc) in mac_update_multicast() argument
1210 if (smc->hw.fp.func_addr) { in mac_update_multicast()
1211 fu = (u_char *) &smc->hw.fp.func_addr ; in mac_update_multicast()
1230 for (i = 0, tb = smc->hw.fp.mc.table; i < FPMAX_MULTICAST; i++, tb++) { in mac_update_multicast()
1272 void mac_set_rx_mode(struct s_smc *smc, int mode) in mac_set_rx_mode() argument
1276 smc->hw.fp.rx_prom |= RX_MODE_ALL_MULTI ; in mac_set_rx_mode()
1279 smc->hw.fp.rx_prom &= ~RX_MODE_ALL_MULTI ; in mac_set_rx_mode()
1282 smc->hw.fp.rx_prom |= RX_MODE_PROM ; in mac_set_rx_mode()
1285 smc->hw.fp.rx_prom &= ~RX_MODE_PROM ; in mac_set_rx_mode()
1288 smc->hw.fp.nsa_mode = FM_MDAMA ; in mac_set_rx_mode()
1289 smc->hw.fp.rx_mode = (smc->hw.fp.rx_mode & ~FM_ADDET) | in mac_set_rx_mode()
1290 smc->hw.fp.nsa_mode ; in mac_set_rx_mode()
1293 smc->hw.fp.nsa_mode = FM_MRNNSAFNMA ; in mac_set_rx_mode()
1294 smc->hw.fp.rx_mode = (smc->hw.fp.rx_mode & ~FM_ADDET) | in mac_set_rx_mode()
1295 smc->hw.fp.nsa_mode ; in mac_set_rx_mode()
1298 if (smc->hw.fp.rx_prom & RX_MODE_PROM) { in mac_set_rx_mode()
1299 smc->hw.fp.rx_mode = FM_MLIMPROM ; in mac_set_rx_mode()
1301 else if (smc->hw.fp.rx_prom & RX_MODE_ALL_MULTI) { in mac_set_rx_mode()
1302 smc->hw.fp.rx_mode = smc->hw.fp.nsa_mode | FM_EXGPA0 ; in mac_set_rx_mode()
1305 smc->hw.fp.rx_mode = smc->hw.fp.nsa_mode ; in mac_set_rx_mode()
1306 SETMASK(FM_A(FM_MDREG1),smc->hw.fp.rx_mode,FM_ADDRX) ; in mac_set_rx_mode()
1307 mac_update_multicast(smc) ; in mac_set_rx_mode()
1328 void rtm_irq(struct s_smc *smc) in rtm_irq() argument
1334 AIX_EVENT(smc, (u_long) FDDI_RING_STATUS, in rtm_irq()
1336 (u_long) FDDI_RTT, smt_get_event_word(smc)); in rtm_irq()
1341 static void rtm_init(struct s_smc *smc) in rtm_init() argument
1347 void rtm_set_timer(struct s_smc *smc) in rtm_set_timer() argument
1353 (int)smc->mib.a[PATH0].fddiPATHT_Rmode); in rtm_set_timer()
1354 outpd(ADDR(B2_RTM_INI),smc->mib.a[PATH0].fddiPATHT_Rmode) ; in rtm_set_timer()
1357 static void smt_split_up_fifo(struct s_smc *smc) in smt_split_up_fifo() argument
1386 SMT_PANIC(smc,SMT_E0117, SMT_E0117_MSG) ; in smt_split_up_fifo()
1391 smc->hw.fp.fifo.rx1_fifo_size = RX_FIFO_SPACE ; in smt_split_up_fifo()
1392 smc->hw.fp.fifo.rx2_fifo_size = 0 ; in smt_split_up_fifo()
1397 smc->hw.fp.fifo.rx1_fifo_size = RX_LARGE_FIFO ; in smt_split_up_fifo()
1398 smc->hw.fp.fifo.rx2_fifo_size = RX_SMALL_FIFO ; in smt_split_up_fifo()
1401 smc->hw.fp.fifo.rx1_fifo_size = RX_FIFO_SPACE * in smt_split_up_fifo()
1403 smc->hw.fp.fifo.rx2_fifo_size = RX_FIFO_SPACE * in smt_split_up_fifo()
1430 if (smc->mib.a[PATH0].fddiPATHSbaPayload) { in smt_split_up_fifo()
1432 smc->hw.fp.fifo.fifo_config_mode |= in smt_split_up_fifo()
1433 smc->mib.fddiESSSynchTxMode | SYNC_TRAFFIC_ON ; in smt_split_up_fifo()
1437 smc->hw.fp.fifo.fifo_config_mode &= in smt_split_up_fifo()
1444 if (smc->hw.fp.fifo.fifo_config_mode & SYNC_TRAFFIC_ON) { in smt_split_up_fifo()
1445 if (smc->hw.fp.fifo.fifo_config_mode & SEND_ASYNC_AS_SYNC) { in smt_split_up_fifo()
1446 smc->hw.fp.fifo.tx_s_size = TX_LARGE_FIFO ; in smt_split_up_fifo()
1447 smc->hw.fp.fifo.tx_a0_size = TX_SMALL_FIFO ; in smt_split_up_fifo()
1450 smc->hw.fp.fifo.tx_s_size = TX_MEDIUM_FIFO ; in smt_split_up_fifo()
1451 smc->hw.fp.fifo.tx_a0_size = TX_MEDIUM_FIFO ; in smt_split_up_fifo()
1455 smc->hw.fp.fifo.tx_s_size = 0 ; in smt_split_up_fifo()
1456 smc->hw.fp.fifo.tx_a0_size = TX_FIFO_SPACE ; in smt_split_up_fifo()
1459 smc->hw.fp.fifo.rx1_fifo_start = smc->hw.fp.fifo.rbc_ram_start + in smt_split_up_fifo()
1461 smc->hw.fp.fifo.tx_s_start = smc->hw.fp.fifo.rx1_fifo_start + in smt_split_up_fifo()
1462 smc->hw.fp.fifo.rx1_fifo_size ; in smt_split_up_fifo()
1463 smc->hw.fp.fifo.tx_a0_start = smc->hw.fp.fifo.tx_s_start + in smt_split_up_fifo()
1464 smc->hw.fp.fifo.tx_s_size ; in smt_split_up_fifo()
1465 smc->hw.fp.fifo.rx2_fifo_start = smc->hw.fp.fifo.tx_a0_start + in smt_split_up_fifo()
1466 smc->hw.fp.fifo.tx_a0_size ; in smt_split_up_fifo()
1468 DB_SMT("FIFO split: mode = %x", smc->hw.fp.fifo.fifo_config_mode); in smt_split_up_fifo()
1470 smc->hw.fp.fifo.rbc_ram_start, smc->hw.fp.fifo.rbc_ram_end); in smt_split_up_fifo()
1472 smc->hw.fp.fifo.rx1_fifo_start, smc->hw.fp.fifo.tx_s_start); in smt_split_up_fifo()
1474 smc->hw.fp.fifo.tx_a0_start, smc->hw.fp.fifo.rx2_fifo_start); in smt_split_up_fifo()
1477 void formac_reinit_tx(struct s_smc *smc) in formac_reinit_tx() argument
1484 if (!smc->hw.fp.fifo.tx_s_size && smc->mib.a[PATH0].fddiPATHSbaPayload){ in formac_reinit_tx()
1485 (void)init_mac(smc,0) ; in formac_reinit_tx()