Lines Matching full:smc

25 #include "h/smc.h"
74 static void queue_llc_rx(struct s_smc *smc, SMbuf *mb);
75 static void smt_to_llc(struct s_smc *smc, SMbuf *mb);
76 static void init_txd_ring(struct s_smc *smc);
77 static void init_rxd_ring(struct s_smc *smc);
78 static void queue_txd_mb(struct s_smc *smc, SMbuf *mb);
79 static u_long init_descr_ring(struct s_smc *smc, union s_fp_descr volatile *start,
81 static u_long repair_txd_ring(struct s_smc *smc, struct s_smt_tx_queue *queue);
82 static u_long repair_rxd_ring(struct s_smc *smc, struct s_smt_rx_queue *queue);
83 static SMbuf* get_llc_rx(struct s_smc *smc);
84 static SMbuf* get_txd_mb(struct s_smc *smc);
85 static void mac_drv_clear_txd(struct s_smc *smc);
94 extern void* mac_drv_get_space(struct s_smc *smc, unsigned int size);
95 extern void* mac_drv_get_desc_mem(struct s_smc *smc, unsigned int size);
96 extern void mac_drv_fill_rxd(struct s_smc *smc);
97 extern void mac_drv_tx_complete(struct s_smc *smc,
99 extern void mac_drv_rx_complete(struct s_smc *smc,
102 extern void mac_drv_requeue_rxd(struct s_smc *smc,
105 extern void mac_drv_clear_rxd(struct s_smc *smc,
117 extern u_long mac_drv_virt2phys(struct s_smc *smc, void *virt);
118 extern u_long dma_master(struct s_smc *smc, void *virt, int len, int flag);
123 extern void dma_complete(struct s_smc *smc, volatile union s_fp_descr *descr,
127 extern int mac_drv_rx_init(struct s_smc *smc, int len, int fc, char *look_ahead,
135 void process_receive(struct s_smc *smc);
136 void fddi_isr(struct s_smc *smc);
137 void smt_free_mbuf(struct s_smc *smc, SMbuf *mb);
138 void init_driver_fplus(struct s_smc *smc);
139 void mac_drv_rx_mode(struct s_smc *smc, int mode);
140 void init_fddi_driver(struct s_smc *smc, u_char *mac_addr);
141 void mac_drv_clear_tx_queue(struct s_smc *smc);
142 void mac_drv_clear_rx_queue(struct s_smc *smc);
143 void hwm_tx_frag(struct s_smc *smc, char far *virt, u_long phys, int len,
145 void hwm_rx_frag(struct s_smc *smc, char far *virt, u_long phys, int len,
148 int mac_drv_init(struct s_smc *smc);
149 int hwm_tx_init(struct s_smc *smc, u_char fc, int frag_count, int frame_len,
154 SMbuf* smt_get_mbuf(struct s_smc *smc);
157 void mac_drv_debug_lev(struct s_smc *smc, int flag, int lev);
174 #define MA smc->hw.fddi_canon_addr.a
177 #define MA smc->hw.fddi_home_addr.a
246 * void mac_drv_init(smc)
255 int mac_drv_init(struct s_smc *smc) in mac_drv_init() argument
258 SMT_PANIC(smc,HWM_E0001,HWM_E0001_MSG) ; in mac_drv_init()
261 SMT_PANIC(smc,HWM_E0002,HWM_E0002_MSG) ; in mac_drv_init()
267 if (!(smc->os.hwm.descr_p = (union s_fp_descr volatile *) in mac_drv_init()
268 mac_drv_get_desc_mem(smc,(u_int) in mac_drv_init()
277 smc->os.hwm.mbuf_pool.mb_start=(SMbuf *)(&smc->os.hwm.mbuf_pool.mb[0]) ; in mac_drv_init()
280 if (!(smc->os.hwm.mbuf_pool.mb_start = (SMbuf *) mac_drv_get_space(smc, in mac_drv_init()
286 if (!(mb_start = (SMbuf *) mac_drv_get_space(smc, in mac_drv_init()
298 * init_driver_fplus(smc)
305 void init_driver_fplus(struct s_smc *smc) in init_driver_fplus() argument
307 smc->hw.fp.mdr2init = FM_LSB | FM_BMMODE | FM_ENNPRQ | FM_ENHSRQ | 3 ; in init_driver_fplus()
310 smc->hw.fp.mdr2init |= FM_CHKPAR | FM_PARITY ; in init_driver_fplus()
312 smc->hw.fp.mdr3init = FM_MENRQAUNLCK | FM_MENRS ; in init_driver_fplus()
316 smc->hw.fp.frselreg_init = FM_ENXMTADSWAP | FM_ENRCVADSWAP ; in init_driver_fplus()
320 static u_long init_descr_ring(struct s_smc *smc, in init_descr_ring() argument
335 phys = mac_drv_virt2phys(smc,(void *)d1) ; in init_descr_ring()
341 phys = mac_drv_virt2phys(smc,(void *)start) ; in init_descr_ring()
351 static void init_txd_ring(struct s_smc *smc) in init_txd_ring() argument
360 ds = (struct s_smt_fp_txd volatile *) ((char *)smc->os.hwm.descr_p + in init_txd_ring()
362 queue = smc->hw.fp.tx[QUEUE_A0] ; in init_txd_ring()
364 (void)init_descr_ring(smc,(union s_fp_descr volatile *)ds, in init_txd_ring()
376 queue = smc->hw.fp.tx[QUEUE_S] ; in init_txd_ring()
378 (void)init_descr_ring(smc,(union s_fp_descr volatile *)ds, in init_txd_ring()
388 static void init_rxd_ring(struct s_smc *smc) in init_rxd_ring() argument
397 ds = (struct s_smt_fp_rxd volatile *) smc->os.hwm.descr_p ; in init_rxd_ring()
398 queue = smc->hw.fp.rx[QUEUE_R1] ; in init_rxd_ring()
400 (void)init_descr_ring(smc,(union s_fp_descr volatile *)ds, in init_rxd_ring()
412 * void init_fddi_driver(smc,mac_addr)
418 void init_fddi_driver(struct s_smc *smc, u_char *mac_addr) in init_fddi_driver() argument
423 init_board(smc,mac_addr) ; in init_fddi_driver()
424 (void)init_fplus(smc) ; in init_fddi_driver()
430 mb = smc->os.hwm.mbuf_pool.mb_start ; in init_fddi_driver()
431 smc->os.hwm.mbuf_pool.mb_free = (SMbuf *)NULL ; in init_fddi_driver()
434 smt_free_mbuf(smc,mb) ; in init_fddi_driver()
443 smt_free_mbuf(smc,mb) ; in init_fddi_driver()
453 smc->os.hwm.llc_rx_pipe = smc->os.hwm.llc_rx_tail = (SMbuf *)NULL ; in init_fddi_driver()
454 smc->os.hwm.txd_tx_pipe = smc->os.hwm.txd_tx_tail = NULL ; in init_fddi_driver()
455 smc->os.hwm.pass_SMT = smc->os.hwm.pass_NSA = smc->os.hwm.pass_DB = 0 ; in init_fddi_driver()
456 smc->os.hwm.pass_llc_promisc = TRUE ; in init_fddi_driver()
457 smc->os.hwm.queued_rx_frames = smc->os.hwm.queued_txd_mb = 0 ; in init_fddi_driver()
458 smc->os.hwm.detec_count = 0 ; in init_fddi_driver()
459 smc->os.hwm.rx_break = 0 ; in init_fddi_driver()
460 smc->os.hwm.rx_len_error = 0 ; in init_fddi_driver()
461 smc->os.hwm.isr_flag = FALSE ; in init_fddi_driver()
466 i = 16 - ((long)smc->os.hwm.descr_p & 0xf) ; in init_fddi_driver()
469 smc->os.hwm.descr_p = (union s_fp_descr volatile *) in init_fddi_driver()
470 ((char *)smc->os.hwm.descr_p+i) ; in init_fddi_driver()
472 DB_GEN(3, "pt to descr area = %p", smc->os.hwm.descr_p); in init_fddi_driver()
474 init_txd_ring(smc) ; in init_fddi_driver()
475 init_rxd_ring(smc) ; in init_fddi_driver()
476 mac_drv_fill_rxd(smc) ; in init_fddi_driver()
478 init_plc(smc) ; in init_fddi_driver()
482 SMbuf *smt_get_mbuf(struct s_smc *smc) in smt_get_mbuf() argument
487 mb = smc->os.hwm.mbuf_pool.mb_free ; in smt_get_mbuf()
493 smc->os.hwm.mbuf_pool.mb_free = mb->sm_next ; in smt_get_mbuf()
504 void smt_free_mbuf(struct s_smc *smc, SMbuf *mb) in smt_free_mbuf() argument
518 mb->sm_next = smc->os.hwm.mbuf_pool.mb_free ; in smt_free_mbuf()
519 smc->os.hwm.mbuf_pool.mb_free = mb ; in smt_free_mbuf()
527 SMT_PANIC(smc,HWM_E0003,HWM_E0003_MSG) ; in smt_free_mbuf()
533 * void mac_drv_repair_descr(smc)
550 void mac_drv_repair_descr(struct s_smc *smc) in mac_drv_repair_descr() argument
554 if (smc->hw.hw_state != STOPPED) { in mac_drv_repair_descr()
556 SMT_PANIC(smc,HWM_E0013,HWM_E0013_MSG) ; in mac_drv_repair_descr()
563 phys = repair_txd_ring(smc,smc->hw.fp.tx[QUEUE_A0]) ; in mac_drv_repair_descr()
565 if (smc->hw.fp.tx_q[QUEUE_A0].tx_used) { in mac_drv_repair_descr()
568 phys = repair_txd_ring(smc,smc->hw.fp.tx[QUEUE_S]) ; in mac_drv_repair_descr()
570 if (smc->hw.fp.tx_q[QUEUE_S].tx_used) { in mac_drv_repair_descr()
577 phys = repair_rxd_ring(smc,smc->hw.fp.rx[QUEUE_R1]) ; in mac_drv_repair_descr()
582 static u_long repair_txd_ring(struct s_smc *smc, struct s_smt_tx_queue *queue) in repair_txd_ring() argument
590 SK_UNUSED(smc) ; in repair_txd_ring()
634 static u_long repair_rxd_ring(struct s_smc *smc, struct s_smt_rx_queue *queue) in repair_rxd_ring() argument
642 SK_UNUSED(smc) ; in repair_rxd_ring()
684 * void fddi_isr(smc)
699 * We have to force and Timer IRQ if 'smc->os.hwm.leave_isr' AND
705 void fddi_isr(struct s_smc *smc) in fddi_isr() argument
716 if (smc->os.hwm.rx_break) { in fddi_isr()
717 mac_drv_fill_rxd(smc) ; in fddi_isr()
718 if (smc->hw.fp.rx_q[QUEUE_R1].rx_used > 0) { in fddi_isr()
719 smc->os.hwm.rx_break = 0 ; in fddi_isr()
720 process_receive(smc) ; in fddi_isr()
723 smc->os.hwm.detec_count = 0 ; in fddi_isr()
724 smt_force_irq(smc) ; in fddi_isr()
728 smc->os.hwm.isr_flag = TRUE ; in fddi_isr()
732 if (smc->os.hwm.leave_isr) { in fddi_isr()
733 smc->os.hwm.leave_isr = FALSE ; in fddi_isr()
734 process_receive(smc) ; in fddi_isr()
745 plc1_irq(smc) ; in fddi_isr()
748 plc2_irq(smc) ; in fddi_isr()
754 mac1_irq(smc,stu,stl) ; in fddi_isr()
761 mac2_irq(smc,stu,stl) ; in fddi_isr()
767 mac3_irq(smc,stu,stl) ; in fddi_isr()
770 timer_irq(smc) ; in fddi_isr()
777 if (++smc->os.hwm.detec_count > 4) { in fddi_isr()
781 process_receive(smc) ; in fddi_isr()
785 rtm_irq(smc) ; in fddi_isr()
790 SMT_PANIC(smc,HWM_E0004,HWM_E0004_MSG) ; in fddi_isr()
795 SMT_PANIC(smc,HWM_E0005,HWM_E0005_MSG) ; in fddi_isr()
800 SMT_PANIC(smc,HWM_E0006,HWM_E0006_MSG) ; in fddi_isr()
805 SMT_PANIC(smc,HWM_E0007,HWM_E0007_MSG) ; in fddi_isr()
820 mac_drv_clear_txd(smc) ; in fddi_isr()
821 llc_restart_tx(smc) ; in fddi_isr()
832 process_receive(smc) ; in fddi_isr()
834 process_receive(smc) ; in fddi_isr()
835 if (smc->os.hwm.leave_isr) { in fddi_isr()
839 process_receive(smc) ; in fddi_isr()
845 while ((mb = get_llc_rx(smc))) { in fddi_isr()
846 smt_to_llc(smc,mb) ; in fddi_isr()
852 while (!offDepth && (mb = get_llc_rx(smc))) { in fddi_isr()
853 smt_to_llc(smc,mb) ; in fddi_isr()
856 if (!offDepth && smc->os.hwm.rx_break) { in fddi_isr()
857 process_receive(smc) ; in fddi_isr()
860 if (smc->q.ev_get != smc->q.ev_put) { in fddi_isr()
862 ev_dispatcher(smc) ; in fddi_isr()
871 if (smc->os.hwm.leave_isr) { in fddi_isr()
880 if (smc->os.hwm.leave_isr && force_irq) { in fddi_isr()
881 smt_force_irq(smc) ; in fddi_isr()
884 smc->os.hwm.isr_flag = FALSE ; in fddi_isr()
898 * void mac_drv_rx_mode(smc,mode)
988 void mac_drv_rx_mode(struct s_smc *smc, int mode) in mac_drv_rx_mode() argument
992 smc->os.hwm.pass_SMT = TRUE ; in mac_drv_rx_mode()
995 smc->os.hwm.pass_SMT = FALSE ; in mac_drv_rx_mode()
998 smc->os.hwm.pass_NSA = TRUE ; in mac_drv_rx_mode()
1001 smc->os.hwm.pass_NSA = FALSE ; in mac_drv_rx_mode()
1004 smc->os.hwm.pass_DB = TRUE ; in mac_drv_rx_mode()
1007 smc->os.hwm.pass_DB = FALSE ; in mac_drv_rx_mode()
1010 smc->os.hwm.pass_SMT = smc->os.hwm.pass_NSA = FALSE ; in mac_drv_rx_mode()
1011 smc->os.hwm.pass_DB = FALSE ; in mac_drv_rx_mode()
1012 smc->os.hwm.pass_llc_promisc = TRUE ; in mac_drv_rx_mode()
1013 mac_set_rx_mode(smc,RX_DISABLE_NSA) ; in mac_drv_rx_mode()
1016 smc->os.hwm.pass_llc_promisc = FALSE ; in mac_drv_rx_mode()
1019 smc->os.hwm.pass_llc_promisc = TRUE ; in mac_drv_rx_mode()
1028 mac_set_rx_mode(smc,mode) ; in mac_drv_rx_mode()
1037 void process_receive(struct s_smc *smc) in process_receive() argument
1055 smc->os.hwm.detec_count = 0 ; in process_receive()
1056 queue = smc->hw.fp.rx[QUEUE_R1] ; in process_receive()
1064 if (smc->os.hwm.leave_isr) { in process_receive()
1070 smc->os.hwm.rx_break = 1 ; in process_receive()
1073 smc->os.hwm.rx_break = 0 ; in process_receive()
1076 if (smc->os.hwm.rx_break) { in process_receive()
1096 SMT_PANIC(smc,HWM_E0009,HWM_E0009_MSG) ; in process_receive()
1100 smc->hw.hw_state = STOPPED ; in process_receive()
1101 mac_drv_clear_rx_queue(smc) ; in process_receive()
1102 smc->hw.hw_state = STARTED ; in process_receive()
1103 mac_drv_fill_rxd(smc) ; in process_receive()
1104 smc->os.hwm.detec_count = 0 ; in process_receive()
1164 dma_complete(smc,(union s_fp_descr volatile *)r,DMA_WR); in process_receive()
1166 smc->hw.fp.err_stats.err_valid++ ; in process_receive()
1167 smc->mib.m[MAC0].fddiMACCopied_Ct++ ; in process_receive()
1179 smc->hw.fp.err_stats.err_abort++ ; in process_receive()
1186 smc->hw.fp.err_stats.err_e_indicator++ ; in process_receive()
1190 smc->hw.fp.err_stats.err_crc++ ; in process_receive()
1194 smc->hw.fp.err_stats.err_imp_frame++ ; in process_receive()
1200 smc->hw.fp.err_stats.err_too_long++ ; in process_receive()
1214 smc->os.hwm.rx_len_error++ ; in process_receive()
1241 if (!smc->os.hwm.pass_llc_promisc) { in process_receive()
1259 mac_drv_rx_complete(smc,rxd,frag_count,len) ; in process_receive()
1262 if (!(mb = smt_get_mbuf(smc))) { in process_receive()
1263 smc->hw.fp.err_stats.err_no_buf++ ; in process_receive()
1292 smc->hw.fp.err_stats.err_smt_frame++ ; in process_receive()
1295 if (smc->os.hwm.pass_SMT) { in process_receive()
1297 mac_drv_rx_complete(smc, rxd, in process_receive()
1302 mac_drv_requeue_rxd(smc,rxd,frag_count); in process_receive()
1305 smt_received_pack(smc,mb,(int)(rfsw>>25)) ; in process_receive()
1308 smc->hw.fp.err_stats.err_smt_frame++ ; in process_receive()
1314 if (smc->os.hwm.pass_NSA || in process_receive()
1315 (smc->os.hwm.pass_SMT && in process_receive()
1318 mac_drv_rx_complete(smc, rxd, in process_receive()
1323 mac_drv_requeue_rxd(smc,rxd,frag_count); in process_receive()
1326 smt_received_pack(smc,mb,(int)(rfsw>>25)) ; in process_receive()
1329 if (smc->os.hwm.pass_DB) { in process_receive()
1331 mac_drv_rx_complete(smc, rxd, in process_receive()
1336 mac_drv_requeue_rxd(smc,rxd,frag_count); in process_receive()
1338 smt_free_mbuf(smc,mb) ; in process_receive()
1345 smt_free_mbuf(smc,mb) ; in process_receive()
1347 mac_drv_requeue_rxd(smc,rxd,frag_count) ; in process_receive()
1349 smc->hw.fp.err_stats.err_mac_frame++ ; in process_receive()
1351 smc->hw.fp.err_stats.err_imp_frame++ ; in process_receive()
1364 mac_drv_requeue_rxd(smc,rxd,frag_count) ; in process_receive()
1371 mac_drv_all_receives_complete(smc) ; in process_receive()
1376 static void smt_to_llc(struct s_smc *smc, SMbuf *mb) in smt_to_llc() argument
1381 smc->os.hwm.r.len = mb->sm_len ; in smt_to_llc()
1382 smc->os.hwm.r.mb_pos = smtod(mb,char *) ; in smt_to_llc()
1383 fc = *smc->os.hwm.r.mb_pos ; in smt_to_llc()
1384 (void)mac_drv_rx_init(smc,(int)mb->sm_len,(int)fc, in smt_to_llc()
1385 smc->os.hwm.r.mb_pos,(int)mb->sm_len) ; in smt_to_llc()
1386 smt_free_mbuf(smc,mb) ; in smt_to_llc()
1391 * void hwm_rx_frag(smc,virt,phys,len,frame_status)
1411 void hwm_rx_frag(struct s_smc *smc, char far *virt, u_long phys, int len, in hwm_rx_frag() argument
1419 r = smc->hw.fp.rx_q[QUEUE_R1].rx_curr_put ; in hwm_rx_frag()
1430 smc->hw.fp.rx_q[QUEUE_R1].rx_free-- ; in hwm_rx_frag()
1431 smc->hw.fp.rx_q[QUEUE_R1].rx_used++ ; in hwm_rx_frag()
1432 smc->hw.fp.rx_q[QUEUE_R1].rx_curr_put = r->rxd_next ; in hwm_rx_frag()
1439 * void mac_drv_clear_rx_queue(smc)
1440 * struct s_smc *smc ;
1459 void mac_drv_clear_rx_queue(struct s_smc *smc) in mac_drv_clear_rx_queue() argument
1467 if (smc->hw.hw_state != STOPPED) { in mac_drv_clear_rx_queue()
1469 SMT_PANIC(smc,HWM_E0012,HWM_E0012_MSG) ; in mac_drv_clear_rx_queue()
1473 queue = smc->hw.fp.rx[QUEUE_R1] ; in mac_drv_clear_rx_queue()
1502 dma_complete(smc,(union s_fp_descr volatile *)r,DMA_WR); in mac_drv_clear_rx_queue()
1507 mac_drv_clear_rxd(smc,queue->rx_curr_get,frag_count) ; in mac_drv_clear_rx_queue()
1524 * int hwm_tx_init(smc,fc,frag_count,frame_len,frame_status)
1546 int hwm_tx_init(struct s_smc *smc, u_char fc, int frag_count, int frame_len, in hwm_tx_init() argument
1550 smc->os.hwm.tx_p = smc->hw.fp.tx[frame_status & QUEUE_A0] ; in hwm_tx_init()
1551 smc->os.hwm.tx_descr = TX_DESCRIPTOR | (((u_long)(frame_len-1)&3)<<27) ; in hwm_tx_init()
1552 smc->os.hwm.tx_len = frame_len ; in hwm_tx_init()
1570 SMT_PANIC(smc,HWM_E0010,HWM_E0010_MSG) ; in hwm_tx_init()
1573 if (!smc->hw.mac_ring_is_up) { in hwm_tx_init()
1578 if (frag_count > smc->os.hwm.tx_p->tx_free) { in hwm_tx_init()
1580 mac_drv_clear_txd(smc) ; in hwm_tx_init()
1581 if (frag_count > smc->os.hwm.tx_p->tx_free) { in hwm_tx_init()
1593 NDD_TRACE("THiE",frame_status,smc->os.hwm.tx_p->tx_free,0) ; in hwm_tx_init()
1599 * void hwm_tx_frag(smc,virt,phys,len,frame_status)
1624 void hwm_tx_frag(struct s_smc *smc, char far *virt, u_long phys, int len, in hwm_tx_frag() argument
1631 queue = smc->os.hwm.tx_p ; in hwm_tx_frag()
1646 t->txd_txdscr = cpu_to_le32(smc->os.hwm.tx_descr) ; in hwm_tx_frag()
1669 smc->mib.m[MAC0].fddiMACTransmit_Ct++ ; in hwm_tx_frag()
1675 if(!(smc->os.hwm.tx_mb = smt_get_mbuf(smc))) { in hwm_tx_frag()
1676 smc->hw.fp.err_stats.err_no_buf++ ; in hwm_tx_frag()
1680 smc->os.hwm.tx_data = in hwm_tx_frag()
1681 smtod(smc->os.hwm.tx_mb,char *) - 1 ; in hwm_tx_frag()
1684 hwm_cpy_txd2mb(t,smc->os.hwm.tx_data, in hwm_tx_frag()
1685 smc->os.hwm.tx_len) ; in hwm_tx_frag()
1690 if (smc->os.hwm.tx_mb) { in hwm_tx_frag()
1693 memcpy(smc->os.hwm.tx_data,virt,len) ; in hwm_tx_frag()
1694 smc->os.hwm.tx_data += len ; in hwm_tx_frag()
1706 hwm_cpy_txd2mb(t,smc->os.hwm.tx_data, in hwm_tx_frag()
1707 smc->os.hwm.tx_len) ; in hwm_tx_frag()
1710 smc->os.hwm.tx_data = in hwm_tx_frag()
1711 smtod(smc->os.hwm.tx_mb,char *) - 1 ; in hwm_tx_frag()
1712 *(char *)smc->os.hwm.tx_mb->sm_data = in hwm_tx_frag()
1713 *smc->os.hwm.tx_data ; in hwm_tx_frag()
1714 smc->os.hwm.tx_data++ ; in hwm_tx_frag()
1715 smc->os.hwm.tx_mb->sm_len = in hwm_tx_frag()
1716 smc->os.hwm.tx_len - 1 ; in hwm_tx_frag()
1718 smt_received_pack(smc,smc->os.hwm.tx_mb, in hwm_tx_frag()
1730 static void queue_llc_rx(struct s_smc *smc, SMbuf *mb) in queue_llc_rx() argument
1733 smc->os.hwm.queued_rx_frames++ ; in queue_llc_rx()
1735 if (smc->os.hwm.llc_rx_pipe == NULL) { in queue_llc_rx()
1736 smc->os.hwm.llc_rx_pipe = mb ; in queue_llc_rx()
1739 smc->os.hwm.llc_rx_tail->sm_next = mb ; in queue_llc_rx()
1741 smc->os.hwm.llc_rx_tail = mb ; in queue_llc_rx()
1746 if (!smc->os.hwm.isr_flag) { in queue_llc_rx()
1747 smt_force_irq(smc) ; in queue_llc_rx()
1754 static SMbuf *get_llc_rx(struct s_smc *smc) in get_llc_rx() argument
1758 if ((mb = smc->os.hwm.llc_rx_pipe)) { in get_llc_rx()
1759 smc->os.hwm.queued_rx_frames-- ; in get_llc_rx()
1760 smc->os.hwm.llc_rx_pipe = mb->sm_next ; in get_llc_rx()
1770 static void queue_txd_mb(struct s_smc *smc, SMbuf *mb) in queue_txd_mb() argument
1773 smc->os.hwm.queued_txd_mb++ ; in queue_txd_mb()
1775 if (smc->os.hwm.txd_tx_pipe == NULL) { in queue_txd_mb()
1776 smc->os.hwm.txd_tx_pipe = mb ; in queue_txd_mb()
1779 smc->os.hwm.txd_tx_tail->sm_next = mb ; in queue_txd_mb()
1781 smc->os.hwm.txd_tx_tail = mb ; in queue_txd_mb()
1787 static SMbuf *get_txd_mb(struct s_smc *smc) in get_txd_mb() argument
1791 if ((mb = smc->os.hwm.txd_tx_pipe)) { in get_txd_mb()
1792 smc->os.hwm.queued_txd_mb-- ; in get_txd_mb()
1793 smc->os.hwm.txd_tx_pipe = mb->sm_next ; in get_txd_mb()
1802 void smt_send_mbuf(struct s_smc *smc, SMbuf *mb, int fc) in smt_send_mbuf() argument
1848 queue = smc->hw.fp.tx[QUEUE_A0] ; in smt_send_mbuf()
1854 if ((smc->os.hwm.pass_NSA &&(fc == FC_SMT_NSA)) || in smt_send_mbuf()
1855 (smc->os.hwm.pass_SMT &&(fc == FC_SMT_INFO))) in smt_send_mbuf()
1859 if (!smc->hw.mac_ring_is_up || frag_count > queue->tx_free) { in smt_send_mbuf()
1866 smt_free_mbuf(smc,mb) ; in smt_send_mbuf()
1887 phys = dma_master(smc, (void far *)virt[i], in smt_send_mbuf()
1906 smc->mib.m[MAC0].fddiMACTransmit_Ct++ ; in smt_send_mbuf()
1907 queue_txd_mb(smc,mb) ; in smt_send_mbuf()
1912 queue_llc_rx(smc,mb) ; in smt_send_mbuf()
1919 mac_drv_clear_txd(smc) ; in smt_send_mbuf()
1924 * void mac_drv_clear_txd(smc)
1937 static void mac_drv_clear_txd(struct s_smc *smc) in mac_drv_clear_txd() argument
1950 queue = smc->hw.fp.tx[i] ; in mac_drv_clear_txd()
1973 dma_complete(smc, in mac_drv_clear_txd()
1982 mb = get_txd_mb(smc) ; in mac_drv_clear_txd()
1983 smt_free_mbuf(smc,mb) ; in mac_drv_clear_txd()
1988 mac_drv_tx_complete(smc,t2) ; in mac_drv_clear_txd()
1992 mac_drv_tx_complete(smc,queue->tx_curr_get) ; in mac_drv_clear_txd()
2007 * void mac_drv_clear_tx_queue(smc)
2008 * struct s_smc *smc ;
2027 void mac_drv_clear_tx_queue(struct s_smc *smc) in mac_drv_clear_tx_queue() argument
2034 if (smc->hw.hw_state != STOPPED) { in mac_drv_clear_tx_queue()
2036 SMT_PANIC(smc,HWM_E0011,HWM_E0011_MSG) ; in mac_drv_clear_tx_queue()
2041 queue = smc->hw.fp.tx[i] ; in mac_drv_clear_tx_queue()
2062 mac_drv_clear_txd(smc) ; in mac_drv_clear_tx_queue()
2065 queue = smc->hw.fp.tx[i] ; in mac_drv_clear_tx_queue()
2095 * void mac_drv_debug_lev(smc,flag,lev)
2119 void mac_drv_debug_lev(struct s_smc *smc, int flag, int lev) in mac_drv_debug_lev() argument