aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/rio/rioparam.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/rio/rioparam.c')
-rw-r--r--drivers/char/rio/rioparam.c108
1 files changed, 45 insertions, 63 deletions
diff --git a/drivers/char/rio/rioparam.c b/drivers/char/rio/rioparam.c
index c622f46d6d77..af25d2084f47 100644
--- a/drivers/char/rio/rioparam.c
+++ b/drivers/char/rio/rioparam.c
@@ -157,20 +157,16 @@ static char *_rioparam_c_sccs_ = "@(#)rioparam.c 1.3";
157** NB. for MPX 157** NB. for MPX
158** tty lock must NOT have been previously acquired. 158** tty lock must NOT have been previously acquired.
159*/ 159*/
160int RIOParam(PortP, cmd, Modem, SleepFlag) 160int RIOParam(struct Port *PortP, int cmd, int Modem, int SleepFlag)
161struct Port *PortP;
162int cmd;
163int Modem;
164int SleepFlag;
165{ 161{
166 register struct tty_struct *TtyP; 162 struct tty_struct *TtyP;
167 int retval; 163 int retval;
168 register struct phb_param *phb_param_ptr; 164 struct phb_param *phb_param_ptr;
169 PKT *PacketP; 165 PKT *PacketP;
170 int res; 166 int res;
171 uchar Cor1 = 0, Cor2 = 0, Cor4 = 0, Cor5 = 0; 167 u8 Cor1 = 0, Cor2 = 0, Cor4 = 0, Cor5 = 0;
172 uchar TxXon = 0, TxXoff = 0, RxXon = 0, RxXoff = 0; 168 u8 TxXon = 0, TxXoff = 0, RxXon = 0, RxXoff = 0;
173 uchar LNext = 0, TxBaud = 0, RxBaud = 0; 169 u8 LNext = 0, TxBaud = 0, RxBaud = 0;
174 int retries = 0xff; 170 int retries = 0xff;
175 unsigned long flags; 171 unsigned long flags;
176 172
@@ -226,15 +222,12 @@ int SleepFlag;
226 if (retval == RIO_FAIL) { 222 if (retval == RIO_FAIL) {
227 rio_dprintk(RIO_DEBUG_PARAM, "wait for can_add_transmit broken by signal\n"); 223 rio_dprintk(RIO_DEBUG_PARAM, "wait for can_add_transmit broken by signal\n");
228 rio_spin_unlock_irqrestore(&PortP->portSem, flags); 224 rio_spin_unlock_irqrestore(&PortP->portSem, flags);
229 pseterr(EINTR);
230 func_exit(); 225 func_exit();
231 226 return -EINTR;
232 return RIO_FAIL;
233 } 227 }
234 if (PortP->State & RIO_DELETED) { 228 if (PortP->State & RIO_DELETED) {
235 rio_spin_unlock_irqrestore(&PortP->portSem, flags); 229 rio_spin_unlock_irqrestore(&PortP->portSem, flags);
236 func_exit(); 230 func_exit();
237
238 return RIO_SUCCESS; 231 return RIO_SUCCESS;
239 } 232 }
240 } 233 }
@@ -247,7 +240,7 @@ int SleepFlag;
247 } 240 }
248 241
249 rio_dprintk(RIO_DEBUG_PARAM, "can_add_transmit() returns %x\n", res); 242 rio_dprintk(RIO_DEBUG_PARAM, "can_add_transmit() returns %x\n", res);
250 rio_dprintk(RIO_DEBUG_PARAM, "Packet is 0x%x\n", (int) PacketP); 243 rio_dprintk(RIO_DEBUG_PARAM, "Packet is 0x%p\n", PacketP);
251 244
252 phb_param_ptr = (struct phb_param *) PacketP->data; 245 phb_param_ptr = (struct phb_param *) PacketP->data;
253 246
@@ -474,9 +467,6 @@ int SleepFlag;
474 e(115200); /* e(230400);e(460800); e(921600); */ 467 e(115200); /* e(230400);e(460800); e(921600); */
475 } 468 }
476 469
477 /* XXX MIssing conversion table. XXX */
478 /* (TtyP->termios->c_cflag & V_CBAUD); */
479
480 rio_dprintk(RIO_DEBUG_PARAM, "tx baud 0x%x, rx baud 0x%x\n", TxBaud, RxBaud); 470 rio_dprintk(RIO_DEBUG_PARAM, "tx baud 0x%x, rx baud 0x%x\n", TxBaud, RxBaud);
481 471
482 472
@@ -552,23 +542,23 @@ int SleepFlag;
552 /* 542 /*
553 ** Actually write the info into the packet to be sent 543 ** Actually write the info into the packet to be sent
554 */ 544 */
555 WBYTE(phb_param_ptr->Cmd, cmd); 545 writeb(cmd, &phb_param_ptr->Cmd);
556 WBYTE(phb_param_ptr->Cor1, Cor1); 546 writeb(Cor1, &phb_param_ptr->Cor1);
557 WBYTE(phb_param_ptr->Cor2, Cor2); 547 writeb(Cor2, &phb_param_ptr->Cor2);
558 WBYTE(phb_param_ptr->Cor4, Cor4); 548 writeb(Cor4, &phb_param_ptr->Cor4);
559 WBYTE(phb_param_ptr->Cor5, Cor5); 549 writeb(Cor5, &phb_param_ptr->Cor5);
560 WBYTE(phb_param_ptr->TxXon, TxXon); 550 writeb(TxXon, &phb_param_ptr->TxXon);
561 WBYTE(phb_param_ptr->RxXon, RxXon); 551 writeb(RxXon, &phb_param_ptr->RxXon);
562 WBYTE(phb_param_ptr->TxXoff, TxXoff); 552 writeb(TxXoff, &phb_param_ptr->TxXoff);
563 WBYTE(phb_param_ptr->RxXoff, RxXoff); 553 writeb(RxXoff, &phb_param_ptr->RxXoff);
564 WBYTE(phb_param_ptr->LNext, LNext); 554 writeb(LNext, &phb_param_ptr->LNext);
565 WBYTE(phb_param_ptr->TxBaud, TxBaud); 555 writeb(TxBaud, &phb_param_ptr->TxBaud);
566 WBYTE(phb_param_ptr->RxBaud, RxBaud); 556 writeb(RxBaud, &phb_param_ptr->RxBaud);
567 557
568 /* 558 /*
569 ** Set the length/command field 559 ** Set the length/command field
570 */ 560 */
571 WBYTE(PacketP->len, 12 | PKT_CMD_BIT); 561 writeb(12 | PKT_CMD_BIT, &PacketP->len);
572 562
573 /* 563 /*
574 ** The packet is formed - now, whack it off 564 ** The packet is formed - now, whack it off
@@ -597,15 +587,13 @@ int SleepFlag;
597** We can add another packet to a transmit queue if the packet pointer pointed 587** We can add another packet to a transmit queue if the packet pointer pointed
598** to by the TxAdd pointer has PKT_IN_USE clear in its address. 588** to by the TxAdd pointer has PKT_IN_USE clear in its address.
599*/ 589*/
600int can_add_transmit(PktP, PortP) 590int can_add_transmit(PKT **PktP, struct Port *PortP)
601PKT **PktP;
602struct Port *PortP;
603{ 591{
604 register PKT *tp; 592 PKT *tp;
605 593
606 *PktP = tp = (PKT *) RIO_PTR(PortP->Caddr, RWORD(*PortP->TxAdd)); 594 *PktP = tp = (PKT *) RIO_PTR(PortP->Caddr, readw(PortP->TxAdd));
607 595
608 return !((uint) tp & PKT_IN_USE); 596 return !((unsigned long) tp & PKT_IN_USE);
609} 597}
610 598
611/* 599/*
@@ -613,24 +601,21 @@ struct Port *PortP;
613** and then move the TxAdd pointer along one position to point to the next 601** and then move the TxAdd pointer along one position to point to the next
614** packet pointer. You must wrap the pointer from the end back to the start. 602** packet pointer. You must wrap the pointer from the end back to the start.
615*/ 603*/
616void add_transmit(PortP) 604void add_transmit(struct Port *PortP)
617struct Port *PortP;
618{ 605{
619 if (RWORD(*PortP->TxAdd) & PKT_IN_USE) { 606 if (readw(PortP->TxAdd) & PKT_IN_USE) {
620 rio_dprintk(RIO_DEBUG_PARAM, "add_transmit: Packet has been stolen!"); 607 rio_dprintk(RIO_DEBUG_PARAM, "add_transmit: Packet has been stolen!");
621 } 608 }
622 WWORD(*(ushort *) PortP->TxAdd, RWORD(*PortP->TxAdd) | PKT_IN_USE); 609 writew(readw(PortP->TxAdd) | PKT_IN_USE, PortP->TxAdd);
623 PortP->TxAdd = (PortP->TxAdd == PortP->TxEnd) ? PortP->TxStart : PortP->TxAdd + 1; 610 PortP->TxAdd = (PortP->TxAdd == PortP->TxEnd) ? PortP->TxStart : PortP->TxAdd + 1;
624 WWORD(PortP->PhbP->tx_add, RIO_OFF(PortP->Caddr, PortP->TxAdd)); 611 writew(RIO_OFF(PortP->Caddr, PortP->TxAdd), &PortP->PhbP->tx_add);
625} 612}
626 613
627/**************************************** 614/****************************************
628 * Put a packet onto the end of the 615 * Put a packet onto the end of the
629 * free list 616 * free list
630 ****************************************/ 617 ****************************************/
631void put_free_end(HostP, PktP) 618void put_free_end(struct Host *HostP, PKT *PktP)
632struct Host *HostP;
633PKT *PktP;
634{ 619{
635 FREE_LIST *tmp_pointer; 620 FREE_LIST *tmp_pointer;
636 ushort old_end, new_end; 621 ushort old_end, new_end;
@@ -643,21 +628,21 @@ PKT *PktP;
643 * 628 *
644 ************************************************/ 629 ************************************************/
645 630
646 rio_dprintk(RIO_DEBUG_PFE, "put_free_end(PktP=%x)\n", (int) PktP); 631 rio_dprintk(RIO_DEBUG_PFE, "put_free_end(PktP=%p)\n", PktP);
647 632
648 if ((old_end = RWORD(HostP->ParmMapP->free_list_end)) != TPNULL) { 633 if ((old_end = readw(&HostP->ParmMapP->free_list_end)) != TPNULL) {
649 new_end = RIO_OFF(HostP->Caddr, PktP); 634 new_end = RIO_OFF(HostP->Caddr, PktP);
650 tmp_pointer = (FREE_LIST *) RIO_PTR(HostP->Caddr, old_end); 635 tmp_pointer = (FREE_LIST *) RIO_PTR(HostP->Caddr, old_end);
651 WWORD(tmp_pointer->next, new_end); 636 writew(new_end, &tmp_pointer->next);
652 WWORD(((FREE_LIST *) PktP)->prev, old_end); 637 writew(old_end, &((FREE_LIST *) PktP)->prev);
653 WWORD(((FREE_LIST *) PktP)->next, TPNULL); 638 writew(TPNULL, &((FREE_LIST *) PktP)->next);
654 WWORD(HostP->ParmMapP->free_list_end, new_end); 639 writew(new_end, &HostP->ParmMapP->free_list_end);
655 } else { /* First packet on the free list this should never happen! */ 640 } else { /* First packet on the free list this should never happen! */
656 rio_dprintk(RIO_DEBUG_PFE, "put_free_end(): This should never happen\n"); 641 rio_dprintk(RIO_DEBUG_PFE, "put_free_end(): This should never happen\n");
657 WWORD(HostP->ParmMapP->free_list_end, RIO_OFF(HostP->Caddr, PktP)); 642 writew(RIO_OFF(HostP->Caddr, PktP), &HostP->ParmMapP->free_list_end);
658 tmp_pointer = (FREE_LIST *) PktP; 643 tmp_pointer = (FREE_LIST *) PktP;
659 WWORD(tmp_pointer->prev, TPNULL); 644 writew(TPNULL, &tmp_pointer->prev);
660 WWORD(tmp_pointer->next, TPNULL); 645 writew(TPNULL, &tmp_pointer->next);
661 } 646 }
662 rio_dprintk(RIO_DEBUG_CMD, "Before unlock: %p\n", &HostP->HostLock); 647 rio_dprintk(RIO_DEBUG_CMD, "Before unlock: %p\n", &HostP->HostLock);
663 rio_spin_unlock_irqrestore(&HostP->HostLock, flags); 648 rio_spin_unlock_irqrestore(&HostP->HostLock, flags);
@@ -669,12 +654,10 @@ PKT *PktP;
669** relevant packet, [having cleared the PKT_IN_USE bit]. If PKT_IN_USE is clear, 654** relevant packet, [having cleared the PKT_IN_USE bit]. If PKT_IN_USE is clear,
670** then can_remove_receive() returns 0. 655** then can_remove_receive() returns 0.
671*/ 656*/
672int can_remove_receive(PktP, PortP) 657int can_remove_receive(PKT **PktP, struct Port *PortP)
673PKT **PktP;
674struct Port *PortP;
675{ 658{
676 if (RWORD(*PortP->RxRemove) & PKT_IN_USE) { 659 if (readw(PortP->RxRemove) & PKT_IN_USE) {
677 *PktP = (PKT *) RIO_PTR(PortP->Caddr, RWORD(*PortP->RxRemove) & ~PKT_IN_USE); 660 *PktP = (PKT *) RIO_PTR(PortP->Caddr, readw(PortP->RxRemove) & ~PKT_IN_USE);
678 return 1; 661 return 1;
679 } 662 }
680 return 0; 663 return 0;
@@ -685,10 +668,9 @@ struct Port *PortP;
685** and then bump the pointers. Once the pointers get to the end, they must 668** and then bump the pointers. Once the pointers get to the end, they must
686** be wrapped back to the start. 669** be wrapped back to the start.
687*/ 670*/
688void remove_receive(PortP) 671void remove_receive(struct Port *PortP)
689struct Port *PortP;
690{ 672{
691 WWORD(*PortP->RxRemove, RWORD(*PortP->RxRemove) & ~PKT_IN_USE); 673 writew(readw(PortP->RxRemove) & ~PKT_IN_USE, PortP->RxRemove);
692 PortP->RxRemove = (PortP->RxRemove == PortP->RxEnd) ? PortP->RxStart : PortP->RxRemove + 1; 674 PortP->RxRemove = (PortP->RxRemove == PortP->RxEnd) ? PortP->RxStart : PortP->RxRemove + 1;
693 WWORD(PortP->PhbP->rx_remove, RIO_OFF(PortP->Caddr, PortP->RxRemove)); 675 writew(RIO_OFF(PortP->Caddr, PortP->RxRemove), &PortP->PhbP->rx_remove);
694} 676}