• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asus-wl-520gu-7.0.1.45/src/linux/linux/drivers/net/hamradio/soundmodem/

Lines Matching refs:sm

33 #include "sm.h"
55 static inline unsigned int dma_setup(struct sm_state *sm, int send, unsigned int dmanr)
61 set_dma_addr(dmanr, virt_to_bus(sm->dma.obuf));
62 set_dma_count(dmanr, sm->dma.ofragsz * NUM_FRAGMENTS);
64 if (sm->dma.o16bit)
65 return sm->dma.ofragsz/2;
66 return sm->dma.ofragsz;
71 set_dma_addr(dmanr, virt_to_bus(sm->dma.ibuf));
72 set_dma_count(dmanr, sm->dma.ifragsz * NUM_FRAGMENTS);
74 if (sm->dma.i16bit)
75 return sm->dma.ifragsz/2;
76 return sm->dma.ifragsz;
82 static inline unsigned int dma_ptr(struct sm_state *sm, int send, unsigned int dmanr,
89 sz = sm->dma.ofragsz * NUM_FRAGMENTS;
93 frg = dmaptr / sm->dma.ofragsz;
94 offs = (dmaptr % sm->dma.ofragsz) + 1;
97 if (!sm->debug_vals.dma_residue || offs < sm->debug_vals.dma_residue)
98 sm->debug_vals.dma_residue = offs;
100 if (sm->dma.o16bit)
104 sz = sm->dma.ifragsz * NUM_FRAGMENTS;
108 frg = dmaptr / sm->dma.ifragsz;
109 offs = (dmaptr % sm->dma.ifragsz) + 1;
112 if (!sm->debug_vals.dma_residue || offs < sm->debug_vals.dma_residue)
113 sm->debug_vals.dma_residue = offs;
115 if (sm->dma.i16bit)
123 static inline int dma_end_transmit(struct sm_state *sm, unsigned int curfrag)
125 unsigned int diff = (NUM_FRAGMENTS + curfrag - sm->dma.ofragptr) % NUM_FRAGMENTS;
127 sm->dma.ofragptr = curfrag;
128 if (sm->dma.ptt_cnt <= 0) {
129 sm->dma.ptt_cnt = 0;
132 sm->dma.ptt_cnt -= diff;
133 if (sm->dma.ptt_cnt <= 0) {
134 sm->dma.ptt_cnt = 0;
140 static inline void dma_transmit(struct sm_state *sm)
144 while (sm->dma.ptt_cnt < NUM_FRAGMENTS && hdlcdrv_ptt(&sm->hdrv)) {
145 p = (unsigned char *)sm->dma.obuf + sm->dma.ofragsz *
146 ((sm->dma.ofragptr + sm->dma.ptt_cnt) % NUM_FRAGMENTS);
147 if (sm->dma.o16bit) {
148 time_exec(sm->debug_vals.mod_cyc,
149 sm->mode_tx->modulator_s16(sm, p, sm->dma.ofragsz/2));
151 time_exec(sm->debug_vals.mod_cyc,
152 sm->mode_tx->modulator_u8(sm, p, sm->dma.ofragsz));
154 sm->dma.ptt_cnt++;
158 static inline void dma_init_transmit(struct sm_state *sm)
160 sm->dma.ofragptr = 0;
161 sm->dma.ptt_cnt = 0;
164 static inline void dma_start_transmit(struct sm_state *sm)
166 sm->dma.ofragptr = 0;
167 if (sm->dma.o16bit) {
168 time_exec(sm->debug_vals.mod_cyc,
169 sm->mode_tx->modulator_s16(sm, sm->dma.obuf, sm->dma.ofragsz/2));
171 time_exec(sm->debug_vals.mod_cyc,
172 sm->mode_tx->modulator_u8(sm, sm->dma.obuf, sm->dma.ofragsz));
174 sm->dma.ptt_cnt = 1;
177 static inline void dma_clear_transmit(struct sm_state *sm)
179 sm->dma.ptt_cnt = 0;
180 memset(sm->dma.obuf, (sm->dma.o16bit) ? 0 : 0x80, sm->dma.ofragsz * NUM_FRAGMENTS);
185 static inline void dma_receive(struct sm_state *sm, unsigned int curfrag)
189 while (sm->dma.ifragptr != curfrag) {
190 if (sm->dma.ifragptr)
191 p = (unsigned char *)sm->dma.ibuf +
192 sm->dma.ifragsz * sm->dma.ifragptr;
194 p = (unsigned char *)sm->dma.ibuf + NUM_FRAGMENTS * sm->dma.ifragsz;
195 memcpy(p, sm->dma.ibuf, sm->dma.ifragsz);
197 if (sm->dma.o16bit) {
198 time_exec(sm->debug_vals.demod_cyc,
199 sm->mode_rx->demodulator_s16(sm, p, sm->dma.ifragsz/2));
201 time_exec(sm->debug_vals.demod_cyc,
202 sm->mode_rx->demodulator_u8(sm, p, sm->dma.ifragsz));
204 sm->dma.ifragptr = (sm->dma.ifragptr + 1) % NUM_FRAGMENTS;
208 static inline void dma_init_receive(struct sm_state *sm)
210 sm->dma.ifragptr = 0;