1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun ################################################################################ 4*4882a593Smuzhiyun # 5*4882a593Smuzhiyun # r8168 is the Linux device driver released for Realtek Gigabit Ethernet 6*4882a593Smuzhiyun # controllers with PCI-Express interface. 7*4882a593Smuzhiyun # 8*4882a593Smuzhiyun # Copyright(c) 2021 Realtek Semiconductor Corp. All rights reserved. 9*4882a593Smuzhiyun # 10*4882a593Smuzhiyun # This program is free software; you can redistribute it and/or modify it 11*4882a593Smuzhiyun # under the terms of the GNU General Public License as published by the Free 12*4882a593Smuzhiyun # Software Foundation; either version 2 of the License, or (at your option) 13*4882a593Smuzhiyun # any later version. 14*4882a593Smuzhiyun # 15*4882a593Smuzhiyun # This program is distributed in the hope that it will be useful, but WITHOUT 16*4882a593Smuzhiyun # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17*4882a593Smuzhiyun # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 18*4882a593Smuzhiyun # more details. 19*4882a593Smuzhiyun # 20*4882a593Smuzhiyun # You should have received a copy of the GNU General Public License along with 21*4882a593Smuzhiyun # this program; if not, see <http://www.gnu.org/licenses/>. 22*4882a593Smuzhiyun # 23*4882a593Smuzhiyun # Author: 24*4882a593Smuzhiyun # Realtek NIC software team <nicfae@realtek.com> 25*4882a593Smuzhiyun # No. 2, Innovation Road II, Hsinchu Science Park, Hsinchu 300, Taiwan 26*4882a593Smuzhiyun # 27*4882a593Smuzhiyun ################################################################################ 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /************************************************************************************ 31*4882a593Smuzhiyun * This product is covered by one or more of the following patents: 32*4882a593Smuzhiyun * US6,570,884, US6,115,776, and US6,327,625. 33*4882a593Smuzhiyun ***********************************************************************************/ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define SIOCDEVPRIVATE_RTLASF SIOCDEVPRIVATE 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define FUNCTION_ENABLE 1 38*4882a593Smuzhiyun #define FUNCTION_DISABLE 0 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define ASFCONFIG 0 41*4882a593Smuzhiyun #define ASFCAPABILITY 1 42*4882a593Smuzhiyun #define ASFCOMMULEN 0 43*4882a593Smuzhiyun #define ASFHBPERIOD 0 44*4882a593Smuzhiyun #define ASFWD16RST 0 45*4882a593Smuzhiyun #define ASFCAPMASK 0 46*4882a593Smuzhiyun #define ASFALERTRESND 0 47*4882a593Smuzhiyun #define ASFLSNRPOLLCYC 0 48*4882a593Smuzhiyun #define ASFSNRPOLLCYC 0 49*4882a593Smuzhiyun #define ASFWD8RESET 0 50*4882a593Smuzhiyun #define ASFRWHEXNUM 0 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define FMW_CAP_MASK 0x0000F867 53*4882a593Smuzhiyun #define SPC_CMD_MASK 0x1F00 54*4882a593Smuzhiyun #define SYS_CAP_MASK 0xFF 55*4882a593Smuzhiyun #define DISABLE_MASK 0x00 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define MAX_DATA_LEN 200 58*4882a593Smuzhiyun #define MAX_STR_LEN 200 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define COMMU_STR_MAX_LEN 23 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define KEY_LEN 20 63*4882a593Smuzhiyun #define UUID_LEN 16 64*4882a593Smuzhiyun #define SYSID_LEN 2 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #define RW_ONE_BYTE 1 67*4882a593Smuzhiyun #define RW_TWO_BYTES 2 68*4882a593Smuzhiyun #define RW_FOUR_BYTES 4 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun enum asf_registers { 71*4882a593Smuzhiyun HBPeriod = 0x0000, 72*4882a593Smuzhiyun WD8Rst = 0x0002, 73*4882a593Smuzhiyun WD8Timer = 0x0003, 74*4882a593Smuzhiyun WD16Rst = 0x0004, 75*4882a593Smuzhiyun LSnsrPollCycle = 0x0006, 76*4882a593Smuzhiyun ASFSnsrPollPrd = 0x0007, 77*4882a593Smuzhiyun AlertReSendCnt = 0x0008, 78*4882a593Smuzhiyun AlertReSendItvl = 0x0009, 79*4882a593Smuzhiyun SMBAddr = 0x000A, 80*4882a593Smuzhiyun SMBCap = 0x000B, 81*4882a593Smuzhiyun ASFConfigR0 = 0x000C, 82*4882a593Smuzhiyun ASFConfigR1 = 0x000D, 83*4882a593Smuzhiyun WD16Timer = 0x000E, 84*4882a593Smuzhiyun ConsoleMA = 0x0010, 85*4882a593Smuzhiyun ConsoleIP = 0x0016, 86*4882a593Smuzhiyun IPAddr = 0x001A, 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun UUID = 0x0020, 89*4882a593Smuzhiyun IANA = 0x0030, 90*4882a593Smuzhiyun SysID = 0x0034, 91*4882a593Smuzhiyun Community = 0x0036, 92*4882a593Smuzhiyun StringLength = 0x004D, 93*4882a593Smuzhiyun LC = 0x004E, 94*4882a593Smuzhiyun EntityInst = 0x004F, 95*4882a593Smuzhiyun FmCapMsk = 0x0050, 96*4882a593Smuzhiyun SpCMDMsk = 0x0054, 97*4882a593Smuzhiyun SysCapMsk = 0x0056, 98*4882a593Smuzhiyun WDSysSt = 0x0057, 99*4882a593Smuzhiyun RxMsgType = 0x0058, 100*4882a593Smuzhiyun RxSpCMD = 0x0059, 101*4882a593Smuzhiyun RxSpCMDPa = 0x005A, 102*4882a593Smuzhiyun RxBtOpMsk = 0x005C, 103*4882a593Smuzhiyun RmtRstAddr = 0x005E, 104*4882a593Smuzhiyun RmtRstCmd = 0x005F, 105*4882a593Smuzhiyun RmtRstData = 0x0060, 106*4882a593Smuzhiyun RmtPwrOffAddr = 0x0061, 107*4882a593Smuzhiyun RmtPwrOffCmd = 0x0062, 108*4882a593Smuzhiyun RmtPwrOffData = 0x0063, 109*4882a593Smuzhiyun RmtPwrOnAddr = 0x0064, 110*4882a593Smuzhiyun RmtPwrOnCmd = 0x0065, 111*4882a593Smuzhiyun RmtPwrOnData = 0x0066, 112*4882a593Smuzhiyun RmtPCRAddr = 0x0067, 113*4882a593Smuzhiyun RmtPCRCmd = 0x0068, 114*4882a593Smuzhiyun RmtPCRData = 0x0069, 115*4882a593Smuzhiyun RMCP_IANA = 0x006A, 116*4882a593Smuzhiyun RMCP_OEM = 0x006E, 117*4882a593Smuzhiyun ASFSnsr0Addr = 0x0070, 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun ASFSnsrEvSt = 0x0073, 120*4882a593Smuzhiyun ASFSnsrEvAlert = 0x0081, 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun LSnsrNo = 0x00AD, 123*4882a593Smuzhiyun AssrtEvntMsk = 0x00AE, 124*4882a593Smuzhiyun DeAssrtEvntMsk = 0x00AF, 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun LSnsrAddr0 = 0x00B0, 127*4882a593Smuzhiyun LAlertCMD0 = 0x00B1, 128*4882a593Smuzhiyun LAlertDataMsk0 = 0x00B2, 129*4882a593Smuzhiyun LAlertCmp0 = 0x00B3, 130*4882a593Smuzhiyun LAlertESnsrT0 = 0x00B4, 131*4882a593Smuzhiyun LAlertET0 = 0x00B5, 132*4882a593Smuzhiyun LAlertEOffset0 = 0x00B6, 133*4882a593Smuzhiyun LAlertES0 = 0x00B7, 134*4882a593Smuzhiyun LAlertSN0 = 0x00B8, 135*4882a593Smuzhiyun LAlertEntity0 = 0x00B9, 136*4882a593Smuzhiyun LAlertEI0 = 0x00BA, 137*4882a593Smuzhiyun LSnsrState0 = 0x00BB, 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun LSnsrAddr1 = 0x00BD, 140*4882a593Smuzhiyun LAlertCMD1 = 0x00BE, 141*4882a593Smuzhiyun LAlertDataMsk1 = 0x00BF, 142*4882a593Smuzhiyun LAlertCmp1 = 0x00C0, 143*4882a593Smuzhiyun LAlertESnsrT1 = 0x00C1, 144*4882a593Smuzhiyun LAlertET1 = 0x00C2, 145*4882a593Smuzhiyun LAlertEOffset1 = 0x00C3, 146*4882a593Smuzhiyun LAlertES1 = 0x00C4, 147*4882a593Smuzhiyun LAlertSN1 = 0x00C5, 148*4882a593Smuzhiyun LAlertEntity1 = 0x00C6, 149*4882a593Smuzhiyun LAlertEI1 = 0x00C7, 150*4882a593Smuzhiyun LSnsrState1 = 0x00C8, 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun LSnsrAddr2 = 0x00CA, 153*4882a593Smuzhiyun LAlertCMD2 = 0x00CB, 154*4882a593Smuzhiyun LAlertDataMsk2 = 0x00CC, 155*4882a593Smuzhiyun LAlertCmp2 = 0x00CD, 156*4882a593Smuzhiyun LAlertESnsrT2 = 0x00CE, 157*4882a593Smuzhiyun LAlertET2 = 0x00CF, 158*4882a593Smuzhiyun LAlertEOffset2 = 0x00D0, 159*4882a593Smuzhiyun LAlertES2 = 0x00D1, 160*4882a593Smuzhiyun LAlertSN2 = 0x00D2, 161*4882a593Smuzhiyun LAlertEntity2 = 0x00D3, 162*4882a593Smuzhiyun LAlertEI2 = 0x00D4, 163*4882a593Smuzhiyun LSnsrState2 = 0x00D5, 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun LSnsrAddr3 = 0x00D7, 166*4882a593Smuzhiyun LAlertCMD3 = 0x00D8, 167*4882a593Smuzhiyun LAlertDataMsk3 = 0x00D9, 168*4882a593Smuzhiyun LAlertCmp3 = 0x00DA, 169*4882a593Smuzhiyun LAlertESnsrT3 = 0x00DB, 170*4882a593Smuzhiyun LAlertET3 = 0x00DC, 171*4882a593Smuzhiyun LAlertEOffset3 = 0x00DD, 172*4882a593Smuzhiyun LAlertES3 = 0x00DE, 173*4882a593Smuzhiyun LAlertSN3 = 0x00DF, 174*4882a593Smuzhiyun LAlertEntity3 = 0x00E0, 175*4882a593Smuzhiyun LAlertEI3 = 0x00E1, 176*4882a593Smuzhiyun LSnsrState3 = 0x00E2, 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun LSnsrAddr4 = 0x00E4, 179*4882a593Smuzhiyun LAlertCMD4 = 0x00E5, 180*4882a593Smuzhiyun LAlertDataMsk4 = 0x00E6, 181*4882a593Smuzhiyun LAlertCmp4 = 0x00E7, 182*4882a593Smuzhiyun LAlertESnsrT4 = 0x00E8, 183*4882a593Smuzhiyun LAlertET4 = 0x00E9, 184*4882a593Smuzhiyun LAlertEOffset4 = 0x00EA, 185*4882a593Smuzhiyun LAlertES4 = 0x00EB, 186*4882a593Smuzhiyun LAlertSN4 = 0x00EC, 187*4882a593Smuzhiyun LAlertEntity4 = 0x00ED, 188*4882a593Smuzhiyun LAlertEI4 = 0x00EE, 189*4882a593Smuzhiyun LSnsrState4 = 0x00EF, 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun LSnsrAddr5 = 0x00F1, 192*4882a593Smuzhiyun LAlertCMD5 = 0x00F2, 193*4882a593Smuzhiyun LAlertDataMsk5 = 0x00F3, 194*4882a593Smuzhiyun LAlertCmp5 = 0x00F4, 195*4882a593Smuzhiyun LAlertESnsrT5 = 0x00F5, 196*4882a593Smuzhiyun LAlertET5 = 0x00F6, 197*4882a593Smuzhiyun LAlertEOffset5 = 0x00F7, 198*4882a593Smuzhiyun LAlertES5 = 0x00F8, 199*4882a593Smuzhiyun LAlertSN5 = 0x00F9, 200*4882a593Smuzhiyun LAlertEntity5 = 0x00FA, 201*4882a593Smuzhiyun LAlertEI5 = 0x00FB, 202*4882a593Smuzhiyun LSnsrState5 = 0x00FC, 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun LSnsrAddr6 = 0x00FE, 205*4882a593Smuzhiyun LAlertCMD6 = 0x00FF, 206*4882a593Smuzhiyun LAlertDataMsk6 = 0x0100, 207*4882a593Smuzhiyun LAlertCmp6 = 0x0101, 208*4882a593Smuzhiyun LAlertESnsrT6 = 0x0102, 209*4882a593Smuzhiyun LAlertET6 = 0x0103, 210*4882a593Smuzhiyun LAlertEOffset6 = 0x0104, 211*4882a593Smuzhiyun LAlertES6 = 0x0105, 212*4882a593Smuzhiyun LAlertSN6 = 0x0106, 213*4882a593Smuzhiyun LAlertEntity6 = 0x0107, 214*4882a593Smuzhiyun LAlertEI6 = 0x0108, 215*4882a593Smuzhiyun LSnsrState6 = 0x0109, 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun LSnsrAddr7 = 0x010B, 218*4882a593Smuzhiyun LAlertCMD7 = 0x010C, 219*4882a593Smuzhiyun LAlertDataMsk7 = 0x010D, 220*4882a593Smuzhiyun LAlertCmp7 = 0x010E, 221*4882a593Smuzhiyun LAlertESnsrT7 = 0x010F, 222*4882a593Smuzhiyun LAlertET7 = 0x0110, 223*4882a593Smuzhiyun LAlertEOffset7 = 0x0111, 224*4882a593Smuzhiyun LAlertES7 = 0x0112, 225*4882a593Smuzhiyun LAlertSN7 = 0x0113, 226*4882a593Smuzhiyun LAlertEntity7 = 0x0114, 227*4882a593Smuzhiyun LAlertEI7 = 0x0115, 228*4882a593Smuzhiyun LSnsrState7 = 0x0116, 229*4882a593Smuzhiyun LAssert = 0x0117, 230*4882a593Smuzhiyun LDAssert = 0x0118, 231*4882a593Smuzhiyun IPServiceType = 0x0119, 232*4882a593Smuzhiyun IPIdfr = 0x011A, 233*4882a593Smuzhiyun FlagFOffset = 0x011C, 234*4882a593Smuzhiyun TTL = 0x011E, 235*4882a593Smuzhiyun HbtEI = 0x011F, 236*4882a593Smuzhiyun MgtConSID1 = 0x0120, 237*4882a593Smuzhiyun MgtConSID2 = 0x0124, 238*4882a593Smuzhiyun MgdCltSID = 0x0128, 239*4882a593Smuzhiyun StCd = 0x012C, 240*4882a593Smuzhiyun MgtConUR = 0x012D, 241*4882a593Smuzhiyun MgtConUNL = 0x012E, 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun AuthPd = 0x0130, 244*4882a593Smuzhiyun IntyPd = 0x0138, 245*4882a593Smuzhiyun MgtConRN = 0x0140, 246*4882a593Smuzhiyun MgdCtlRN = 0x0150, 247*4882a593Smuzhiyun MgtConUN = 0x0160, 248*4882a593Smuzhiyun Rakp2IntCk = 0x0170, 249*4882a593Smuzhiyun KO = 0x017C, 250*4882a593Smuzhiyun KA = 0x0190, 251*4882a593Smuzhiyun KG = 0x01A4, 252*4882a593Smuzhiyun KR = 0x01B8, 253*4882a593Smuzhiyun CP = 0x01CC, 254*4882a593Smuzhiyun CQ = 0x01D0, 255*4882a593Smuzhiyun KC = 0x01D4, 256*4882a593Smuzhiyun ConsoleSid = 0x01E8, 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun SIK1 = 0x01FC, 259*4882a593Smuzhiyun SIK2 = 0x0210, 260*4882a593Smuzhiyun Udpsrc_port = 0x0224, 261*4882a593Smuzhiyun Udpdes_port = 0x0226, 262*4882a593Smuzhiyun Asf_debug_mux = 0x0228 263*4882a593Smuzhiyun }; 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun enum asf_cmdln_opt { 266*4882a593Smuzhiyun ASF_GET, 267*4882a593Smuzhiyun ASF_SET, 268*4882a593Smuzhiyun ASF_HELP 269*4882a593Smuzhiyun }; 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun struct asf_ioctl_struct { 272*4882a593Smuzhiyun unsigned int arg; 273*4882a593Smuzhiyun unsigned int offset; 274*4882a593Smuzhiyun union { 275*4882a593Smuzhiyun unsigned int data[MAX_DATA_LEN]; 276*4882a593Smuzhiyun char string[MAX_STR_LEN]; 277*4882a593Smuzhiyun } u; 278*4882a593Smuzhiyun }; 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun int rtl8168_asf_ioctl(struct net_device *dev, struct ifreq *ifr); 281*4882a593Smuzhiyun void rtl8168_asf_hbperiod(struct rtl8168_private *tp, int arg, unsigned int *data); 282*4882a593Smuzhiyun void rtl8168_asf_wd16rst(struct rtl8168_private *tp, int arg, unsigned int *data); 283*4882a593Smuzhiyun void rtl8168_asf_console_mac(struct rtl8168_private *, int arg, unsigned int *data); 284*4882a593Smuzhiyun void rtl8168_asf_ip_address(struct rtl8168_private *, int arg, int offset, unsigned int *data); 285*4882a593Smuzhiyun void rtl8168_asf_config_regs(struct rtl8168_private *tp, int arg, int offset, unsigned int *data); 286*4882a593Smuzhiyun void rtl8168_asf_capability_masks(struct rtl8168_private *tp, int arg, int offset, unsigned int *data); 287*4882a593Smuzhiyun void rtl8168_asf_community_string(struct rtl8168_private *tp, int arg, char *string); 288*4882a593Smuzhiyun void rtl8168_asf_community_string_len(struct rtl8168_private *tp, int arg, unsigned int *data); 289*4882a593Smuzhiyun void rtl8168_asf_alert_resend_interval(struct rtl8168_private *tp, int arg, unsigned int *data); 290*4882a593Smuzhiyun void rtl8168_asf_time_period(struct rtl8168_private *tp, int arg, int offset, unsigned int *data); 291*4882a593Smuzhiyun void rtl8168_asf_key_access(struct rtl8168_private *, int arg, int offset, unsigned int *data); 292*4882a593Smuzhiyun void rtl8168_asf_rw_hexadecimal(struct rtl8168_private *tp, int arg, int offset, int len, unsigned int *data); 293*4882a593Smuzhiyun void rtl8168_asf_rw_iana(struct rtl8168_private *tp, int arg, unsigned int *data); 294*4882a593Smuzhiyun void rtl8168_asf_rw_uuid(struct rtl8168_private *tp, int arg, unsigned int *data); 295*4882a593Smuzhiyun void rtl8168_asf_rw_systemid(struct rtl8168_private *tp, int arg, unsigned int *data); 296