Annotation of qemu/roms/ipxe/src/drivers/net/natsemi.h, revision 1.1

1.1     ! root        1: FILE_LICENCE ( GPL_ANY );
        !             2: 
        !             3: #define NATSEMI_HW_TIMEOUT 400
        !             4: 
        !             5: #define TX_RING_SIZE 4
        !             6: #define NUM_RX_DESC  4
        !             7: #define RX_BUF_SIZE 1536
        !             8: #define OWN       0x80000000
        !             9: #define DSIZE     0x00000FFF
        !            10: #define CRC_SIZE  4
        !            11: 
        !            12: struct natsemi_tx {
        !            13:        uint32_t link;
        !            14:        uint32_t cmdsts;
        !            15:        uint32_t bufptr;
        !            16: };
        !            17: 
        !            18: struct natsemi_rx {
        !            19:        uint32_t link;
        !            20:        uint32_t cmdsts;
        !            21:        uint32_t bufptr;
        !            22: };
        !            23: 
        !            24: struct natsemi_private {
        !            25:        unsigned short ioaddr;
        !            26:        unsigned short tx_cur;
        !            27:        unsigned short tx_dirty;
        !            28:        unsigned short rx_cur;
        !            29:        struct natsemi_tx tx[TX_RING_SIZE];
        !            30:        struct natsemi_rx rx[NUM_RX_DESC];
        !            31: 
        !            32:        /* need to add iobuf as we cannot free iobuf->data in close without this 
        !            33:         * alternatively substracting sizeof(head) and sizeof(list_head) can also 
        !            34:         * give the same.
        !            35:         */
        !            36:        struct io_buffer *iobuf[NUM_RX_DESC];
        !            37: 
        !            38:        /* netdev_tx_complete needs pointer to the iobuf of the data so as to free 
        !            39:         * it from the memory.
        !            40:         */
        !            41:        struct io_buffer *tx_iobuf[TX_RING_SIZE];
        !            42:        struct spi_bit_basher spibit;
        !            43:        struct spi_device eeprom;
        !            44:        struct nvo_block nvo;
        !            45: };
        !            46: 
        !            47: /*
        !            48:  * Support for fibre connections on Am79C874:
        !            49:  * This phy needs a special setup when connected to a fibre cable.
        !            50:  * http://www.amd.com/files/connectivitysolutions/networking/archivednetworking/22235.pdf
        !            51:  */
        !            52: #define PHYID_AM79C874 0x0022561b
        !            53: 
        !            54: enum {
        !            55:        MII_MCTRL       = 0x15,         /* mode control register */
        !            56:        MII_FX_SEL      = 0x0001,       /* 100BASE-FX (fiber) */
        !            57:        MII_EN_SCRM     = 0x0004,       /* enable scrambler (tp) */
        !            58: };
        !            59: 
        !            60: 
        !            61: 
        !            62: /* values we might find in the silicon revision register */
        !            63: #define SRR_DP83815_C  0x0302
        !            64: #define SRR_DP83815_D  0x0403
        !            65: #define SRR_DP83816_A4 0x0504
        !            66: #define SRR_DP83816_A5 0x0505
        !            67: 
        !            68: /* NATSEMI: Offsets to the device registers.
        !            69:  * Unlike software-only systems, device drivers interact with complex hardware.
        !            70:  * It's not useful to define symbolic names for every register bit in the
        !            71:  * device.
        !            72:  */
        !            73: enum register_offsets {
        !            74:     ChipCmd      = 0x00, 
        !            75:     ChipConfig   = 0x04, 
        !            76:     EECtrl       = 0x08, 
        !            77:     PCIBusCfg    = 0x0C,
        !            78:     IntrStatus   = 0x10, 
        !            79:     IntrMask     = 0x14, 
        !            80:     IntrEnable   = 0x18,
        !            81:     TxRingPtr    = 0x20, 
        !            82:     TxConfig     = 0x24,
        !            83:     RxRingPtr    = 0x30,
        !            84:     RxConfig     = 0x34, 
        !            85:     ClkRun       = 0x3C,
        !            86:     WOLCmd       = 0x40, 
        !            87:     PauseCmd     = 0x44,
        !            88:     RxFilterAddr = 0x48, 
        !            89:     RxFilterData = 0x4C,
        !            90:     BootRomAddr  = 0x50, 
        !            91:     BootRomData  = 0x54, 
        !            92:     SiliconRev   = 0x58, 
        !            93:     StatsCtrl    = 0x5C,
        !            94:     StatsData    = 0x60, 
        !            95:     RxPktErrs    = 0x60, 
        !            96:     RxMissed     = 0x68, 
        !            97:     RxCRCErrs    = 0x64,
        !            98:     PCIPM        = 0x44,
        !            99:     PhyStatus    = 0xC0, 
        !           100:     MIntrCtrl    = 0xC4, 
        !           101:     MIntrStatus  = 0xC8,
        !           102: 
        !           103:     /* These are from the spec, around page 78... on a separate table. 
        !           104:      */
        !           105:     PGSEL        = 0xCC, 
        !           106:     PMDCSR       = 0xE4, 
        !           107:     TSTDAT       = 0xFC, 
        !           108:     DSPCFG       = 0xF4, 
        !           109:     SDCFG        = 0x8C,
        !           110:     BasicControl = 0x80,       
        !           111:     BasicStatus  = 0x84
        !           112:            
        !           113: };
        !           114: 
        !           115: /* the values for the 'magic' registers above (PGSEL=1) */
        !           116: #define PMDCSR_VAL     0x189c  /* enable preferred adaptation circuitry */
        !           117: #define TSTDAT_VAL     0x0
        !           118: #define DSPCFG_VAL     0x5040
        !           119: #define SDCFG_VAL      0x008c  /* set voltage thresholds for Signal Detect */
        !           120: #define DSPCFG_LOCK    0x20    /* coefficient lock bit in DSPCFG */
        !           121: #define DSPCFG_COEF    0x1000  /* see coefficient (in TSTDAT) bit in DSPCFG */
        !           122: #define TSTDAT_FIXED   0xe8    /* magic number for bad coefficients */
        !           123: 
        !           124: /* Bit in ChipCmd.
        !           125:  */
        !           126: enum ChipCmdBits {
        !           127:     ChipReset = 0x100, 
        !           128:     RxReset   = 0x20, 
        !           129:     TxReset   = 0x10, 
        !           130:     RxOff     = 0x08, 
        !           131:     RxOn      = 0x04,
        !           132:     TxOff     = 0x02, 
        !           133:     TxOn      = 0x01
        !           134: };
        !           135: 
        !           136: enum ChipConfig_bits {
        !           137:        CfgPhyDis               = 0x200,
        !           138:        CfgPhyRst               = 0x400,
        !           139:        CfgExtPhy               = 0x1000,
        !           140:        CfgAnegEnable           = 0x2000,
        !           141:        CfgAneg100              = 0x4000,
        !           142:        CfgAnegFull             = 0x8000,
        !           143:        CfgAnegDone             = 0x8000000,
        !           144:        CfgFullDuplex           = 0x20000000,
        !           145:        CfgSpeed100             = 0x40000000,
        !           146:        CfgLink                 = 0x80000000,
        !           147: };
        !           148: 
        !           149: 
        !           150: /* Bits in the RxMode register.
        !           151:  */
        !           152: enum rx_mode_bits {
        !           153:     AcceptErr          = 0x20,
        !           154:     AcceptRunt         = 0x10,
        !           155:     AcceptBroadcast    = 0xC0000000,
        !           156:     AcceptMulticast    = 0x00200000, 
        !           157:     AcceptAllMulticast = 0x20000000,
        !           158:     AcceptAllPhys      = 0x10000000, 
        !           159:     AcceptMyPhys       = 0x08000000,
        !           160:     RxFilterEnable     = 0x80000000
        !           161: };
        !           162: 
        !           163: /* Bits in network_desc.status
        !           164:  */
        !           165: enum desc_status_bits {
        !           166:     DescOwn   = 0x80000000, 
        !           167:     DescMore  = 0x40000000, 
        !           168:     DescIntr  = 0x20000000,
        !           169:     DescNoCRC = 0x10000000,
        !           170:     DescPktOK = 0x08000000, 
        !           171:     RxTooLong = 0x00400000
        !           172: };
        !           173: 
        !           174: /*Bits in Interrupt Mask register
        !           175:  */
        !           176: enum Intr_mask_register_bits {
        !           177:     RxOk       = 0x001,
        !           178:     RxErr      = 0x004,
        !           179:     TxOk       = 0x040,
        !           180:     TxErr      = 0x100 
        !           181: };     
        !           182: 
        !           183: enum MIntrCtrl_bits {
        !           184:   MICRIntEn               = 0x2,
        !           185: };
        !           186: 
        !           187: /* CFG bits [13:16] [18:23] */
        !           188: #define CFG_RESET_SAVE 0xfde000
        !           189: /* WCSR bits [0:4] [9:10] */
        !           190: #define WCSR_RESET_SAVE 0x61f
        !           191: /* RFCR bits [20] [22] [27:31] */
        !           192: #define RFCR_RESET_SAVE 0xf8500000;
        !           193: 
        !           194: /* Delay between EEPROM clock transitions.
        !           195:    No extra delay is needed with 33Mhz PCI, but future 66Mhz access may need
        !           196:    a delay. */
        !           197: #define eeprom_delay(ee_addr)   inl(ee_addr)
        !           198: 
        !           199: enum EEPROM_Ctrl_Bits {
        !           200:        EE_ShiftClk   = 0x04,
        !           201:        EE_DataIn     = 0x01,
        !           202:        EE_ChipSelect = 0x08,
        !           203:        EE_DataOut    = 0x02
        !           204: };
        !           205: 
        !           206: #define EE_Write0 (EE_ChipSelect)
        !           207: #define EE_Write1 (EE_ChipSelect | EE_DataIn)
        !           208: 
        !           209: /* The EEPROM commands include the alway-set leading bit. */
        !           210: enum EEPROM_Cmds {
        !           211:   EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6),
        !           212: };
        !           213: 
        !           214: /*  EEPROM access , values are devices specific
        !           215:  */
        !           216: #define EE_CS          0x08    /* EEPROM chip select */
        !           217: #define EE_SK          0x04    /* EEPROM shift clock */
        !           218: #define EE_DI          0x01    /* Data in */
        !           219: #define EE_DO          0x02    /* Data out */
        !           220: 
        !           221: /* Offsets within EEPROM (these are word offsets)
        !           222:  */
        !           223: #define EE_MAC 7
        !           224: #define EE_REG  EECtrl
        !           225: 
        !           226: static const uint8_t natsemi_ee_bits[] = {
        !           227:        [SPI_BIT_SCLK]  = EE_SK,
        !           228:        [SPI_BIT_MOSI]  = EE_DI,
        !           229:        [SPI_BIT_MISO]  = EE_DO,
        !           230:        [SPI_BIT_SS(0)] = EE_CS,
        !           231: };
        !           232: 

unix.superglobalmegacorp.com

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