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