i8254xGBe_defs.hh revision 3116
110612SMarco.Elver@ARM.com/*
210612SMarco.Elver@ARM.com * Copyright (c) 2006 The Regents of The University of Michigan
310612SMarco.Elver@ARM.com * All rights reserved.
410612SMarco.Elver@ARM.com *
510612SMarco.Elver@ARM.com * Redistribution and use in source and binary forms, with or without
610612SMarco.Elver@ARM.com * modification, are permitted provided that the following conditions are
710612SMarco.Elver@ARM.com * met: redistributions of source code must retain the above copyright
810612SMarco.Elver@ARM.com * notice, this list of conditions and the following disclaimer;
910612SMarco.Elver@ARM.com * redistributions in binary form must reproduce the above copyright
1010612SMarco.Elver@ARM.com * notice, this list of conditions and the following disclaimer in the
1110612SMarco.Elver@ARM.com * documentation and/or other materials provided with the distribution;
1210612SMarco.Elver@ARM.com * neither the name of the copyright holders nor the names of its
1310612SMarco.Elver@ARM.com * contributors may be used to endorse or promote products derived from
1410612SMarco.Elver@ARM.com * this software without specific prior written permission.
1510612SMarco.Elver@ARM.com *
1610612SMarco.Elver@ARM.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1710612SMarco.Elver@ARM.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1810612SMarco.Elver@ARM.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1910612SMarco.Elver@ARM.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2010612SMarco.Elver@ARM.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2110612SMarco.Elver@ARM.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2210612SMarco.Elver@ARM.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2310612SMarco.Elver@ARM.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2410612SMarco.Elver@ARM.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2510612SMarco.Elver@ARM.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2610612SMarco.Elver@ARM.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2710612SMarco.Elver@ARM.com *
2810612SMarco.Elver@ARM.com * Authors: Ali Saidi
2910612SMarco.Elver@ARM.com */
3010612SMarco.Elver@ARM.com
3110612SMarco.Elver@ARM.com/* @file
3210612SMarco.Elver@ARM.com * Register and structure descriptions for Intel's 8254x line of gigabit ethernet controllers.
3310612SMarco.Elver@ARM.com */
3410612SMarco.Elver@ARM.com
3510612SMarco.Elver@ARM.comnamespace iGbReg {
3610612SMarco.Elver@ARM.com
3710612SMarco.Elver@ARM.comconst uint32_t CTRL     = 0x00000;
3810612SMarco.Elver@ARM.comconst uint32_t STATUS   = 0x00008;
3910612SMarco.Elver@ARM.comconst uint32_t EECD     = 0x00010;
4010612SMarco.Elver@ARM.comconst uint32_t CTRL_EXT = 0x00018;
4110612SMarco.Elver@ARM.comconst uint32_t PBA      = 0x01000;
4211793Sbrandon.potter@amd.comconst uint32_t ICR      = 0x000C0;
4311793Sbrandon.potter@amd.comconst uint32_t ITR      = 0x000C4;
4410612SMarco.Elver@ARM.comconst uint32_t ICS      = 0x000C8;
4510612SMarco.Elver@ARM.comconst uint32_t IMS      = 0x000D0;
4610612SMarco.Elver@ARM.comconst uint32_t IMC      = 0x000D8;
4710612SMarco.Elver@ARM.comconst uint32_t RCTL     = 0x00100;
4810612SMarco.Elver@ARM.comconst uint32_t RDBAL    = 0x02800;
4910612SMarco.Elver@ARM.comconst uint32_t RDBAH    = 0x02804;
5010612SMarco.Elver@ARM.comconst uint32_t RDLEN    = 0x02808;
5110612SMarco.Elver@ARM.comconst uint32_t RDH      = 0x02810;
5210612SMarco.Elver@ARM.comconst uint32_t RDT      = 0x02818;
5310612SMarco.Elver@ARM.comconst uint32_t RDTR     = 0x02820;
5410612SMarco.Elver@ARM.comconst uint32_t RADV     = 0x0282C;
5510612SMarco.Elver@ARM.comconst uint32_t RSRPD    = 0x02C00;
5610612SMarco.Elver@ARM.comconst uint32_t TCTL     = 0x00400;
5710612SMarco.Elver@ARM.comconst uint32_t TDBAL    = 0x03800;
5810612SMarco.Elver@ARM.comconst uint32_t TDBAH    = 0x03804;
5910612SMarco.Elver@ARM.comconst uint32_t TDLEN    = 0x03808;
6010612SMarco.Elver@ARM.comconst uint32_t TDH      = 0x03810;
6110612SMarco.Elver@ARM.comconst uint32_t THT      = 0x03818;
6210612SMarco.Elver@ARM.comconst uint32_t TIDV     = 0x03820;
6310612SMarco.Elver@ARM.comconst uint32_t TXDMAC   = 0x03000;
6410612SMarco.Elver@ARM.comconst uint32_t TXDCTL   = 0x03828;
6510612SMarco.Elver@ARM.comconst uint32_t TADV     = 0x0282C;
6610612SMarco.Elver@ARM.comconst uint32_t TSPMT    = 0x03830;
6710612SMarco.Elver@ARM.comconst uint32_t RXDCTL   = 0x02828;
6810612SMarco.Elver@ARM.comconst uint32_t RXCSUM   = 0x05000;
6910612SMarco.Elver@ARM.com
7010612SMarco.Elver@ARM.comstruct RxDesc {
7110612SMarco.Elver@ARM.com    Addr buf;
7210612SMarco.Elver@ARM.com    uint16_t len;
7310612SMarco.Elver@ARM.com    uint16_t csum;
7410612SMarco.Elver@ARM.com    union {
7510612SMarco.Elver@ARM.com        uint8_t status;
7610612SMarco.Elver@ARM.com        struct { // these may be in the worng order
7710612SMarco.Elver@ARM.com            uint8_t dd:1;    // descriptor done (hw is done when 1)
7810612SMarco.Elver@ARM.com            uint8_t eop:1;   // end of packet
7910612SMarco.Elver@ARM.com            uint8_t xism:1;  // ignore checksum
8010612SMarco.Elver@ARM.com            uint8_t vp:1;    // packet is vlan packet
8110612SMarco.Elver@ARM.com            uint8_t rsv:1;   // reserved
8210612SMarco.Elver@ARM.com            uint8_t tcpcs:1; // TCP checksum done
8310612SMarco.Elver@ARM.com            uint8_t ipcs:1;  // IP checksum done
8410612SMarco.Elver@ARM.com            uint8_t pif:1;   // passed in-exact filter
8510612SMarco.Elver@ARM.com        } st;
8610612SMarco.Elver@ARM.com    };
8710612SMarco.Elver@ARM.com    union {
8810612SMarco.Elver@ARM.com        uint8_t errors;
8910612SMarco.Elver@ARM.com        struct {
9010612SMarco.Elver@ARM.com            uint8_t ce:1;   // crc error or alignment error
9110612SMarco.Elver@ARM.com            uint8_t se:1;   // symbol error
9210612SMarco.Elver@ARM.com            uint8_t seq:1;  // sequence error
9310612SMarco.Elver@ARM.com            uint8_t rsv:1;  // reserved
9410612SMarco.Elver@ARM.com            uint8_t cxe:1;  // carrier extension error
9510612SMarco.Elver@ARM.com            uint8_t tcpe:1; // tcp checksum error
9610612SMarco.Elver@ARM.com            uint8_t ipe:1;  // ip checksum error
9710612SMarco.Elver@ARM.com            uint8_t rxe:1;  // PX data error
9810612SMarco.Elver@ARM.com        } er;
9910612SMarco.Elver@ARM.com    };
10010612SMarco.Elver@ARM.com    union {
10110612SMarco.Elver@ARM.com        uint16_t special;
10210612SMarco.Elver@ARM.com        struct {
10310612SMarco.Elver@ARM.com            uint16_t vlan:12; //vlan id
10410612SMarco.Elver@ARM.com            uint16_t cfi:1;   // canocial form id
10510612SMarco.Elver@ARM.com            uint16_t pri:3;   // user priority
10610612SMarco.Elver@ARM.com        } sp;
10710612SMarco.Elver@ARM.com    };
10810612SMarco.Elver@ARM.com};
10910612SMarco.Elver@ARM.com
11010612SMarco.Elver@ARM.comunion TxDesc {
11110612SMarco.Elver@ARM.com    uint8_t data[16];
11210612SMarco.Elver@ARM.com    struct {
11310612SMarco.Elver@ARM.com        Addr buf;
11410612SMarco.Elver@ARM.com        uint16_t len;
11510612SMarco.Elver@ARM.com        uint8_t  cso;
11610612SMarco.Elver@ARM.com        union {
11710612SMarco.Elver@ARM.com            uint8_t command;
11810612SMarco.Elver@ARM.com            struct {
11910612SMarco.Elver@ARM.com                uint8_t eop:1;  // end of packet
12010612SMarco.Elver@ARM.com                uint8_t ifcs:1; // insert crc
12110612SMarco.Elver@ARM.com                uint8_t ic:1;   // insert checksum
12210612SMarco.Elver@ARM.com                uint8_t rs:1;   // report status
12310612SMarco.Elver@ARM.com                uint8_t rps:1;  // report packet sent
12410612SMarco.Elver@ARM.com                uint8_t dext:1; // extension
12510612SMarco.Elver@ARM.com                uint8_t vle:1;  // vlan enable
12610612SMarco.Elver@ARM.com                uint8_t ide:1;  // interrupt delay enable
12710612SMarco.Elver@ARM.com            } cmd;
12810612SMarco.Elver@ARM.com        };
12910612SMarco.Elver@ARM.com        union {
13010612SMarco.Elver@ARM.com            uint8_t status:4;
13110612SMarco.Elver@ARM.com            struct {
13210612SMarco.Elver@ARM.com                uint8_t dd:1; // descriptor done
13310612SMarco.Elver@ARM.com                uint8_t ec:1; // excess collisions
13410612SMarco.Elver@ARM.com                uint8_t lc:1; // late collision
13510612SMarco.Elver@ARM.com                uint8_t tu:1; // transmit underrun
13610612SMarco.Elver@ARM.com            } st;
13710612SMarco.Elver@ARM.com        };
13810612SMarco.Elver@ARM.com        uint8_t reserved:4;
13910612SMarco.Elver@ARM.com        uint8_t css;
14010612SMarco.Elver@ARM.com        union {
14110612SMarco.Elver@ARM.com            uint16_t special;
14210612SMarco.Elver@ARM.com            struct {
14310612SMarco.Elver@ARM.com                uint16_t vlan:12; //vlan id
14410612SMarco.Elver@ARM.com                uint16_t cfi:1;   // canocial form id
14510612SMarco.Elver@ARM.com                uint16_t pri:3;   // user priority
14610612SMarco.Elver@ARM.com            } sp;
14710612SMarco.Elver@ARM.com        };
14810612SMarco.Elver@ARM.com    } legacy;
14910612SMarco.Elver@ARM.com
15010612SMarco.Elver@ARM.com    // Type 0000 descriptor
15110612SMarco.Elver@ARM.com    struct {
15210612SMarco.Elver@ARM.com        uint8_t ipcss;
15310612SMarco.Elver@ARM.com        uint8_t ipcso;
15410612SMarco.Elver@ARM.com        uint16_t ipcse;
15510612SMarco.Elver@ARM.com        uint8_t tucss;
15610612SMarco.Elver@ARM.com        uint8_t tucso;
15710612SMarco.Elver@ARM.com        uint16_t tucse;
15811284Sandreas.hansson@arm.com        uint32_t paylen:20;
15911489Sandreas.hansson@arm.com        uint8_t dtype:4;
16010612SMarco.Elver@ARM.com        union {
16110612SMarco.Elver@ARM.com            uint8_t tucommand;
16210612SMarco.Elver@ARM.com            struct {
16310612SMarco.Elver@ARM.com                uint8_t tcp:1;  // tcp/udp
16410612SMarco.Elver@ARM.com                uint8_t ip:1;   // ip ipv4/ipv6
16510612SMarco.Elver@ARM.com                uint8_t tse:1;  // tcp segment enbale
16610612SMarco.Elver@ARM.com                uint8_t rs:1;   // report status
16713377Sodanrc@yahoo.com.br                uint8_t rsv0:1; // reserved
16810612SMarco.Elver@ARM.com                uint8_t dext:1; // descriptor extension
16910612SMarco.Elver@ARM.com                uint8_t rsv1:1; // reserved
17010612SMarco.Elver@ARM.com                uint8_t ide:1;  // interrupt delay enable
17110612SMarco.Elver@ARM.com            } tucmd;
17211284Sandreas.hansson@arm.com        };
17310612SMarco.Elver@ARM.com        union {
17410612SMarco.Elver@ARM.com            uint8_t status:4;
17510612SMarco.Elver@ARM.com            struct {
17610612SMarco.Elver@ARM.com                uint8_t dd:1;
17710612SMarco.Elver@ARM.com                uint8_t rsvd:3;
17810612SMarco.Elver@ARM.com            } sta;
17911284Sandreas.hansson@arm.com        };
18010612SMarco.Elver@ARM.com        uint8_t reserved:4;
18110612SMarco.Elver@ARM.com        uint8_t hdrlen;
18210612SMarco.Elver@ARM.com        uint16_t mss;
18310612SMarco.Elver@ARM.com    } t0;
18410612SMarco.Elver@ARM.com
18510612SMarco.Elver@ARM.com    // Type 0001 descriptor
18610612SMarco.Elver@ARM.com    struct {
18710612SMarco.Elver@ARM.com        Addr buf;
18810612SMarco.Elver@ARM.com        uint32_t dtalen:20;
18910612SMarco.Elver@ARM.com        uint8_t dtype:4;
19010612SMarco.Elver@ARM.com        union {
19110612SMarco.Elver@ARM.com            uint8_t dcommand;
19210612SMarco.Elver@ARM.com            struct {
19310612SMarco.Elver@ARM.com                uint8_t eop:1;  // end of packet
19410612SMarco.Elver@ARM.com                uint8_t ifcs:1; // insert crc
19510612SMarco.Elver@ARM.com                uint8_t tse:1;  // segmentation enable
19610612SMarco.Elver@ARM.com                uint8_t rs:1;   // report status
19710612SMarco.Elver@ARM.com                uint8_t rps:1;  // report packet sent
19810612SMarco.Elver@ARM.com                uint8_t dext:1; // extension
19910612SMarco.Elver@ARM.com                uint8_t vle:1;  // vlan enable
20010612SMarco.Elver@ARM.com                uint8_t ide:1;  // interrupt delay enable
20110612SMarco.Elver@ARM.com            } dcmd;
20210612SMarco.Elver@ARM.com        };
20310612SMarco.Elver@ARM.com        union {
20410612SMarco.Elver@ARM.com            uint8_t status:4;
20510612SMarco.Elver@ARM.com            struct {
20610612SMarco.Elver@ARM.com                uint8_t dd:1; // descriptor done
20710612SMarco.Elver@ARM.com                uint8_t ec:1; // excess collisions
20810612SMarco.Elver@ARM.com                uint8_t lc:1; // late collision
20910612SMarco.Elver@ARM.com                uint8_t tu:1; // transmit underrun
21010612SMarco.Elver@ARM.com            } sta;
21110612SMarco.Elver@ARM.com        };
21210612SMarco.Elver@ARM.com        union {
21310612SMarco.Elver@ARM.com            uint8_t pktopts;
21410612SMarco.Elver@ARM.com            struct {
21510612SMarco.Elver@ARM.com                uint8_t ixsm:1; // insert ip checksum
21610612SMarco.Elver@ARM.com                uint8_t txsm:1; // insert tcp checksum
21710612SMarco.Elver@ARM.com            };
21810612SMarco.Elver@ARM.com        };
21910612SMarco.Elver@ARM.com        union {
22010612SMarco.Elver@ARM.com            uint16_t special;
22110612SMarco.Elver@ARM.com            struct {
22210612SMarco.Elver@ARM.com                uint16_t vlan:12; //vlan id
22310612SMarco.Elver@ARM.com                uint16_t cfi:1;   // canocial form id
22410612SMarco.Elver@ARM.com                uint16_t pri:3;   // user priority
22510612SMarco.Elver@ARM.com            } sp;
22610612SMarco.Elver@ARM.com        };
22710612SMarco.Elver@ARM.com    } t1;
22811284Sandreas.hansson@arm.com
22911284Sandreas.hansson@arm.com    // Junk to test descriptor type!
23010612SMarco.Elver@ARM.com    struct {
23110612SMarco.Elver@ARM.com        uint64_t junk;
23210612SMarco.Elver@ARM.com        uint32_t junk1:20;
23310612SMarco.Elver@ARM.com        uint8_t dtype;
23410612SMarco.Elver@ARM.com        uint8_t junk2:5;
23510612SMarco.Elver@ARM.com        uint8_t dext:1;
23610612SMarco.Elver@ARM.com        uint8_t junk3:2;
23710612SMarco.Elver@ARM.com        uint8_t junk4:4;
23810612SMarco.Elver@ARM.com        uint32_t junk5;
23910612SMarco.Elver@ARM.com    } type;
24010612SMarco.Elver@ARM.com};
24110612SMarco.Elver@ARM.com
24210612SMarco.Elver@ARM.com}; // iGbReg namespace
24310612SMarco.Elver@ARM.com