Low Level Controller
/* was receiver active before or is */
/* the RPF/RME for a new incoming
/* frame ?
*/
*/
if (!(pt->pt_state & PT_REC_ACTIVE))
{
if (RecCnt > 0)
{
if (rpf)
pt->pt_rx_curr = pt->pt_rx_start = MMU_req (266);
else
pt->pt_rx_curr = pt->pt_rx_start = MMU_req (38);
if (pt->pt_rx_start == NULL_PTR)
{
MMU_ERROR (pei);
pt->pt_rx_frame = PT_FR_NO_MEMORY;
}
}
pt->pt_state |= PT_REC_ACTIVE;
pt->pt_rx_cnt = RecCnt;
}
else
/* if data has been already
/* received only the receive byte
/* counter must be updated
*/
*/
*/
pt->pt_rx_cnt += RecCnt;
/* automode and frame greater
/* 260 byte and automode link ?
*/
*/
if (pt->pt_op_mode == PT_MD_AUTO && pt->pt_rx_cnt > 260 &&
((inp (pt->pt_r_rsta) & 0x0D) == 9))
{
pt->pt_rx_frame = PT_FR_OVERFLOW;
/* ICC B4, ISAC-S B3
/* reset the receiver if incoming
/* frame exceeds 528 byte I field
/* length ->
/* unbounded frame
*/
*/
*/
*/
*/
if (rpf && pt->pt_rx_cnt > 528)
{
outp (pt->pt_r_cmdr, CMDR_RHR);
MMU_free (pt->pt_rx_start);
pt->pt_rx_start
pt->pt_state
pt->pt_rx_frame
pt->pt_rx_cnt
= NULL_PTR;
&= ~PT_REC_ACTIVE;
= 0x00;
= 0;
N201_ERROR (pei);
return;
}
Semiconductor Group
301