16389eaa7SGavin Shan /* 26389eaa7SGavin Shan * Copyright Gavin Shan, IBM Corporation 2016. 36389eaa7SGavin Shan * 46389eaa7SGavin Shan * This program is free software; you can redistribute it and/or modify 56389eaa7SGavin Shan * it under the terms of the GNU General Public License as published by 66389eaa7SGavin Shan * the Free Software Foundation; either version 2 of the License, or 76389eaa7SGavin Shan * (at your option) any later version. 86389eaa7SGavin Shan */ 96389eaa7SGavin Shan 106389eaa7SGavin Shan #ifndef __NCSI_PKT_H__ 116389eaa7SGavin Shan #define __NCSI_PKT_H__ 126389eaa7SGavin Shan 136389eaa7SGavin Shan struct ncsi_pkt_hdr { 146389eaa7SGavin Shan unsigned char mc_id; /* Management controller ID */ 156389eaa7SGavin Shan unsigned char revision; /* NCSI version - 0x01 */ 166389eaa7SGavin Shan unsigned char reserved; /* Reserved */ 176389eaa7SGavin Shan unsigned char id; /* Packet sequence number */ 186389eaa7SGavin Shan unsigned char type; /* Packet type */ 196389eaa7SGavin Shan unsigned char channel; /* Network controller ID */ 206389eaa7SGavin Shan __be16 length; /* Payload length */ 216389eaa7SGavin Shan __be32 reserved1[2]; /* Reserved */ 226389eaa7SGavin Shan }; 236389eaa7SGavin Shan 246389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr { 256389eaa7SGavin Shan struct ncsi_pkt_hdr common; /* Common NCSI packet header */ 266389eaa7SGavin Shan }; 276389eaa7SGavin Shan 286389eaa7SGavin Shan /* NCSI common command packet */ 296389eaa7SGavin Shan struct ncsi_cmd_pkt { 306389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 316389eaa7SGavin Shan __be32 checksum; /* Checksum */ 326389eaa7SGavin Shan unsigned char pad[26]; 336389eaa7SGavin Shan }; 346389eaa7SGavin Shan 356389eaa7SGavin Shan /* Select Package */ 366389eaa7SGavin Shan struct ncsi_cmd_sp_pkt { 376389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 386389eaa7SGavin Shan unsigned char reserved[3]; /* Reserved */ 396389eaa7SGavin Shan unsigned char hw_arbitration; /* HW arbitration */ 406389eaa7SGavin Shan __be32 checksum; /* Checksum */ 416389eaa7SGavin Shan unsigned char pad[22]; 426389eaa7SGavin Shan }; 436389eaa7SGavin Shan 446389eaa7SGavin Shan /* Disable Channel */ 456389eaa7SGavin Shan struct ncsi_cmd_dc_pkt { 466389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 476389eaa7SGavin Shan unsigned char reserved[3]; /* Reserved */ 486389eaa7SGavin Shan unsigned char ald; /* Allow link down */ 496389eaa7SGavin Shan __be32 checksum; /* Checksum */ 506389eaa7SGavin Shan unsigned char pad[22]; 516389eaa7SGavin Shan }; 526389eaa7SGavin Shan 536389eaa7SGavin Shan /* Reset Channel */ 546389eaa7SGavin Shan struct ncsi_cmd_rc_pkt { 556389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 566389eaa7SGavin Shan __be32 reserved; /* Reserved */ 576389eaa7SGavin Shan __be32 checksum; /* Checksum */ 586389eaa7SGavin Shan unsigned char pad[22]; 596389eaa7SGavin Shan }; 606389eaa7SGavin Shan 616389eaa7SGavin Shan /* AEN Enable */ 626389eaa7SGavin Shan struct ncsi_cmd_ae_pkt { 636389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 646389eaa7SGavin Shan unsigned char reserved[3]; /* Reserved */ 656389eaa7SGavin Shan unsigned char mc_id; /* MC ID */ 666389eaa7SGavin Shan __be32 mode; /* AEN working mode */ 676389eaa7SGavin Shan __be32 checksum; /* Checksum */ 686389eaa7SGavin Shan unsigned char pad[18]; 696389eaa7SGavin Shan }; 706389eaa7SGavin Shan 716389eaa7SGavin Shan /* Set Link */ 726389eaa7SGavin Shan struct ncsi_cmd_sl_pkt { 736389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 746389eaa7SGavin Shan __be32 mode; /* Link working mode */ 756389eaa7SGavin Shan __be32 oem_mode; /* OEM link mode */ 766389eaa7SGavin Shan __be32 checksum; /* Checksum */ 776389eaa7SGavin Shan unsigned char pad[18]; 786389eaa7SGavin Shan }; 796389eaa7SGavin Shan 806389eaa7SGavin Shan /* Set VLAN Filter */ 816389eaa7SGavin Shan struct ncsi_cmd_svf_pkt { 826389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 836389eaa7SGavin Shan __be16 reserved; /* Reserved */ 846389eaa7SGavin Shan __be16 vlan; /* VLAN ID */ 856389eaa7SGavin Shan __be16 reserved1; /* Reserved */ 866389eaa7SGavin Shan unsigned char index; /* VLAN table index */ 876389eaa7SGavin Shan unsigned char enable; /* Enable or disable */ 886389eaa7SGavin Shan __be32 checksum; /* Checksum */ 896389eaa7SGavin Shan unsigned char pad[14]; 906389eaa7SGavin Shan }; 916389eaa7SGavin Shan 926389eaa7SGavin Shan /* Enable VLAN */ 936389eaa7SGavin Shan struct ncsi_cmd_ev_pkt { 946389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 956389eaa7SGavin Shan unsigned char reserved[3]; /* Reserved */ 966389eaa7SGavin Shan unsigned char mode; /* VLAN filter mode */ 976389eaa7SGavin Shan __be32 checksum; /* Checksum */ 986389eaa7SGavin Shan unsigned char pad[22]; 996389eaa7SGavin Shan }; 1006389eaa7SGavin Shan 1016389eaa7SGavin Shan /* Set MAC Address */ 1026389eaa7SGavin Shan struct ncsi_cmd_sma_pkt { 1036389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 1046389eaa7SGavin Shan unsigned char mac[6]; /* MAC address */ 1056389eaa7SGavin Shan unsigned char index; /* MAC table index */ 1066389eaa7SGavin Shan unsigned char at_e; /* Addr type and operation */ 1076389eaa7SGavin Shan __be32 checksum; /* Checksum */ 1086389eaa7SGavin Shan unsigned char pad[18]; 1096389eaa7SGavin Shan }; 1106389eaa7SGavin Shan 1116389eaa7SGavin Shan /* Enable Broadcast Filter */ 1126389eaa7SGavin Shan struct ncsi_cmd_ebf_pkt { 1136389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 1146389eaa7SGavin Shan __be32 mode; /* Filter mode */ 1156389eaa7SGavin Shan __be32 checksum; /* Checksum */ 1166389eaa7SGavin Shan unsigned char pad[22]; 1176389eaa7SGavin Shan }; 1186389eaa7SGavin Shan 1196389eaa7SGavin Shan /* Enable Global Multicast Filter */ 1206389eaa7SGavin Shan struct ncsi_cmd_egmf_pkt { 1216389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 1226389eaa7SGavin Shan __be32 mode; /* Global MC mode */ 1236389eaa7SGavin Shan __be32 checksum; /* Checksum */ 1246389eaa7SGavin Shan unsigned char pad[22]; 1256389eaa7SGavin Shan }; 1266389eaa7SGavin Shan 1276389eaa7SGavin Shan /* Set NCSI Flow Control */ 1286389eaa7SGavin Shan struct ncsi_cmd_snfc_pkt { 1296389eaa7SGavin Shan struct ncsi_cmd_pkt_hdr cmd; /* Command header */ 1306389eaa7SGavin Shan unsigned char reserved[3]; /* Reserved */ 1316389eaa7SGavin Shan unsigned char mode; /* Flow control mode */ 1326389eaa7SGavin Shan __be32 checksum; /* Checksum */ 1336389eaa7SGavin Shan unsigned char pad[22]; 1346389eaa7SGavin Shan }; 1356389eaa7SGavin Shan 1366389eaa7SGavin Shan /* NCSI packet revision */ 1376389eaa7SGavin Shan #define NCSI_PKT_REVISION 0x01 1386389eaa7SGavin Shan 1396389eaa7SGavin Shan /* NCSI packet commands */ 1406389eaa7SGavin Shan #define NCSI_PKT_CMD_CIS 0x00 /* Clear Initial State */ 1416389eaa7SGavin Shan #define NCSI_PKT_CMD_SP 0x01 /* Select Package */ 1426389eaa7SGavin Shan #define NCSI_PKT_CMD_DP 0x02 /* Deselect Package */ 1436389eaa7SGavin Shan #define NCSI_PKT_CMD_EC 0x03 /* Enable Channel */ 1446389eaa7SGavin Shan #define NCSI_PKT_CMD_DC 0x04 /* Disable Channel */ 1456389eaa7SGavin Shan #define NCSI_PKT_CMD_RC 0x05 /* Reset Channel */ 1466389eaa7SGavin Shan #define NCSI_PKT_CMD_ECNT 0x06 /* Enable Channel Network Tx */ 1476389eaa7SGavin Shan #define NCSI_PKT_CMD_DCNT 0x07 /* Disable Channel Network Tx */ 1486389eaa7SGavin Shan #define NCSI_PKT_CMD_AE 0x08 /* AEN Enable */ 1496389eaa7SGavin Shan #define NCSI_PKT_CMD_SL 0x09 /* Set Link */ 1506389eaa7SGavin Shan #define NCSI_PKT_CMD_GLS 0x0a /* Get Link */ 1516389eaa7SGavin Shan #define NCSI_PKT_CMD_SVF 0x0b /* Set VLAN Filter */ 1526389eaa7SGavin Shan #define NCSI_PKT_CMD_EV 0x0c /* Enable VLAN */ 1536389eaa7SGavin Shan #define NCSI_PKT_CMD_DV 0x0d /* Disable VLAN */ 1546389eaa7SGavin Shan #define NCSI_PKT_CMD_SMA 0x0e /* Set MAC address */ 1556389eaa7SGavin Shan #define NCSI_PKT_CMD_EBF 0x10 /* Enable Broadcast Filter */ 1566389eaa7SGavin Shan #define NCSI_PKT_CMD_DBF 0x11 /* Disable Broadcast Filter */ 1576389eaa7SGavin Shan #define NCSI_PKT_CMD_EGMF 0x12 /* Enable Global Multicast Filter */ 1586389eaa7SGavin Shan #define NCSI_PKT_CMD_DGMF 0x13 /* Disable Global Multicast Filter */ 1596389eaa7SGavin Shan #define NCSI_PKT_CMD_SNFC 0x14 /* Set NCSI Flow Control */ 1606389eaa7SGavin Shan #define NCSI_PKT_CMD_GVI 0x15 /* Get Version ID */ 1616389eaa7SGavin Shan #define NCSI_PKT_CMD_GC 0x16 /* Get Capabilities */ 1626389eaa7SGavin Shan #define NCSI_PKT_CMD_GP 0x17 /* Get Parameters */ 1636389eaa7SGavin Shan #define NCSI_PKT_CMD_GCPS 0x18 /* Get Controller Packet Statistics */ 1646389eaa7SGavin Shan #define NCSI_PKT_CMD_GNS 0x19 /* Get NCSI Statistics */ 1656389eaa7SGavin Shan #define NCSI_PKT_CMD_GNPTS 0x1a /* Get NCSI Pass-throu Statistics */ 1666389eaa7SGavin Shan #define NCSI_PKT_CMD_GPS 0x1b /* Get package status */ 1676389eaa7SGavin Shan #define NCSI_PKT_CMD_OEM 0x50 /* OEM */ 1686389eaa7SGavin Shan #define NCSI_PKT_CMD_PLDM 0x51 /* PLDM request over NCSI over RBT */ 1696389eaa7SGavin Shan #define NCSI_PKT_CMD_GPUUID 0x52 /* Get package UUID */ 1706389eaa7SGavin Shan 1716389eaa7SGavin Shan #endif /* __NCSI_PKT_H__ */ 172