Zhang Lubo
2015-07-14 01:49:32 UTC
AsmReadTsc() implementation which is decelerated in BaseLib.h covers both IA32, X64 and
IPF architecture, so it should specify which implementation to use when invoked.
1. Different Macro definition in DnsImpl.c to specify the implementation.
2. Modefy the NetworkPkg.dsc file to let the DnsDxe.inf is effective to different Arch.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <***@intel.com>
---
NetworkPkg/DnsDxe/DnsImpl.c | 23 ++++++++++++++++++++++-
NetworkPkg/NetworkPkg.dsc | 2 +-
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/NetworkPkg/DnsDxe/DnsImpl.c b/NetworkPkg/DnsDxe/DnsImpl.c
index b196d18..93b1835 100644
--- a/NetworkPkg/DnsDxe/DnsImpl.c
+++ b/NetworkPkg/DnsDxe/DnsImpl.c
@@ -13,10 +13,31 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include "DnsImpl.h"
/**
+ Reads the current value of Time Stamp Counter (TSC) or the Interval Timer Counter Register (ITC)
+
+ @return The current value of TSC or ITC
+
+**/
+
+UINT64
+ReadTime (
+ VOID
+ )
+{
+#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
+ return AsmReadTsc ();
+#elif defined (MDE_CPU_IPF)
+ return AsmReadItc ();
+#else
+#error ReadTime not supported for this architecture!
+#endif
+}
+
+/**
Remove TokenEntry from TokenMap.
@param[in] TokenMap All DNSv4 Token entrys.
@param[in] TokenEntry TokenEntry need to be removed.
@@ -1573,11 +1594,11 @@ ConstructDNSQueryIp (
//
// Fill header
//
DnsHeader = (DNS_HEADER *)Frag.Bulk;
- DnsHeader->Identification = (UINT16)AsmReadTsc ();
+ DnsHeader->Identification = (UINT16)ReadTime();
DnsHeader->Flags.Uint16 = 0x0000;
DnsHeader->Flags.Bits.RD = 1;
DnsHeader->Flags.Bits.OpCode = DNS_FLAGS_OPCODE_STANDARD;
DnsHeader->Flags.Bits.QR = DNS_FLAGS_QR_QUERY;
DnsHeader->QuestionsNum = 1;
diff --git a/NetworkPkg/NetworkPkg.dsc b/NetworkPkg/NetworkPkg.dsc
index 1d7fd85..11e0ce0 100644
--- a/NetworkPkg/NetworkPkg.dsc
+++ b/NetworkPkg/NetworkPkg.dsc
@@ -98,11 +98,10 @@
NetworkPkg/Ip6Dxe/Ip6Dxe.inf
NetworkPkg/TcpDxe/TcpDxe.inf
NetworkPkg/Udp6Dxe/Udp6Dxe.inf
NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf
NetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf
- NetworkPkg/DnsDxe/DnsDxe.inf
NetworkPkg/HttpDxe/HttpDxe.inf
NetworkPkg/HttpBootDxe/HttpBootDxe.inf
NetworkPkg/Application/IfConfig6/IfConfig6.inf
NetworkPkg/Application/IpsecConfig/IpSecConfig.inf
@@ -111,5 +110,6 @@
[Components.IA32, Components.X64, Components.IPF]
NetworkPkg/IpSecDxe/IpSecDxe.inf
NetworkPkg/IScsiDxe/IScsiDxe.inf
NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
NetworkPkg/Application/Ping6/Ping6.inf
+ NetworkPkg/DnsDxe/DnsDxe.inf
IPF architecture, so it should specify which implementation to use when invoked.
1. Different Macro definition in DnsImpl.c to specify the implementation.
2. Modefy the NetworkPkg.dsc file to let the DnsDxe.inf is effective to different Arch.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Zhang Lubo <***@intel.com>
---
NetworkPkg/DnsDxe/DnsImpl.c | 23 ++++++++++++++++++++++-
NetworkPkg/NetworkPkg.dsc | 2 +-
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/NetworkPkg/DnsDxe/DnsImpl.c b/NetworkPkg/DnsDxe/DnsImpl.c
index b196d18..93b1835 100644
--- a/NetworkPkg/DnsDxe/DnsImpl.c
+++ b/NetworkPkg/DnsDxe/DnsImpl.c
@@ -13,10 +13,31 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include "DnsImpl.h"
/**
+ Reads the current value of Time Stamp Counter (TSC) or the Interval Timer Counter Register (ITC)
+
+ @return The current value of TSC or ITC
+
+**/
+
+UINT64
+ReadTime (
+ VOID
+ )
+{
+#if defined (MDE_CPU_IA32) || defined (MDE_CPU_X64)
+ return AsmReadTsc ();
+#elif defined (MDE_CPU_IPF)
+ return AsmReadItc ();
+#else
+#error ReadTime not supported for this architecture!
+#endif
+}
+
+/**
Remove TokenEntry from TokenMap.
@param[in] TokenMap All DNSv4 Token entrys.
@param[in] TokenEntry TokenEntry need to be removed.
@@ -1573,11 +1594,11 @@ ConstructDNSQueryIp (
//
// Fill header
//
DnsHeader = (DNS_HEADER *)Frag.Bulk;
- DnsHeader->Identification = (UINT16)AsmReadTsc ();
+ DnsHeader->Identification = (UINT16)ReadTime();
DnsHeader->Flags.Uint16 = 0x0000;
DnsHeader->Flags.Bits.RD = 1;
DnsHeader->Flags.Bits.OpCode = DNS_FLAGS_OPCODE_STANDARD;
DnsHeader->Flags.Bits.QR = DNS_FLAGS_QR_QUERY;
DnsHeader->QuestionsNum = 1;
diff --git a/NetworkPkg/NetworkPkg.dsc b/NetworkPkg/NetworkPkg.dsc
index 1d7fd85..11e0ce0 100644
--- a/NetworkPkg/NetworkPkg.dsc
+++ b/NetworkPkg/NetworkPkg.dsc
@@ -98,11 +98,10 @@
NetworkPkg/Ip6Dxe/Ip6Dxe.inf
NetworkPkg/TcpDxe/TcpDxe.inf
NetworkPkg/Udp6Dxe/Udp6Dxe.inf
NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf
NetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf
- NetworkPkg/DnsDxe/DnsDxe.inf
NetworkPkg/HttpDxe/HttpDxe.inf
NetworkPkg/HttpBootDxe/HttpBootDxe.inf
NetworkPkg/Application/IfConfig6/IfConfig6.inf
NetworkPkg/Application/IpsecConfig/IpSecConfig.inf
@@ -111,5 +110,6 @@
[Components.IA32, Components.X64, Components.IPF]
NetworkPkg/IpSecDxe/IpSecDxe.inf
NetworkPkg/IScsiDxe/IScsiDxe.inf
NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
NetworkPkg/Application/Ping6/Ping6.inf
+ NetworkPkg/DnsDxe/DnsDxe.inf
--
1.9.5.msysgit.1
1.9.5.msysgit.1