Annotation of qemu/roms/ipxe/src/include/nic.h, revision 1.1

1.1     ! root        1:  /*
        !             2:  * This program is free software; you can redistribute it and/or
        !             3:  * modify it under the terms of the GNU General Public License as
        !             4:  * published by the Free Software Foundation; either version 2, or (at
        !             5:  * your option) any later version.
        !             6:  */
        !             7: 
        !             8: FILE_LICENCE ( GPL2_OR_LATER );
        !             9: 
        !            10: #ifndef        NIC_H
        !            11: #define NIC_H
        !            12: 
        !            13: #include <stdint.h>
        !            14: #include <string.h>
        !            15: #include <stdio.h>
        !            16: #include <byteswap.h>
        !            17: #include <ipxe/pci.h>
        !            18: #include <ipxe/isapnp.h>
        !            19: #include <ipxe/isa.h>
        !            20: #include <ipxe/eisa.h>
        !            21: #include <ipxe/mca.h>
        !            22: #include <ipxe/io.h>
        !            23: 
        !            24: typedef enum {
        !            25:        DISABLE = 0,
        !            26:        ENABLE,
        !            27:        FORCE
        !            28: } irq_action_t;
        !            29: 
        !            30: typedef enum duplex {
        !            31:        HALF_DUPLEX = 1,
        !            32:        FULL_DUPLEX
        !            33: } duplex_t;
        !            34: 
        !            35: /*
        !            36:  *     Structure returned from eth_probe and passed to other driver
        !            37:  *     functions.
        !            38:  */
        !            39: struct nic {
        !            40:        struct nic_operations   *nic_op;
        !            41:        int                     flags;  /* driver specific flags */
        !            42:        unsigned char           *node_addr;
        !            43:        unsigned char           *packet;
        !            44:        unsigned int            packetlen;
        !            45:        unsigned int            ioaddr;
        !            46:        unsigned char           irqno;
        !            47:        unsigned int            mbps;
        !            48:        duplex_t                duplex;
        !            49:        void                    *priv_data;     /* driver private data */
        !            50: };
        !            51: 
        !            52: struct nic_operations {
        !            53:        int ( *connect ) ( struct nic * );
        !            54:        int ( *poll ) ( struct nic *, int retrieve );
        !            55:        void ( *transmit ) ( struct nic *, const char *,
        !            56:                             unsigned int, unsigned int, const char * );
        !            57:        void ( *irq ) ( struct nic *, irq_action_t );
        !            58: };
        !            59: 
        !            60: extern struct nic nic;
        !            61: 
        !            62: static inline int eth_poll ( int retrieve ) {
        !            63:        return nic.nic_op->poll ( &nic, retrieve );
        !            64: }
        !            65: 
        !            66: static inline void eth_transmit ( const char *dest, unsigned int type,
        !            67:                                  unsigned int size, const void *packet ) {
        !            68:        nic.nic_op->transmit ( &nic, dest, type, size, packet );
        !            69: }
        !            70: 
        !            71: /*
        !            72:  * Function prototypes
        !            73:  *
        !            74:  */
        !            75: extern int dummy_connect ( struct nic *nic );
        !            76: extern void dummy_irq ( struct nic *nic, irq_action_t irq_action );
        !            77: extern int legacy_probe ( void *hwdev,
        !            78:                          void ( * set_drvdata ) ( void *hwdev, void *priv ),
        !            79:                          struct device *dev,
        !            80:                          int ( * probe ) ( struct nic *nic, void *hwdev ),
        !            81:                          void ( * disable ) ( struct nic *nic, void *hwdev ));
        !            82: void legacy_remove ( void *hwdev,
        !            83:                     void * ( * get_drvdata ) ( void *hwdev ),
        !            84:                     void ( * disable ) ( struct nic *nic, void *hwdev ) );
        !            85: 
        !            86: #define PCI_DRIVER(_name,_ids,_class)                                    \
        !            87:        static inline int                                                 \
        !            88:        _name ## _pci_legacy_probe ( struct pci_device *pci );            \
        !            89:        static inline void                                                \
        !            90:        _name ## _pci_legacy_remove ( struct pci_device *pci );           \
        !            91:        struct pci_driver _name __pci_driver = {                          \
        !            92:                .ids = _ids,                                              \
        !            93:                .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),         \
        !            94:                .probe = _name ## _pci_legacy_probe,                      \
        !            95:                .remove = _name ## _pci_legacy_remove,                    \
        !            96:        };                                                                \
        !            97:        REQUIRE_OBJECT ( pci );
        !            98: 
        !            99: static inline void legacy_pci_set_drvdata ( void *hwdev, void *priv ) {
        !           100:        pci_set_drvdata ( hwdev, priv );
        !           101: }
        !           102: static inline void * legacy_pci_get_drvdata ( void *hwdev ) {
        !           103:        return pci_get_drvdata ( hwdev );
        !           104: }
        !           105: 
        !           106: #define ISAPNP_DRIVER(_name,_ids)                                        \
        !           107:        static inline int                                                 \
        !           108:        _name ## _isapnp_legacy_probe ( struct isapnp_device *isapnp,     \
        !           109:                                        const struct isapnp_device_id *id ); \
        !           110:        static inline void                                                \
        !           111:        _name ## _isapnp_legacy_remove ( struct isapnp_device *isapnp );  \
        !           112:        struct isapnp_driver _name __isapnp_driver = {                    \
        !           113:                .ids = _ids,                                              \
        !           114:                .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),         \
        !           115:                .probe = _name ## _isapnp_legacy_probe,                   \
        !           116:                .remove = _name ## _isapnp_legacy_remove,                 \
        !           117:        };                                                                \
        !           118:        REQUIRE_OBJECT ( isapnp );
        !           119: 
        !           120: static inline void legacy_isapnp_set_drvdata ( void *hwdev, void *priv ) {
        !           121:        isapnp_set_drvdata ( hwdev, priv );
        !           122: }
        !           123: static inline void * legacy_isapnp_get_drvdata ( void *hwdev ) {
        !           124:        return isapnp_get_drvdata ( hwdev );
        !           125: }
        !           126: 
        !           127: #define EISA_DRIVER(_name,_ids)                                                  \
        !           128:        static inline int                                                 \
        !           129:        _name ## _eisa_legacy_probe ( struct eisa_device *eisa,           \
        !           130:                                      const struct eisa_device_id *id );  \
        !           131:        static inline void                                                \
        !           132:        _name ## _eisa_legacy_remove ( struct eisa_device *eisa );        \
        !           133:        struct eisa_driver _name __eisa_driver = {                        \
        !           134:                .ids = _ids,                                              \
        !           135:                .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),         \
        !           136:                .probe = _name ## _eisa_legacy_probe,                     \
        !           137:                .remove = _name ## _eisa_legacy_remove,                   \
        !           138:        };                                                                \
        !           139:        REQUIRE_OBJECT ( eisa );
        !           140: 
        !           141: static inline void legacy_eisa_set_drvdata ( void *hwdev, void *priv ) {
        !           142:        eisa_set_drvdata ( hwdev, priv );
        !           143: }
        !           144: static inline void * legacy_eisa_get_drvdata ( void *hwdev ) {
        !           145:        return eisa_get_drvdata ( hwdev );
        !           146: }
        !           147: 
        !           148: #define MCA_DRIVER(_name,_ids)                                           \
        !           149:        static inline int                                                 \
        !           150:        _name ## _mca_legacy_probe ( struct mca_device *mca,              \
        !           151:                                     const struct mca_device_id *id );    \
        !           152:        static inline void                                                \
        !           153:        _name ## _mca_legacy_remove ( struct mca_device *mca );           \
        !           154:        struct mca_driver _name __mca_driver = {                          \
        !           155:                .ids = _ids,                                              \
        !           156:                .id_count = sizeof ( _ids ) / sizeof ( _ids[0] ),         \
        !           157:                .probe = _name ## _mca_legacy_probe,                      \
        !           158:                .remove = _name ## _mca_legacy_remove,                    \
        !           159:        };                                                                \
        !           160:        REQUIRE_OBJECT ( mca );
        !           161: 
        !           162: static inline void legacy_mca_set_drvdata ( void *hwdev, void *priv ) {
        !           163:        mca_set_drvdata ( hwdev, priv );
        !           164: }
        !           165: static inline void * legacy_mca_get_drvdata ( void *hwdev ) {
        !           166:        return mca_get_drvdata ( hwdev );
        !           167: }
        !           168: 
        !           169: #define ISA_DRIVER(_name,_probe_addrs,_probe_addr,_vendor_id,_prod_id)   \
        !           170:        static inline int                                                 \
        !           171:        _name ## _isa_legacy_probe ( struct isa_device *isa );            \
        !           172:        static inline int                                                 \
        !           173:        _name ## _isa_legacy_probe_at_addr ( struct isa_device *isa ) {   \
        !           174:                if ( ! _probe_addr ( isa->ioaddr ) )                      \
        !           175:                        return -ENODEV;                                   \
        !           176:                return _name ## _isa_legacy_probe ( isa );                \
        !           177:        }                                                                 \
        !           178:        static inline void                                                \
        !           179:        _name ## _isa_legacy_remove ( struct isa_device *isa );           \
        !           180:        static const char _name ## _text[];                               \
        !           181:        struct isa_driver _name __isa_driver = {                          \
        !           182:                .name = _name ## _text,                                   \
        !           183:                .probe_addrs = _probe_addrs,                              \
        !           184:                .addr_count = ( sizeof ( _probe_addrs ) /                 \
        !           185:                                sizeof ( _probe_addrs[0] ) ),             \
        !           186:                .vendor_id = _vendor_id,                                  \
        !           187:                .prod_id = _prod_id,                                      \
        !           188:                .probe = _name ## _isa_legacy_probe_at_addr,              \
        !           189:                .remove = _name ## _isa_legacy_remove,                    \
        !           190:        };                                                                \
        !           191:        REQUIRE_OBJECT ( isa );
        !           192: 
        !           193: static inline void legacy_isa_set_drvdata ( void *hwdev, void *priv ) {
        !           194:        isa_set_drvdata ( hwdev, priv );
        !           195: }
        !           196: static inline void * legacy_isa_get_drvdata ( void *hwdev ) {
        !           197:        return isa_get_drvdata ( hwdev );
        !           198: }
        !           199: 
        !           200: #undef DRIVER
        !           201: #define DRIVER(_name_text,_unused2,_unused3,_name,_probe,_disable)       \
        !           202:        static const char _name ## _text[] = _name_text;                  \
        !           203:        static inline int                                                 \
        !           204:        _name ## _probe ( struct nic *nic, void *hwdev ) {                \
        !           205:                return _probe ( nic, hwdev );                             \
        !           206:        }                                                                 \
        !           207:        static inline void                                                \
        !           208:        _name ## _disable ( struct nic *nic, void *hwdev ) {              \
        !           209:                void ( * _unsafe_disable ) () = _disable;                 \
        !           210:                _unsafe_disable ( nic, hwdev );                           \
        !           211:        }                                                                 \
        !           212:        static inline int                                                 \
        !           213:        _name ## _pci_legacy_probe ( struct pci_device *pci ) {           \
        !           214:                return legacy_probe ( pci, legacy_pci_set_drvdata,        \
        !           215:                                      &pci->dev, _name ## _probe,         \
        !           216:                                      _name ## _disable );                \
        !           217:        }                                                                 \
        !           218:        static inline void                                                \
        !           219:        _name ## _pci_legacy_remove ( struct pci_device *pci ) {          \
        !           220:                return legacy_remove ( pci, legacy_pci_get_drvdata,       \
        !           221:                                       _name ## _disable );               \
        !           222:        }                                                                 \
        !           223:        static inline int                                                 \
        !           224:        _name ## _isapnp_legacy_probe ( struct isapnp_device *isapnp,     \
        !           225:                         const struct isapnp_device_id *id __unused ) {   \
        !           226:                return legacy_probe ( isapnp, legacy_isapnp_set_drvdata,  \
        !           227:                                      &isapnp->dev, _name ## _probe,      \
        !           228:                                      _name ## _disable );                \
        !           229:        }                                                                 \
        !           230:        static inline void                                                \
        !           231:        _name ## _isapnp_legacy_remove ( struct isapnp_device *isapnp ) { \
        !           232:                return legacy_remove ( isapnp, legacy_isapnp_get_drvdata, \
        !           233:                                       _name ## _disable );               \
        !           234:        }                                                                 \
        !           235:        static inline int                                                 \
        !           236:        _name ## _eisa_legacy_probe ( struct eisa_device *eisa,           \
        !           237:                             const struct eisa_device_id *id __unused ) { \
        !           238:                return legacy_probe ( eisa, legacy_eisa_set_drvdata,      \
        !           239:                                      &eisa->dev, _name ## _probe,        \
        !           240:                                      _name ## _disable );                \
        !           241:        }                                                                 \
        !           242:        static inline void                                                \
        !           243:        _name ## _eisa_legacy_remove ( struct eisa_device *eisa ) {       \
        !           244:                return legacy_remove ( eisa, legacy_eisa_get_drvdata,     \
        !           245:                                       _name ## _disable );               \
        !           246:        }                                                                 \
        !           247:        static inline int                                                 \
        !           248:        _name ## _mca_legacy_probe ( struct mca_device *mca,              \
        !           249:                              const struct mca_device_id *id __unused ) { \
        !           250:                return legacy_probe ( mca, legacy_mca_set_drvdata,        \
        !           251:                                      &mca->dev, _name ## _probe,         \
        !           252:                                      _name ## _disable );                \
        !           253:        }                                                                 \
        !           254:        static inline void                                                \
        !           255:        _name ## _mca_legacy_remove ( struct mca_device *mca ) {          \
        !           256:                return legacy_remove ( mca, legacy_mca_get_drvdata,       \
        !           257:                                       _name ## _disable );               \
        !           258:        }                                                                 \
        !           259:        static inline int                                                 \
        !           260:        _name ## _isa_legacy_probe ( struct isa_device *isa ) {           \
        !           261:                return legacy_probe ( isa, legacy_isa_set_drvdata,        \
        !           262:                                      &isa->dev, _name ## _probe,         \
        !           263:                                      _name ## _disable );                \
        !           264:        }                                                                 \
        !           265:        static inline void                                                \
        !           266:        _name ## _isa_legacy_remove ( struct isa_device *isa ) {          \
        !           267:                return legacy_remove ( isa, legacy_isa_get_drvdata,       \
        !           268:                                       _name ## _disable );               \
        !           269:        }
        !           270: 
        !           271: #endif /* NIC_H */

unix.superglobalmegacorp.com

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