Annotation of Examples/DriverKit/SMC16/SMC16_reloc.tproj/SMC16IOInline.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1993 NeXT Computer, Inc.
        !             3:  *
        !             4:  * Low level IO inline expansions for
        !             5:  * SMC EtherCard Plus Elite16 Adapter.
        !             6:  *
        !             7:  * HISTORY
        !             8:  *
        !             9:  * 26 Jan 1993 
        !            10:  *     Created.
        !            11:  */
        !            12: 
        !            13: #import <driverkit/i386/ioPorts.h>
        !            14: 
        !            15: #import "SMC16Hdw.h"
        !            16: 
        !            17: #import "wd83C584.h"
        !            18: #import "wd83C690.h"
        !            19: 
        !            20: /*
        !            21:  * We use a union of all relevant registers so that we can declare
        !            22:  * variables of a single type, yet access and return variables of
        !            23:  * these multiple types easily.  Typically, we use the last 2 elements
        !            24:  * in our inb() calls.
        !            25:  */
        !            26: typedef union {
        !            27:     bic_msr_t          msr;
        !            28:     bic_icr_t          icr;
        !            29:     bic_iar_t          iar;
        !            30:     bic_bio_t          bio;
        !            31:     bic_ear_t          ear;
        !            32:     bic_irr_t          irr;
        !            33:     bic_laar_t         laar;
        !            34:     nic_cmd_reg_t      cmd_reg;
        !            35:     nic_enh_reg_t      enh_reg;
        !            36:     nic_istat_reg_t    istat_reg;
        !            37:     nic_imask_reg_t    imask_reg;
        !            38:     nic_tstat_reg_t    tstat_reg;
        !            39:     nic_rcon_reg_t     rcon_reg;
        !            40:     nic_tcon_reg_t     tcon_reg;
        !            41:     nic_dcon_reg_t     dcon_reg;
        !            42:     unsigned char      data;
        !            43:     SMC16_off_t                offset;
        !            44: }_reg_conv_t;
        !            45: 
        !            46: /*
        !            47:  * Access to 83C584 registers.
        !            48:  */
        !            49: 
        !            50: static __inline__
        !            51: bic_msr_t
        !            52: get_msr(
        !            53:     IOEISAPortAddress  base
        !            54: )
        !            55: {
        !            56:     _reg_conv_t                _conv;
        !            57:     
        !            58:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_MSR_OFF);
        !            59:     
        !            60:     return (_conv.msr);
        !            61: }
        !            62: 
        !            63: static __inline__
        !            64: void
        !            65: put_msr(
        !            66:     bic_msr_t          reg,
        !            67:     IOEISAPortAddress  base
        !            68: )
        !            69: {
        !            70:     _reg_conv_t                _conv;
        !            71:     
        !            72:     _conv.msr = reg;
        !            73: 
        !            74:     outb(base + SMC16_BIC_OFF + BIC_MSR_OFF, _conv.data);
        !            75: }
        !            76: 
        !            77: static __inline__
        !            78: bic_icr_t
        !            79: get_icr(
        !            80:     IOEISAPortAddress  base
        !            81: )
        !            82: {
        !            83:     _reg_conv_t                _conv;
        !            84:     
        !            85:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_ICR_OFF);
        !            86:     
        !            87:     return (_conv.icr);
        !            88: }
        !            89: 
        !            90: static __inline__
        !            91: void
        !            92: put_icr(
        !            93:     bic_icr_t          reg,
        !            94:     IOEISAPortAddress  base
        !            95: )
        !            96: {
        !            97:     _reg_conv_t                _conv;
        !            98:     
        !            99:     _conv.icr = reg;
        !           100: 
        !           101:     outb(base + SMC16_BIC_OFF + BIC_ICR_OFF, _conv.data);
        !           102: }
        !           103: 
        !           104: static __inline__
        !           105: bic_irr_t
        !           106: get_irr(
        !           107:     IOEISAPortAddress  base
        !           108: )
        !           109: {
        !           110:     _reg_conv_t                _conv;
        !           111:     
        !           112:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_IRR_OFF);
        !           113:     
        !           114:     return (_conv.irr);
        !           115: }
        !           116: 
        !           117: static __inline__
        !           118: void
        !           119: put_irr(
        !           120:     bic_irr_t          reg,
        !           121:     IOEISAPortAddress  base
        !           122: )
        !           123: {
        !           124:     _reg_conv_t                _conv;
        !           125:     
        !           126:     _conv.irr = reg;
        !           127: 
        !           128:     outb(base + SMC16_BIC_OFF + BIC_IRR_OFF, _conv.data);
        !           129: }
        !           130: 
        !           131: static __inline__
        !           132: bic_laar_t
        !           133: get_laar(
        !           134:     IOEISAPortAddress  base
        !           135: )
        !           136: {
        !           137:     _reg_conv_t                _conv;
        !           138:     
        !           139:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_LAAR_OFF);
        !           140:     
        !           141:     return (_conv.laar);
        !           142: }
        !           143: 
        !           144: static __inline__
        !           145: void
        !           146: put_laar(
        !           147:     bic_laar_t         reg,
        !           148:     IOEISAPortAddress  base
        !           149: )
        !           150: {
        !           151:     _reg_conv_t                _conv;
        !           152:     
        !           153:     _conv.laar = reg;
        !           154: 
        !           155:     outb(base + SMC16_BIC_OFF + BIC_LAAR_OFF, _conv.data);
        !           156: }
        !           157: 
        !           158: static __inline__
        !           159: bic_bio_t
        !           160: get_bio(
        !           161:     IOEISAPortAddress  base
        !           162: )
        !           163: {
        !           164:     _reg_conv_t                _conv;
        !           165:     bic_icr_t          icr = get_icr(base);
        !           166:     
        !           167:     icr.ora = BIC_ACCESS_BIO;
        !           168:     put_icr(icr,base);
        !           169:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_BIO_OFF);
        !           170:     
        !           171:     return (_conv.bio);
        !           172: }
        !           173: 
        !           174: static __inline__
        !           175: void
        !           176: put_bio(
        !           177:     bic_bio_t          reg,
        !           178:     IOEISAPortAddress  base
        !           179: )
        !           180: {
        !           181:     _reg_conv_t                _conv;
        !           182:     bic_icr_t          icr = get_icr(base);
        !           183:     
        !           184:     icr.ora = BIC_ACCESS_BIO;
        !           185:     put_icr(icr,base);
        !           186:     _conv.bio = reg;
        !           187: 
        !           188:     outb(base + SMC16_BIC_OFF + BIC_BIO_OFF, _conv.data);
        !           189: }
        !           190: 
        !           191: static __inline__
        !           192: bic_ear_t
        !           193: get_ear(
        !           194:     IOEISAPortAddress  base
        !           195: )
        !           196: {
        !           197:     _reg_conv_t                _conv;
        !           198:     bic_icr_t          icr = get_icr(base);
        !           199:     
        !           200:     icr.ora = BIC_ACCESS_EAR;
        !           201:     put_icr(icr,base);
        !           202:     
        !           203:     _conv.data = inb(base + SMC16_BIC_OFF + BIC_EAR_OFF);
        !           204:     
        !           205:     return (_conv.ear);
        !           206: }
        !           207: 
        !           208: static __inline__
        !           209: unsigned char
        !           210: get_bid(
        !           211:     IOEISAPortAddress  base
        !           212: )
        !           213: {
        !           214:     return (inb(base + SMC16_BIC_OFF + BIC_ID_OFF));
        !           215: }
        !           216: 
        !           217: /*
        !           218:  * Access to 83C690 registers.
        !           219:  */
        !           220: 
        !           221: /*
        !           222:  * Select a different register
        !           223:  * page, and return the old one.
        !           224:  */
        !           225: 
        !           226: #define REG_PAGE0      0
        !           227: #define REG_PAGE1      1
        !           228: #define REG_PAGE2      2
        !           229: #define REG_PAGE3      3
        !           230: 
        !           231: static __inline__
        !           232: int
        !           233: sel_reg_page(
        !           234:     int                        page,
        !           235:     IOEISAPortAddress  base
        !           236: )
        !           237: {
        !           238:     _reg_conv_t                _conv;
        !           239:     int                        oldpage;
        !           240:     
        !           241:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_CMD_REG_OFF);
        !           242:     oldpage = _conv.cmd_reg.psel;
        !           243:     
        !           244:     _conv.cmd_reg.psel = page;
        !           245:     outb(base + SMC16_NIC_OFF + NIC_CMD_REG_OFF, _conv.data);
        !           246:     
        !           247:     return (oldpage);
        !           248: }
        !           249: 
        !           250: /*
        !           251:  * Get/Put 83C690 register values,
        !           252:  * assuming that the correct register
        !           253:  * page has already been selected.
        !           254:  */
        !           255: 
        !           256: static __inline__
        !           257: nic_cmd_reg_t
        !           258: get_cmd_reg(
        !           259:     IOEISAPortAddress  base
        !           260: )
        !           261: {
        !           262:     _reg_conv_t                _conv;
        !           263:     
        !           264:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_CMD_REG_OFF);
        !           265:     
        !           266:     return (_conv.cmd_reg);
        !           267: }
        !           268: 
        !           269: static __inline__
        !           270: void
        !           271: put_cmd_reg(
        !           272:     nic_cmd_reg_t      reg,
        !           273:     IOEISAPortAddress  base
        !           274: )
        !           275: {
        !           276:     _reg_conv_t                _conv;
        !           277:     
        !           278:     _conv.cmd_reg = reg;
        !           279:     
        !           280:     outb(base + SMC16_NIC_OFF + NIC_CMD_REG_OFF, _conv.data);
        !           281: }
        !           282: 
        !           283: static __inline__
        !           284: nic_istat_reg_t
        !           285: get_istat_reg(
        !           286:     IOEISAPortAddress  base
        !           287: )
        !           288: {
        !           289:     _reg_conv_t                _conv;
        !           290:     
        !           291:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_ISTAT_REG_OFF);
        !           292:     
        !           293:     return (_conv.istat_reg);
        !           294: }
        !           295: 
        !           296: static __inline__
        !           297: void
        !           298: put_istat_reg(
        !           299:     nic_istat_reg_t    reg,
        !           300:     IOEISAPortAddress  base
        !           301: )
        !           302: {
        !           303:     _reg_conv_t                _conv;
        !           304:     
        !           305:     _conv.istat_reg = reg;
        !           306:     
        !           307:     outb(base + SMC16_NIC_OFF + NIC_ISTAT_REG_OFF, _conv.data);
        !           308: }
        !           309: 
        !           310: static __inline__
        !           311: nic_imask_reg_t
        !           312: get_imask_reg(
        !           313:     IOEISAPortAddress  base
        !           314: )
        !           315: {
        !           316:     _reg_conv_t                _conv;
        !           317:     
        !           318:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_IMASK_REG_OFF);
        !           319:     
        !           320:     return (_conv.imask_reg);
        !           321: }
        !           322: 
        !           323: static __inline__
        !           324: void
        !           325: put_imask_reg(
        !           326:     nic_imask_reg_t    reg,
        !           327:     IOEISAPortAddress  base
        !           328: )
        !           329: {
        !           330:     _reg_conv_t                _conv;
        !           331:     
        !           332:     _conv.imask_reg = reg;
        !           333:     
        !           334:     outb(base + SMC16_NIC_OFF + NIC_IMASK_REG_OFF, _conv.data);
        !           335: }
        !           336: 
        !           337: static __inline__
        !           338: nic_dcon_reg_t
        !           339: get_dcon_reg(
        !           340:     IOEISAPortAddress  base
        !           341: )
        !           342: {
        !           343:     _reg_conv_t                _conv;
        !           344:     
        !           345:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_DCON_REG_OFF);
        !           346:     
        !           347:     return (_conv.dcon_reg);
        !           348: }
        !           349: 
        !           350: static __inline__
        !           351: void
        !           352: put_dcon_reg(
        !           353:     nic_dcon_reg_t     reg,
        !           354:     IOEISAPortAddress  base
        !           355: )
        !           356: {
        !           357:     _reg_conv_t                _conv;
        !           358:     
        !           359:     _conv.dcon_reg = reg;
        !           360:     
        !           361:     outb(base + SMC16_NIC_OFF + NIC_DCON_REG_OFF, _conv.data);
        !           362: }
        !           363: 
        !           364: static __inline__
        !           365: void
        !           366: put_enh_reg(
        !           367:     nic_enh_reg_t      reg,
        !           368:     IOEISAPortAddress  base
        !           369: )
        !           370: {
        !           371:     _reg_conv_t                _conv;
        !           372:     
        !           373:     _conv.enh_reg = reg;
        !           374:     
        !           375:     outb(base + SMC16_NIC_OFF + NIC_ENH_REG_OFF, _conv.data);
        !           376: }
        !           377: 
        !           378: static __inline__
        !           379: nic_rcon_reg_t
        !           380: get_rcon_reg(
        !           381:     IOEISAPortAddress  base
        !           382: )
        !           383: {
        !           384:     _reg_conv_t                _conv;
        !           385:     
        !           386:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_RCON_REG_OFF);
        !           387:     
        !           388:     return (_conv.rcon_reg);
        !           389: }
        !           390: 
        !           391: static __inline__
        !           392: void
        !           393: put_rcon_reg(
        !           394:     nic_rcon_reg_t     reg,
        !           395:     IOEISAPortAddress  base
        !           396: )
        !           397: {
        !           398:     _reg_conv_t                _conv;
        !           399:     
        !           400:     _conv.rcon_reg = reg;
        !           401:     
        !           402:     outb(base + SMC16_NIC_OFF + NIC_RCON_REG_OFF, _conv.data);
        !           403: }
        !           404: 
        !           405: static __inline__
        !           406: nic_tcon_reg_t
        !           407: get_tcon_reg(
        !           408:     IOEISAPortAddress  base
        !           409: )
        !           410: {
        !           411:     _reg_conv_t                _conv;
        !           412:     
        !           413:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_TCON_REG_OFF);
        !           414:     
        !           415:     return (_conv.tcon_reg);
        !           416: }
        !           417: 
        !           418: static __inline__
        !           419: void
        !           420: put_tcon_reg(
        !           421:     nic_tcon_reg_t     reg,
        !           422:     IOEISAPortAddress  base
        !           423: )
        !           424: {
        !           425:     _reg_conv_t                _conv;
        !           426:     
        !           427:     _conv.tcon_reg = reg;
        !           428:     
        !           429:     outb(base + SMC16_NIC_OFF + NIC_TCON_REG_OFF, _conv.data);
        !           430: }
        !           431: 
        !           432: static __inline__
        !           433: void
        !           434: put_tstart_reg(
        !           435:     SMC16_off_t                reg,
        !           436:     IOEISAPortAddress  base
        !           437: )
        !           438: {
        !           439:     outb(base + SMC16_NIC_OFF + NIC_TSTART_REG_OFF, reg);
        !           440: }
        !           441: 
        !           442: static __inline__
        !           443: void
        !           444: put_tcnt_reg(
        !           445:     unsigned short     reg,
        !           446:     IOEISAPortAddress  base
        !           447: )
        !           448: {
        !           449:     union {
        !           450:        struct {
        !           451:            unsigned char       tcntl   :8;
        !           452:            unsigned char       tcnth   :8;
        !           453:        } l_h;
        !           454:        unsigned short          tcnt;
        !           455:     } _conv;
        !           456:     
        !           457:     _conv.tcnt = reg;
        !           458:     
        !           459:     outb(base + SMC16_NIC_OFF + NIC_TCNTL_REG_OFF, _conv.l_h.tcntl);
        !           460:     outb(base + SMC16_NIC_OFF + NIC_TCNTH_REG_OFF, _conv.l_h.tcnth);
        !           461: }
        !           462: 
        !           463: static __inline__
        !           464: nic_tstat_reg_t
        !           465: get_tstat_reg(
        !           466:     IOEISAPortAddress  base
        !           467: )
        !           468: {
        !           469:     _reg_conv_t                _conv;
        !           470: 
        !           471:     _conv.data = inb(base + SMC16_NIC_OFF + NIC_TSTAT_REG_OFF);
        !           472:     
        !           473:     return (_conv.tstat_reg);
        !           474: }
        !           475: 
        !           476: static __inline__
        !           477: void
        !           478: put_rstart_reg(
        !           479:     SMC16_off_t                reg,
        !           480:     IOEISAPortAddress  base
        !           481: )
        !           482: {
        !           483:     outb(base + SMC16_NIC_OFF + NIC_RSTART_REG_OFF, reg);
        !           484: }
        !           485: 
        !           486: static __inline__
        !           487: void
        !           488: put_rstop_reg(
        !           489:     SMC16_off_t                reg,
        !           490:     IOEISAPortAddress  base
        !           491: )
        !           492: {
        !           493:     outb(base + SMC16_NIC_OFF + NIC_RSTOP_REG_OFF, reg);
        !           494: }
        !           495: 
        !           496: static __inline__
        !           497: SMC16_off_t
        !           498: get_block_reg(
        !           499:     IOEISAPortAddress  base
        !           500: )
        !           501: {
        !           502:     _reg_conv_t        _conv;
        !           503:     int                oldPage = sel_reg_page(NIC_BLOCK_REG_R_PG,base);
        !           504:     
        !           505:     _conv.offset = (inb(base + SMC16_NIC_OFF + NIC_BLOCK_REG_OFF));
        !           506:     sel_reg_page(oldPage,base);
        !           507:     return _conv.offset;  
        !           508: }
        !           509: 
        !           510: static __inline__
        !           511: void
        !           512: put_block_reg(
        !           513:     SMC16_off_t                reg,
        !           514:     IOEISAPortAddress  base
        !           515: )
        !           516: {
        !           517:     int        oldPage = sel_reg_page(NIC_BLOCK_REG_W_PG,base);
        !           518:     outb(base + SMC16_NIC_OFF + NIC_BLOCK_REG_OFF, reg);
        !           519:     sel_reg_page(oldPage,base);
        !           520: }
        !           521: 
        !           522: static __inline__
        !           523: SMC16_off_t
        !           524: get_bound_reg(
        !           525:     IOEISAPortAddress  base
        !           526: )
        !           527: {
        !           528:     return (inb(base + SMC16_NIC_OFF + NIC_BOUND_REG_OFF));
        !           529: }
        !           530: 
        !           531: static __inline__
        !           532: void
        !           533: put_bound_reg(
        !           534:     SMC16_off_t                reg,
        !           535:     IOEISAPortAddress  base
        !           536: )
        !           537: {
        !           538:     outb(base + SMC16_NIC_OFF + NIC_BOUND_REG_OFF, reg);
        !           539: }
        !           540: 
        !           541: static __inline__
        !           542: SMC16_off_t
        !           543: get_curr_reg(
        !           544:     IOEISAPortAddress  base
        !           545: )
        !           546: {
        !           547:     return (inb(base + SMC16_NIC_OFF + NIC_CURR_REG_OFF));
        !           548: }
        !           549: 
        !           550: static __inline__
        !           551: void
        !           552: put_curr_reg(
        !           553:     SMC16_off_t                reg,
        !           554:     IOEISAPortAddress  base
        !           555: )
        !           556: {
        !           557:     outb(base + SMC16_NIC_OFF + NIC_CURR_REG_OFF, reg);
        !           558: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.