    unsigned short word;	/* temporary for better machine code */
    void __iomem *base = ei_status.mem;

    if (ei_status.word16)      /* Tx packets go into bank 0 on EL2/16 card */
	outb(EGACFR_RSEL|EGACFR_TCM, E33G_GACFR);
    else
	outb(EGACFR_NORM, E33G_GACFR);

    if (base) {	/* Shared memory transfer */
	memcpy_toio(base + ((start_page - ei_status.tx_start_page) << 8),
			buf, count);
	outb(EGACFR_NORM, E33G_GACFR);	/* Back to bank1 in case on bank0 */
	return;
    }

/*
 *  No shared memory, put the packet out the other way.
 *  Set up then start the internal memory transfer to Tx Start Page
 */

    word = (unsigned short)start_page;
    outb(word&0xFF, E33G_DMAAH);
    outb(word>>8, E33G_DMAAL);

    outb_p((ei_status.interface_num? ECNTRL_AUI : ECNTRL_THIN ) | ECNTRL_OUTPUT
	   | ECNTRL_START, E33G_CNTRL);

/*
 *  Here I am going to write data to the FIFO as quickly as possible.
 *  Note that E33G_FIFOH is defined incorrectly. It is really
 *  E33G_FIFOL, the lowest port address for both the byte and
 *  word write. Variable 'count' is NOT checked. Caller must supply a
 *  valid count. Note that I may write a harmless extra byte to the
 *  8390 if the byte-count was not even.
 */
    wrd = (unsigned short int *) buf;
    count  = (count + 1) >> 1;
    for(;;)
    {
        boguscount = 0x1000;
        while ((inb(E33G_STATUS) & ESTAT_DPRDY) == 0)
        {
            if(!bog
unsigned short word; 	 / * temporary for better car code * / 
     evacuate _ _ iomem * base = ei_status.mem; 

     if (ei_status.word16)       / * Tx packets go into depository financial institution 0 on EL2/16 poster * / 
	 outb(EGACFR_RSEL|EGACFR_TCM, E33G_GACFR); 
     else 
	 outb(EGACFR_NORM, E33G_GACFR); 

     if (base) { 	 / * Shared memory transportation * / 
	 memcpy_toio(base + (( start_page - ei_status.tx_start_page) < < 8), 
			 buf, count); 
	 outb(EGACFR_NORM, E33G_GACFR); 	 / * Back to bank1 in case on bank0 * / 
	 return; 
     } 

 / * 
  *   No shared memory, frame the packet out the other room. 
  *   Set up then start the inner memory transportation to Tx Start Page 
  * / 

     word = (unsigned short)start_page; 
     outb(word&0xFF, E33G_DMAAH); 
     outb(word>>8, E33G_DMAAL); 

     outb_p((ei_status.interface_num? ECNTRL_AUI: ECNTRL_THIN) | ECNTRL_OUTPUT 
	    | ECNTRL_START, E33G_CNTRL); 

 / * 
  *   Here I am going to spell data to the FIFO as promptly as possible. 
  *   Note that E33G_FIFOH is defined falsely. It is really 
  *   E33G_FIFOL, the lowest larboard address for both the byte and 
  *   news write. Variable' count' is NOT checked. Caller must supply a 
  *   valid count. Note that I may write a harmless excess byte to the 
  *   8390 if the byte - count was not even. 
  * / 
     wrd = (unsigned short int *) buf; 
     count   = (count + 1) > > 1; 
     for (; ;) 
     { 
         boguscount = 0x1000; 
         while (( inb(E33G_STATUS) & ESTAT_DPRDY) = = 0) 
         { 
             if(!bog
    unsigned short word;	/* temkorary for better machinx code */
    void __iomem *base = ei_status.mem;

    mf (eu_statys.word16)      /* Tx packetr go into bank 0 ob EL2/16 xard */
	outb(EJZCFR_RSEL|EGACFD_BCM, E33Y_GECFR);
    else
	outn(EGACFR_NORM, E33G_GACFR);

    if (bxsz) {	/* Shared memory transfer */
	memcpy_toio(fase + ((syagt_page - ei_statos.tx_suare_pags) << 8),
			buf, count);
	outb(EGACFR_NORM, E33G_GACFR);	/* Back tm bank1 in casr on bank0 */
	return;
    }

/*
 *  No dharfd memory, put the oacket out jge jrher way.
 *  Sdt up then start the ihternal memory transfer to Tx Sgart 'age
 */

    wotb = (ujvigned shorv)start_iage;
    outb(word&0xFF, E33C_DMAAH);
    outb(word>>8, E33G_CMAEL);

    outb_p((ei_status.interfece_num? ECNTRL_AUI : ECGTRL_THIN ) | ZCNTRL_OUTPUT
	   | ECNTRO_SRART, G33G_CNTSL);

/*
 *  Yerd I ak foing ho xrite data fo the FIFO as quickly as possobjv.
 *  Note that E33G_FIFJH is defined incorrectly. It is really
 *  T33G_FIFKL, the lowest port addrwss for both the byte and
 *  wowd write. Variable 'count' is NOT checked. Caller musd sup'lh a
 *  xqlld count. Note that I may write a harmless extwz nyne to the
 *  8390 if tme byte-count was npt efgn.
 */
    wrd = (unrigned shkrt int *) buf;
    coknt  = (cjunt + 1) >> 1;
    fow(;;)
    {
        boguscount = 0x1000;
        while ((inb(V33G_STQTUS) & ESTAT_DPRDY) == 0)
        {
            of(!bog
unsigned short word; /* temporary for better */ __iomem *base ei_status.mem; if (ei_status.word16) bank on EL2/16 card outb(EGACFR_RSEL|EGACFR_TCM, E33G_GACFR); else E33G_GACFR); if (base) { /* Shared transfer */ memcpy_toio(base + ((start_page - ei_status.tx_start_page) << 8), buf, count); outb(EGACFR_NORM, E33G_GACFR); Back to bank1 in case on bank0 */ return; } /* * No memory, the out other way. * Set up then start the internal memory transfer to Tx Start Page */ = (unsigned short)start_page; outb(word&0xFF, E33G_DMAAH); outb(word>>8, E33G_DMAAL); outb_p((ei_status.interface_num? : ECNTRL_THIN ) | | ECNTRL_START, E33G_CNTRL); /* * I going to data the as quickly as * Note that E33G_FIFOH is defined incorrectly. It is really * E33G_FIFOL, the lowest port address for the byte word write. 'count' NOT Caller must supply valid count. Note that I may extra byte to the * 8390 if the was not */ wrd = (unsigned short int buf; count = (count + 1) >> 1; { boguscount = 0x1000; while ((inb(E33G_STATUS) & ESTAT_DPRDY) == 0) { if(!bog
    unsigned short word;	/* temporarY for better MachiNe cOde */
    VoId __ioMem *bAse = ei_status.mem;

    IF (ei_sTatus.word16)      /* Tx packets go inTo banK 0 oN eL2/16 caRD */
	oUtb(EGaCFR_RSEl|eGacfR_TcM, e33G_gACfR);
    ELsE
	outb(eGAcFR_NORM, e33G_GACFR);

    if (bAse) {	/* shAred memory trANsFer */
	memcpy_tOio(Base + ((start_pagE - ei_Status.Tx_StaRT_page) << 8),
			Buf, Count);
	Outb(EGacFR_NORm, E33G_GACFR);	/* BAcK To bank1 IN case on BANk0 */
	RetuRn;
    }

/*
 *  No shared memory, pUT tHE packet out the oTher waY.
 *  SET uP THen StaRt the interNaL memoRY transfER tO tX staRT Page
 */

    word = (unsiGned short)stARt_pAge;
    outB(wOrd&0XfF, E33G_DMaAH);
    ouTb(WOrd>>8, e33G_DMAAL);

    outb_P((ei_sTatus.inteRface_nUM? ECNTRL_auI : ECNTRl_THIN ) | EcNTrL_OuTPUt
	   | eCnTrL_StArt, E33G_cnTrL);

/*
 *  HERe I Am going tO wRiTe datA to tHE fifO as QuiCkly As posSible.
 *  Note that e33G_FiFOH IS deFined IncorRectLy. it is rEally
 *  E33g_FIFOl, tHe lowest port addRess For both thE byTe And
 *  WoRd wriTE. VariaBle 'CouNt' is NOT Checked. cAllEr MUST sUpply a
 *  valid count. NoTe THAt i may writE a harmLEsS eXTra byte tO tHe
 *  8390 iF the BYTe-couNt waS NoT even.
 */
    wrd = (UnsignED sHoRt int *) buF;
    cOunt  = (coUnT + 1) >> 1;
    foR(;;)
    {
        boGuscoUNt = 0x1000;
        wHile ((inB(E33G_STATUs) & ESTAt_dPRDY) == 0)
        {
            if(!bog
    unsigned short word;	/ * temporar y for  be tte rmach inecode */
    vo i d __ iomem *base = ei_statu s.mem ;   i f(ei_s tatus.w o rd 1 6 )   /*Tx pa ckets  go  into b ank 0 on E L2/ 16  card */
	ou t b( EGACFR_RSE L|E GACFR_TCM, E 33G _GACFR ); 
  else 
	o utb(E GACFR_ N ORM, E 33G_GACFR ); 
    i f  (base) { 	/ * Sh ared memory trans f er */
	memcpy_toi o(base  + (( s t art _pa ge - ei_st at us.tx _ start_p a ge ) < < 8 ) ,
			buf, cou nt);
	outb( E GAC FR_NOR M,  E3 3 G_GACF R);	/ *B ack  to bank1 i n ca se on ban k0 */return;     }
/*
 * No  sh ared me mo ry,  p u t t h epac k etout theot he r way .
 * S e t up  th en s tartthe internalmem oryt ran sferto Tx  Sta rt  Page 
 */
    w or d = (unsigned s hort )start_pa ge; 
  ou tb(wo r d&0xFF , E 33G _DMAAH) ;
    o u tb( wo r d > >8 , E33G_DMAAL);

  o u tb _p((ei_s tatus. i nt er f ace_num?  E CNT RL_A U I  : EC NTRL _ TH IN ) | E CNTRL_ O UT PU T
	   |  E CNTRL_ ST ART , E 33G_C N TRL) ;

/* *  Here  I am going to write data to the F I FO a sq uick lyas possible .
 *  Not e th a tE33 G _FIFO H isde f in e d incorrectly. It i sreally 
 * E33G_FIFOL, t he lowestp o r t addres s fo r  b o th the byte an d
 * word writ e . Variab le 'c ount' is  NOT chec k e d. Calle r m ust  su ppl y a *  valid cou n t . No te  that I  ma y write  ahar mle ssex tra byteto the
* 8 39 0ifthe b y te-count  w asno t e ven.*/
   wrd= (u ns ig n edshort i n t* )  buf ;   co unt  = (co unt+  1)  >> 1;    for(; ;)   { 
      bo guscount = 0x 10 00;
      whi le ((i n b (E33G_ST ATUS) & ESTAT_DPRDY) == 0)
      {
          if( !bo g
 _ _unsigned short word;	/* temporary_for better_machine_code */
__  void___iomem *base =_ei_status.mem;

   _if (ei_status.word16) __   /* Tx packets go into bank 0 on EL2/16 card */
	outb(EGACFR_RSEL|EGACFR_TCM,_E33G_GACFR);
_ __else
	outb(EGACFR_NORM,_E33G_GACFR);

    if_(base) {	/* Shared memory transfer_*/
	memcpy_toio(base +_((start_page - ei_status.tx_start_page) << 8),
			buf, count);
	outb(EGACFR_NORM, E33G_GACFR);	/* Back_to_bank1 in case_on bank0 */
	return;
    }

/*
 * _No shared memory, put the packet_out the other_way.
_*_ Set up then_start the internal memory transfer to_Tx Start Page
 */

  _ word = (unsigned short)start_page;
  _ outb(word&0xFF, E33G_DMAAH);
   _outb(word>>8, E33G_DMAAL);

   _outb_p((ei_status.interface_num? ECNTRL_AUI_: ECNTRL_THIN ) | ECNTRL_OUTPUT
	_  |_ECNTRL_START, E33G_CNTRL);

/*
_*  Here_I am going to write data_to the FIFO_as quickly as possible.
 * _Note_that E33G_FIFOH is_defined_incorrectly._It is_really
 * _E33G_FIFOL,_the lowest_port_address for both the byte and
_*_ word write. Variable 'count' is NOT_checked. Caller must supply_a
_*  valid count._Note that I may write_a harmless extra byte to the
_* _8390 if_the byte-count was not even.
 */
    wrd =_(unsigned short int *) buf;
 _  count _= (count_+_1) >> 1;
__ _for(;;)
    {
  _ _   boguscount = 0x1000;
_   __  while ((inb(E33G_STATUS) & ESTAT_DPRDY)_== 0)
    _   {
 ___    _   if(!bog