Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

typedef struct Mii Mii;
typedef struct MiiPhy MiiPhy;

enum {                                  /* registers */
        Bmcr            = 0x00,         /* Basic Mode Control */
        Bmsr            = 0x01,         /* Basic Mode Status */
        Phyidr1         = 0x02,         /* PHY Identifier #1 */
        Phyidr2         = 0x03,         /* PHY Identifier #2 */
        Anar            = 0x04,         /* Auto-Negotiation Advertisement */
        Anlpar          = 0x05,         /* AN Link Partner Ability */
        Aner            = 0x06,         /* AN Expansion */
        Annptr          = 0x07,         /* AN Next Page TX */
        Annprr          = 0x08,         /* AN Next Page RX */
        Mscr            = 0x09,         /* MASTER-SLAVE Control */
        Mssr            = 0x0A,         /* MASTER-SLAVE Status */
        Esr             = 0x0F,         /* Extended Status */

        NMiiPhyr        = 32,
        NMiiPhy         = 32,
};

enum {                                  /* Bmcr */
        BmcrSs1         = 0x0040,       /* Speed Select[1] */
        BmcrCte         = 0x0080,       /* Collision Test Enable */
        BmcrDm          = 0x0100,       /* Duplex Mode */
        BmcrRan         = 0x0200,       /* Restart Auto-Negotiation */
        BmcrI           = 0x0400,       /* Isolate */
        BmcrPd          = 0x0800,       /* Power Down */
        BmcrAne         = 0x1000,       /* Auto-Negotiation Enable */
        BmcrSs0         = 0x2000,       /* Speed Select[0] */
        BmcrLe          = 0x4000,       /* Loopback Enable */
        BmcrR           = 0x8000,       /* Reset */
};

enum {                                  /* Bmsr */
        BmsrEc          = 0x0001,       /* Extended Capability */
        BmsrJd          = 0x0002,       /* Jabber Detect */
        BmsrLs          = 0x0004,       /* Link Status */
        BmsrAna         = 0x0008,       /* Auto-Negotiation Ability */
        BmsrRf          = 0x0010,       /* Remote Fault */
        BmsrAnc         = 0x0020,       /* Auto-Negotiation Complete */
        BmsrPs          = 0x0040,       /* Preamble Suppression Capable */
        BmsrEs          = 0x0100,       /* Extended Status */
        Bmsr100T2HD     = 0x0200,       /* 100BASE-T2 HD Capable */
        Bmsr100T2FD     = 0x0400,       /* 100BASE-T2 FD Capable */
        Bmsr10THD       = 0x0800,       /* 10BASE-T HD Capable */
        Bmsr10TFD       = 0x1000,       /* 10BASE-T FD Capable */
        Bmsr100TXHD     = 0x2000,       /* 100BASE-TX HD Capable */
        Bmsr100TXFD     = 0x4000,       /* 100BASE-TX FD Capable */
        Bmsr100T4       = 0x8000,       /* 100BASE-T4 Capable */
};

enum {                                  /* Anar/Anlpar */
        Ana10HD         = 0x0020,       /* Advertise 10BASE-T */
        Ana10FD         = 0x0040,       /* Advertise 10BASE-T FD */
        AnaTXHD         = 0x0080,       /* Advertise 100BASE-TX */
        AnaTXFD         = 0x0100,       /* Advertise 100BASE-TX FD */
        AnaT4           = 0x0200,       /* Advertise 100BASE-T4 */
        AnaP            = 0x0400,       /* Pause */
        AnaAP           = 0x0800,       /* Asymmetrical Pause */
        AnaRf           = 0x2000,       /* Remote Fault */
        AnaAck          = 0x4000,       /* Acknowledge */
        AnaNp           = 0x8000,       /* Next Page Indication */
};

enum {                                  /* Mscr */
        Mscr1000THD     = 0x0100,       /* Advertise 1000BASE-T HD */
        Mscr1000TFD     = 0x0200,       /* Advertise 1000BASE-T FD */
};

enum {                                  /* Mssr */
        Mssr1000THD     = 0x0400,       /* Link Partner 1000BASE-T HD able */
        Mssr1000TFD     = 0x0800,       /* Link Partner 1000BASE-T FD able */
};

enum {                                  /* Esr */
        Esr1000THD      = 0x1000,       /* 1000BASE-T HD Capable */
        Esr1000TFD      = 0x2000,       /* 1000BASE-T FD Capable */
        Esr1000XHD      = 0x4000,       /* 1000BASE-X HD Capable */
        Esr1000XFD      = 0x8000,       /* 1000BASE-X FD Capable */
};

typedef struct Mii {
        Lock;
        int     nphy;
        int     mask;
        MiiPhy* phy[NMiiPhy];
        MiiPhy* curphy;

        void*   ctlr;
        int     (*mir)(Mii*, int, int);
        int     (*miw)(Mii*, int, int, int);
} Mii;

typedef struct MiiPhy {
        Mii*    mii;
        int     oui;
        int     phyno;

        int     anar;
        int     fc;
        int     mscr;

        int     link;
        int     speed;
        int     fd;
        int     rfc;
        int     tfc;
};

extern int mii(Mii*, int);
extern int miiane(Mii*, int, int, int);
extern int miimir(Mii*, int);
extern int miimiw(Mii*, int, int);
extern int miireset(Mii*);
extern int miistatus(Mii*);