diff options
author | Evan Lojewski <github@meklort.com> | 2019-08-08 07:49:03 -0600 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2019-08-08 07:49:03 -0600 |
commit | 896fd9c041080d0d80b05f722504eb08fa4bdfe9 (patch) | |
tree | 4508494b6b1ada15ffcb13b1973859265325ae1c /libs | |
parent | e3247c19fd3c7f0342eb1b093a180f389882d496 (diff) | |
download | bcm5719-ortega-896fd9c041080d0d80b05f722504eb08fa4bdfe9.tar.gz bcm5719-ortega-896fd9c041080d0d80b05f722504eb08fa4bdfe9.zip |
NCSI: Cleanup getVersionID and ensure it uses the proper PCI dev/ven ids.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/NCSI/ncsi.c | 68 |
1 files changed, 27 insertions, 41 deletions
diff --git a/libs/NCSI/ncsi.c b/libs/NCSI/ncsi.c index 4745f9c..e8d84d2 100644 --- a/libs/NCSI/ncsi.c +++ b/libs/NCSI/ncsi.c @@ -279,8 +279,6 @@ package_state_t gPackageState = { void sendNCSIResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID, uint16_t response_code, uint16_t reasons_code); void sendNCSILinkStatusResponse(uint8_t InstanceID, uint8_t channelID, uint32_t LinkStatus, uint32_t OEMLinkStatus, uint32_t OtherIndications); -void sendNCSICapabilitiesResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID); -void sendNCSIVersionResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID); void resetChannel(int ch); @@ -485,18 +483,38 @@ static void disableVLANHandler(NetworkFrame_t *frame) static void getCapabilities(NetworkFrame_t *frame) { - // TODO: - // int ch = frame->controlPacket.ChannelID & CHANNEL_ID_MASK; + int ch = frame->controlPacket.ChannelID & CHANNEL_ID_MASK; // channel_state_t *channel = &(gPackageState.channel[ch]); - sendNCSICapabilitiesResponse(frame->controlPacket.InstanceID, frame->controlPacket.ChannelID, frame->controlPacket.ControlPacketType); + uint32_t packetSize = MAX(sizeof(gCapabilitiesFrame.capabilities), ETHERNET_FRAME_MIN - 4); + + gCapabilitiesFrame.capabilities.ChannelID = ch; + gCapabilitiesFrame.capabilities.ControlPacketType = frame->controlPacket.ControlPacketType | CONTROL_PACKET_TYPE_RESPONSE; + gCapabilitiesFrame.capabilities.InstanceID = frame->controlPacket.InstanceID; + gCapabilitiesFrame.capabilities.ResponseCode = NCSI_RESPONSE_CODE_COMMAND_COMPLETE; + gCapabilitiesFrame.capabilities.ReasonCode = NCSI_REASON_CODE_NONE; + + NCSI_TxPacket(gCapabilitiesFrame.words, packetSize); } static void getVersionID(NetworkFrame_t *frame) { - // TODO: - // int ch = frame->controlPacket.ChannelID & CHANNEL_ID_MASK; - // channel_state_t *channel = &(gPackageState.channel[ch]); - sendNCSIVersionResponse(frame->controlPacket.InstanceID, frame->controlPacket.ChannelID, frame->controlPacket.ControlPacketType); + int ch = frame->controlPacket.ChannelID & CHANNEL_ID_MASK; + channel_state_t *channel = &(gPackageState.channel[ch]); + DEVICE_t* device = (DEVICE_t*)channel->port->device; + uint32_t packetSize = MAX(sizeof(gVersionFrame.version), ETHERNET_FRAME_MIN - 4); + + gVersionFrame.version.ChannelID = ch; + gVersionFrame.version.ControlPacketType = frame->controlPacket.ControlPacketType | CONTROL_PACKET_TYPE_RESPONSE; + gVersionFrame.version.InstanceID = frame->controlPacket.InstanceID; + gVersionFrame.version.ResponseCode = NCSI_RESPONSE_CODE_COMMAND_COMPLETE; + gVersionFrame.version.ReasonCode = NCSI_REASON_CODE_NONE; + + gVersionFrame.version.PCIVendor = device->PciVendorDeviceId.bits.VendorID; + gVersionFrame.version.PCIDevice = device->PciVendorDeviceId.bits.DeviceID; + gVersionFrame.version.PCISubsystemVendor = device->PciSubsystemId.bits.SubsystemVendorID; + gVersionFrame.version.PCISubsystemDevice = device->PciSubsystemId.bits.SubsystemID; + + NCSI_TxPacket(gVersionFrame.words, packetSize); } @@ -744,38 +762,6 @@ void sendNCSILinkStatusResponse(uint8_t InstanceID, uint8_t channelID, uint32_t NCSI_TxPacket(gLinkStatusResponseFrame.words, packetSize); } -void sendNCSICapabilitiesResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID) -{ - uint32_t packetSize = MAX(sizeof(gCapabilitiesFrame.capabilities), ETHERNET_FRAME_MIN - 4); - - gCapabilitiesFrame.capabilities.ChannelID = channelID; - gCapabilitiesFrame.capabilities.ControlPacketType = controlID | CONTROL_PACKET_TYPE_RESPONSE; - gCapabilitiesFrame.capabilities.InstanceID = InstanceID; - gCapabilitiesFrame.capabilities.ResponseCode = NCSI_RESPONSE_CODE_COMMAND_COMPLETE; - gCapabilitiesFrame.capabilities.ReasonCode = NCSI_REASON_CODE_NONE; - - NCSI_TxPacket(gCapabilitiesFrame.words, packetSize); -} - -void sendNCSIVersionResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID) -{ - uint32_t packetSize = MAX(sizeof(gVersionFrame.version), ETHERNET_FRAME_MIN - 4); - - gVersionFrame.version.ChannelID = channelID; - gVersionFrame.version.ControlPacketType = controlID | CONTROL_PACKET_TYPE_RESPONSE; - gVersionFrame.version.InstanceID = InstanceID; - gVersionFrame.version.ResponseCode = NCSI_RESPONSE_CODE_COMMAND_COMPLETE; - gVersionFrame.version.ReasonCode = NCSI_REASON_CODE_NONE; - - gVersionFrame.version.PCIVendor = DEVICE.PciVendorDeviceId.bits.VendorID; - gVersionFrame.version.PCIDevice = DEVICE.PciVendorDeviceId.bits.DeviceID; - gVersionFrame.version.PCISubsystemVendor = DEVICE.PciSubsystemId.bits.SubsystemVendorID; - gVersionFrame.version.PCISubsystemDevice = DEVICE.PciSubsystemId.bits.SubsystemID; - - NCSI_TxPacket(gVersionFrame.words, packetSize); -} - - void sendNCSIResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID, uint16_t response_code, uint16_t reasons_code) { uint32_t packetSize = MAX(sizeof(gResponseFrame.responsePacket), ETHERNET_FRAME_MIN - 4); |