Lines Matching refs:cs
48 static inline unsigned int serial_in(struct IsdnCardState *cs, int offset) in serial_in() argument
51 u_int val = inb(cs->hw.elsa.base + 8 + offset); in serial_in()
52 debugl1(cs, "in %s %02x", ModemIn[offset], val); in serial_in()
55 return inb(cs->hw.elsa.base + 8 + offset); in serial_in()
59 static inline unsigned int serial_inp(struct IsdnCardState *cs, int offset) in serial_inp() argument
63 u_int val = inb(cs->hw.elsa.base + 8 + offset); in serial_inp()
64 debugl1(cs, "inp %s %02x", ModemIn[offset], val); in serial_inp()
66 u_int val = inb_p(cs->hw.elsa.base + 8 + offset); in serial_inp()
67 debugl1(cs, "inP %s %02x", ModemIn[offset], val); in serial_inp()
72 return inb(cs->hw.elsa.base + 8 + offset); in serial_inp()
74 return inb_p(cs->hw.elsa.base + 8 + offset); in serial_inp()
79 static inline void serial_out(struct IsdnCardState *cs, int offset, int value) in serial_out() argument
82 debugl1(cs, "out %s %02x", ModemOut[offset], value); in serial_out()
84 outb(value, cs->hw.elsa.base + 8 + offset); in serial_out()
87 static inline void serial_outp(struct IsdnCardState *cs, int offset, in serial_outp() argument
92 debugl1(cs, "outp %s %02x", ModemOut[offset], value); in serial_outp()
94 debugl1(cs, "outP %s %02x", ModemOut[offset], value); in serial_outp()
98 outb(value, cs->hw.elsa.base + 8 + offset); in serial_outp()
100 outb_p(value, cs->hw.elsa.base + 8 + offset); in serial_outp()
108 static void change_speed(struct IsdnCardState *cs, int baud) in change_speed() argument
128 serial_outp(cs, UART_FCR, fcr); in change_speed()
130 cs->hw.elsa.IER &= ~UART_IER_MSI; in change_speed()
131 cs->hw.elsa.IER |= UART_IER_MSI; in change_speed()
132 serial_outp(cs, UART_IER, cs->hw.elsa.IER); in change_speed()
134 debugl1(cs, "modem quot=0x%x", quot); in change_speed()
135 serial_outp(cs, UART_LCR, cval | UART_LCR_DLAB);/* set DLAB */ in change_speed()
136 serial_outp(cs, UART_DLL, quot & 0xff); /* LS of divisor */ in change_speed()
137 serial_outp(cs, UART_DLM, quot >> 8); /* MS of divisor */ in change_speed()
138 serial_outp(cs, UART_LCR, cval); /* reset DLAB */ in change_speed()
139 serial_inp(cs, UART_RX); in change_speed()
142 static int mstartup(struct IsdnCardState *cs) in mstartup() argument
150 serial_outp(cs, UART_FCR, (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT)); in mstartup()
157 if (serial_inp(cs, UART_LSR) == 0xff) { in mstartup()
165 (void) serial_inp(cs, UART_RX); in mstartup()
166 (void) serial_inp(cs, UART_IIR); in mstartup()
167 (void) serial_inp(cs, UART_MSR); in mstartup()
172 serial_outp(cs, UART_LCR, UART_LCR_WLEN8); /* reset DLAB */ in mstartup()
174 cs->hw.elsa.MCR = 0; in mstartup()
175 cs->hw.elsa.MCR = UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2; in mstartup()
176 serial_outp(cs, UART_MCR, cs->hw.elsa.MCR); in mstartup()
181 cs->hw.elsa.IER = UART_IER_MSI | UART_IER_RLSI | UART_IER_RDI; in mstartup()
182 serial_outp(cs, UART_IER, cs->hw.elsa.IER); /* enable interrupts */ in mstartup()
187 (void)serial_inp(cs, UART_LSR); in mstartup()
188 (void)serial_inp(cs, UART_RX); in mstartup()
189 (void)serial_inp(cs, UART_IIR); in mstartup()
190 (void)serial_inp(cs, UART_MSR); in mstartup()
192 cs->hw.elsa.transcnt = cs->hw.elsa.transp = 0; in mstartup()
193 cs->hw.elsa.rcvcnt = cs->hw.elsa.rcvp = 0; in mstartup()
198 change_speed(cs, BASE_BAUD); in mstartup()
199 cs->hw.elsa.MFlag = 1; in mstartup()
208 static void mshutdown(struct IsdnCardState *cs) in mshutdown() argument
220 cs->hw.elsa.IER = 0; in mshutdown()
221 serial_outp(cs, UART_IER, 0x00); /* disable all intrs */ in mshutdown()
222 cs->hw.elsa.MCR &= ~UART_MCR_OUT2; in mshutdown()
225 serial_outp(cs, UART_LCR, serial_inp(cs, UART_LCR) & ~UART_LCR_SBC); in mshutdown()
227 cs->hw.elsa.MCR &= ~(UART_MCR_DTR | UART_MCR_RTS); in mshutdown()
228 serial_outp(cs, UART_MCR, cs->hw.elsa.MCR); in mshutdown()
231 serial_outp(cs, UART_FCR, (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT)); in mshutdown()
232 serial_inp(cs, UART_RX); /* read data port to reset things */ in mshutdown()
242 struct IsdnCardState *cs = bcs->cs; in write_modem() local
250 if (len > MAX_MODEM_BUF - cs->hw.elsa.transcnt) in write_modem()
251 len = MAX_MODEM_BUF - cs->hw.elsa.transcnt; in write_modem()
252 fp = cs->hw.elsa.transcnt + cs->hw.elsa.transp; in write_modem()
258 cs->hw.elsa.transbuf + fp, count); in write_modem()
260 cs->hw.elsa.transcnt += count; in write_modem()
266 cs->hw.elsa.transbuf + fp, count); in write_modem()
268 cs->hw.elsa.transcnt += count; in write_modem()
271 if (cs->hw.elsa.transcnt && in write_modem()
272 !(cs->hw.elsa.IER & UART_IER_THRI)) { in write_modem()
273 cs->hw.elsa.IER |= UART_IER_THRI; in write_modem()
274 serial_outp(cs, UART_IER, cs->hw.elsa.IER); in write_modem()
309 static inline void receive_chars(struct IsdnCardState *cs, in receive_chars() argument
316 ch = serial_in(cs, UART_RX); in receive_chars()
317 if (cs->hw.elsa.rcvcnt >= MAX_MODEM_BUF) in receive_chars()
319 cs->hw.elsa.rcvbuf[cs->hw.elsa.rcvcnt++] = ch; in receive_chars()
330 *status = serial_inp(cs, UART_LSR); in receive_chars()
332 if (cs->hw.elsa.MFlag == 2) { in receive_chars()
333 if (!(skb = dev_alloc_skb(cs->hw.elsa.rcvcnt))) in receive_chars()
336 memcpy(skb_put(skb, cs->hw.elsa.rcvcnt), cs->hw.elsa.rcvbuf, in receive_chars()
337 cs->hw.elsa.rcvcnt); in receive_chars()
338 skb_queue_tail(&cs->hw.elsa.bcs->rqueue, skb); in receive_chars()
340 schedule_event(cs->hw.elsa.bcs, B_RCVBUFREADY); in receive_chars()
345 t += sprintf(t, "modem read cnt %d", cs->hw.elsa.rcvcnt); in receive_chars()
346 QuickHex(t, cs->hw.elsa.rcvbuf, cs->hw.elsa.rcvcnt); in receive_chars()
347 debugl1(cs, tmp); in receive_chars()
349 cs->hw.elsa.rcvcnt = 0; in receive_chars()
352 static inline void transmit_chars(struct IsdnCardState *cs, int *intr_done) in transmit_chars() argument
356 debugl1(cs, "transmit_chars: p(%x) cnt(%x)", cs->hw.elsa.transp, in transmit_chars()
357 cs->hw.elsa.transcnt); in transmit_chars()
359 if (cs->hw.elsa.transcnt <= 0) { in transmit_chars()
360 cs->hw.elsa.IER &= ~UART_IER_THRI; in transmit_chars()
361 serial_out(cs, UART_IER, cs->hw.elsa.IER); in transmit_chars()
366 serial_outp(cs, UART_TX, cs->hw.elsa.transbuf[cs->hw.elsa.transp++]); in transmit_chars()
367 if (cs->hw.elsa.transp >= MAX_MODEM_BUF) in transmit_chars()
368 cs->hw.elsa.transp = 0; in transmit_chars()
369 if (--cs->hw.elsa.transcnt <= 0) in transmit_chars()
372 if ((cs->hw.elsa.transcnt < WAKEUP_CHARS) && (cs->hw.elsa.MFlag == 2)) in transmit_chars()
373 modem_fill(cs->hw.elsa.bcs); in transmit_chars()
380 if (cs->hw.elsa.transcnt <= 0) { in transmit_chars()
381 cs->hw.elsa.IER &= ~UART_IER_THRI; in transmit_chars()
382 serial_outp(cs, UART_IER, cs->hw.elsa.IER); in transmit_chars()
387 static void rs_interrupt_elsa(struct IsdnCardState *cs) in rs_interrupt_elsa() argument
393 printk(KERN_DEBUG "rs_interrupt_single(%d)...", cs->irq); in rs_interrupt_elsa()
397 status = serial_inp(cs, UART_LSR); in rs_interrupt_elsa()
398 debugl1(cs, "rs LSR %02x", status); in rs_interrupt_elsa()
403 receive_chars(cs, &status); in rs_interrupt_elsa()
405 transmit_chars(cs, NULL); in rs_interrupt_elsa()
410 iir = serial_inp(cs, UART_IIR); in rs_interrupt_elsa()
411 debugl1(cs, "rs IIR %02x", iir); in rs_interrupt_elsa()
413 msr = serial_inp(cs, UART_MSR); in rs_interrupt_elsa()
414 debugl1(cs, "rs MSR %02x", msr); in rs_interrupt_elsa()
422 extern int open_hscxstate(struct IsdnCardState *cs, struct BCState *bcs);
447 modem_write_cmd(struct IsdnCardState *cs, u_char *buf, int len) { in modem_write_cmd() argument
453 if (len > (MAX_MODEM_BUF - cs->hw.elsa.transcnt)) { in modem_write_cmd()
456 fp = cs->hw.elsa.transcnt + cs->hw.elsa.transp; in modem_write_cmd()
461 memcpy(cs->hw.elsa.transbuf + fp, msg, count); in modem_write_cmd()
462 cs->hw.elsa.transcnt += count; in modem_write_cmd()
467 memcpy(cs->hw.elsa.transbuf + fp, msg, count); in modem_write_cmd()
468 cs->hw.elsa.transcnt += count; in modem_write_cmd()
469 if (cs->hw.elsa.transcnt && in modem_write_cmd()
470 !(cs->hw.elsa.IER & UART_IER_THRI)) { in modem_write_cmd()
471 cs->hw.elsa.IER |= UART_IER_THRI; in modem_write_cmd()
472 serial_outp(cs, UART_IER, cs->hw.elsa.IER); in modem_write_cmd()
477 modem_set_init(struct IsdnCardState *cs) { in modem_set_init() argument
481 modem_write_cmd(cs, MInit_1, strlen(MInit_1)); in modem_set_init()
483 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
485 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
487 modem_write_cmd(cs, MInit_2, strlen(MInit_2)); in modem_set_init()
489 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
491 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
493 modem_write_cmd(cs, MInit_3, strlen(MInit_3)); in modem_set_init()
495 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
497 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
499 modem_write_cmd(cs, MInit_4, strlen(MInit_4)); in modem_set_init()
501 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
503 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
505 modem_write_cmd(cs, MInit_5, strlen(MInit_5)); in modem_set_init()
507 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
509 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
511 modem_write_cmd(cs, MInit_6, strlen(MInit_6)); in modem_set_init()
513 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
515 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
517 modem_write_cmd(cs, MInit_7, strlen(MInit_7)); in modem_set_init()
519 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_init()
521 debugl1(cs, "msi tout=%d", timeout); in modem_set_init()
526 modem_set_dial(struct IsdnCardState *cs, int outgoing) { in modem_set_dial() argument
530 modem_write_cmd(cs, MInit_speed28800, strlen(MInit_speed28800)); in modem_set_dial()
532 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_dial()
534 debugl1(cs, "msi tout=%d", timeout); in modem_set_dial()
537 modem_write_cmd(cs, MInit_dialout, strlen(MInit_dialout)); in modem_set_dial()
539 modem_write_cmd(cs, MInit_dialin, strlen(MInit_dialin)); in modem_set_dial()
541 while (timeout-- && cs->hw.elsa.transcnt) in modem_set_dial()
543 debugl1(cs, "msi tout=%d", timeout); in modem_set_dial()
555 spin_lock_irqsave(&bcs->cs->lock, flags); in modem_l2l1()
564 spin_unlock_irqrestore(&bcs->cs->lock, flags); in modem_l2l1()
568 set_arcofi(bcs->cs, st->l1.bc); in modem_l2l1()
569 mstartup(bcs->cs); in modem_l2l1()
570 modem_set_dial(bcs->cs, test_bit(FLG_ORIG, &st->l2.flag)); in modem_l2l1()
571 bcs->cs->hw.elsa.MFlag = 2; in modem_l2l1()
574 bcs->cs->dc.isac.arcofi_bc = st->l1.bc; in modem_l2l1()
575 arcofi_fsm(bcs->cs, ARCOFI_START, &ARCOFI_XOP_0); in modem_l2l1()
576 interruptible_sleep_on(&bcs->cs->dc.isac.arcofi_wait); in modem_l2l1()
577 bcs->cs->hw.elsa.MFlag = 1; in modem_l2l1()
598 bcs->hw.hscx.rcvbuf = bcs->cs->hw.elsa.rcvbuf; in setstack_elsa()
607 bcs->cs->hw.elsa.bcs = bcs; in setstack_elsa()
619 init_modem(struct IsdnCardState *cs) { in init_modem() argument
621 cs->bcs[0].BC_SetStack = setstack_elsa; in init_modem()
622 cs->bcs[1].BC_SetStack = setstack_elsa; in init_modem()
623 cs->bcs[0].BC_Close = close_elsastate; in init_modem()
624 cs->bcs[1].BC_Close = close_elsastate; in init_modem()
625 if (!(cs->hw.elsa.rcvbuf = kmalloc(MAX_MODEM_BUF, in init_modem()
631 if (!(cs->hw.elsa.transbuf = kmalloc(MAX_MODEM_BUF, in init_modem()
635 kfree(cs->hw.elsa.rcvbuf); in init_modem()
636 cs->hw.elsa.rcvbuf = NULL; in init_modem()
639 if (mstartup(cs)) { in init_modem()
642 modem_set_init(cs); in init_modem()
646 release_modem(struct IsdnCardState *cs) { in release_modem() argument
648 cs->hw.elsa.MFlag = 0; in release_modem()
649 if (cs->hw.elsa.transbuf) { in release_modem()
650 if (cs->hw.elsa.rcvbuf) { in release_modem()
651 mshutdown(cs); in release_modem()
652 kfree(cs->hw.elsa.rcvbuf); in release_modem()
653 cs->hw.elsa.rcvbuf = NULL; in release_modem()
655 kfree(cs->hw.elsa.transbuf); in release_modem()
656 cs->hw.elsa.transbuf = NULL; in release_modem()