mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 19:34:43 +01:00
Compare commits
23
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf0104cf3d | ||
|
|
cd5e4e1eca | ||
|
|
ef5606456e | ||
|
|
bf25cc88dd | ||
|
|
b0562ee81b | ||
|
|
8b947d90f9 | ||
|
|
ea75e84cbf | ||
|
|
a3c83fa574 | ||
|
|
1d91a17f0e | ||
|
|
51b3ef0ef8 | ||
|
|
9282df6f75 | ||
|
|
988e93a467 | ||
|
|
b004a3541a | ||
|
|
3e5c576287 | ||
|
|
ca259565e0 | ||
|
|
fa7cad41cb | ||
|
|
2cc15696e9 | ||
|
|
3f58dd9a83 | ||
|
|
e66c9e9aeb | ||
|
|
d5f8eb6073 | ||
|
|
8fcfd86217 | ||
|
|
130e9cdb11 | ||
|
|
a1348a63d8 |
No files matched your search
@@ -16,6 +16,19 @@ from older versions of FreeBSD, try WITHOUT_CLANG and WITH_GCC to bootstrap to
|
||||
the tip of head, and then rebuild without this option. The bootstrap process
|
||||
from older version of current across the gcc/clang cutover is a bit fragile.
|
||||
|
||||
20190709:
|
||||
11.3-RELEASE.
|
||||
|
||||
20190702 p1 FreeBSD-EN-19:12.tzdata
|
||||
FreeBSD-SA-19:09.iconv
|
||||
FreeBSD-SA-19:11.cd_ioctl
|
||||
|
||||
Import tzdata 2019b. [EN-19:12.tzdata]
|
||||
|
||||
Fix iconv buffer overflow. [SA-19:09.iconv]
|
||||
|
||||
Fix privilege escalation in cd(4) driver. [SA-19:11.cd_ioctl]
|
||||
|
||||
20190426:
|
||||
CARP now sets DSCP value CS7(Network Traffic) in the flowlabel field
|
||||
of packets by default instead of only setting TOS_LOWDELAY in IPv4,
|
||||
|
||||
+33
-12
@@ -35,11 +35,13 @@ DATAFORM= main
|
||||
|
||||
LOCALTIME= GMT
|
||||
|
||||
# If you want something other than Eastern United States time as a template
|
||||
# for handling ruleless POSIX-style timezone environment variables,
|
||||
# The POSIXRULES macro controls interpretation of nonstandard and obsolete
|
||||
# POSIX-like TZ settings like TZ='EET-2EEST' that lack DST transition rules.
|
||||
# In the reference implementation, if you want something other than Eastern
|
||||
# United States time as a template for handling these settings, you can
|
||||
# change the line below (after finding the timezone you want in the
|
||||
# one of the $(TDATA) source files, or adding it to a source file).
|
||||
# A ruleless environment setting like TZ='CST6CDT' uses the rules in the
|
||||
# A setting like TZ='EET-2EEST' is supposed to use the rules in the
|
||||
# template file to determine "spring forward" and "fall back" days and
|
||||
# times; the environment variable itself specifies UT offsets of standard and
|
||||
# daylight saving time.
|
||||
@@ -49,6 +51,17 @@ LOCALTIME= GMT
|
||||
# Use the command
|
||||
# make zonenames
|
||||
# to get a list of the values you can use for POSIXRULES.
|
||||
#
|
||||
# If POSIXRULES is empty, no template is installed; this is the intended
|
||||
# future default for POSIXRULES.
|
||||
#
|
||||
# Nonempty POSIXRULES is obsolete and should not be relied on, because:
|
||||
# * It does not work correctly in popular implementations such as GNU/Linux.
|
||||
# * It does not work in the tzdb implementation for timestamps after 2037.
|
||||
# * It is incompatible with 'zic -b slim' if POSIXRULES specifies transitions
|
||||
# at standard time or UT rather than at local time.
|
||||
# In short, software should avoid ruleless settings like TZ='EET-2EEST'
|
||||
# and so should not depend on the value of POSIXRULES.
|
||||
|
||||
POSIXRULES= America/New_York
|
||||
|
||||
@@ -231,6 +244,13 @@ LDLIBS=
|
||||
# other than simply getting garbage data
|
||||
# -DUSE_LTZ=0 to build zdump with the system time zone library
|
||||
# Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
|
||||
# -DZIC_BLOAT_DEFAULT=\"slim\" to default zic's -b option to "slim", and
|
||||
# similarly for "fat". Fat TZif files work around incompatibilities
|
||||
# and bugs in some TZif readers, notably readers that mishandle 64-bit
|
||||
# data in TZif files. Slim TZif files are more efficient and do not
|
||||
# work around these incompatibilities and bugs. If not given, the
|
||||
# current default is "fat" but this is intended to change as readers
|
||||
# requiring fat files often mishandle timestamps after 2037 anyway.
|
||||
# -DZIC_MAX_ABBR_LEN_WO_WARN=3
|
||||
# (or some other number) to set the maximum time zone abbreviation length
|
||||
# that zic will accept without a warning (the default is 6)
|
||||
@@ -364,7 +384,9 @@ ZIC= $(zic) $(ZFLAGS)
|
||||
|
||||
# To shrink the size of installed TZif files,
|
||||
# append "-r @N" to omit data before N-seconds-after-the-Epoch.
|
||||
# See the zic man page for more about -r.
|
||||
# You can also append "-b slim" if that is not already the default;
|
||||
# see ZIC_BLOAT_DEFAULT above.
|
||||
# See the zic man page for more about -b and -r.
|
||||
ZFLAGS=
|
||||
|
||||
# How to use zic to install TZif files.
|
||||
@@ -388,6 +410,9 @@ KSHELL= /bin/bash
|
||||
# Name of curl <https://curl.haxx.se/>, used for HTML validation.
|
||||
CURL= curl
|
||||
|
||||
# Name of GNU Privacy Guard <https://gnupg.org/>, used to sign distributions.
|
||||
GPG= gpg
|
||||
|
||||
# The path where SGML DTDs are kept and the catalog file(s) to use when
|
||||
# validating HTML 4.01. The default should work on both Debian and Red Hat.
|
||||
SGML_TOPDIR= /usr
|
||||
@@ -562,7 +587,9 @@ install: all $(DATA) $(REDO) $(MANS)
|
||||
'$(DESTDIR)$(LIBDIR)' \
|
||||
'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
|
||||
'$(DESTDIR)$(MANDIR)/man8'
|
||||
$(ZIC_INSTALL) -l $(LOCALTIME) -p $(POSIXRULES) \
|
||||
$(ZIC_INSTALL) -l $(LOCALTIME) \
|
||||
`case '$(POSIXRULES)' in ?*) echo '-p';; esac \
|
||||
` $(POSIXRULES) \
|
||||
-t '$(DESTDIR)$(TZDEFAULT)'
|
||||
cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
|
||||
cp tzselect '$(DESTDIR)$(BINDIR)/.'
|
||||
@@ -781,12 +808,6 @@ CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
|
||||
check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
|
||||
$(AWK) '/^Link/ {print $$3}' backward | LC_ALL=C sort -cu
|
||||
$(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
|
||||
$(AWK) '/^[^#]/ {print $$1}' iso3166.tab | LC_ALL=C sort -cu
|
||||
$(AWK) '/^[^#]/ {print $$1}' zone.tab | LC_ALL=C sort -c
|
||||
$(AWK) '/^[^#]/ {print substr($$0, 1, 2)}' zone1970.tab | \
|
||||
LC_ALL=C sort -c
|
||||
$(AWK) '/^[^#]/ $(CHECK_CC_LIST)' zone1970.tab | \
|
||||
LC_ALL=C sort -cu
|
||||
touch $@
|
||||
|
||||
check_links: checklinks.awk $(TDATA_TO_CHECK) tzdata.zi
|
||||
@@ -1051,7 +1072,7 @@ tzdata$(VERSION).tar.gz.asc: tzdata$(VERSION).tar.gz
|
||||
tzdata$(VERSION)-rearguard.tar.gz.asc: tzdata$(VERSION)-rearguard.tar.gz
|
||||
tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz
|
||||
$(ALL_ASC):
|
||||
gpg2 --armor --detach-sign $?
|
||||
$(GPG) --armor --detach-sign $?
|
||||
|
||||
TYPECHECK_CFLAGS = $(CFLAGS) -DTYPECHECK -D__time_t_defined -D_TIME_T
|
||||
typecheck: typecheck_long_long typecheck_unsigned
|
||||
|
||||
+99
-5
@@ -1,6 +1,100 @@
|
||||
News for the tz database
|
||||
|
||||
Release 20198 - 2019-03-25 22:01:33 -0700
|
||||
Release 2019b - 2019-07-01 00:09:53 -0700
|
||||
|
||||
Briefly:
|
||||
Brazil no longer observes DST.
|
||||
'zic -b slim' outputs smaller TZif files; please try it out.
|
||||
Palestine's 2019 spring-forward transition was on 03-29, not 03-30.
|
||||
|
||||
Changes to future timestamps
|
||||
|
||||
Brazil has canceled DST and will stay on standard time indefinitely.
|
||||
(Thanks to Steffen Thorsen, Marcus Diniz, and Daniel Soares de
|
||||
Oliveira.)
|
||||
|
||||
Predictions for Morocco now go through 2087 instead of 2037, to
|
||||
work around a problem on newlib when using TZif files output by
|
||||
zic 2019a or earlier. (Problem reported by David Gauchard.)
|
||||
|
||||
Changes to past and future timestamps
|
||||
|
||||
Palestine's 2019 spring transition was 03-29 at 00:00, not 03-30
|
||||
at 01:00. (Thanks to Sharef Mustafa and Even Scharning.) Guess
|
||||
future transitions to be March's last Friday at 00:00.
|
||||
|
||||
Changes to past timestamps
|
||||
|
||||
Hong Kong's 1941-06-15 spring-forward transition was at 03:00, not
|
||||
03:30. Its 1945 transition from JST to HKT was on 11-18 at 02:00,
|
||||
not 09-15 at 00:00. In 1946 its spring-forward transition was on
|
||||
04-21 at 00:00, not the previous day at 03:30. From 1946 through
|
||||
1952 its fall-back transitions occurred at 04:30, not at 03:30.
|
||||
In 1947 its fall-back transition was on 11-30, not 12-30.
|
||||
(Thanks to P Chan.)
|
||||
|
||||
Changes to past time zone abbreviations
|
||||
|
||||
Italy's 1866 transition to Rome Mean Time was on December 12, not
|
||||
September 22. This affects only the time zone abbreviation for
|
||||
Europe/Rome between those dates. (Thanks to Stephen Trainor and
|
||||
Luigi Rosa.)
|
||||
|
||||
Changes affecting metadata only
|
||||
|
||||
Add info about the Crimea situation in zone1970.tab and zone.tab.
|
||||
(Problem reported by Serhii Demediuk.)
|
||||
|
||||
Changes to code
|
||||
|
||||
zic's new -b option supports a way to control data bloat and to
|
||||
test for year-2038 bugs in software that reads TZif files.
|
||||
'zic -b fat' and 'zic -b slim' generate larger and smaller output;
|
||||
for example, changing from fat to slim shrinks the Europe/London
|
||||
file from 3648 to 1599 bytes, saving about 56%. Fat and slim
|
||||
files represent the same set of timestamps and use the same TZif
|
||||
format as documented in tzfile(5) and in Internet RFC 8536.
|
||||
Fat format attempts to work around bugs or incompatibilities in
|
||||
older software, notably software that mishandles 64-bit TZif data
|
||||
or uses obsolete TZ strings like "EET-2EEST" that lack DST rules.
|
||||
Slim format is more efficient and does not work around 64-bit bugs
|
||||
or obsolete TZ strings. Currently zic defaults to fat format
|
||||
unless you compile with -DZIC_BLOAT_DEFAULT=\"slim\"; this
|
||||
out-of-the-box default is intended to change in future releases
|
||||
as the buggy software often mishandles timestamps anyway.
|
||||
|
||||
zic no longer treats a set of rules ending in 2037 specially.
|
||||
Previously, zic assumed that such a ruleset meant that future
|
||||
timestamps could not be predicted, and therefore omitted a
|
||||
POSIX-like TZ string in the TZif output. The old behavior is no
|
||||
longer needed for current tzdata, and caused problems with newlib
|
||||
when used with older tzdata (reported by David Gauchard).
|
||||
|
||||
zic no longer generates some artifact transitions. For example,
|
||||
Europe/London no longer has a no-op transition in January 1996.
|
||||
|
||||
Changes to build procedure
|
||||
|
||||
tzdata.zi now assumes zic 2017c or later. This shrinks tzdata.zi
|
||||
by a percent or so.
|
||||
|
||||
Changes to documentation and commentary
|
||||
|
||||
The Makefile now documents the POSIXRULES macro as being obsolete,
|
||||
and similarly, zic's -p POSIXRULES option is now documented as
|
||||
being obsolete. Although the POSIXRULES feature still exists and
|
||||
works as before, in practice it is rarely used for its intended
|
||||
purpose, and it does not work either in the default reference
|
||||
implementation (for timestamps after 2037) or in common
|
||||
implementations such as GNU/Linux (for contemporary timestamps).
|
||||
Since POSIXRULES was designed primarily as a temporary transition
|
||||
facility for System V platforms that died off decades ago, it is
|
||||
being decommissioned rather than institutionalized.
|
||||
|
||||
New info on Bonin Islands and Marcus (thanks to Wakaba and Phake Nick).
|
||||
|
||||
|
||||
Release 2019a - 2019-03-25 22:01:33 -0700
|
||||
|
||||
Briefly:
|
||||
Palestine "springs forward" on 2019-03-30 instead of 2019-03-23.
|
||||
@@ -481,7 +575,7 @@ Release 2018d - 2018-03-22 07:05:46 -0700
|
||||
The code is a bit more portable to MS-Windows. Installers can
|
||||
compile with -DRESERVE_STD_EXT_IDS on MS-Windows platforms that
|
||||
reserve identifiers like 'localtime'. (Thanks to Manuela
|
||||
Friedrich).
|
||||
Friedrich.)
|
||||
|
||||
Changes to documentation and commentary
|
||||
|
||||
@@ -2276,7 +2370,7 @@ Release 2014f - 2014-08-05 17:42:36 -0700
|
||||
warlord Jin Shuren in the data.
|
||||
|
||||
Commentary about the coverage of each Russian zone has been standardized.
|
||||
(Thanks to Tim Parenti).
|
||||
(Thanks to Tim Parenti.)
|
||||
|
||||
There is new commentary about contemporary timekeeping in Ethiopia.
|
||||
|
||||
@@ -2724,7 +2818,7 @@ Release 2013e - 2013-09-19 23:50:04 -0700
|
||||
|
||||
Change the UT offset of Bern Mean Time from 0:29:44 to 0:29:46.
|
||||
This affects Europe/Zurich timestamps from 1853 to 1894. (Thanks
|
||||
to Alois Treindl).
|
||||
to Alois Treindl.)
|
||||
|
||||
Change the date of the circa-1850 Zurich transition from 1849-09-12
|
||||
to 1853-07-16, overriding Shanks with data from Messerli about
|
||||
@@ -3034,7 +3128,7 @@ Release 2013a - 2013-02-27 09:20:35 -0800
|
||||
(Thanks to Arthur David Olson.)
|
||||
|
||||
Improve the commentary about which districts observe what times
|
||||
in Russia. (Thanks to Oscar van Vlijmen and Arthur David Olson).
|
||||
in Russia. (Thanks to Oscar van Vlijmen and Arthur David Olson.)
|
||||
|
||||
Add web page links to tz.js.
|
||||
|
||||
|
||||
+140
-28
@@ -89,7 +89,7 @@ Rule Algeria 1980 only - Apr 25 0:00 1:00 S
|
||||
Rule Algeria 1980 only - Oct 31 2:00 0 -
|
||||
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
|
||||
# more precise 0:09:21.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
|
||||
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||||
0:00 Algeria WE%sT 1940 Feb 25 2:00
|
||||
@@ -124,7 +124,7 @@ Zone Africa/Algiers 0:12:12 - LMT 1891 Mar 15 0:01
|
||||
# For now, ignore that and follow the 1911-05-26 Portuguese decree
|
||||
# (see Europe/Lisbon).
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
|
||||
-2:00 - -02 1942 Sep
|
||||
-2:00 1:00 -01 1945 Oct 15
|
||||
@@ -135,7 +135,7 @@ Zone Atlantic/Cape_Verde -1:34:04 - LMT 1912 Jan 01 2:00u # Praia
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Chad
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
|
||||
1:00 - WAT 1979 Oct 14
|
||||
1:00 1:00 WAST 1980 Mar 8
|
||||
@@ -151,7 +151,7 @@ Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Côte d'Ivoire / Ivory Coast
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Abidjan -0:16:08 - LMT 1912
|
||||
0:00 - GMT
|
||||
Link Africa/Abidjan Africa/Bamako # Mali
|
||||
@@ -356,7 +356,7 @@ Rule Egypt 2014 only - Jun 26 24:00 0 -
|
||||
Rule Egypt 2014 only - Jul 31 24:00 1:00 S
|
||||
Rule Egypt 2014 only - Sep lastThu 24:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
2:00 Egypt EE%sT
|
||||
|
||||
@@ -414,7 +414,7 @@ Zone Africa/Cairo 2:05:09 - LMT 1900 Oct
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Ghana 1920 1942 - Sep 1 0:00 0:20 -
|
||||
Rule Ghana 1920 1942 - Dec 31 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Accra -0:00:52 - LMT 1918
|
||||
0:00 Ghana GMT/+0020
|
||||
|
||||
@@ -428,13 +428,13 @@ Zone Africa/Accra -0:00:52 - LMT 1918
|
||||
# evidently confusing the date of the Portuguese decree
|
||||
# (see Europe/Lisbon) with the date that it took effect.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Bissau -1:02:20 - LMT 1912 Jan 1 1:00u
|
||||
-1:00 - -01 1975
|
||||
0:00 - GMT
|
||||
|
||||
# Kenya
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Nairobi 2:27:16 - LMT 1928 Jul
|
||||
3:00 - EAT 1930
|
||||
2:30 - +0230 1940
|
||||
@@ -469,7 +469,7 @@ Link Africa/Nairobi Indian/Mayotte
|
||||
# Use the abbreviation "MMT" before 1972, as the more-accurate numeric
|
||||
# abbreviation "-004430" would be one byte over the POSIX limit.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Monrovia -0:43:08 - LMT 1882
|
||||
-0:43:08 - MMT 1919 Mar # Monrovia Mean Time
|
||||
-0:44:30 - MMT 1972 Jan 7 # approximately MMT
|
||||
@@ -519,7 +519,7 @@ Rule Libya 1997 only - Apr 4 0:00 1:00 S
|
||||
Rule Libya 1997 only - Oct 4 0:00 0 -
|
||||
Rule Libya 2013 only - Mar lastFri 1:00 1:00 S
|
||||
Rule Libya 2013 only - Oct lastFri 2:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Tripoli 0:52:44 - LMT 1920
|
||||
1:00 Libya CE%sT 1959
|
||||
2:00 - EET 1982
|
||||
@@ -629,7 +629,7 @@ Rule Mauritius 1982 only - Oct 10 0:00 1:00 -
|
||||
Rule Mauritius 1983 only - Mar 21 0:00 0 -
|
||||
Rule Mauritius 2008 only - Oct lastSun 2:00 1:00 -
|
||||
Rule Mauritius 2009 only - Mar lastSun 2:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||||
4:00 Mauritius +04/+05
|
||||
# Agalega Is, Rodriguez
|
||||
@@ -860,18 +860,24 @@ Zone Indian/Mauritius 3:50:00 - LMT 1907 # Port Louis
|
||||
# the week end after.... The government does not announce yet the decision
|
||||
# about this temporary change. But it s 99% sure that it will be the case,
|
||||
# as in previous years. An unofficial survey was done these days, showing
|
||||
# that 64% of asked peopke are ok for moving from +1 to +0 during Ramadan.
|
||||
# that 64% of asked people are ok for moving from +1 to +0 during Ramadan.
|
||||
# https://leconomiste.com/article/1035870-enquete-l-economiste-sunergia-64-des-marocains-plebiscitent-le-gmt-pendant-ramadan
|
||||
|
||||
# From Naoufal Semlali (2019-04-16):
|
||||
# Morocco will be on GMT starting from Sunday, May 5th 2019 at 3am.
|
||||
# The switch to GMT+1 will occur on Sunday, June 9th 2019 at 2am....
|
||||
# http://fr.le360.ma/societe/voici-la-date-du-retour-a-lheure-legale-au-maroc-188222
|
||||
#
|
||||
# From Paul Eggert (2018-11-01):
|
||||
# For now, guess that Morocco will fall back at 03:00 the last Sunday
|
||||
# before Ramadan, and spring forward at 02:00 the first Sunday after
|
||||
# From Paul Eggert (2019-05-20):
|
||||
# This agrees with our 2018-11-01 guess that the Moroccan government
|
||||
# would continue the practice of falling back at 03:00 the last Sunday
|
||||
# before Ramadan, and of springing forward at 02:00 the first Sunday after
|
||||
# Ramadan, as this has been the practice since 2012. To implement this,
|
||||
# transition dates for 2019 through 2037 were determined by running the
|
||||
# following program under GNU Emacs 26.1.
|
||||
# transition dates for 2019 through 2087 were determined by running the
|
||||
# following program under GNU Emacs 26.2.
|
||||
# (let ((islamic-year 1440))
|
||||
# (require 'cal-islam)
|
||||
# (while (< islamic-year 1460)
|
||||
# (while (< islamic-year 1511)
|
||||
# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
|
||||
# (b (calendar-islamic-to-absolute (list 10 1 islamic-year)))
|
||||
# (sunday 0))
|
||||
@@ -970,8 +976,114 @@ Rule Morocco 2036 only - Oct 19 3:00 -1:00 -
|
||||
Rule Morocco 2036 only - Nov 23 2:00 0 -
|
||||
Rule Morocco 2037 only - Oct 4 3:00 -1:00 -
|
||||
Rule Morocco 2037 only - Nov 15 2:00 0 -
|
||||
Rule Morocco 2038 only - Sep 26 3:00 -1:00 -
|
||||
Rule Morocco 2038 only - Oct 31 2:00 0 -
|
||||
Rule Morocco 2039 only - Sep 18 3:00 -1:00 -
|
||||
Rule Morocco 2039 only - Oct 23 2:00 0 -
|
||||
Rule Morocco 2040 only - Sep 2 3:00 -1:00 -
|
||||
Rule Morocco 2040 only - Oct 14 2:00 0 -
|
||||
Rule Morocco 2041 only - Aug 25 3:00 -1:00 -
|
||||
Rule Morocco 2041 only - Sep 29 2:00 0 -
|
||||
Rule Morocco 2042 only - Aug 10 3:00 -1:00 -
|
||||
Rule Morocco 2042 only - Sep 21 2:00 0 -
|
||||
Rule Morocco 2043 only - Aug 2 3:00 -1:00 -
|
||||
Rule Morocco 2043 only - Sep 6 2:00 0 -
|
||||
Rule Morocco 2044 only - Jul 24 3:00 -1:00 -
|
||||
Rule Morocco 2044 only - Aug 28 2:00 0 -
|
||||
Rule Morocco 2045 only - Jul 9 3:00 -1:00 -
|
||||
Rule Morocco 2045 only - Aug 20 2:00 0 -
|
||||
Rule Morocco 2046 only - Jul 1 3:00 -1:00 -
|
||||
Rule Morocco 2046 only - Aug 5 2:00 0 -
|
||||
Rule Morocco 2047 only - Jun 23 3:00 -1:00 -
|
||||
Rule Morocco 2047 only - Jul 28 2:00 0 -
|
||||
Rule Morocco 2048 only - Jun 7 3:00 -1:00 -
|
||||
Rule Morocco 2048 only - Jul 19 2:00 0 -
|
||||
Rule Morocco 2049 only - May 30 3:00 -1:00 -
|
||||
Rule Morocco 2049 only - Jul 4 2:00 0 -
|
||||
Rule Morocco 2050 only - May 15 3:00 -1:00 -
|
||||
Rule Morocco 2050 only - Jun 26 2:00 0 -
|
||||
Rule Morocco 2051 only - May 7 3:00 -1:00 -
|
||||
Rule Morocco 2051 only - Jun 11 2:00 0 -
|
||||
Rule Morocco 2052 only - Apr 28 3:00 -1:00 -
|
||||
Rule Morocco 2052 only - Jun 2 2:00 0 -
|
||||
Rule Morocco 2053 only - Apr 13 3:00 -1:00 -
|
||||
Rule Morocco 2053 only - May 25 2:00 0 -
|
||||
Rule Morocco 2054 only - Apr 5 3:00 -1:00 -
|
||||
Rule Morocco 2054 only - May 10 2:00 0 -
|
||||
Rule Morocco 2055 only - Mar 28 3:00 -1:00 -
|
||||
Rule Morocco 2055 only - May 2 2:00 0 -
|
||||
Rule Morocco 2056 only - Mar 12 3:00 -1:00 -
|
||||
Rule Morocco 2056 only - Apr 23 2:00 0 -
|
||||
Rule Morocco 2057 only - Mar 4 3:00 -1:00 -
|
||||
Rule Morocco 2057 only - Apr 8 2:00 0 -
|
||||
Rule Morocco 2058 only - Feb 17 3:00 -1:00 -
|
||||
Rule Morocco 2058 only - Mar 31 2:00 0 -
|
||||
Rule Morocco 2059 only - Feb 9 3:00 -1:00 -
|
||||
Rule Morocco 2059 only - Mar 16 2:00 0 -
|
||||
Rule Morocco 2060 only - Feb 1 3:00 -1:00 -
|
||||
Rule Morocco 2060 only - Mar 7 2:00 0 -
|
||||
Rule Morocco 2061 only - Jan 16 3:00 -1:00 -
|
||||
Rule Morocco 2061 only - Feb 27 2:00 0 -
|
||||
Rule Morocco 2062 only - Jan 8 3:00 -1:00 -
|
||||
Rule Morocco 2062 only - Feb 12 2:00 0 -
|
||||
Rule Morocco 2062 only - Dec 31 3:00 -1:00 -
|
||||
Rule Morocco 2063 only - Feb 4 2:00 0 -
|
||||
Rule Morocco 2063 only - Dec 16 3:00 -1:00 -
|
||||
Rule Morocco 2064 only - Jan 20 2:00 0 -
|
||||
Rule Morocco 2064 only - Dec 7 3:00 -1:00 -
|
||||
Rule Morocco 2065 only - Jan 11 2:00 0 -
|
||||
Rule Morocco 2065 only - Nov 22 3:00 -1:00 -
|
||||
Rule Morocco 2066 only - Jan 3 2:00 0 -
|
||||
Rule Morocco 2066 only - Nov 14 3:00 -1:00 -
|
||||
Rule Morocco 2066 only - Dec 19 2:00 0 -
|
||||
Rule Morocco 2067 only - Nov 6 3:00 -1:00 -
|
||||
Rule Morocco 2067 only - Dec 11 2:00 0 -
|
||||
Rule Morocco 2068 only - Oct 21 3:00 -1:00 -
|
||||
Rule Morocco 2068 only - Dec 2 2:00 0 -
|
||||
Rule Morocco 2069 only - Oct 13 3:00 -1:00 -
|
||||
Rule Morocco 2069 only - Nov 17 2:00 0 -
|
||||
Rule Morocco 2070 only - Oct 5 3:00 -1:00 -
|
||||
Rule Morocco 2070 only - Nov 9 2:00 0 -
|
||||
Rule Morocco 2071 only - Sep 20 3:00 -1:00 -
|
||||
Rule Morocco 2071 only - Oct 25 2:00 0 -
|
||||
Rule Morocco 2072 only - Sep 11 3:00 -1:00 -
|
||||
Rule Morocco 2072 only - Oct 16 2:00 0 -
|
||||
Rule Morocco 2073 only - Aug 27 3:00 -1:00 -
|
||||
Rule Morocco 2073 only - Oct 8 2:00 0 -
|
||||
Rule Morocco 2074 only - Aug 19 3:00 -1:00 -
|
||||
Rule Morocco 2074 only - Sep 23 2:00 0 -
|
||||
Rule Morocco 2075 only - Aug 11 3:00 -1:00 -
|
||||
Rule Morocco 2075 only - Sep 15 2:00 0 -
|
||||
Rule Morocco 2076 only - Jul 26 3:00 -1:00 -
|
||||
Rule Morocco 2076 only - Sep 6 2:00 0 -
|
||||
Rule Morocco 2077 only - Jul 18 3:00 -1:00 -
|
||||
Rule Morocco 2077 only - Aug 22 2:00 0 -
|
||||
Rule Morocco 2078 only - Jul 10 3:00 -1:00 -
|
||||
Rule Morocco 2078 only - Aug 14 2:00 0 -
|
||||
Rule Morocco 2079 only - Jun 25 3:00 -1:00 -
|
||||
Rule Morocco 2079 only - Jul 30 2:00 0 -
|
||||
Rule Morocco 2080 only - Jun 16 3:00 -1:00 -
|
||||
Rule Morocco 2080 only - Jul 21 2:00 0 -
|
||||
Rule Morocco 2081 only - Jun 1 3:00 -1:00 -
|
||||
Rule Morocco 2081 only - Jul 13 2:00 0 -
|
||||
Rule Morocco 2082 only - May 24 3:00 -1:00 -
|
||||
Rule Morocco 2082 only - Jun 28 2:00 0 -
|
||||
Rule Morocco 2083 only - May 16 3:00 -1:00 -
|
||||
Rule Morocco 2083 only - Jun 20 2:00 0 -
|
||||
Rule Morocco 2084 only - Apr 30 3:00 -1:00 -
|
||||
Rule Morocco 2084 only - Jun 11 2:00 0 -
|
||||
Rule Morocco 2085 only - Apr 22 3:00 -1:00 -
|
||||
Rule Morocco 2085 only - May 27 2:00 0 -
|
||||
Rule Morocco 2086 only - Apr 14 3:00 -1:00 -
|
||||
Rule Morocco 2086 only - May 19 2:00 0 -
|
||||
Rule Morocco 2087 only - Mar 30 3:00 -1:00 -
|
||||
Rule Morocco 2087 only - May 4 2:00 0 -
|
||||
# For dates after the somewhat-arbitrary cutoff of 2087, assume that
|
||||
# Morocco will no longer observe DST. At some point this table will
|
||||
# need to be extended, though quite possibly Morocco will change the
|
||||
# rules first.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
|
||||
0:00 Morocco +00/+01 1984 Mar 16
|
||||
1:00 - +01 1986
|
||||
@@ -1001,7 +1113,7 @@ Zone Africa/El_Aaiun -0:52:48 - LMT 1934 Jan # El Aaiún
|
||||
# https://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
|
||||
# merely made it official?
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Maputo 2:10:20 - LMT 1903 Mar
|
||||
2:00 - CAT
|
||||
Link Africa/Maputo Africa/Blantyre # Malawi
|
||||
@@ -1073,7 +1185,7 @@ Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT
|
||||
#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT
|
||||
# End of rearguard section.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||||
1:30 - +0130 1903 Mar
|
||||
2:00 - SAST 1942 Sep 20 2:00
|
||||
@@ -1094,7 +1206,7 @@ Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8
|
||||
# See Africa/Lagos.
|
||||
|
||||
# Nigeria
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
|
||||
1:00 - WAT
|
||||
Link Africa/Lagos Africa/Bangui # Central African Republic
|
||||
@@ -1108,7 +1220,7 @@ Link Africa/Lagos Africa/Niamey # Niger
|
||||
Link Africa/Lagos Africa/Porto-Novo # Benin
|
||||
|
||||
# Réunion
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Reunion 3:41:52 - LMT 1911 Jun # Saint-Denis
|
||||
4:00 - +04
|
||||
#
|
||||
@@ -1168,7 +1280,7 @@ Zone Africa/Sao_Tome 0:26:56 - LMT 1884
|
||||
# See Africa/Abidjan.
|
||||
|
||||
# Seychelles
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
|
||||
4:00 - +04
|
||||
# From Paul Eggert (2001-05-30):
|
||||
@@ -1188,7 +1300,7 @@ Zone Indian/Mahe 3:41:48 - LMT 1906 Jun # Victoria
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule SA 1942 1943 - Sep Sun>=15 2:00 1:00 -
|
||||
Rule SA 1943 1944 - Mar Sun>=15 2:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Johannesburg 1:52:00 - LMT 1892 Feb 8
|
||||
1:30 - SAST 1903 Mar
|
||||
2:00 SA SAST
|
||||
@@ -1223,14 +1335,14 @@ Rule Sudan 1970 only - May 1 0:00 1:00 S
|
||||
Rule Sudan 1970 1985 - Oct 15 0:00 0 -
|
||||
Rule Sudan 1971 only - Apr 30 0:00 1:00 S
|
||||
Rule Sudan 1972 1985 - Apr lastSun 0:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Khartoum 2:10:08 - LMT 1931
|
||||
2:00 Sudan CA%sT 2000 Jan 15 12:00
|
||||
3:00 - EAT 2017 Nov 1
|
||||
2:00 - CAT
|
||||
|
||||
# South Sudan
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Juba 2:06:28 - LMT 1931
|
||||
2:00 Sudan CA%sT 2000 Jan 15 12:00
|
||||
3:00 - EAT
|
||||
@@ -1336,7 +1448,7 @@ Rule Tunisia 2006 2008 - Oct lastSun 2:00s 0 -
|
||||
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
|
||||
# more precise 0:09:21.
|
||||
# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Africa/Tunis 0:40:44 - LMT 1881 May 12
|
||||
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||||
1:00 Tunisia CE%sT
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
# for information.
|
||||
# Unless otherwise specified, we have no time zone information.
|
||||
|
||||
# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
|
||||
# FORMAT is '-00' and STDOFF is 0 for locations while uninhabited.
|
||||
|
||||
# Argentina - year-round bases
|
||||
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
|
||||
@@ -70,7 +70,7 @@
|
||||
# Australian Antarctica Division informed us that Casey changed time
|
||||
# zone to UTC+11 in "the morning of 22nd October 2016".
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Casey 0 - -00 1969
|
||||
8:00 - +08 2009 Oct 18 2:00
|
||||
11:00 - +11 2010 Mar 5 2:00
|
||||
@@ -142,7 +142,7 @@ Zone Antarctica/Mawson 0 - -00 1954 Feb 13
|
||||
# St Paul Island - near Amsterdam, uninhabited
|
||||
# fishing stations operated variously 1819/1931
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
|
||||
5:00 - +05
|
||||
#
|
||||
@@ -153,7 +153,7 @@ Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
|
||||
# Another base at Port-Martin, 50km east, began operation in 1947.
|
||||
# It was destroyed by fire on 1952-01-14.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/DumontDUrville 0 - -00 1947
|
||||
10:00 - +10 1952 Jan 14
|
||||
0 - -00 1956 Nov
|
||||
@@ -181,7 +181,7 @@ Zone Antarctica/DumontDUrville 0 - -00 1947
|
||||
# Syowa station, which is the first antarctic station of Japan,
|
||||
# was established on 1957-01-29. Since Syowa station is still the main
|
||||
# station of Japan, it's appropriate for the principal location.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Syowa 0 - -00 1957 Jan 29
|
||||
3:00 - +03
|
||||
# See:
|
||||
@@ -231,7 +231,7 @@ Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02
|
||||
#Rule Troll 2004 max - Nov 7 1:00u 0:00 +00
|
||||
# Remove the following line when uncommenting the above '#Rule' lines.
|
||||
Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Troll 0 - -00 2005 Feb 12
|
||||
0:00 Troll %s
|
||||
|
||||
@@ -305,7 +305,7 @@ Zone Antarctica/Vostok 0 - -00 1957 Dec 16
|
||||
# From Paul Eggert (2002-10-22)
|
||||
# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Rothera 0 - -00 1976 Dec 1
|
||||
-3:00 - -03
|
||||
|
||||
|
||||
+115
-101
@@ -84,7 +84,7 @@ Rule RussiaAsia 1985 2010 - Mar lastSun 2:00s 1:00 -
|
||||
Rule RussiaAsia 1996 2010 - Oct lastSun 2:00s 0 -
|
||||
|
||||
# Afghanistan
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kabul 4:36:48 - LMT 1890
|
||||
4:00 - +04 1945
|
||||
4:30 - +0430
|
||||
@@ -117,7 +117,7 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Armenia 2011 only - Mar lastSun 2:00s 1:00 -
|
||||
Rule Armenia 2011 only - Oct lastSun 2:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
|
||||
3:00 - +03 1957 Mar
|
||||
4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
|
||||
@@ -143,7 +143,7 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 -
|
||||
Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
||||
3:00 - +03 1957 Mar
|
||||
4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
|
||||
@@ -231,7 +231,7 @@ Zone Asia/Baku 3:19:24 - LMT 1924 May 2
|
||||
Rule Dhaka 2009 only - Jun 19 23:00 1:00 -
|
||||
Rule Dhaka 2009 only - Dec 31 24:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dhaka 6:01:40 - LMT 1890
|
||||
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
|
||||
6:30 - +0630 1942 May 15
|
||||
@@ -241,7 +241,7 @@ Zone Asia/Dhaka 6:01:40 - LMT 1890
|
||||
6:00 Dhaka +06/+07
|
||||
|
||||
# Bhutan
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
|
||||
5:30 - +0530 1987 Oct
|
||||
6:00 - +06
|
||||
@@ -252,13 +252,13 @@ Zone Asia/Thimphu 5:58:36 - LMT 1947 Aug 15 # or Thimbu
|
||||
# We have no information as to when standard time was introduced;
|
||||
# assume it occurred in 1907, the same year as Mauritius (which
|
||||
# then contained the Chagos Archipelago).
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Chagos 4:49:40 - LMT 1907
|
||||
5:00 - +05 1996
|
||||
6:00 - +06
|
||||
|
||||
# Brunei
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||||
7:30 - +0730 1933
|
||||
8:00 - +08
|
||||
@@ -273,7 +273,7 @@ Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
|
||||
# of Greenwich." This refers to the period before Burma's transition to +0630,
|
||||
# a transition for which Shanks is the only source.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Yangon 6:24:47 - LMT 1880 # or Rangoon
|
||||
6:24:47 - RMT 1920 # Rangoon local time
|
||||
6:30 - +0630 1942 May
|
||||
@@ -561,7 +561,7 @@ Rule PRC 1987 1991 - Apr Sun>=11 2:00 1:00 D
|
||||
# that the sort of users who prefer Asia/Urumqi now typically ignored the
|
||||
# +08 mandate back then.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Beijing time, used throughout China; represented by Shanghai.
|
||||
Zone Asia/Shanghai 8:05:43 - LMT 1901
|
||||
8:00 Shang C%sT 1949 May 28
|
||||
@@ -652,11 +652,41 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
# https://i.imgur.com/05KkvtC.png
|
||||
# * 1941-09-30, Hong Kong Daily Press, Winter Time Warning.
|
||||
# https://i.imgur.com/dge4kFJ.png
|
||||
# Also, the Liberation day of Hong Kong after WWII which British rule
|
||||
# over the territory resumed was August 30, 1945, which I think should
|
||||
# be the termination date for the use of JST in the territory....
|
||||
|
||||
# From Paul Eggert (2018-11-17):
|
||||
# From P Chan (2018-12-31):
|
||||
# * According to the Hong Kong Daylight-Saving Regulations, 1941, the
|
||||
# 1941 spring-forward transition was at 03:00.
|
||||
# http://sunzi.lib.hku.hk/hkgro/view/g1941/304271.pdf
|
||||
# http://sunzi.lib.hku.hk/hkgro/view/g1941/305516.pdf
|
||||
# * According to some articles from South China Morning Post, +08 was
|
||||
# resumed on 1945-11-18 at 02:00.
|
||||
# https://i.imgur.com/M2IsZ3c.png
|
||||
# https://i.imgur.com/iOPqrVo.png
|
||||
# https://i.imgur.com/fffcGDs.png
|
||||
# * Some newspapers ... said the 1946 spring-forward transition was on
|
||||
# 04-21 at 00:00. The Kung Sheung Evening News 1946-04-20 (Chinese)
|
||||
# https://i.imgur.com/ZSzent0.png
|
||||
# https://mmis.hkpl.gov.hk///c/portal/cover?c=QF757YsWv5%2FH7zGe%2FKF%2BFLYsuqGhRBfe p.4
|
||||
# The Kung Sheung Daily News 1946-04-21 (Chinese)
|
||||
# https://i.imgur.com/7ecmRlcm.png
|
||||
# https://mmis.hkpl.gov.hk///c/portal/cover?c=QF757YsWv5%2BQBGt1%2BwUj5qG2GqtwR3Wh p.4
|
||||
# * According to the Summer Time Ordinance (1946), the fallback
|
||||
# transitions between 1946 and 1952 were at 03:30 Standard Time (+08)
|
||||
# http://oelawhk.lib.hku.hk/archive/files/bb74b06a74d5294620a15de560ab33c6.pdf
|
||||
# * Some other laws and regulations related to DST from 1953 to 1979
|
||||
# Summer Time Ordinance 1953
|
||||
# https://i.imgur.com/IOlJMav.jpg
|
||||
# Summer Time (Amendment) Ordinance 1965
|
||||
# https://i.imgur.com/8rofeLa.jpg
|
||||
# Interpretation and General Clauses Ordinance (1966)
|
||||
# https://i.imgur.com/joy3msj.jpg
|
||||
# Emergency (Summer Time) Regulation 1973 <https://i.imgur.com/OpRWrKz.jpg>
|
||||
# Interpretation and General Clauses (Amendment) Ordinance 1977
|
||||
# https://i.imgur.com/RaNqnc4.jpg
|
||||
# Resolution of the Legislative Council passed on 9 May 1979
|
||||
# https://www.legco.gov.hk/yr78-79/english/lc_sitg/hansard/h790509.pdf#page=39
|
||||
|
||||
# From Paul Eggert (2019-05-31):
|
||||
# Here are the dates given at
|
||||
# https://www.hko.gov.hk/gts/time/Summertime.htm
|
||||
# as of 2014-06-19:
|
||||
@@ -667,7 +697,7 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
# 1944 Whole year
|
||||
# 1945 Whole year
|
||||
# 1946 20 Apr to 1 Dec
|
||||
# 1947 13 Apr to 30 Dec
|
||||
# 1947 13 Apr to 30 Nov
|
||||
# 1948 2 May to 31 Oct
|
||||
# 1949 3 Apr to 30 Oct
|
||||
# 1950 2 Apr to 29 Oct
|
||||
@@ -704,36 +734,28 @@ Zone Asia/Urumqi 5:50:20 - LMT 1928
|
||||
# The page does not give times of day for transitions,
|
||||
# or dates for the 1942 and 1945 transitions.
|
||||
# The Japanese occupation of Hong Kong began 1941-12-25.
|
||||
# The Japanese surrender of Hong Kong was signed 1945-09-16; see:
|
||||
# Heaver S. The days after the Pacific war ended: unsettling times
|
||||
# in Hong Kong. Post Magazine. 2016-06-13.
|
||||
# https://www.scmp.com/magazines/post-magazine/article/1852990/days-after-pacific-war-ended-unsettling-times-hong-kong
|
||||
# For lack of anything better, use start of those days as the
|
||||
# transition times.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule HK 1946 only - Apr 20 3:30 1:00 S
|
||||
Rule HK 1946 only - Dec 1 3:30 0 -
|
||||
Rule HK 1947 only - Apr 13 3:30 1:00 S
|
||||
Rule HK 1947 only - Dec 30 3:30 0 -
|
||||
Rule HK 1948 only - May 2 3:30 1:00 S
|
||||
Rule HK 1948 1951 - Oct lastSun 3:30 0 -
|
||||
Rule HK 1952 1953 - Nov Sun>=1 3:30 0 -
|
||||
Rule HK 1946 only - Apr 21 0:00 1:00 S
|
||||
Rule HK 1946 only - Dec 1 3:30s 0 -
|
||||
Rule HK 1947 only - Apr 13 3:30s 1:00 S
|
||||
Rule HK 1947 only - Nov 30 3:30s 0 -
|
||||
Rule HK 1948 only - May 2 3:30s 1:00 S
|
||||
Rule HK 1948 1952 - Oct Sun>=28 3:30s 0 -
|
||||
Rule HK 1949 1953 - Apr Sun>=1 3:30 1:00 S
|
||||
Rule HK 1953 1964 - Oct Sun>=31 3:30 0 -
|
||||
Rule HK 1954 1964 - Mar Sun>=18 3:30 1:00 S
|
||||
Rule HK 1954 only - Oct 31 3:30 0 -
|
||||
Rule HK 1955 1964 - Nov Sun>=1 3:30 0 -
|
||||
Rule HK 1965 1976 - Apr Sun>=16 3:30 1:00 S
|
||||
Rule HK 1965 1976 - Oct Sun>=16 3:30 0 -
|
||||
Rule HK 1973 only - Dec 30 3:30 1:00 S
|
||||
Rule HK 1979 only - May Sun>=8 3:30 1:00 S
|
||||
Rule HK 1979 only - Oct Sun>=16 3:30 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Rule HK 1979 only - May 13 3:30 1:00 S
|
||||
Rule HK 1979 only - Oct 21 3:30 0 -
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30 0:36:42
|
||||
8:00 - HKT 1941 Jun 15 3:30
|
||||
8:00 - HKT 1941 Jun 15 3:00
|
||||
8:00 1:00 HKST 1941 Oct 1 4:00
|
||||
8:30 - HKT 1941 Dec 25
|
||||
9:00 - JST 1945 Sep 16
|
||||
9:00 - JST 1945 Nov 18 2:00
|
||||
8:00 HK HK%sT
|
||||
|
||||
###############################################################################
|
||||
@@ -857,7 +879,7 @@ Rule Taiwan 1974 1975 - Oct 1 0:00 0 S
|
||||
Rule Taiwan 1979 only - Jul 1 0:00 1:00 D
|
||||
Rule Taiwan 1979 only - Oct 1 0:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Taipei or Taibei or T'ai-pei
|
||||
Zone Asia/Taipei 8:06:00 - LMT 1896 Jan 1
|
||||
8:00 - CST 1937 Oct 1
|
||||
@@ -995,7 +1017,7 @@ Rule Macau 1975 1976 - Apr Sun>=16 03:30 1:00 D
|
||||
Rule Macau 1979 only - May 13 03:30 1:00 D
|
||||
Rule Macau 1979 only - Oct Sun>=16 03:30 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Macau 7:34:10 - LMT 1904 Oct 30
|
||||
8:00 - CST 1941 Dec 21 23:00
|
||||
9:00 Macau +09/+10 1945 Sep 30 24:00
|
||||
@@ -1034,7 +1056,7 @@ Rule Cyprus 1977 only - Sep 25 0:00 0 -
|
||||
Rule Cyprus 1978 only - Oct 2 0:00 0 -
|
||||
Rule Cyprus 1979 1997 - Sep lastSun 0:00 0 -
|
||||
Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
|
||||
2:00 Cyprus EE%sT 1998 Sep
|
||||
2:00 EUAsia EE%sT
|
||||
@@ -1083,7 +1105,7 @@ Link Asia/Nicosia Europe/Nicosia
|
||||
# Byalokoz 1919 says Georgia was 2:59:11.
|
||||
# Go with Byalokoz.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tbilisi 2:59:11 - LMT 1880
|
||||
2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
|
||||
3:00 - +03 1957 Mar
|
||||
@@ -1120,7 +1142,7 @@ Zone Asia/Tbilisi 2:59:11 - LMT 1880
|
||||
# which will be permanent, with no seasonal adjustment, will happen at
|
||||
# midnight on Saturday, September 16.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
|
||||
8:00 - +08 1942 Feb 21 23:00
|
||||
9:00 - +09 1976 May 3
|
||||
@@ -1186,7 +1208,7 @@ Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
|
||||
# time for 1870-1941. Shanks is our only (and dubious) source for the
|
||||
# 1941-1945 data.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
||||
5:53:20 - HMT 1870 # Howrah Mean Time?
|
||||
5:21:10 - MMT 1906 Jan 1 # Madras local time
|
||||
@@ -1238,7 +1260,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1854 Jun 28 # Kolkata
|
||||
# WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
|
||||
# WIT - +09 - Waktu Indonesia Timur (Indonesia eastern time)
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Java, Sumatra
|
||||
Zone Asia/Jakarta 7:07:12 - LMT 1867 Aug 10
|
||||
# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
|
||||
@@ -1314,9 +1336,9 @@ Zone Asia/Jayapura 9:22:48 - LMT 1932 Nov
|
||||
# I used the following code in GNU Emacs 26.1 to generate the "Rule Iran"
|
||||
# lines from 2008 through 2087. Emacs 26.1 uses Ed Reingold's
|
||||
# cal-persia implementation of Birashk's approximation, which in the
|
||||
# 2008-2087 range disagrees with the the astronomical Persian calendar
|
||||
# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058),
|
||||
# so the following code special-case those years. See Table 15.1, page 264, of:
|
||||
# 2008-2087 range disagrees with the astronomical Persian calendar
|
||||
# for Persian years 1404 (Gregorian 2025) and 1437 (Gregorian 2058), so
|
||||
# the following code special-cases those years. See Table 15.1, page 264, of:
|
||||
# Edward M. Reingold and Nachum Dershowitz, Calendrical Calculations:
|
||||
# The Ultimate Edition, Cambridge University Press (2018).
|
||||
# https://www.cambridge.org/fr/academic/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition
|
||||
@@ -1510,7 +1532,7 @@ Rule Iran 2087 only - Sep 21 24:00 0 -
|
||||
Rule Iran 2088 max - Mar 20 24:00 1:00 -
|
||||
Rule Iran 2088 max - Sep 20 24:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tehran 3:25:44 - LMT 1916
|
||||
3:25:44 - TMT 1946 # Tehran Mean Time
|
||||
3:30 - +0330 1977 Nov
|
||||
@@ -1555,7 +1577,7 @@ Rule Iraq 1986 1990 - Mar lastSun 1:00s 1:00 -
|
||||
#
|
||||
Rule Iraq 1991 2007 - Apr 1 3:00s 1:00 -
|
||||
Rule Iraq 1991 2007 - Oct 1 3:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Baghdad 2:57:40 - LMT 1890
|
||||
2:57:36 - BMT 1918 # Baghdad Mean Time?
|
||||
3:00 - +03 1982 May
|
||||
@@ -1622,7 +1644,7 @@ Rule Zion 1975 only - Apr 20 0:00 1:00 D
|
||||
Rule Zion 1975 only - Aug 31 0:00 0 S
|
||||
|
||||
# From Alois Treindl (2019-03-06):
|
||||
# http://www.moin.gov.il/Documents/שעון קיץ/clock-50-years-7-2014.pdf
|
||||
# http://www.moin.gov.il/Documents/שעון%20קיץ/clock-50-years-7-2014.pdf
|
||||
# From Isaac Starkman (2019-03-06):
|
||||
# Summer time was in that period in 1980 and 1984, see
|
||||
# https://www.ynet.co.il/articles/0,7340,L-3951073,00.html
|
||||
@@ -1760,32 +1782,15 @@ Rule Zion 2004 only - Sep 22 1:00 0 S
|
||||
#
|
||||
# ftp://ftp.cs.huji.ac.il/pub/tz/announcements/2005+beyond.ps
|
||||
|
||||
# From Paul Eggert (2012-10-26):
|
||||
# I used Ephraim Silverberg's dst-israel.el program
|
||||
# <ftp://ftp.cs.huji.ac.il/pub/tz/software/dst-israel.el> (2005-02-20)
|
||||
# along with Ed Reingold's cal-hebrew in GNU Emacs 21.4,
|
||||
# to generate the transitions from 2005 through 2012.
|
||||
# (I replaced "lastFri" with "Fri>=26" by hand.)
|
||||
# The spring transitions all correspond to the following Rule:
|
||||
#
|
||||
# Rule Zion 2005 2012 - Mar Fri>=26 2:00 1:00 D
|
||||
#
|
||||
# but older zic implementations (e.g., Solaris 8) do not support
|
||||
# "Fri>=26" to mean April 1 in years like 2005, so for now we list the
|
||||
# springtime transitions explicitly.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Zion 2005 only - Apr 1 2:00 1:00 D
|
||||
Rule Zion 2005 2012 - Apr Fri<=1 2:00 1:00 D
|
||||
Rule Zion 2005 only - Oct 9 2:00 0 S
|
||||
Rule Zion 2006 2010 - Mar Fri>=26 2:00 1:00 D
|
||||
Rule Zion 2006 only - Oct 1 2:00 0 S
|
||||
Rule Zion 2007 only - Sep 16 2:00 0 S
|
||||
Rule Zion 2008 only - Oct 5 2:00 0 S
|
||||
Rule Zion 2009 only - Sep 27 2:00 0 S
|
||||
Rule Zion 2010 only - Sep 12 2:00 0 S
|
||||
Rule Zion 2011 only - Apr 1 2:00 1:00 D
|
||||
Rule Zion 2011 only - Oct 2 2:00 0 S
|
||||
Rule Zion 2012 only - Mar Fri>=26 2:00 1:00 D
|
||||
Rule Zion 2012 only - Sep 23 2:00 0 S
|
||||
|
||||
# From Ephraim Silverberg (2013-06-27):
|
||||
@@ -1801,7 +1806,7 @@ Rule Zion 2012 only - Sep 23 2:00 0 S
|
||||
Rule Zion 2013 max - Mar Fri>=23 2:00 1:00 D
|
||||
Rule Zion 2013 max - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Jerusalem 2:20:54 - LMT 1880
|
||||
2:20:40 - JMT 1918 # Jerusalem Mean Time?
|
||||
2:00 Zion I%sT
|
||||
@@ -1893,7 +1898,7 @@ Rule Japan 1950 1951 - May Sat>=1 24:00 1:00 D
|
||||
# Central Time (UT+9). The adoption began on Oct 1, 1937.
|
||||
# https://ja.wikisource.org/wiki/明治二十八年勅令第百六十七號標準時ニ關スル件中改正ノ件
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Tokyo 9:18:59 - LMT 1887 Dec 31 15:00u
|
||||
9:00 Japan J%sT
|
||||
# Since 1938, all Japanese possessions have been like Asia/Tokyo,
|
||||
@@ -1996,7 +2001,7 @@ Rule Jordan 2006 2011 - Oct lastFri 0:00s 0 -
|
||||
Rule Jordan 2013 only - Dec 20 0:00 0 -
|
||||
Rule Jordan 2014 max - Mar lastThu 24:00 1:00 S
|
||||
Rule Jordan 2014 max - Oct lastFri 0:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
2:00 Jordan EE%sT
|
||||
|
||||
@@ -2037,8 +2042,8 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
# text.
|
||||
#
|
||||
# According to Izvestia newspaper No. 68 (23334) from 1991-03-20
|
||||
# (page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
|
||||
# http://libinfo.org/index.php?id=58564) on 1991-03-31 at 2:00 during
|
||||
# -- page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
|
||||
# http://libinfo.org/index.php?id=58564 -- on 1991-03-31 at 2:00 during
|
||||
# transition to "summer" time:
|
||||
# Republic of Georgia, Latvian SSR, Lithuanian SSR, SSR Moldova,
|
||||
# Estonian SSR; Komi ASSR; Kaliningrad oblast; Nenets autonomous okrug
|
||||
@@ -2054,7 +2059,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
# Apparently there were last minute changes. Apparently Kazakh act No. 170
|
||||
# was one of such changes.
|
||||
#
|
||||
# https://ru.wikipedia.org/wiki/Декретное время
|
||||
# https://ru.wikipedia.org/wiki/Декретное_время
|
||||
# claims that Sovetskaya Rossiya newspaper on 1991-03-29 published that
|
||||
# Nenets autonomous okrug, Komi and Kazakhstan (excluding Uralsk oblast)
|
||||
# were to not move clocks and Uralsk oblast was to move clocks
|
||||
@@ -2193,7 +2198,7 @@ Zone Asia/Amman 2:23:44 - LMT 1931
|
||||
# UTC+6 to UTC+5 effective December 21st, 2018. The legal document is
|
||||
# located here: http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#
|
||||
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
|
||||
# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
|
||||
@@ -2295,7 +2300,7 @@ Rule Kyrgyz 1992 1996 - Apr Sun>=7 0:00s 1:00 -
|
||||
Rule Kyrgyz 1992 1996 - Sep lastSun 0:00 0 -
|
||||
Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 -
|
||||
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
@@ -2410,7 +2415,7 @@ Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
|
||||
# The BBC reported that the transition was from 23:30 to 24:00 today.
|
||||
# https://www.bbc.com/news/world-asia-44010705
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1
|
||||
8:30 - KST 1912 Jan 1
|
||||
9:00 - JST 1945 Sep 8
|
||||
@@ -2459,7 +2464,7 @@ Rule Lebanon 1992 only - Oct 4 0:00 0 -
|
||||
Rule Lebanon 1993 max - Mar lastSun 0:00 1:00 S
|
||||
Rule Lebanon 1993 1998 - Sep lastSun 0:00 0 -
|
||||
Rule Lebanon 1999 max - Oct lastSun 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Beirut 2:22:00 - LMT 1880
|
||||
2:00 Lebanon EE%sT
|
||||
|
||||
@@ -2471,7 +2476,7 @@ Rule NBorneo 1935 1941 - Dec 14 0:00 0 -
|
||||
# peninsular Malaysia
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
7:00 - +07 1933 Jan 1
|
||||
@@ -2485,7 +2490,7 @@ Zone Asia/Kuala_Lumpur 6:46:46 - LMT 1901 Jan 1
|
||||
# From Paul Eggert (2014-08-12):
|
||||
# The data entries here are mostly from Shanks & Pottenger, but the 1942, 1945
|
||||
# and 1982 transition dates are from Mok Ly Yng.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
||||
7:30 - +0730 1933
|
||||
8:00 NBorneo +08/+0820 1942 Feb 16
|
||||
@@ -2493,7 +2498,7 @@ Zone Asia/Kuching 7:21:20 - LMT 1926 Mar
|
||||
8:00 - +08
|
||||
|
||||
# Maldives
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Maldives 4:54:00 - LMT 1880 # Malé
|
||||
4:54:00 - MMT 1960 # Malé Mean Time
|
||||
5:00 - +05
|
||||
@@ -2636,7 +2641,7 @@ Rule Mongol 2002 2006 - Mar lastSat 2:00 1:00 -
|
||||
Rule Mongol 2015 2016 - Mar lastSat 2:00 1:00 -
|
||||
Rule Mongol 2015 2016 - Sep lastSat 0:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Hovd, a.k.a. Chovd, Dund-Us, Dzhargalant, Khovd, Jirgalanta
|
||||
Zone Asia/Hovd 6:06:36 - LMT 1905 Aug
|
||||
6:00 - +06 1978
|
||||
@@ -2654,7 +2659,7 @@ Zone Asia/Choibalsan 7:38:00 - LMT 1905 Aug
|
||||
8:00 Mongol +08/+09
|
||||
|
||||
# Nepal
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Kathmandu 5:41:16 - LMT 1920
|
||||
5:30 - +0530 1986
|
||||
5:45 - +0545
|
||||
@@ -2804,7 +2809,7 @@ Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
|
||||
Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
|
||||
Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
5:30 - +0530 1942 Sep
|
||||
5:30 1:00 +0630 1945 Oct 15
|
||||
@@ -3091,13 +3096,21 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
|
||||
# http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817
|
||||
|
||||
# From Even Scharning (2019-03-23):
|
||||
# DST in Palestine will start on 30 March this year, not 23 March as the time
|
||||
# zone database predicted.
|
||||
# https://ramallah.news/post/123610
|
||||
# http://pnn.ps/news/401130
|
||||
# http://palweather.ps/ar/node/50136.html
|
||||
#
|
||||
# From Tim Parenti (2019-03-23):
|
||||
# Combining this with the rules observed since 2016, adjust our spring
|
||||
# transition guess to Mar Sat>=24.
|
||||
# From Sharif Mustafa (2019-03-26):
|
||||
# The Palestinian cabinet announced today that the switch to DST will
|
||||
# be on Fri Mar 29th 2019 by advancing the clock by 60 minutes.
|
||||
# The decree signing date is Mar 12th but it was not published till today.
|
||||
# The decree does not specify the exact time of switch.
|
||||
# http://palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e54e9ea1-50ee-4137-84df-0d6c78da259b
|
||||
#
|
||||
# From Even Scharning (2019-04-10):
|
||||
# Our source in Palestine said it happened Friday 29 at 00:00 local time....
|
||||
#
|
||||
# From Paul Eggert (2019-04-10):
|
||||
# For now, guess spring-ahead transitions are March's last Friday at 00:00.
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
|
||||
@@ -3128,10 +3141,11 @@ Rule Palestine 2012 only - Sep 21 1:00 0 -
|
||||
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
|
||||
Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
|
||||
Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
|
||||
Rule Palestine 2016 max - Mar Sat>=24 1:00 1:00 S
|
||||
Rule Palestine 2016 2018 - Mar Sat>=24 1:00 1:00 S
|
||||
Rule Palestine 2016 max - Oct lastSat 1:00 0 -
|
||||
Rule Palestine 2019 max - Mar lastFri 0:00 1:00 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
|
||||
2:00 Zion EET/EEST 1948 May 15
|
||||
2:00 EgyptAsia EE%sT 1967 Jun 5
|
||||
@@ -3205,7 +3219,7 @@ Rule Phil 1954 only - Apr 12 0:00 1:00 D
|
||||
Rule Phil 1954 only - Jul 1 0:00 0 S
|
||||
Rule Phil 1978 only - Mar 22 0:00 1:00 D
|
||||
Rule Phil 1978 only - Sep 21 0:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
|
||||
8:04:00 - LMT 1899 May 11
|
||||
8:00 Phil P%sT 1942 May
|
||||
@@ -3213,7 +3227,7 @@ Zone Asia/Manila -15:56:00 - LMT 1844 Dec 31
|
||||
8:00 Phil P%sT
|
||||
|
||||
# Qatar
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Qatar 3:26:08 - LMT 1920 # Al Dawhah / Doha
|
||||
4:00 - +04 1972 Jun
|
||||
3:00 - +03
|
||||
@@ -3261,7 +3275,7 @@ Link Asia/Qatar Asia/Bahrain
|
||||
# the country. Presumably this is documenting airline time. Ignore this,
|
||||
# as it's before our 1970 cutoff.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Riyadh 3:06:52 - LMT 1947 Mar 14
|
||||
3:00 - +03
|
||||
Link Asia/Riyadh Asia/Aden # Yemen
|
||||
@@ -3270,7 +3284,7 @@ Link Asia/Riyadh Asia/Kuwait
|
||||
# Singapore
|
||||
# taken from Mok Ly Yng (2003-10-30)
|
||||
# http://www.math.nus.edu.sg/aslaksen/teaching/timezone.html
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
6:55:25 - SMT 1905 Jun 1 # Singapore M.T.
|
||||
7:00 - +07 1933 Jan 1
|
||||
@@ -3334,7 +3348,7 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
|
||||
# even worse. For now, let's use a numeric abbreviation; we can
|
||||
# switch to "SLST" if it catches on.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Colombo 5:19:24 - LMT 1880
|
||||
5:19:32 - MMT 1906 # Moratuwa Mean Time
|
||||
5:30 - +0530 1942 Jan 5
|
||||
@@ -3504,13 +3518,13 @@ Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
|
||||
Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
|
||||
Rule Syria 2009 max - Oct lastFri 0:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
|
||||
2:00 Syria EE%sT
|
||||
|
||||
# Tajikistan
|
||||
# From Shanks & Pottenger.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 - +05 1930 Jun 21
|
||||
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
|
||||
@@ -3518,7 +3532,7 @@ Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
|
||||
5:00 - +05
|
||||
|
||||
# Thailand
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Bangkok 6:42:04 - LMT 1880
|
||||
6:42:04 - BMT 1920 Apr # Bangkok Mean Time
|
||||
7:00 - +07
|
||||
@@ -3527,7 +3541,7 @@ Link Asia/Bangkok Asia/Vientiane # Laos
|
||||
|
||||
# Turkmenistan
|
||||
# From Shanks & Pottenger.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
|
||||
@@ -3535,14 +3549,14 @@ Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
|
||||
5:00 - +05
|
||||
|
||||
# United Arab Emirates
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Dubai 3:41:12 - LMT 1920
|
||||
4:00 - +04
|
||||
Link Asia/Dubai Asia/Muscat # Oman
|
||||
|
||||
# Uzbekistan
|
||||
# Byalokoz 1919 says Uzbekistan was 4:27:53.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
|
||||
4:00 - +04 1930 Jun 21
|
||||
5:00 - +05 1981 Apr 1
|
||||
@@ -3608,7 +3622,7 @@ Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
|
||||
# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
|
||||
# NXB Thuận Hoá, Huế, 1995.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Asia/Ho_Chi_Minh 7:06:40 - LMT 1906 Jul 1
|
||||
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
|
||||
7:00 - +07 1942 Dec 31 23:00
|
||||
|
||||
+82
-30
@@ -25,7 +25,7 @@ Rule Aus 1943 only - Oct 3 2:00 1:00 D
|
||||
# says W Australia didn't use DST in 1943/1944. Ignore Whitman's claim that
|
||||
# 1944/1945 was just like 1943/1944.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Northern Territory
|
||||
Zone Australia/Darwin 8:43:20 - LMT 1895 Feb
|
||||
9:00 - ACST 1899 May
|
||||
@@ -102,7 +102,7 @@ Rule AS 2006 only - Apr 2 2:00s 0 S
|
||||
Rule AS 2007 only - Mar lastSun 2:00s 0 S
|
||||
Rule AS 2008 max - Apr Sun>=1 2:00s 0 S
|
||||
Rule AS 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Australia/Adelaide 9:14:20 - LMT 1895 Feb
|
||||
9:00 - ACST 1899 May
|
||||
9:30 Aus AC%sT 1971
|
||||
@@ -134,7 +134,7 @@ Rule AT 2001 max - Oct Sun>=1 2:00s 1:00 D
|
||||
Rule AT 2006 only - Apr Sun>=1 2:00s 0 S
|
||||
Rule AT 2007 only - Mar lastSun 2:00s 0 S
|
||||
Rule AT 2008 max - Apr Sun>=1 2:00s 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Australia/Hobart 9:49:16 - LMT 1895 Sep
|
||||
10:00 - AEST 1916 Oct 1 2:00
|
||||
10:00 1:00 AEDT 1917 Feb
|
||||
@@ -162,7 +162,7 @@ Rule AV 2006 only - Apr Sun>=1 2:00s 0 S
|
||||
Rule AV 2007 only - Mar lastSun 2:00s 0 S
|
||||
Rule AV 2008 max - Apr Sun>=1 2:00s 0 S
|
||||
Rule AV 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Australia/Melbourne 9:39:52 - LMT 1895 Feb
|
||||
10:00 Aus AE%sT 1971
|
||||
10:00 AV AE%sT
|
||||
@@ -185,7 +185,7 @@ Rule AN 2006 only - Apr Sun>=1 2:00s 0 S
|
||||
Rule AN 2007 only - Mar lastSun 2:00s 0 S
|
||||
Rule AN 2008 max - Apr Sun>=1 2:00s 0 S
|
||||
Rule AN 2008 max - Oct Sun>=1 2:00s 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Australia/Sydney 10:04:52 - LMT 1895 Feb
|
||||
10:00 Aus AE%sT 1971
|
||||
10:00 AN AE%sT
|
||||
@@ -256,14 +256,14 @@ Zone Antarctica/Macquarie 0 - -00 1899 Nov
|
||||
11:00 - +11
|
||||
|
||||
# Christmas
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Christmas 7:02:52 - LMT 1895 Feb
|
||||
7:00 - +07
|
||||
|
||||
# Cocos (Keeling) Is
|
||||
# These islands were ruled by the Ross family from about 1830 to 1978.
|
||||
# We don't know when standard time was introduced; for now, we guess 1900.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Indian/Cocos 6:27:40 - LMT 1900
|
||||
6:30 - +0630
|
||||
|
||||
@@ -386,12 +386,12 @@ Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
|
||||
Rule Fiji 2014 only - Jan Sun>=18 2:00 0 -
|
||||
Rule Fiji 2014 max - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Fiji 2015 max - Jan Sun>=13 3:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
|
||||
12:00 Fiji +12/+13
|
||||
|
||||
# French Polynesia
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
|
||||
-9:00 - -09
|
||||
Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
|
||||
@@ -434,7 +434,7 @@ Rule Guam 1977 only - Apr 24 2:00 1:00 D
|
||||
# http://documents.guam.gov/wp-content/uploads/E.O.-77-18-Guam-Standard-Time.pdf
|
||||
Rule Guam 1977 only - Aug 28 2:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||||
9:39:00 - LMT 1901 # Agana
|
||||
10:00 - GST 1941 Dec 10 # Guam
|
||||
@@ -444,7 +444,7 @@ Zone Pacific/Guam -14:21:00 - LMT 1844 Dec 31
|
||||
Link Pacific/Guam Pacific/Saipan # N Mariana Is
|
||||
|
||||
# Kiribati
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tarawa 11:32:04 - LMT 1901 # Bairiki
|
||||
12:00 - +12
|
||||
Zone Pacific/Enderbury -11:24:20 - LMT 1901
|
||||
@@ -460,7 +460,7 @@ Zone Pacific/Kiritimati -10:29:20 - LMT 1901
|
||||
# See Pacific/Guam.
|
||||
|
||||
# Marshall Is
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Majuro 11:24:48 - LMT 1901
|
||||
11:00 - +11 1914 Oct
|
||||
9:00 - +09 1919 Feb 1
|
||||
@@ -478,7 +478,7 @@ Zone Pacific/Kwajalein 11:09:20 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
# Micronesia
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Chuuk -13:52:52 - LMT 1844 Dec 31
|
||||
10:07:08 - LMT 1901
|
||||
10:00 - +10 1914 Oct
|
||||
@@ -506,7 +506,7 @@ Zone Pacific/Kosrae -13:08:04 - LMT 1844 Dec 31
|
||||
11:00 - +11
|
||||
|
||||
# Nauru
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Nauru 11:07:40 - LMT 1921 Jan 15 # Uaobe
|
||||
11:30 - +1130 1942 Aug 29
|
||||
9:00 - +09 1945 Sep 8
|
||||
@@ -520,7 +520,7 @@ Rule NC 1978 1979 - Feb 27 0:00 0 -
|
||||
Rule NC 1996 only - Dec 1 2:00s 1:00 -
|
||||
# Shanks & Pottenger say the following was at 2:00; go with IATA.
|
||||
Rule NC 1997 only - Mar 2 2:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Noumea 11:05:48 - LMT 1912 Jan 13 # Nouméa
|
||||
11:00 NC +11/+12
|
||||
|
||||
@@ -559,7 +559,7 @@ Rule NZ 2007 max - Sep lastSun 2:00s 1:00 D
|
||||
Rule Chatham 2007 max - Sep lastSun 2:45s 1:00 -
|
||||
Rule NZ 2008 max - Apr Sun>=1 2:00s 0 S
|
||||
Rule Chatham 2008 max - Apr Sun>=1 2:45s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Auckland 11:39:04 - LMT 1868 Nov 2
|
||||
11:30 NZ NZ%sT 1946 Jan 1
|
||||
12:00 NZ NZ%sT
|
||||
@@ -585,7 +585,7 @@ Link Pacific/Auckland Antarctica/McMurdo
|
||||
Rule Cook 1978 only - Nov 12 0:00 0:30 -
|
||||
Rule Cook 1979 1991 - Mar Sun>=1 0:00 0 -
|
||||
Rule Cook 1979 1990 - Oct lastSun 0:00 0:30 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||||
-10:30 - -1030 1978 Nov 12
|
||||
-10:00 Cook -10/-0930
|
||||
@@ -594,14 +594,14 @@ Zone Pacific/Rarotonga -10:39:04 - LMT 1901 # Avarua
|
||||
|
||||
|
||||
# Niue
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Niue -11:19:40 - LMT 1901 # Alofi
|
||||
-11:20 - -1120 1951
|
||||
-11:30 - -1130 1978 Oct 1
|
||||
-11:00 - -11
|
||||
|
||||
# Norfolk
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
|
||||
11:12 - +1112 1951
|
||||
11:30 - +1130 1974 Oct 27 02:00
|
||||
@@ -610,13 +610,13 @@ Zone Pacific/Norfolk 11:11:52 - LMT 1901 # Kingston
|
||||
11:00 - +11
|
||||
|
||||
# Palau (Belau)
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Palau -15:02:04 - LMT 1844 Dec 31 # Koror
|
||||
8:57:56 - LMT 1901
|
||||
9:00 - +09
|
||||
|
||||
# Papua New Guinea
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
|
||||
9:48:32 - PMMT 1895 # Port Moresby Mean Time
|
||||
10:00 - +10
|
||||
@@ -646,7 +646,7 @@ Zone Pacific/Bougainville 10:22:16 - LMT 1880
|
||||
11:00 - +11
|
||||
|
||||
# Pitcairn
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Pitcairn -8:40:20 - LMT 1901 # Adamstown
|
||||
-8:30 - -0830 1998 Apr 27 0:00
|
||||
-8:00 - -08
|
||||
@@ -731,7 +731,7 @@ Rule WS 2011 only - Apr Sat>=1 4:00 0 -
|
||||
Rule WS 2011 only - Sep lastSat 3:00 1 -
|
||||
Rule WS 2012 max - Apr Sun>=1 4:00 0 -
|
||||
Rule WS 2012 max - Sep lastSun 3:00 1 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
|
||||
-11:26:56 - LMT 1911
|
||||
-11:30 - -1130 1950
|
||||
@@ -740,7 +740,7 @@ Zone Pacific/Apia 12:33:04 - LMT 1892 Jul 5
|
||||
|
||||
# Solomon Is
|
||||
# excludes Bougainville, for which see Papua New Guinea
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||||
11:00 - +11
|
||||
|
||||
@@ -763,7 +763,7 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
|
||||
# was "11 hours slow on G.M.T." Go with Thorsen and assume Shanks & Pottenger
|
||||
# are off by an hour starting in 1901.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
|
||||
-11:00 - -11 2011 Dec 30
|
||||
13:00 - +13
|
||||
@@ -776,14 +776,14 @@ Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
|
||||
Rule Tonga 2016 only - Nov Sun>=1 2:00 1:00 -
|
||||
Rule Tonga 2017 only - Jan Sun>=15 3:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
|
||||
12:20 - +1220 1941
|
||||
13:00 - +13 1999
|
||||
13:00 Tonga +13/+14
|
||||
|
||||
# Tuvalu
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
@@ -844,7 +844,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
|
||||
# uninhabited since World War II; was probably like Pacific/Kiritimati
|
||||
|
||||
# Wake
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wake 11:06:28 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
@@ -857,12 +857,12 @@ Rule Vanuatu 1984 only - Oct 23 0:00 1:00 -
|
||||
Rule Vanuatu 1985 1991 - Sep Sun>=23 0:00 1:00 -
|
||||
Rule Vanuatu 1992 1993 - Jan Sun>=23 0:00 0 -
|
||||
Rule Vanuatu 1992 only - Oct Sun>=23 0:00 1:00 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Efate 11:13:16 - LMT 1912 Jan 13 # Vila
|
||||
11:00 Vanuatu +11/+12
|
||||
|
||||
# Wallis and Futuna
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
12:00 - +12
|
||||
|
||||
@@ -1248,6 +1248,22 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
# in WA or its introduction in SA had anything to do with the genesis
|
||||
# of this time zone. My hunch is that it's been around since well
|
||||
# before 1975. I remember seeing it noted on road maps decades ago.
|
||||
#
|
||||
# From Gilmore Davidson (2019-04-08):
|
||||
# https://www.abc.net.au/news/2019-04-08/this-remote-stretch-of-desert-has-its-own-custom-time-zone/10981000
|
||||
# ... include[s] a rough description of the geographical boundaries...
|
||||
# "The time zone exists for about 340 kilometres and takes in the tiny
|
||||
# roadhouse communities of Cocklebiddy, Madura, Eucla and Border Village."
|
||||
# ... and an indication that the zone has definitely been in existence
|
||||
# since before the 1970 cut-off of the database ...
|
||||
# From Paul Eggert (2019-05-17):
|
||||
# That ABC Esperance story by Christien de Garis also says:
|
||||
# Although the Central Western Time Zone is not officially recognised (your
|
||||
# phones won't automatically change), there is a sign instructing you which
|
||||
# way to wind your clocks 45 minutes and scrawled underneath one of them in
|
||||
# Texta is the word: 'Why'?
|
||||
# "Good question," Mr Pike said.
|
||||
# "I don't even know that, and it's been going for over 50 years."
|
||||
|
||||
# From Paul Eggert (2006-12-15):
|
||||
# For lack of better info, assume the tradition dates back to the
|
||||
@@ -1566,6 +1582,42 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Bonin (Ogasawara) Islands and Marcus Island (Minami-Tori-shima)
|
||||
|
||||
# From Wakaba (2019-01-28) via Phake Nick:
|
||||
# National Diet Library of Japan has several reports by Japanese Government
|
||||
# officers that describe the time used in islands when they visited there.
|
||||
# According to them (and other sources such as newspapers), standard time UTC
|
||||
# + 10 (JST + 1) and DST UTC + 11 (JST + 2) was used until its return to Japan
|
||||
# at 1968-06-26 00:00 JST. The exact periods of DST are still unknown.
|
||||
# I guessed Guam, Mariana, and Bonin and Marcus districts might have
|
||||
# synchronized their DST periods, but reports imply they had their own
|
||||
# decisions, i.e. there were three or more different time zones....
|
||||
#
|
||||
# https://wiki.suikawiki.org/n/小笠原諸島の標準時
|
||||
|
||||
# From Phake Nick (2019-02-12):
|
||||
# Because their last time change to return to Japanese time when they returned
|
||||
# to Japanese rule was right before 1970, ... per the current tz database
|
||||
# rule, the information doesn't warrant creation of a new timezone for Bonin
|
||||
# Islands itself and is thus as an anecdotal note for interest purpose only.
|
||||
# ... [The abovementioned link] described some special timekeeping phenomenon
|
||||
# regarding Marcus island, another remote island currently owned by Japanese
|
||||
# in the same administrative unit as Bonin Islands. Many reports claim that
|
||||
# the American coastal guard on the American quarter of the island use its own
|
||||
# coastal guard time, and most sources describe the time as UTC+11, being two
|
||||
# hours faster than JST used by some Japanese personnel on the island. Some
|
||||
# sites describe it as same as Wake Island/Guam time although it would be
|
||||
# incorrect to be same as Guam. And then in a few Japanese governmental
|
||||
# report from 1980s (from National Institute of Information and Communications
|
||||
# Technology) regarding the construction of VLBI facility on the Marcus
|
||||
# Island, it claimed that there are three time standards being used on the
|
||||
# island at the time which include not just JST (UTC+9) or [US]CG time
|
||||
# (UTC+11) but also a JMSDF time (UTC+10) (Japan Maritime Self-Defense
|
||||
# Force). Unfortunately there are no other sources that mentioned such time
|
||||
# and there are also no information on things like how the time was used.
|
||||
|
||||
|
||||
# Fiji
|
||||
|
||||
# Howse writes (p 153) that in 1879 the British governor of Fiji
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
# commentary and rules associated with the entry.
|
||||
#
|
||||
# As explained in the zic man page, the zone columns are:
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
|
||||
# Ethiopia
|
||||
# From Paul Eggert (2014-07-31):
|
||||
|
||||
@@ -63,12 +63,19 @@ BEGIN {
|
||||
coordinates = $2
|
||||
tz = $3
|
||||
comments = $4
|
||||
if (cc < cc0) {
|
||||
|
||||
# Don't complain about a special case for Crimea in zone.tab.
|
||||
# FIXME: zone.tab should be removed, since it is obsolete.
|
||||
# Or at least put just "XX" in its country-code column.
|
||||
if (cc < cc0 \
|
||||
&& !(zone_table == "zone.tab" \
|
||||
&& tz0 == "Europe/Simferopol")) {
|
||||
printf "%s:%d: country code '%s' is out of order\n", \
|
||||
zone_table, zone_NR, cc >>"/dev/stderr"
|
||||
status = 1
|
||||
}
|
||||
cc0 = cc
|
||||
tz0 = tz
|
||||
tztab[tz] = 1
|
||||
tz2comments[tz] = comments
|
||||
tz2NR[tz] = zone_NR
|
||||
|
||||
+61
-49
@@ -122,7 +122,7 @@
|
||||
# position is 51° 28' 30" N, 0° 18' 45" W. The longitude should
|
||||
# be within about ±2". The Ordnance Survey grid reference is TQ172761.
|
||||
#
|
||||
# [This yields GMTOFF = -0:01:15 for London LMT in the 18th century.]
|
||||
# [This yields STDOFF = -0:01:15 for London LMT in the 18th century.]
|
||||
|
||||
# From Paul Eggert (1993-11-18):
|
||||
#
|
||||
@@ -500,7 +500,7 @@ Rule GB-Eire 1990 1995 - Oct Sun>=22 1:00u 0 GMT
|
||||
#
|
||||
# Use Europe/London for Jersey, Guernsey, and the Isle of Man.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
|
||||
0:00 GB-Eire %s 1968 Oct 27
|
||||
1:00 - BST 1971 Oct 31 2:00u
|
||||
@@ -538,7 +538,7 @@ Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 -
|
||||
Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 -
|
||||
Rule Eire 1996 max - Oct lastSun 1:00u -1:00 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2
|
||||
-0:25:21 - DMT 1916 May 21 2:00s
|
||||
-0:25:21 1:00 IST 1916 Oct 1 2:00s
|
||||
@@ -737,7 +737,7 @@ Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
|
||||
|
||||
# These are for backward compatibility with older versions.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone WET 0:00 EU WE%sT
|
||||
Zone CET 1:00 C-Eur CE%sT
|
||||
Zone MET 1:00 C-Eur ME%sT
|
||||
@@ -797,14 +797,14 @@ Rule Albania 1982 only - Oct 3 0:00 0 -
|
||||
Rule Albania 1983 only - Apr 18 0:00 1:00 S
|
||||
Rule Albania 1983 only - Oct 1 0:00 0 -
|
||||
Rule Albania 1984 only - Apr 1 0:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Tirane 1:19:20 - LMT 1914
|
||||
1:00 - CET 1940 Jun 16
|
||||
1:00 Albania CE%sT 1984 Jul
|
||||
1:00 EU CE%sT
|
||||
|
||||
# Andorra
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Andorra 0:06:04 - LMT 1901
|
||||
0:00 - WET 1946 Sep 30
|
||||
1:00 - CET 1985 Mar 31 2:00
|
||||
@@ -830,7 +830,7 @@ Rule Austria 1947 only - Apr 6 2:00s 1:00 S
|
||||
Rule Austria 1948 only - Apr 18 2:00s 1:00 S
|
||||
Rule Austria 1980 only - Apr 6 0:00 1:00 S
|
||||
Rule Austria 1980 only - Sep 28 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
|
||||
1:00 C-Eur CE%sT 1920
|
||||
1:00 Austria CE%sT 1940 Apr 1 2:00s
|
||||
@@ -862,7 +862,7 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
|
||||
# Belarussian government decided against changing to winter time....
|
||||
# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Minsk 1:50:16 - LMT 1880
|
||||
1:50 - MMT 1924 May 2 # Minsk Mean Time
|
||||
2:00 - EET 1930 Jun 21
|
||||
@@ -926,7 +926,7 @@ Rule Belgium 1945 only - Apr 2 2:00s 1:00 S
|
||||
Rule Belgium 1945 only - Sep 16 2:00s 0 -
|
||||
Rule Belgium 1946 only - May 19 2:00s 1:00 S
|
||||
Rule Belgium 1946 only - Oct 7 2:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Brussels 0:17:30 - LMT 1880
|
||||
0:17:30 - BMT 1892 May 1 12:00 # Brussels MT
|
||||
0:00 - WET 1914 Nov 8
|
||||
@@ -953,7 +953,7 @@ Rule Bulg 1979 only - Oct 1 1:00 0 -
|
||||
Rule Bulg 1980 1982 - Apr Sat>=1 23:00 1:00 S
|
||||
Rule Bulg 1980 only - Sep 29 1:00 0 -
|
||||
Rule Bulg 1981 only - Sep 27 2:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Sofia 1:33:16 - LMT 1880
|
||||
1:56:56 - IMT 1894 Nov 30 # Istanbul MT?
|
||||
2:00 - EET 1942 Nov 2 3:00
|
||||
@@ -986,7 +986,7 @@ Rule Czech 1946 only - May 6 2:00s 1:00 S
|
||||
Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 -
|
||||
Rule Czech 1947 1948 - Apr Sun>=15 2:00s 1:00 S
|
||||
Rule Czech 1949 only - Apr 9 2:00s 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Prague 0:57:44 - LMT 1850
|
||||
0:57:44 - PMT 1891 Oct # Prague Mean Time
|
||||
1:00 C-Eur CE%sT 1945 May 9
|
||||
@@ -1048,7 +1048,7 @@ Rule Denmark 1947 only - Aug 10 2:00s 0 -
|
||||
Rule Denmark 1948 only - May 9 2:00s 1:00 S
|
||||
Rule Denmark 1948 only - Aug 8 2:00s 0 -
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Copenhagen 0:50:20 - LMT 1890
|
||||
0:50:20 - CMT 1894 Jan 1 # Copenhagen MT
|
||||
1:00 Denmark CE%sT 1942 Nov 2 2:00s
|
||||
@@ -1145,7 +1145,7 @@ Rule Thule 1993 2006 - Oct lastSun 2:00 0 S
|
||||
Rule Thule 2007 max - Mar Sun>=8 2:00 1:00 D
|
||||
Rule Thule 2007 max - Nov Sun>=1 2:00 0 S
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Danmarkshavn -1:14:40 - LMT 1916 Jul 28
|
||||
-3:00 - -03 1980 Apr 6 2:00
|
||||
-3:00 EU -03/-02 1996
|
||||
@@ -1211,7 +1211,7 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
|
||||
# From Urmet Jänes (2002-03-28):
|
||||
# The legislative reference is Government decree No. 84 on 2002-02-21.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Tallinn 1:39:00 - LMT 1880
|
||||
1:39:00 - TMT 1918 Feb # Tallinn Mean Time
|
||||
1:00 C-Eur CE%sT 1919 Jul
|
||||
@@ -1274,7 +1274,7 @@ Rule Finland 1981 1982 - Sep lastSun 3:00 0 -
|
||||
# Milne says Helsinki (Helsingfors) time was 1:39:49.2 (official document);
|
||||
# round to nearest.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Helsinki 1:39:49 - LMT 1878 May 31
|
||||
1:39:49 - HMT 1921 May # Helsinki Mean Time
|
||||
2:00 Finland EE%sT 1983
|
||||
@@ -1364,7 +1364,7 @@ Rule France 1976 only - Sep 26 1:00 0 -
|
||||
# but Howse quotes the actual French legislation as saying 0:09:21.
|
||||
# Go with Howse. Howse writes that the time in France was officially based
|
||||
# on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
|
||||
0:09:21 - PMT 1911 Mar 11 0:01 # Paris MT
|
||||
# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
|
||||
@@ -1412,7 +1412,7 @@ Rule SovietZone 1945 only - May 24 2:00 2:00 M # Midsummer
|
||||
Rule SovietZone 1945 only - Sep 24 3:00 1:00 S
|
||||
Rule SovietZone 1945 only - Nov 18 2:00s 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Berlin 0:53:28 - LMT 1893 Apr
|
||||
1:00 C-Eur CE%sT 1945 May 24 2:00
|
||||
1:00 SovietZone CE%sT 1946
|
||||
@@ -1440,7 +1440,7 @@ Link Europe/Zurich Europe/Busingen
|
||||
# is in Europe. Our reference location Tbilisi is in the Asian part.
|
||||
|
||||
# Gibraltar
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Gibraltar -0:21:24 - LMT 1880 Aug 2 0:00s
|
||||
0:00 GB-Eire %s 1957 Apr 14 2:00
|
||||
1:00 - CET 1982
|
||||
@@ -1471,7 +1471,7 @@ Rule Greece 1979 only - Apr 1 9:00 1:00 S
|
||||
Rule Greece 1979 only - Sep 29 2:00 0 -
|
||||
Rule Greece 1980 only - Apr 1 0:00 1:00 S
|
||||
Rule Greece 1980 only - Sep 28 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Athens 1:34:52 - LMT 1895 Sep 14
|
||||
1:34:52 - AMT 1916 Jul 28 0:01 # Athens MT
|
||||
2:00 Greece EE%sT 1941 Apr 30
|
||||
@@ -1508,7 +1508,7 @@ Rule Hungary 1956 only - Sep lastSun 0:00 0 -
|
||||
Rule Hungary 1957 only - Jun Sun>=1 1:00 1:00 S
|
||||
Rule Hungary 1957 only - Sep lastSun 3:00 0 -
|
||||
Rule Hungary 1980 only - Apr 6 1:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Budapest 1:16:20 - LMT 1890 Oct
|
||||
1:00 C-Eur CE%sT 1918
|
||||
1:00 Hungary CE%sT 1941 Apr 8
|
||||
@@ -1569,7 +1569,7 @@ Rule Iceland 1947 1967 - Apr Sun>=1 1:00s 1:00 -
|
||||
Rule Iceland 1949 only - Oct 30 1:00s 0 -
|
||||
Rule Iceland 1950 1966 - Oct Sun>=22 1:00s 0 -
|
||||
Rule Iceland 1967 only - Oct 29 1:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Reykjavik -1:28 - LMT 1908
|
||||
-1:00 Iceland -01/+00 1968 Apr 7 1:00s
|
||||
0:00 - GMT
|
||||
@@ -1583,6 +1583,25 @@ Zone Atlantic/Reykjavik -1:28 - LMT 1908
|
||||
# But these events all occurred before the 1970 cutoff,
|
||||
# so record only the time in Rome.
|
||||
#
|
||||
# From Stephen Trainor (2019-05-06):
|
||||
# http://www.ac-ilsestante.it/MERIDIANE/ora_legale/ORA_LEGALE_ESTIVA_IN_ITALIA.htm
|
||||
# ... the [1866] law went into effect on 12 December 1866, rather than
|
||||
# the date of the decree (22 Sep 1866)
|
||||
# https://web.archive.org/web/20070824155341/http://www.iav.it/planetario/didastro/didastro/english.htm
|
||||
# ... "In Italy in 1866 there were 6 railway times (Torino, Verona, Firenze,
|
||||
# Roma, Napoli, Palermo). On that year it was decided to unify them, adopting
|
||||
# the average time of Rome (even if this city was not yet part of the
|
||||
# kingdom). On the 12th December 1866, on the starting of the winter time
|
||||
# table, it took effect in the railways, the post office and the telegraph,
|
||||
# not only for the internal service but also for the public.... Milano set
|
||||
# the public watches on the Rome time on the same day (12th December 1866),
|
||||
# Torino and Bologna on the 1st January 1867, Venezia the 1st May 1880 and the
|
||||
# last city was Cagliari in 1886."
|
||||
#
|
||||
# From Luigi Rosa (2019-05-07):
|
||||
# this is the scan of the decree:
|
||||
# http://www.radiomarconi.com/marconi/filopanti/1866c.jpg
|
||||
#
|
||||
# From Michael Deckers (2016-10-24):
|
||||
# http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
|
||||
# ... [translated as] "The preceding dispositions will enter into
|
||||
@@ -1593,6 +1612,7 @@ Zone Atlantic/Reykjavik -1:28 - LMT 1908
|
||||
# The authoritative source for time in Italy is the national metrological
|
||||
# institute, which has a summary page of historical DST data at
|
||||
# http://www.inrim.it/res/tf/ora_legale_i.shtml
|
||||
# [now at http://oldsite.inrim.it/res/tf/ora_legale_i.shtml as of 2017]
|
||||
# (2016-10-24):
|
||||
# http://www.renzobaldini.it/le-ore-legali-in-italia/
|
||||
# has still different data for 1944. It divides Italy in two, as
|
||||
@@ -1656,8 +1676,8 @@ Rule Italy 1976 only - May 30 0:00s 1:00 S
|
||||
Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
|
||||
Rule Italy 1978 only - Oct 1 0:00s 0 -
|
||||
Rule Italy 1979 only - Sep 30 0:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Rome 0:49:56 - LMT 1866 Dec 12
|
||||
0:49:56 - RMT 1893 Oct 31 23:49:56 # Rome Mean
|
||||
1:00 Italy CE%sT 1943 Sep 10
|
||||
1:00 C-Eur CE%sT 1944 Jun 4
|
||||
@@ -1732,7 +1752,7 @@ Rule Latvia 1989 1996 - Sep lastSun 2:00s 0 -
|
||||
# Byalokoz 1919 says Latvia was 1:36:34.
|
||||
# Go with Byalokoz.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Riga 1:36:34 - LMT 1880
|
||||
1:36:34 - RMT 1918 Apr 15 2:00 # Riga MT
|
||||
1:36:34 1:00 LST 1918 Sep 16 3:00 # Latvian ST
|
||||
@@ -1802,7 +1822,7 @@ Link Europe/Zurich Europe/Vaduz
|
||||
# http://www.lrvk.lt/nut/11/n1749.htm
|
||||
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Vilnius 1:41:16 - LMT 1880
|
||||
1:24:00 - WMT 1917 # Warsaw Mean Time
|
||||
1:35:36 - KMT 1919 Oct 10 # Kaunas Mean Time
|
||||
@@ -1846,7 +1866,7 @@ Rule Lux 1926 only - Apr 17 23:00 1:00 S
|
||||
Rule Lux 1927 only - Apr 9 23:00 1:00 S
|
||||
Rule Lux 1928 only - Apr 14 23:00 1:00 S
|
||||
Rule Lux 1929 only - Apr 20 23:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
|
||||
1:00 Lux CE%sT 1918 Nov 25
|
||||
0:00 Lux WE%sT 1929 Oct 6 2:00s
|
||||
@@ -1871,7 +1891,7 @@ Rule Malta 1974 only - Sep 16 0:00s 0 -
|
||||
Rule Malta 1975 1979 - Apr Sun>=15 2:00 1:00 S
|
||||
Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
|
||||
Rule Malta 1980 only - Mar 31 2:00 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
|
||||
1:00 Italy CE%sT 1973 Mar 31
|
||||
1:00 Malta CE%sT 1981
|
||||
@@ -1940,7 +1960,7 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
|
||||
Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
|
||||
Rule Moldova 1997 max - Oct lastSun 3:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Chisinau 1:55:20 - LMT 1880
|
||||
1:55 - CMT 1918 Feb 15 # Chisinau MT
|
||||
1:44:24 - BMT 1931 Jul 24 # Bucharest MT
|
||||
@@ -1956,7 +1976,7 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
|
||||
# Monaco
|
||||
# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
|
||||
# more precise 0:09:21.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
|
||||
0:09:21 - PMT 1911 Mar 11 # Paris Mean Time
|
||||
0:00 France WE%sT 1945 Sep 16 3:00
|
||||
@@ -2031,8 +2051,8 @@ Rule Neth 1945 only - Apr 2 2:00s 1:00 S
|
||||
Rule Neth 1945 only - Sep 16 2:00s 0 -
|
||||
#
|
||||
# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted
|
||||
# below because the current format requires GMTOFF to be an integer.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# below because the current format requires STDOFF to be an integer.
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Amsterdam 0:19:32 - LMT 1835
|
||||
0:19:32 Neth %s 1937 Jul 1
|
||||
0:20 Neth +0020/+0120 1940 May 16 0:00
|
||||
@@ -2051,7 +2071,7 @@ Rule Norway 1945 only - Oct 1 2:00s 0 -
|
||||
Rule Norway 1959 1964 - Mar Sun>=15 2:00s 1:00 S
|
||||
Rule Norway 1959 1965 - Sep Sun>=15 2:00s 0 -
|
||||
Rule Norway 1965 only - Apr 25 2:00s 1:00 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Oslo 0:43:00 - LMT 1895 Jan 1
|
||||
1:00 Norway CE%sT 1940 Aug 10 23:00
|
||||
1:00 C-Eur CE%sT 1945 Apr 2 2:00
|
||||
@@ -2142,7 +2162,7 @@ Rule Poland 1959 1961 - Oct Sun>=1 1:00s 0 -
|
||||
Rule Poland 1960 only - Apr 3 1:00s 1:00 S
|
||||
Rule Poland 1961 1964 - May lastSun 1:00s 1:00 S
|
||||
Rule Poland 1962 1964 - Sep lastSun 1:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Warsaw 1:24:00 - LMT 1880
|
||||
1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
|
||||
1:00 C-Eur CE%sT 1918 Sep 16 3:00
|
||||
@@ -2247,7 +2267,7 @@ Rule Port 1980 only - Mar lastSun 0:00s 1:00 S
|
||||
Rule Port 1981 1982 - Mar lastSun 1:00s 1:00 S
|
||||
Rule Port 1983 only - Mar lastSun 2:00s 1:00 S
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Lisbon -0:36:45 - LMT 1884
|
||||
-0:36:45 - LMT 1912 Jan 1 0:00u # Lisbon MT
|
||||
0:00 Port WE%sT 1966 Apr 3 2:00
|
||||
@@ -2306,7 +2326,7 @@ Rule Romania 1980 only - Apr 5 23:00 1:00 S
|
||||
Rule Romania 1980 only - Sep lastSun 1:00 0 -
|
||||
Rule Romania 1991 1993 - Mar lastSun 0:00s 1:00 S
|
||||
Rule Romania 1991 1993 - Sep lastSun 0:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
|
||||
1:44:24 - BMT 1931 Jul 24 # Bucharest MT
|
||||
2:00 Romania EE%sT 1981 Mar 29 2:00s
|
||||
@@ -3345,7 +3365,7 @@ Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
|
||||
# See Europe/Rome.
|
||||
|
||||
# Serbia
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Belgrade 1:22:00 - LMT 1884
|
||||
1:00 - CET 1941 Apr 18 23:00
|
||||
1:00 C-Eur CE%sT 1945
|
||||
@@ -3451,7 +3471,7 @@ Rule SpainAfrica 1976 only - Aug 1 0:00 0 -
|
||||
Rule SpainAfrica 1977 only - Sep 28 0:00 0 -
|
||||
Rule SpainAfrica 1978 only - Jun 1 0:00 1:00 S
|
||||
Rule SpainAfrica 1978 only - Aug 4 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Madrid -0:14:44 - LMT 1900 Dec 31 23:45:16
|
||||
0:00 Spain WE%sT 1940 Mar 16 23:00
|
||||
1:00 Spain CE%sT 1979
|
||||
@@ -3519,7 +3539,7 @@ Zone Atlantic/Canary -1:01:36 - LMT 1922 Mar # Las Palmas de Gran C.
|
||||
#
|
||||
# Source: The newspaper "Dagens Nyheter", 1916-10-01, page 7 upper left.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
||||
1:00:14 - SET 1900 Jan 1 # Swedish Time
|
||||
1:00 - CET 1916 May 14 23:00
|
||||
@@ -3622,7 +3642,7 @@ Zone Europe/Stockholm 1:12:12 - LMT 1879 Jan 1
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
|
||||
Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
|
||||
0:29:46 - BMT 1894 Jun # Bern Mean Time
|
||||
1:00 Swiss CE%sT 1981
|
||||
@@ -3772,7 +3792,7 @@ Rule Turkey 1986 1995 - Sep lastSun 1:00s 0 -
|
||||
Rule Turkey 1994 only - Mar 20 1:00s 1:00 S
|
||||
Rule Turkey 1995 2006 - Mar lastSun 1:00s 1:00 S
|
||||
Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Europe/Istanbul 1:55:52 - LMT 1880
|
||||
1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
|
||||
2:00 Turkey EE%sT 1978 Oct 15
|
||||
@@ -3869,16 +3889,8 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
|
||||
# controversial, and some day "Kyiv" may become substantially more popular in
|
||||
# English; in the meantime, stick with the traditional English "Kiev" as that
|
||||
# means less disruption for our users.
|
||||
#
|
||||
# Anyway, none of the common English-language spellings (Kiev, Kyiv, Kieff,
|
||||
# Kijeff, Kijev, Kiyef, Kiyeff) do justice to the common pronunciation in
|
||||
# Ukrainian, namely [ˈkɪjiu̯] (IPA). This pronunciation has nothing like an
|
||||
# English "v" or "f", and instead trails off with what an English-speaker
|
||||
# would call a demure "oo" sound, and it would would be better anglicized as
|
||||
# "Kuiyu". Here's a sound file, if you would like to do as the Kuiyuvians do:
|
||||
# https://commons.wikimedia.org/wiki/File:Uk-Київ.ogg
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# This represents most of Ukraine. See above for the spelling of "Kiev".
|
||||
Zone Europe/Kiev 2:02:04 - LMT 1880
|
||||
2:02:04 - KMT 1924 May 2 # Kiev Mean Time
|
||||
|
||||
@@ -8,5 +8,5 @@
|
||||
# time zone abbreviation "-00", indicating that the actual time zone
|
||||
# is unknown.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT
|
||||
# Zone NAME STDOFF RULES FORMAT
|
||||
Zone Factory 0 - "Local time zone must be set--use tzsetup"
|
||||
+93
-72
@@ -93,10 +93,33 @@
|
||||
# was the first nationwide legal time standard, and apparently
|
||||
# time was just called "Standard Time" or "Daylight Saving Time".
|
||||
|
||||
# From Arthur David Olson:
|
||||
# US Daylight Saving Time ended on the last Sunday of *October* in 1974.
|
||||
# See, for example, the front page of the Saturday, 1974-10-26
|
||||
# and Sunday, 1974-10-27 editions of the Washington Post.
|
||||
# From Paul Eggert (2019-06-04):
|
||||
# Here is the legal basis for the US federal rules.
|
||||
# * Public Law 65-106 (1918-03-19) implemented standard and daylight saving
|
||||
# time for the first time across the US, springing forward on March's last
|
||||
# Sunday and falling back on October's last Sunday.
|
||||
# https://www.loc.gov/law/help/statutes-at-large/65th-congress/session-2/c65s2ch24.pdf
|
||||
# * Public Law 66-40 (1919-08-20) repealed DST on October 1919's last Sunday.
|
||||
# https://www.loc.gov/law/help/statutes-at-large/66th-congress/session-1/c66s1ch51.pdf
|
||||
# * Public Law 77-403 (1942-01-20) started wartime DST on 1942-02-09.
|
||||
# https://www.loc.gov/law/help/statutes-at-large/77th-congress/session-2/c77s2ch7.pdf
|
||||
# * Public Law 79-187 (1945-09-25) ended wartime DST on 1945-09-30.
|
||||
# https://www.loc.gov/law/help/statutes-at-large/79th-congress/session-1/c79s1ch388.pdf
|
||||
# * Public Law 89-387 (1966-04-13) reinstituted a national standard for DST,
|
||||
# from April's last Sunday to October's last Sunday, effective 1967.
|
||||
# https://www.govinfo.gov/content/pkg/STATUTE-80/pdf/STATUTE-80-Pg107.pdf
|
||||
# * Public Law 93-182 (1973-12-15) moved the 1974 spring-forward to 01-06.
|
||||
# https://www.govinfo.gov/content/pkg/STATUTE-87/pdf/STATUTE-87-Pg707.pdf
|
||||
# * Public Law 93-434 (1974-10-05) moved the 1975 spring-forward to
|
||||
# February's last Sunday.
|
||||
# https://www.govinfo.gov/content/pkg/STATUTE-88/pdf/STATUTE-88-Pg1209.pdf
|
||||
# * Public Law 99-359 (1986-07-08) moved the spring-forward to April's first
|
||||
# Sunday.
|
||||
# https://www.govinfo.gov/content/pkg/STATUTE-100/pdf/STATUTE-100-Pg764.pdf
|
||||
# * Public Law 109-58 (2005-08-08), effective 2007, moved the spring-forward
|
||||
# to March's second Sunday and the fall-back to November's first Sunday.
|
||||
# https://www.govinfo.gov/content/pkg/PLAW-109publ58/pdf/PLAW-109publ58.pdf
|
||||
# All transitions are at 02:00 local time.
|
||||
|
||||
# From Arthur David Olson:
|
||||
# Before the Uniform Time Act of 1966 took effect in 1967, observance of
|
||||
@@ -152,11 +175,11 @@ Rule US 1918 1919 - Mar lastSun 2:00 1:00 D
|
||||
Rule US 1918 1919 - Oct lastSun 2:00 0 S
|
||||
Rule US 1942 only - Feb 9 2:00 1:00 W # War
|
||||
Rule US 1945 only - Aug 14 23:00u 1:00 P # Peace
|
||||
Rule US 1945 only - Sep lastSun 2:00 0 S
|
||||
Rule US 1945 only - Sep 30 2:00 0 S
|
||||
Rule US 1967 2006 - Oct lastSun 2:00 0 S
|
||||
Rule US 1967 1973 - Apr lastSun 2:00 1:00 D
|
||||
Rule US 1974 only - Jan 6 2:00 1:00 D
|
||||
Rule US 1975 only - Feb 23 2:00 1:00 D
|
||||
Rule US 1975 only - Feb lastSun 2:00 1:00 D
|
||||
Rule US 1976 1986 - Apr lastSun 2:00 1:00 D
|
||||
Rule US 1987 2006 - Apr Sun>=1 2:00 1:00 D
|
||||
Rule US 2007 max - Mar Sun>=8 2:00 1:00 D
|
||||
@@ -173,7 +196,7 @@ Rule US 2007 max - Nov Sun>=1 2:00 0 S
|
||||
# increase the chances that they'll actually get compiled and to
|
||||
# avoid the need to duplicate the US rules in another file.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone EST -5:00 - EST
|
||||
Zone MST -7:00 - MST
|
||||
Zone HST -10:00 - HST
|
||||
@@ -330,7 +353,7 @@ Rule NYC 1920 only - Oct lastSun 2:00 0 S
|
||||
Rule NYC 1921 1966 - Apr lastSun 2:00 1:00 D
|
||||
Rule NYC 1921 1954 - Sep lastSun 2:00 0 S
|
||||
Rule NYC 1955 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
|
||||
-5:00 US E%sT 1920
|
||||
-5:00 NYC E%sT 1942
|
||||
@@ -390,7 +413,7 @@ Rule Chicago 1921 only - Mar lastSun 2:00 1:00 D
|
||||
Rule Chicago 1922 1966 - Apr lastSun 2:00 1:00 D
|
||||
Rule Chicago 1922 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Chicago 1955 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
|
||||
-6:00 US C%sT 1920
|
||||
-6:00 Chicago C%sT 1936 Mar 1 2:00
|
||||
@@ -458,7 +481,7 @@ Rule Denver 1920 only - Oct lastSun 2:00 0 S
|
||||
Rule Denver 1921 only - May 22 2:00 0 S
|
||||
Rule Denver 1965 1966 - Apr lastSun 2:00 1:00 D
|
||||
Rule Denver 1965 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
|
||||
-7:00 US M%sT 1920
|
||||
-7:00 Denver M%sT 1942
|
||||
@@ -511,7 +534,7 @@ Rule CA 1949 only - Jan 1 2:00 0 S
|
||||
Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D
|
||||
Rule CA 1950 1961 - Sep lastSun 2:00 0 S
|
||||
Rule CA 1962 1966 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
|
||||
-8:00 US P%sT 1946
|
||||
-8:00 CA P%sT 1967
|
||||
@@ -619,7 +642,7 @@ Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
|
||||
# So they won't be waiting for Alaska to join them on 2019-03-10, but will
|
||||
# rather change their clocks twice in seven weeks.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Juneau 15:02:19 - LMT 1867 Oct 19 15:33:32
|
||||
-8:57:41 - LMT 1900 Aug 20 12:00
|
||||
-8:00 - PST 1942
|
||||
@@ -739,7 +762,7 @@ Zone America/Adak 12:13:22 - LMT 1867 Oct 19 12:44:35
|
||||
# Note that 1933-05-21 was a Sunday.
|
||||
# We're left to guess the time of day when Act 163 was approved; guess noon.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
|
||||
-10:30 - HST 1933 Apr 30 2:00
|
||||
-10:30 1:00 HDT 1933 May 21 12:00
|
||||
@@ -769,7 +792,7 @@ Zone Pacific/Honolulu -10:31:26 - LMT 1896 Jan 13 12:00
|
||||
# Shanks says the 1944 experiment came to an end on 1944-03-17.
|
||||
# Go with the Arizona State Library instead.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
|
||||
-7:00 US M%sT 1944 Jan 1 0:01
|
||||
-7:00 - MST 1944 Apr 1 0:01
|
||||
@@ -795,7 +818,7 @@ Zone America/Phoenix -7:28:18 - LMT 1883 Nov 18 11:31:42
|
||||
# quarter of Idaho county) and eastern Oregon (most of Malheur County)
|
||||
# switched four weeks late in 1974.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
|
||||
-8:00 US P%sT 1923 May 13 2:00
|
||||
-7:00 US M%sT 1974
|
||||
@@ -867,7 +890,7 @@ Zone America/Boise -7:44:49 - LMT 1883 Nov 18 12:15:11
|
||||
Rule Indianapolis 1941 only - Jun 22 2:00 1:00 D
|
||||
Rule Indianapolis 1941 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Indianapolis 1946 1954 - Apr lastSun 2:00 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Indianapolis -5:44:38 - LMT 1883 Nov 18 12:15:22
|
||||
-6:00 US C%sT 1920
|
||||
-6:00 Indianapolis C%sT 1942
|
||||
@@ -887,7 +910,7 @@ Rule Marengo 1951 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Marengo 1951 only - Sep lastSun 2:00 0 S
|
||||
Rule Marengo 1954 1960 - Apr lastSun 2:00 1:00 D
|
||||
Rule Marengo 1954 1960 - Sep lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Marengo -5:45:23 - LMT 1883 Nov 18 12:14:37
|
||||
-6:00 US C%sT 1951
|
||||
-6:00 Marengo C%sT 1961 Apr 30 2:00
|
||||
@@ -911,7 +934,7 @@ Rule Vincennes 1956 1963 - Apr lastSun 2:00 1:00 D
|
||||
Rule Vincennes 1960 only - Oct lastSun 2:00 0 S
|
||||
Rule Vincennes 1961 only - Sep lastSun 2:00 0 S
|
||||
Rule Vincennes 1962 1963 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Vincennes -5:50:07 - LMT 1883 Nov 18 12:09:53
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Vincennes C%sT 1964 Apr 26 2:00
|
||||
@@ -932,7 +955,7 @@ Rule Perry 1956 1963 - Apr lastSun 2:00 1:00 D
|
||||
Rule Perry 1960 only - Oct lastSun 2:00 0 S
|
||||
Rule Perry 1961 only - Sep lastSun 2:00 0 S
|
||||
Rule Perry 1962 1963 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Tell_City -5:47:03 - LMT 1883 Nov 18 12:12:57
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Perry C%sT 1964 Apr 26 2:00
|
||||
@@ -948,7 +971,7 @@ Rule Pike 1955 only - May 1 0:00 1:00 D
|
||||
Rule Pike 1955 1960 - Sep lastSun 2:00 0 S
|
||||
Rule Pike 1956 1964 - Apr lastSun 2:00 1:00 D
|
||||
Rule Pike 1961 1964 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Petersburg -5:49:07 - LMT 1883 Nov 18 12:10:53
|
||||
-6:00 US C%sT 1955
|
||||
-6:00 Pike C%sT 1965 Apr 25 2:00
|
||||
@@ -970,7 +993,7 @@ Rule Starke 1947 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Starke 1955 1956 - Oct lastSun 2:00 0 S
|
||||
Rule Starke 1957 1958 - Sep lastSun 2:00 0 S
|
||||
Rule Starke 1959 1961 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Knox -5:46:30 - LMT 1883 Nov 18 12:13:30
|
||||
-6:00 US C%sT 1947
|
||||
-6:00 Starke C%sT 1962 Apr 29 2:00
|
||||
@@ -986,7 +1009,7 @@ Rule Pulaski 1946 1960 - Apr lastSun 2:00 1:00 D
|
||||
Rule Pulaski 1946 1954 - Sep lastSun 2:00 0 S
|
||||
Rule Pulaski 1955 1956 - Oct lastSun 2:00 0 S
|
||||
Rule Pulaski 1957 1960 - Sep lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Pulaski C%sT 1961 Apr 30 2:00
|
||||
@@ -997,7 +1020,7 @@ Zone America/Indiana/Winamac -5:46:25 - LMT 1883 Nov 18 12:13:35
|
||||
-5:00 US E%sT
|
||||
#
|
||||
# Switzerland County, Indiana, did not observe DST from 1973 through 2005.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Indiana/Vevay -5:40:16 - LMT 1883 Nov 18 12:19:44
|
||||
-6:00 US C%sT 1954 Apr 25 2:00
|
||||
-5:00 - EST 1969
|
||||
@@ -1022,7 +1045,7 @@ Rule Louisville 1941 only - Sep lastSun 2:00 0 S
|
||||
Rule Louisville 1946 only - Jun 2 2:00 0 S
|
||||
Rule Louisville 1950 1955 - Sep lastSun 2:00 0 S
|
||||
Rule Louisville 1956 1960 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Kentucky/Louisville -5:43:02 - LMT 1883 Nov 18 12:16:58
|
||||
-6:00 US C%sT 1921
|
||||
-6:00 Louisville C%sT 1942
|
||||
@@ -1128,7 +1151,7 @@ Zone America/Kentucky/Monticello -5:39:24 - LMT 1883 Nov 18 12:20:36
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
|
||||
Rule Detroit 1948 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Detroit 1948 only - Sep lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Detroit -5:32:11 - LMT 1905
|
||||
-6:00 - CST 1915 May 15 2:00
|
||||
-5:00 - EST 1942
|
||||
@@ -1145,7 +1168,7 @@ Rule Menominee 1946 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Menominee 1946 only - Sep lastSun 2:00 0 S
|
||||
Rule Menominee 1966 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Menominee 1966 only - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
|
||||
-6:00 US C%sT 1946
|
||||
-6:00 Menominee C%sT 1969 Apr 27 2:00
|
||||
@@ -1379,7 +1402,7 @@ Rule StJohns 2007 2011 - Mar Sun>=8 0:01 1:00 D
|
||||
Rule StJohns 2007 2010 - Nov Sun>=1 0:01 0 S
|
||||
#
|
||||
# St John's has an apostrophe, but Posix file names can't have apostrophes.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/St_Johns -3:30:52 - LMT 1884
|
||||
-3:30:52 StJohns N%sT 1918
|
||||
-3:30:52 Canada N%sT 1919
|
||||
@@ -1392,7 +1415,7 @@ Zone America/St_Johns -3:30:52 - LMT 1884
|
||||
# most of east Labrador
|
||||
|
||||
# The name 'Happy Valley-Goose Bay' is too long; use 'Goose Bay'.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay
|
||||
-3:30:52 - NST 1918
|
||||
-3:30:52 Canada N%sT 1919
|
||||
@@ -1466,7 +1489,7 @@ Rule Halifax 1956 1959 - Apr lastSun 2:00 1:00 D
|
||||
Rule Halifax 1956 1959 - Sep lastSun 2:00 0 S
|
||||
Rule Halifax 1962 1973 - Apr lastSun 2:00 1:00 D
|
||||
Rule Halifax 1962 1973 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Halifax -4:14:24 - LMT 1902 Jun 15
|
||||
-4:00 Halifax A%sT 1918
|
||||
-4:00 Canada A%sT 1919
|
||||
@@ -1504,7 +1527,7 @@ Rule Moncton 1946 1956 - Sep lastSun 2:00 0 S
|
||||
Rule Moncton 1957 1972 - Oct lastSun 2:00 0 S
|
||||
Rule Moncton 1993 2006 - Apr Sun>=1 0:01 1:00 D
|
||||
Rule Moncton 1993 2006 - Oct lastSun 0:01 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
-5:00 - EST 1902 Jun 15
|
||||
-4:00 Canada A%sT 1933
|
||||
@@ -1533,7 +1556,7 @@ Zone America/Moncton -4:19:08 - LMT 1883 Dec 9
|
||||
# For lack of better info, guess this practice began around 1970, contra to
|
||||
# Shanks & Pottenger who have this region observing AST/ADT.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Blanc-Sablon -3:48:28 - LMT 1884
|
||||
-4:00 Canada A%sT 1970
|
||||
-4:00 - AST
|
||||
@@ -1701,19 +1724,10 @@ Rule Toronto 1922 1923 - May Sun>=8 2:00 1:00 D
|
||||
# was meant.
|
||||
Rule Toronto 1922 1926 - Sep Sun>=15 2:00 0 S
|
||||
Rule Toronto 1924 1927 - May Sun>=1 2:00 1:00 D
|
||||
# The 1927-to-1939 rules can be expressed more simply as
|
||||
# Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S
|
||||
# Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D
|
||||
# Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D
|
||||
# Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S
|
||||
# The rules below avoid use of Sun>=25
|
||||
# (which pre-2004 versions of zic cannot handle).
|
||||
Rule Toronto 1927 1932 - Sep lastSun 2:00 0 S
|
||||
Rule Toronto 1928 1931 - Apr lastSun 2:00 1:00 D
|
||||
Rule Toronto 1932 only - May 1 2:00 1:00 D
|
||||
Rule Toronto 1933 1940 - Apr lastSun 2:00 1:00 D
|
||||
Rule Toronto 1933 only - Oct 1 2:00 0 S
|
||||
Rule Toronto 1934 1939 - Sep lastSun 2:00 0 S
|
||||
Rule Toronto 1927 1937 - Sep Sun>=25 2:00 0 S
|
||||
Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D
|
||||
Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D
|
||||
Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S
|
||||
Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S
|
||||
Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D
|
||||
@@ -1746,7 +1760,7 @@ Rule Toronto 1957 1973 - Oct lastSun 2:00 0 S
|
||||
# War,... [t]he cities agreed to implement DST during the summer
|
||||
# months for the remainder of the war years.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Toronto -5:17:32 - LMT 1895
|
||||
-5:00 Canada E%sT 1919
|
||||
-5:00 Toronto E%sT 1942 Feb 9 2:00s
|
||||
@@ -1821,7 +1835,7 @@ Rule Winn 1963 only - Sep 22 2:00 0 S
|
||||
Rule Winn 1966 1986 - Apr lastSun 2:00s 1:00 D
|
||||
Rule Winn 1966 2005 - Oct lastSun 2:00s 0 S
|
||||
Rule Winn 1987 2005 - Apr Sun>=1 2:00s 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
|
||||
-6:00 Winn C%sT 2006
|
||||
-6:00 Canada C%sT
|
||||
@@ -1843,6 +1857,13 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
|
||||
# Willett (1914-03) notes that DST "has been in operation ... in the
|
||||
# City of Moose Jaw, Saskatchewan, for one year."
|
||||
|
||||
# From Paul Eggert (2019-04-26):
|
||||
# Chris Pearce's book "The Great Daylight Saving Time Controversy" (2017)
|
||||
# says that Regina observed DST in 1914-1917. No dates and times,
|
||||
# unfortunately. It also says that in 1914 Saskatoon observed DST
|
||||
# from 1 June to 6 July, and that DST was also tried out in Davidson,
|
||||
# Melfort, and Prince Albert.
|
||||
|
||||
# From Paul Eggert (2006-03-22):
|
||||
# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
|
||||
# Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
|
||||
@@ -1905,7 +1926,7 @@ Rule Swift 1957 only - Oct lastSun 2:00 0 S
|
||||
Rule Swift 1959 1961 - Apr lastSun 2:00 1:00 D
|
||||
Rule Swift 1959 only - Oct lastSun 2:00 0 S
|
||||
Rule Swift 1960 1961 - Sep lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Regina -6:58:36 - LMT 1905 Sep
|
||||
-7:00 Regina M%sT 1960 Apr lastSun 2:00
|
||||
-6:00 - CST
|
||||
@@ -1936,7 +1957,7 @@ Rule Edm 1969 only - Apr lastSun 2:00 1:00 D
|
||||
Rule Edm 1969 only - Oct lastSun 2:00 0 S
|
||||
Rule Edm 1972 1986 - Apr lastSun 2:00 1:00 D
|
||||
Rule Edm 1972 2006 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Edmonton -7:33:52 - LMT 1906 Sep
|
||||
-7:00 Edm M%sT 1987
|
||||
-7:00 Canada M%sT
|
||||
@@ -2029,7 +2050,7 @@ Rule Vanc 1946 1986 - Apr lastSun 2:00 1:00 D
|
||||
Rule Vanc 1946 only - Oct 13 2:00 0 S
|
||||
Rule Vanc 1947 1961 - Sep lastSun 2:00 0 S
|
||||
Rule Vanc 1962 2006 - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Vancouver -8:12:28 - LMT 1884
|
||||
-8:00 Vanc P%sT 1987
|
||||
-8:00 Canada P%sT
|
||||
@@ -2100,7 +2121,7 @@ Zone America/Creston -7:46:04 - LMT 1884
|
||||
# varying the manner of reckoning standard time.
|
||||
#
|
||||
# * Yukon Territory Commissioner's Order 1966-20 Interpretation Ordinance
|
||||
# http://? - no online source found
|
||||
# [no online source found]
|
||||
#
|
||||
# * Standard Time and Time Zones in Canada; Thomson, Malcolm M.; JRASC,
|
||||
# Vol. 64, pp.129-162; June 1970; SAO/NASA Astrophysics Data System (ADS)
|
||||
@@ -2133,7 +2154,7 @@ Zone America/Creston -7:46:04 - LMT 1884
|
||||
# to say eight hours behind Greenwich Time.
|
||||
#
|
||||
# * O.I.C. 1980/02 INTERPRETATION ACT
|
||||
# http://? - no online source found
|
||||
# [no online source found]
|
||||
#
|
||||
# * Yukon Daylight Saving Time, YOIC 1987/56
|
||||
# https://www.canlii.org/en/yk/laws/regu/yoic-1987-56/latest/yoic-1987-56.html
|
||||
@@ -2349,7 +2370,7 @@ Rule NT_YK 1965 only - Oct lastSun 2:00 0 S
|
||||
Rule NT_YK 1980 1986 - Apr lastSun 2:00 1:00 D
|
||||
Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
|
||||
Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# aka Panniqtuuq
|
||||
Zone America/Pangnirtung 0 - -00 1921 # trading post est.
|
||||
-4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
|
||||
@@ -2496,7 +2517,7 @@ Zone America/Dawson -9:17:40 - LMT 1900 Aug 20
|
||||
|
||||
# From Paul Eggert (2001-03-03):
|
||||
#
|
||||
# http://www.latimes.com/news/nation/20010303/t000018766.html
|
||||
# https://www.latimes.com/archives/la-xpm-2001-mar-03-mn-32561-story.html
|
||||
# James F. Smith writes in today's LA Times
|
||||
# * Sonora will continue to observe standard time.
|
||||
# * Last week Mexico City's mayor Andrés Manuel López Obrador decreed that
|
||||
@@ -2623,7 +2644,7 @@ Rule Mexico 2001 only - May Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 2001 only - Sep lastSun 2:00 0 S
|
||||
Rule Mexico 2002 max - Apr Sun>=1 2:00 1:00 D
|
||||
Rule Mexico 2002 max - Oct lastSun 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
# Quintana Roo; represented by Cancún
|
||||
Zone America/Cancun -5:47:04 - LMT 1922 Jan 1 0:12:56
|
||||
-6:00 - CST 1981 Dec 23
|
||||
@@ -2816,7 +2837,7 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
|
||||
Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Nassau -5:09:30 - LMT 1912 Mar 2
|
||||
-5:00 Bahamas E%sT 1976
|
||||
-5:00 US E%sT
|
||||
@@ -2831,7 +2852,7 @@ Rule Barb 1977 1978 - Oct Sun>=1 2:00 0 S
|
||||
Rule Barb 1978 1980 - Apr Sun>=15 2:00 1:00 D
|
||||
Rule Barb 1979 only - Sep 30 2:00 0 S
|
||||
Rule Barb 1980 only - Sep 25 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Barbados -3:58:29 - LMT 1924 # Bridgetown
|
||||
-3:58:29 - BMT 1932 # Bridgetown Mean Time
|
||||
-4:00 Barb A%sT
|
||||
@@ -2845,7 +2866,7 @@ Rule Belize 1973 only - Dec 5 0:00 1:00 CDT
|
||||
Rule Belize 1974 only - Feb 9 0:00 0 CST
|
||||
Rule Belize 1982 only - Dec 18 0:00 1:00 CDT
|
||||
Rule Belize 1983 only - Feb 12 0:00 0 CST
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Belize -5:52:48 - LMT 1912 Apr
|
||||
-6:00 Belize %s
|
||||
|
||||
@@ -2862,7 +2883,7 @@ Zone America/Belize -5:52:48 - LMT 1912 Apr
|
||||
# Friday, the same thing will happen in Bermuda.
|
||||
# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
|
||||
-4:00 - AST 1974 Apr 28 2:00
|
||||
-4:00 Canada A%sT 1976
|
||||
@@ -2884,7 +2905,7 @@ Rule CR 1991 1992 - Jan Sat>=15 0:00 1:00 D
|
||||
Rule CR 1991 only - Jul 1 0:00 0 S
|
||||
Rule CR 1992 only - Mar 15 0:00 0 S
|
||||
# There are too many San Josés elsewhere, so we'll use 'Costa Rica'.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Costa_Rica -5:36:13 - LMT 1890 # San José
|
||||
-5:36:13 - SJMT 1921 Jan 15 # San José Mean Time
|
||||
-6:00 CR C%sT
|
||||
@@ -3090,7 +3111,7 @@ Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
|
||||
Rule Cuba 2012 max - Nov Sun>=1 0:00s 0 S
|
||||
Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Havana -5:29:28 - LMT 1890
|
||||
-5:29:36 - HMT 1925 Jul 19 12:00 # Havana MT
|
||||
-5:00 Cuba C%sT
|
||||
@@ -3125,7 +3146,7 @@ Rule DR 1969 1973 - Oct lastSun 0:00 0:30 -0430
|
||||
Rule DR 1970 only - Feb 21 0:00 0 EST
|
||||
Rule DR 1971 only - Jan 20 0:00 0 EST
|
||||
Rule DR 1972 1974 - Jan 21 0:00 0 EST
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Santo_Domingo -4:39:36 - LMT 1890
|
||||
-4:40 - SDMT 1933 Apr 1 12:00 # S. Dom. MT
|
||||
-5:00 DR %s 1974 Oct 27
|
||||
@@ -3140,7 +3161,7 @@ Rule Salv 1987 1988 - May Sun>=1 0:00 1:00 D
|
||||
Rule Salv 1987 1988 - Sep lastSun 0:00 0 S
|
||||
# There are too many San Salvadors elsewhere, so use America/El_Salvador
|
||||
# instead of America/San_Salvador.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/El_Salvador -5:56:48 - LMT 1921 # San Salvador
|
||||
-6:00 Salv C%sT
|
||||
|
||||
@@ -3173,7 +3194,7 @@ Rule Guat 1991 only - Mar 23 0:00 1:00 D
|
||||
Rule Guat 1991 only - Sep 7 0:00 0 S
|
||||
Rule Guat 2006 only - Apr 30 0:00 1:00 D
|
||||
Rule Guat 2006 only - Oct 1 0:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
|
||||
-6:00 Guat C%sT
|
||||
|
||||
@@ -3259,7 +3280,7 @@ Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
|
||||
Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
|
||||
Rule Haiti 2017 max - Mar Sun>=8 2:00 1:00 D
|
||||
Rule Haiti 2017 max - Nov Sun>=1 2:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Port-au-Prince -4:49:20 - LMT 1890
|
||||
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
|
||||
-5:00 Haiti E%sT
|
||||
@@ -3298,7 +3319,7 @@ Rule Hond 1987 1988 - May Sun>=1 0:00 1:00 D
|
||||
Rule Hond 1987 1988 - Sep lastSun 0:00 0 S
|
||||
Rule Hond 2006 only - May Sun>=1 0:00 1:00 D
|
||||
Rule Hond 2006 only - Aug Mon>=1 0:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
|
||||
-6:00 Hond C%sT
|
||||
#
|
||||
@@ -3319,7 +3340,7 @@ Zone America/Tegucigalpa -5:48:52 - LMT 1921 Apr
|
||||
# Neita L. The politician in all of us. Jamaica Observer 2014-09-20
|
||||
# http://www.jamaicaobserver.com/columns/The-politician-in-all-of-us_17573647
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
|
||||
-5:07:10 - KMT 1912 Feb # Kingston Mean Time
|
||||
-5:00 - EST 1974
|
||||
@@ -3327,7 +3348,7 @@ Zone America/Jamaica -5:07:10 - LMT 1890 # Kingston
|
||||
-5:00 - EST
|
||||
|
||||
# Martinique
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
|
||||
-4:04:20 - FFMT 1911 May # Fort-de-France MT
|
||||
-4:00 - AST 1980 Apr 6
|
||||
@@ -3391,7 +3412,7 @@ Rule Nic 2005 only - Apr 10 0:00 1:00 D
|
||||
Rule Nic 2005 only - Oct Sun>=1 0:00 0 S
|
||||
Rule Nic 2006 only - Apr 30 2:00 1:00 D
|
||||
Rule Nic 2006 only - Oct Sun>=1 1:00 0 S
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Managua -5:45:08 - LMT 1890
|
||||
-5:45:12 - MMT 1934 Jun 23 # Managua Mean Time?
|
||||
-6:00 - CST 1973 May
|
||||
@@ -3403,7 +3424,7 @@ Zone America/Managua -5:45:08 - LMT 1890
|
||||
-6:00 Nic C%sT
|
||||
|
||||
# Panama
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Panama -5:18:08 - LMT 1890
|
||||
-5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
|
||||
-5:00 - EST
|
||||
@@ -3411,7 +3432,7 @@ Link America/Panama America/Cayman
|
||||
|
||||
# Puerto Rico
|
||||
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||||
-4:00 - AST 1942 May 3
|
||||
-4:00 US A%sT 1946
|
||||
@@ -3423,7 +3444,7 @@ Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan
|
||||
|
||||
# St Pierre and Miquelon
|
||||
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
||||
-4:00 - AST 1980 May
|
||||
-3:00 - -03 1987
|
||||
@@ -3469,7 +3490,7 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
|
||||
# by March 2018 for TCI. Magnetic Media. 2017-08-25.
|
||||
# http://magneticmediatv.com/2017/08/time-change-back-by-march-2018-for-tci/
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Grand_Turk -4:44:32 - LMT 1890
|
||||
-5:07:10 - KMT 1912 Feb # Kingston Mean Time
|
||||
-5:00 - EST 1979
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
## Rule Twilite XXXX max uspres Nov Sun>=7 2:00 0 S
|
||||
## Rule Twilite XXXX max nonpres Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
## Zone America/Los_Angeles-PET -8:00 US P%sT XXXX
|
||||
## -8:00 Twilite P%sT
|
||||
|
||||
|
||||
+33
-33
@@ -396,7 +396,7 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 -
|
||||
# plus is that this silences a zic complaint that there's no POSIX TZ
|
||||
# setting for timestamps past 2038.
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#
|
||||
# Buenos Aires (BA), Capital Federal (CF),
|
||||
Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
|
||||
@@ -577,7 +577,7 @@ Zone America/Argentina/Ushuaia -4:33:12 - LMT 1894 Oct 31
|
||||
Link America/Curacao America/Aruba
|
||||
|
||||
# Bolivia
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/La_Paz -4:32:36 - LMT 1890
|
||||
-4:32:36 - CMT 1931 Oct 15 # Calamarca MT
|
||||
-4:32:36 1:00 BST 1932 Mar 21 # Bolivia ST
|
||||
@@ -920,14 +920,13 @@ Rule Brazil 2012 only - Feb Sun>=22 0:00 0 -
|
||||
# removed Tocantins.
|
||||
Rule Brazil 2013 2014 - Feb Sun>=15 0:00 0 -
|
||||
Rule Brazil 2015 only - Feb Sun>=22 0:00 0 -
|
||||
Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
|
||||
Rule Brazil 2016 2019 - Feb Sun>=15 0:00 0 -
|
||||
# From Steffen Thorsen (2017-12-18):
|
||||
# According to many media sources, next year's DST start in Brazil will move to
|
||||
# the first Sunday of November, and it will stay like that for the years after.
|
||||
# the first Sunday of November
|
||||
# ... https://www.timeanddate.com/news/time/brazil-delays-dst-2018.html
|
||||
# From Steffen Thorsen (2017-12-20):
|
||||
# http://www.planalto.gov.br/ccivil_03/_ato2015-2018/2017/decreto/D9242.htm
|
||||
#
|
||||
# From Fábio Gomes (2018-10-04):
|
||||
# The Brazilian president just announced a new change on this year DST.
|
||||
# It was scheduled to start on November 4th and it was changed to November 18th.
|
||||
@@ -935,22 +934,21 @@ Rule Brazil 2016 2022 - Feb Sun>=15 0:00 0 -
|
||||
# The Brazilian government just announced that the change in DST was
|
||||
# canceled.... Maybe the president Michel Temer also woke up one hour
|
||||
# earlier today. :)
|
||||
Rule Brazil 2018 max - Nov Sun>=1 0:00 1:00 -
|
||||
Rule Brazil 2023 only - Feb Sun>=22 0:00 0 -
|
||||
Rule Brazil 2024 2025 - Feb Sun>=15 0:00 0 -
|
||||
Rule Brazil 2026 only - Feb Sun>=22 0:00 0 -
|
||||
Rule Brazil 2027 2033 - Feb Sun>=15 0:00 0 -
|
||||
Rule Brazil 2034 only - Feb Sun>=22 0:00 0 -
|
||||
Rule Brazil 2035 2036 - Feb Sun>=15 0:00 0 -
|
||||
Rule Brazil 2037 only - Feb Sun>=22 0:00 0 -
|
||||
# From Arthur David Olson (2008-09-29):
|
||||
# The next is wrong in some years but is better than nothing.
|
||||
Rule Brazil 2038 max - Feb Sun>=15 0:00 0 -
|
||||
|
||||
# The latest ruleset listed above says that the following states observe DST:
|
||||
Rule Brazil 2018 only - Nov Sun>=1 0:00 1:00 -
|
||||
# The last ruleset listed above says that the following states observed DST:
|
||||
# DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
|
||||
#
|
||||
# From Steffen Thorsen (2019-04-05):
|
||||
# According to multiple sources the Brazilian president wants to get rid of DST.
|
||||
# https://gmconline.com.br/noticias/politica/bolsonaro-horario-de-verao-deve-acabar-este-ano
|
||||
# https://g1.globo.com/economia/noticia/2019/04/05/governo-anuncia-fim-do-horario-de-verao.ghtml
|
||||
# From Marcus Diniz (2019-04-25):
|
||||
# Brazil no longer has DST changes - decree signed today
|
||||
# https://g1.globo.com/politica/noticia/2019/04/25/bolsonaro-assina-decreto-que-acaba-com-o-horario-de-verao.ghtml
|
||||
# From Daniel Soares de Oliveira (2019-04-26):
|
||||
# http://www.planalto.gov.br/ccivil_03/_Ato2019-2022/2019/Decreto/D9772.htm
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
#
|
||||
# Fernando de Noronha (administratively part of PE)
|
||||
Zone America/Noronha -2:09:40 - LMT 1914
|
||||
@@ -1258,6 +1256,8 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
|
||||
# https://twitter.com/MinEnergia/status/1029009354001973248
|
||||
# "We will keep the new time policy unchanged for at least the next 4 years."
|
||||
# So we extend the new rules on Saturdays at 24:00 mainland time indefinitely.
|
||||
# From Juan Correa (2019-02-04):
|
||||
# http://www.diariooficial.interior.gob.cl/publicaciones/2018/11/23/42212/01/1498738.pdf
|
||||
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule Chile 1927 1931 - Sep 1 0:00 1:00 -
|
||||
@@ -1298,7 +1298,7 @@ Rule Chile 2019 max - Apr Sun>=2 3:00u 0 -
|
||||
Rule Chile 2019 max - Sep Sun>=2 4:00u 1:00 -
|
||||
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
|
||||
# (1996-09) says 1998-03-08. Ignore these.
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Santiago -4:42:46 - LMT 1890
|
||||
-4:42:46 - SMT 1910 Jan 10 # Santiago Mean Time
|
||||
-5:00 - -05 1916 Jul 1
|
||||
@@ -1347,7 +1347,7 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
|
||||
# Palmer has followed Chile. Prior to that, before the Falklands War,
|
||||
# Palmer used to be supplied from Argentina.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Antarctica/Palmer 0 - -00 1965
|
||||
-4:00 Arg -04/-03 1969 Oct 5
|
||||
-3:00 Arg -03/-02 1982 May
|
||||
@@ -1362,7 +1362,7 @@ Zone Antarctica/Palmer 0 - -00 1965
|
||||
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
|
||||
Rule CO 1992 only - May 3 0:00 1:00 -
|
||||
Rule CO 1993 only - Apr 4 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
-4:56:16 - BMT 1914 Nov 23 # Bogotá Mean Time
|
||||
-5:00 CO -05/-04
|
||||
@@ -1387,7 +1387,7 @@ Zone America/Bogota -4:56:16 - LMT 1884 Mar 13
|
||||
# Netherlands as Kingdom Islands. This won't affect their time zones
|
||||
# though, as far as we know.
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
|
||||
-4:30 - -0430 1965
|
||||
-4:00 - AST
|
||||
@@ -1423,7 +1423,7 @@ Link America/Curacao America/Kralendijk # Caribbean Netherlands
|
||||
Rule Ecuador 1992 only - Nov 28 0:00 1:00 -
|
||||
Rule Ecuador 1993 only - Feb 5 0:00 0 -
|
||||
#
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guayaquil -5:19:20 - LMT 1890
|
||||
-5:14:00 - QMT 1931 # Quito Mean Time
|
||||
-5:00 Ecuador -05/-04
|
||||
@@ -1526,7 +1526,7 @@ Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 -
|
||||
Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
|
||||
Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
|
||||
Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||||
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
|
||||
-4:00 Falk -04/-03 1983 May
|
||||
@@ -1535,13 +1535,13 @@ Zone Atlantic/Stanley -3:51:24 - LMT 1890
|
||||
-3:00 - -03
|
||||
|
||||
# French Guiana
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Cayenne -3:29:20 - LMT 1911 Jul
|
||||
-4:00 - -04 1967 Oct
|
||||
-3:00 - -03
|
||||
|
||||
# Guyana
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Guyana -3:52:40 - LMT 1915 Mar # Georgetown
|
||||
-3:45 - -0345 1975 Jul 31
|
||||
-3:00 - -03 1991
|
||||
@@ -1635,7 +1635,7 @@ Rule Para 2010 2012 - Apr Sun>=8 0:00 0 -
|
||||
# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
|
||||
Rule Para 2013 max - Mar Sun>=22 0:00 0 -
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Asuncion -3:50:40 - LMT 1890
|
||||
-3:50:40 - AMT 1931 Oct 10 # Asunción Mean Time
|
||||
-4:00 - -04 1972 Oct
|
||||
@@ -1664,13 +1664,13 @@ Rule Peru 1990 only - Apr 1 0:00 0 -
|
||||
# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
|
||||
Rule Peru 1994 only - Jan 1 0:00 1:00 -
|
||||
Rule Peru 1994 only - Apr 1 0:00 0 -
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Lima -5:08:12 - LMT 1890
|
||||
-5:08:36 - LMT 1908 Jul 28 # Lima Mean Time?
|
||||
-5:00 Peru -05/-04
|
||||
|
||||
# South Georgia
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||||
-2:00 - -02
|
||||
|
||||
@@ -1678,7 +1678,7 @@ Zone Atlantic/South_Georgia -2:26:08 - LMT 1890 # Grytviken
|
||||
# uninhabited; scientific personnel have wintered
|
||||
|
||||
# Suriname
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||
-3:40:52 - PMT 1935 # Paramaribo Mean Time
|
||||
-3:40:36 - PMT 1945 Oct # The capital moved?
|
||||
@@ -1686,7 +1686,7 @@ Zone America/Paramaribo -3:40:40 - LMT 1911
|
||||
-3:00 - -03
|
||||
|
||||
# Trinidad and Tobago
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
|
||||
-4:00 - AST
|
||||
|
||||
@@ -1957,7 +1957,7 @@ Zone America/Montevideo -3:44:51 - LMT 1908 Jun 10
|
||||
# ... published in the official Gazette [2016-04-18], here:
|
||||
# http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
|
||||
|
||||
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES FORMAT [UNTIL]
|
||||
Zone America/Caracas -4:27:44 - LMT 1890
|
||||
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
|
||||
-4:30 - -0430 1965 Jan 1 0:00
|
||||
|
||||
@@ -23,7 +23,7 @@ Rule SystemV 1975 only - Oct lastSun 2:00 0 S
|
||||
Rule SystemV 1976 max - Apr lastSun 2:00 1:00 D
|
||||
Rule SystemV 1976 max - Oct lastSun 2:00 0 S
|
||||
|
||||
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
## Zone SystemV/AST4ADT -4:00 SystemV A%sT
|
||||
## Zone SystemV/EST5EDT -5:00 SystemV E%sT
|
||||
## Zone SystemV/CST6CDT -6:00 SystemV C%sT
|
||||
|
||||
+13
-13
@@ -88,7 +88,7 @@ href="https://en.wikipedia.org/wiki/POSIX">POSIX</a>, an international
|
||||
standard for <a
|
||||
href="https://en.wikipedia.org/wiki/Unix">UNIX</a>-like systems.
|
||||
As of this writing, the current edition of POSIX is: <a
|
||||
href="http://pubs.opengroup.org/onlinepubs/9699919799/"> The Open
|
||||
href="https://pubs.opengroup.org/onlinepubs/9699919799/"> The Open
|
||||
Group Base Specifications Issue 7</a>, IEEE Std 1003.1-2017, 2018
|
||||
Edition.
|
||||
Because the database's scope encompasses real-world changes to civil
|
||||
@@ -186,7 +186,7 @@ in decreasing order of importance:
|
||||
href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> letters,
|
||||
'<code>.</code>', '<code>-</code>' and '<code>_</code>'.
|
||||
Do not use digits, as that might create an ambiguity with <a
|
||||
href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX
|
||||
href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03">POSIX
|
||||
<code>TZ</code> strings</a>.
|
||||
A file name component must not exceed 14 characters or start with
|
||||
'<code>-</code>'.
|
||||
@@ -301,7 +301,7 @@ in decreasing order of importance:
|
||||
|
||||
<p>
|
||||
Guidelines have evolved with time, and names following old versions of
|
||||
this guideline might not follow the current version. When guidelines
|
||||
these guidelines might not follow the current version. When guidelines
|
||||
have changed, old names continue to be supported. Guideline changes
|
||||
have included the following:
|
||||
</p>
|
||||
@@ -330,7 +330,7 @@ and the file '<code>northamerica</code>' defines the legacy names
|
||||
</li>
|
||||
|
||||
<li>
|
||||
Older versions of this guideline said that
|
||||
Older versions of these guidelines said that
|
||||
there should typically be at least one name for each <a
|
||||
href="https://en.wikipedia.org/wiki/ISO_3166-1"><abbr
|
||||
title="International Organization for Standardization">ISO</abbr>
|
||||
@@ -379,8 +379,8 @@ in decreasing order of importance:
|
||||
special meaning to the
|
||||
<a href="https://en.wikipedia.org/wiki/Unix_shell">UNIX shell</a>
|
||||
and cause commands like
|
||||
'<code><a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#set">set</a>
|
||||
`<a href="http://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html">date</a>`</code>'
|
||||
'<code><a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#set">set</a>
|
||||
`<a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/date.html">date</a>`</code>'
|
||||
to have unexpected effects.
|
||||
Previous editions of this guideline required upper-case letters, but the
|
||||
Congressman who introduced
|
||||
@@ -955,7 +955,7 @@ an older <code>zic</code>.
|
||||
</li>
|
||||
<li>
|
||||
In POSIX, there is no tamper-proof way for a process to learn the
|
||||
system's best idea of local wall clock.
|
||||
system's best idea of local (wall clock) time.
|
||||
This is important for applications that an administrator wants
|
||||
used only at certain times – without regard to whether the
|
||||
user has fiddled the
|
||||
@@ -1052,14 +1052,14 @@ an older <code>zic</code>.
|
||||
</li>
|
||||
<li>
|
||||
A function <code>tzsetwall</code> has been added to arrange for the
|
||||
system's best approximation to local wall clock time to be delivered
|
||||
system's best approximation to local (wall clock) time to be delivered
|
||||
by subsequent calls to <code>localtime</code>.
|
||||
Source code for portable applications that "must" run on local wall
|
||||
clock time should call <code>tzsetwall</code>;
|
||||
Source code for portable applications that "must" run on local
|
||||
time should call <code>tzsetwall</code>;
|
||||
if such code is moved to "old" systems that do not
|
||||
provide <code>tzsetwall</code>, you will not be able to generate an
|
||||
executable program.
|
||||
(These functions also arrange for local wall clock time to
|
||||
(These functions also arrange for local time to
|
||||
be used if <code>tzset</code> is called – directly or
|
||||
indirectly – and there is no <code>TZ</code> environment
|
||||
variable; portable applications should not, however, rely on this
|
||||
@@ -1354,11 +1354,11 @@ Sources for time on other planets:
|
||||
Michael Allison and Robert Schmunk,
|
||||
"<a href="https://www.giss.nasa.gov/tools/mars24/help/notes.html">Technical
|
||||
Notes on Mars Solar Time as Adopted by the Mars24 Sunclock</a>"
|
||||
(2015-06-30).
|
||||
(2018-12-13).
|
||||
</li>
|
||||
<li>
|
||||
Jia-Rui Chong,
|
||||
"<a href="http://articles.latimes.com/2004/jan/14/science/sci-marstime14">Workdays
|
||||
"<a href="https://www.latimes.com/archives/la-xpm-2004-jan-14-sci-marstime14-story.html">Workdays
|
||||
Fit for a Martian</a>", <cite>Los Angeles Times</cite>
|
||||
(2004-01-14), pp A1, A20–A21.
|
||||
</li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
2019a
|
||||
2019b
|
||||
+23
-21
@@ -20,7 +20,8 @@ function record_hash(n, name)
|
||||
# Return a shortened rule name representing NAME,
|
||||
# and record this relationship to the hash table.
|
||||
|
||||
function gen_rule_name(name, n)
|
||||
function gen_rule_name(name, \
|
||||
n)
|
||||
{
|
||||
# Use a simple memonic: the first two letters.
|
||||
n = substr(name, 1, 2)
|
||||
@@ -29,7 +30,8 @@ function gen_rule_name(name, n)
|
||||
return n
|
||||
}
|
||||
|
||||
function prehash_rule_names(name)
|
||||
function prehash_rule_names( \
|
||||
name)
|
||||
{
|
||||
# Rule names are not part of the tzdb API, so substitute shorter
|
||||
# ones. Shortening them consistently from one release to the next
|
||||
@@ -148,20 +150,21 @@ function prehash_rule_names(name)
|
||||
}
|
||||
}
|
||||
|
||||
# Process an input line and save it for later output.
|
||||
# Process the input line LINE and save it for later output.
|
||||
|
||||
function process_input_line(line, field, end, i, n, startdef)
|
||||
function process_input_line(line, \
|
||||
field, end, i, n, startdef, \
|
||||
linkline, ruleline, zoneline)
|
||||
{
|
||||
# Remove comments, normalize spaces, and append a space to each line.
|
||||
sub(/#.*/, "", line)
|
||||
line = line " "
|
||||
gsub(/[\t ]+/, " ", line)
|
||||
|
||||
# Abbreviate keywords. Do not abbreviate "Link" to just "L",
|
||||
# as pre-2017c zic erroneously diagnoses "Li" as ambiguous.
|
||||
sub(/^Link /, "Li ", line)
|
||||
sub(/^Rule /, "R ", line)
|
||||
sub(/^Zone /, "Z ", line)
|
||||
# Abbreviate keywords and determine line type.
|
||||
linkline = sub(/^Link /, "L ", line)
|
||||
ruleline = sub(/^Rule /, "R ", line)
|
||||
zoneline = sub(/^Zone /, "Z ", line)
|
||||
|
||||
# SystemV rules are not needed.
|
||||
if (line ~ /^R SystemV /) return
|
||||
@@ -169,7 +172,7 @@ function process_input_line(line, field, end, i, n, startdef)
|
||||
# Replace FooAsia rules with the same rules without "Asia", as they
|
||||
# are duplicates.
|
||||
if (match(line, /[^ ]Asia /)) {
|
||||
if (line ~ /^R /) return
|
||||
if (ruleline) return
|
||||
line = substr(line, 1, RSTART) substr(line, RSTART + 5)
|
||||
}
|
||||
|
||||
@@ -179,21 +182,19 @@ function process_input_line(line, field, end, i, n, startdef)
|
||||
while (match(line, /:0[^:]/))
|
||||
line = substr(line, 1, RSTART - 1) substr(line, RSTART + 2)
|
||||
|
||||
# Abbreviate weekday names. Do not abbreviate "Sun" and "Sat", as
|
||||
# pre-2017c zic erroneously diagnoses "Su" and "Sa" as ambiguous.
|
||||
# Abbreviate weekday names.
|
||||
while (match(line, / (last)?(Mon|Wed|Fri)[ <>]/)) {
|
||||
end = RSTART + RLENGTH
|
||||
line = substr(line, 1, end - 4) substr(line, end - 1)
|
||||
}
|
||||
while (match(line, / (last)?(Tue|Thu)[ <>]/)) {
|
||||
while (match(line, / (last)?(Sun|Tue|Thu|Sat)[ <>]/)) {
|
||||
end = RSTART + RLENGTH
|
||||
line = substr(line, 1, end - 3) substr(line, end - 1)
|
||||
}
|
||||
|
||||
# Abbreviate "max", "only" and month names.
|
||||
# Do not abbreviate "min", as pre-2017c zic erroneously diagnoses "mi"
|
||||
# as ambiguous.
|
||||
# Abbreviate "max", "min", "only" and month names.
|
||||
gsub(/ max /, " ma ", line)
|
||||
gsub(/ min /, " mi ", line)
|
||||
gsub(/ only /, " o ", line)
|
||||
gsub(/ Jan /, " Ja ", line)
|
||||
gsub(/ Feb /, " F ", line)
|
||||
@@ -221,7 +222,7 @@ function process_input_line(line, field, end, i, n, startdef)
|
||||
n = split(line, field)
|
||||
|
||||
# Abbreviate rule names.
|
||||
i = field[1] == "Z" ? 4 : field[1] == "Li" ? 0 : 2
|
||||
i = zoneline ? 4 : linkline ? 0 : 2
|
||||
if (i && field[i] ~ /^[^-+0-9]/) {
|
||||
if (!rule[field[i]])
|
||||
rule[field[i]] = gen_rule_name(field[i])
|
||||
@@ -231,11 +232,11 @@ function process_input_line(line, field, end, i, n, startdef)
|
||||
# If this zone supersedes an earlier one, delete the earlier one
|
||||
# from the saved output lines.
|
||||
startdef = ""
|
||||
if (field[1] == "Z")
|
||||
if (zoneline)
|
||||
zonename = startdef = field[2]
|
||||
else if (field[1] == "Li")
|
||||
else if (linkline)
|
||||
zonename = startdef = field[3]
|
||||
else if (field[1] == "R")
|
||||
else if (ruleline)
|
||||
zonename = ""
|
||||
if (startdef) {
|
||||
i = zonedef[startdef]
|
||||
@@ -254,7 +255,8 @@ function process_input_line(line, field, end, i, n, startdef)
|
||||
output_line[nout++] = line
|
||||
}
|
||||
|
||||
function output_saved_lines(i)
|
||||
function output_saved_lines( \
|
||||
i)
|
||||
{
|
||||
for (i = 0; i < nout; i++)
|
||||
if (output_line[i])
|
||||
|
||||
@@ -332,7 +332,10 @@ RO +4426+02606 Europe/Bucharest
|
||||
RS +4450+02030 Europe/Belgrade
|
||||
RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
|
||||
RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
|
||||
RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
|
||||
# The obsolescent zone.tab format cannot represent Europe/Simferopol well.
|
||||
# Put it in RU section and list as UA. See "territorial claims" above.
|
||||
# Programs should use zone1970.tab instead; see above.
|
||||
UA +4457+03406 Europe/Simferopol MSK+00 - Crimea
|
||||
RU +5836+04939 Europe/Kirov MSK+00 - Kirov
|
||||
RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
|
||||
RU +4844+04425 Europe/Volgograd MSK+01 - Volgograd
|
||||
|
||||
@@ -290,7 +290,8 @@ RO +4426+02606 Europe/Bucharest
|
||||
RS,BA,HR,ME,MK,SI +4450+02030 Europe/Belgrade
|
||||
RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
|
||||
RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
|
||||
RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
|
||||
# Mention RU and UA alphabetically. See "territorial claims" above.
|
||||
RU,UA +4457+03406 Europe/Simferopol MSK+00 - Crimea
|
||||
RU +5836+04939 Europe/Kirov MSK+00 - Kirov
|
||||
RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
|
||||
RU +4844+04425 Europe/Volgograd MSK+01 - Volgograd
|
||||
|
||||
@@ -28,7 +28,7 @@ while (<>) {
|
||||
|
||||
$contZone = '';
|
||||
if ($type eq 'zone') {
|
||||
# Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
|
||||
# Zone NAME STDOFF RULES/SAVE FORMAT [UNTIL]
|
||||
my $nfields = @fields;
|
||||
$nfields >= 5 or warn "bad zone line";
|
||||
if ($nfields > 6) {
|
||||
|
||||
@@ -63,5 +63,5 @@ static const struct {
|
||||
.descsz = sizeof(int32_t),
|
||||
.type = NT_FREEBSD_ABI_TAG,
|
||||
.name = NOTE_FREEBSD_VENDOR,
|
||||
.desc = __FreeBSD_version
|
||||
.desc = 1103000
|
||||
};
|
||||
@@ -142,7 +142,7 @@ _citrus_NONE_stdenc_cstomb(struct _citrus_stdenc * __restrict ce __unused,
|
||||
s[2] = (char)(idx >> 16);
|
||||
*nresult = 3;
|
||||
} else {
|
||||
if (n < 3) {
|
||||
if (n < 4) {
|
||||
*nresult = (size_t)-1;
|
||||
return (E2BIG);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ RELN_ROOT?= ${.CURDIR}/..
|
||||
|
||||
SUBDIR = relnotes
|
||||
SUBDIR+= hardware
|
||||
SUBDIR+= installation
|
||||
SUBDIR+= readme
|
||||
SUBDIR+= errata
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<pubdate>$FreeBSD$</pubdate>
|
||||
|
||||
<copyright>
|
||||
<year>2018</year>
|
||||
<year>2019</year>
|
||||
|
||||
<holder role="mailto:[email protected]">The &os; Documentation
|
||||
Project</holder>
|
||||
@@ -49,7 +49,8 @@
|
||||
&os;.</para>
|
||||
|
||||
<para>This errata document for &os; &release; will be maintained
|
||||
until the release of &os; &release.next;.</para>
|
||||
until the release of &os; &release.next; (if
|
||||
applicable).</para>
|
||||
</abstract>
|
||||
</info>
|
||||
|
||||
@@ -96,157 +97,34 @@
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>&os;/&arch.i386; installed on ZFS may crash during boot
|
||||
when the ZFS pool mount is attempted while booting an
|
||||
unmodified <literal>GENERIC</literal> kernel.</para>
|
||||
|
||||
<para>A system tunable has been added as of revision
|
||||
<literal>r286584</literal> to make the
|
||||
<literal>kern.kstack_pages</literal> tunable configurable
|
||||
without recompiling the kernel.</para>
|
||||
|
||||
<para>To mitigate system crashes with such configurations,
|
||||
choose <literal>Escape to loader prompt</literal> in the
|
||||
boot menu and enter the following lines from &man.loader.8;
|
||||
prompt, after an <literal>OK</literal>:</para>
|
||||
|
||||
<screen>set kern.kstack_pages=4
|
||||
boot</screen>
|
||||
|
||||
<para>Add this line to
|
||||
<filename>/boot/loader.conf</filename> for the change to
|
||||
persist across reboots:</para>
|
||||
|
||||
<programlisting>kern.kstack_pages=4</programlisting>
|
||||
<para>[2019-07-04] An issue which can cause a crash when
|
||||
connecting to a &man.bhyve.4; instance with
|
||||
a <acronym>VNC</acronym> client under certain circumstances
|
||||
had been reported. An errata notice is planned
|
||||
post-release.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2017-07-25] &os;/&arch.arm64; currently lacks
|
||||
<acronym>EFI</acronym> real-time clock
|
||||
(<acronym>RTC</acronym>) support, which may cause the system
|
||||
to boot with the wrong time set.</para>
|
||||
|
||||
<para>As a workaround, either enable &man.ntpdate.8; or
|
||||
include <literal>ntpd_sync_on_start="YES"</literal> in
|
||||
&man.rc.conf.5;.</para>
|
||||
<para>[2019-07-04] An issue booting &man.bhyve.4; virtual
|
||||
machines compiled with &man.clang.1; version 8.0.0 or later
|
||||
had been reported late in the release cycle. An errata
|
||||
notice is planned post-release.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2017-07-25] A late issue was discovered with
|
||||
&os;/&arch.arm64; and "root on
|
||||
<acronym>ZFS</acronym>" installations where the root
|
||||
<acronym>ZFS</acronym> pool would fail to be located.</para>
|
||||
<para>[2019-07-04] An issue when upgrading from &os; 11.3
|
||||
to &os; 12.0 (which occurred earlier in time,
|
||||
comparatively), had been reported where the
|
||||
<literal>com.delphix:spacemap_v2</literal> &man.zpool.8;
|
||||
feature does not exist on &os; 12.0, will fail to
|
||||
import the <acronym>ZFS</acronym> pool.</para>
|
||||
|
||||
<para>There currently is no workaround.</para>
|
||||
</listitem>
|
||||
<para>At this time, it is advised to defer migrating from
|
||||
&os; 11.3 to &os; 12.x until &os; 12.1 is
|
||||
available.</para>
|
||||
|
||||
<listitem>
|
||||
<para>[2017-11-06] An issue with &os; virtual machines with
|
||||
<application>vagrant</application> was discovered that
|
||||
affects the <application>VirtualBox</application> where the
|
||||
virtual machine will not start on the initial boot invoked
|
||||
with <literal>vagrant up</literal>.</para>
|
||||
|
||||
<para>The issue is due to the virtual machine
|
||||
<acronym>MAC</acronym> being unset, as &os; does not provide
|
||||
a default <filename>Vagrantfile</filename>.</para>
|
||||
|
||||
<para>It has been observed, however, that a subsequent
|
||||
invocation of <literal>vagrant up</literal> will allow the
|
||||
virtual machine to successfully boot, allowing access via
|
||||
<literal>vagrant ssh</literal>.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-21] An issue had been discovered late in the
|
||||
release cycle where removing <acronym>ZFS</acronym> vdevs
|
||||
from a pool under certain conditions would cause a system
|
||||
crash when &man.zfsd.8; is enabled in
|
||||
&man.rc.conf.5;.</para>
|
||||
|
||||
<para>At present, it is believed to be limited to removal of
|
||||
a <literal>mirror</literal> vdev from a pool consisting of
|
||||
multiple <literal>mirror</literal> vdevs.</para>
|
||||
|
||||
<para>See <acronym>PR</acronym> <link
|
||||
xlink:href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228750">228750</link>
|
||||
for more information and updates as the issue is
|
||||
investigated.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-26] An issue had been discovered late in the
|
||||
release cycle where a system crash could occur after
|
||||
installing <filename
|
||||
role="package">emulators/virtualbox-ose-kmod</filename>
|
||||
from upstream package mirrors via &man.pkg.8;.</para>
|
||||
|
||||
<para>Building <filename
|
||||
role="package">emulators/virtualbox-ose-kmod</filename>
|
||||
from the &man.ports.7; collection has been observed to work
|
||||
around the crash.</para>
|
||||
|
||||
<para>See <acronym>PR</acronym> <link
|
||||
xlink:href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228535">228535</link>
|
||||
for more information.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-26] It was discovered after the <filename
|
||||
class="directory">releng/11.2</filename> branch was tagged
|
||||
for &os; 11.2-RELEASE that a few device drivers were
|
||||
missing from the <link
|
||||
xlink:href="https://www.FreeBSD.org/releases/11.2R/hardware.html">hardware</link>
|
||||
page. The missing drivers, &man.alc.4;, &man.cxgbev.4;,
|
||||
&man.liquidio.4;, and &man.mos.4; were added to the
|
||||
11-STABLE <link
|
||||
xlink:href="https://www.FreeBSD.org/relnotes/11-STABLE/hardware/support.html">hardware
|
||||
page</link>.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-26] The <acronym>URL</acronym> to the
|
||||
instructions for source-based upgrades in
|
||||
<filename>UPDATING</filename> incorrectly points to a page
|
||||
that no longer exists. The correct URL is <link
|
||||
xlink:href="https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html" />.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-27] The announcement email for &os; 11.2
|
||||
incorrectly states the <literal>ocs_fw(4)</literal> driver
|
||||
had been added; this should have stated
|
||||
&man.ocs.fc.4;.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-06-28] An issue had been reported after the
|
||||
release of &os; 11.2 with <filename
|
||||
role="package">x11/nvidia-driver</filename> installed from
|
||||
the upstream package mirrors via &man.pkg.8;.</para>
|
||||
|
||||
<para>Building <filename
|
||||
role="package">x11/nvidia-driver</filename> from
|
||||
the &man.ports.7; collection has been reported to resolve
|
||||
the issue.</para>
|
||||
|
||||
<para>See <acronym>PR</acronym> <link
|
||||
xlink:href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=228536">228536</link>
|
||||
for more information.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>[2018-10-18] A &os; system with a custom kernel
|
||||
configuration excluding <acronym>NFS</acronym> on 10.x did
|
||||
not explicitly require the <literal>krpc</literal> option to
|
||||
be included when booting via <acronym>ZFS</acronym>-on-root
|
||||
and, for example, setting
|
||||
<literal>MODULES_OVERRIDE="zfs opensolaris"</literal> in the
|
||||
kernel configuration.</para>
|
||||
|
||||
<para>In 11.x, however, <literal>krpc</literal> is explicitly
|
||||
required if the kernel configuration excludes
|
||||
<literal>NFS</literal>.</para>
|
||||
<para>Upgrading from earlier &os; 11.x releases to
|
||||
&os; 12.0 are believed to be unaffected.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect1>
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
<year>2016</year>
|
||||
<year>2017</year>
|
||||
<year>2018</year>
|
||||
<year>2019</year>
|
||||
<holder role="mailto:[email protected]">The &os; Documentation
|
||||
Project</holder>
|
||||
</copyright>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<!ENTITY % release PUBLIC "-//FreeBSD//ENTITIES Release Specification//EN"
|
||||
"http://www.FreeBSD.org/release/XML/share/xml/release.ent">
|
||||
%release;
|
||||
<!ENTITY local.rel "11.1">
|
||||
<!ENTITY local.rel "11.3">
|
||||
]>
|
||||
|
||||
<article xmlns="http://docbook.org/ns/docbook"
|
||||
@@ -22,7 +22,7 @@
|
||||
<pubdate>$FreeBSD$</pubdate>
|
||||
|
||||
<copyright>
|
||||
<year>2018</year>
|
||||
<year>2019</year>
|
||||
<holder role="mailto:[email protected]">The &os; Documentation
|
||||
Project</holder>
|
||||
</copyright>
|
||||
@@ -82,8 +82,7 @@
|
||||
<para>The &man.freebsd-update.8; utility supports binary
|
||||
upgrades of &arch.i386; and &arch.amd64; systems running
|
||||
earlier FreeBSD releases. Systems running
|
||||
<literal>10.3-RELEASE</literal>,
|
||||
<literal>11.0-RELEASE</literal> can upgrade as follows:</para>
|
||||
<literal>11.2-RELEASE</literal> can upgrade as follows:</para>
|
||||
|
||||
<screen>&prompt.root; freebsd-update fetch
|
||||
&prompt.root; freebsd-update install</screen>
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
<year>2016</year>
|
||||
<year>2017</year>
|
||||
<year>2018</year>
|
||||
<year>2019</year>
|
||||
<holder role="mailto:[email protected]">The &os; Documentation
|
||||
Project</holder>
|
||||
</copyright>
|
||||
@@ -231,7 +232,7 @@
|
||||
please send mail to the &a.questions;.</para>
|
||||
|
||||
<para>If you are tracking the &release.branch; development
|
||||
efforts, you <emphasis>must</emphasis> join the &a.current;,
|
||||
efforts, you <emphasis>must</emphasis> join the &a.stable;,
|
||||
in order to keep abreast of recent developments and changes
|
||||
that may affect the way you use and maintain the
|
||||
system.</para>
|
||||
|
||||
@@ -176,6 +176,12 @@
|
||||
<para revision="343469">The default &man.devd.conf.5; has been
|
||||
updated to prevent duplicated &man.hostapd.8; and
|
||||
&man.wpa.supplicant.8; startup via &man.devd.8;.</para>
|
||||
|
||||
<para revision="346479">A new variable,
|
||||
<literal>init_exec</literal>, has been added to &man.kenv.1;,
|
||||
allowing &man.init.8; to run an executable file after opening
|
||||
the console, replacing &man.init.8; as <acronym>PID</acronym>
|
||||
1.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-programs">
|
||||
@@ -253,6 +259,10 @@
|
||||
<para revision="345878">The &man.patch.1; utility has been
|
||||
updated to exit successfully if the input patch file is
|
||||
zero-length.</para>
|
||||
|
||||
<para revision="346518">The &man.spi.8; utility has been added,
|
||||
which is used to communicate with devices on an
|
||||
<acronym>SPI</acronym> bus through the userland.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-contrib">
|
||||
@@ -283,9 +293,6 @@
|
||||
<para revision="344884">The &man.ntpd.8; utilities have been
|
||||
updated to version 4.2.8p13.</para>
|
||||
|
||||
<para revision="345670">Timezone data files have been updated to
|
||||
version 2019a.</para>
|
||||
|
||||
<para revision="346296">The <application>clang</application>,
|
||||
<application>llvm</application>,
|
||||
<application>lld</application>,
|
||||
@@ -308,12 +315,6 @@
|
||||
been updated to the latest upstream version.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-installer">
|
||||
<title>Installation and Configuration Tools</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-rc">
|
||||
<title><filename class="directory">/etc/rc.d</filename>
|
||||
Scripts</title>
|
||||
@@ -336,6 +337,9 @@
|
||||
variable has been added to &man.rc.subr.8;, which defaults to
|
||||
the path of the service being executed in case the service
|
||||
needs to re-invoke itself.</para>
|
||||
|
||||
<para revision="349620">Timezone data files have been updated to
|
||||
version 2019b.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-periodic">
|
||||
@@ -369,18 +373,6 @@
|
||||
<para revision="338707">The &man.pthread.3; library has been
|
||||
updated to improve <acronym>POSIX</acronym> compliance.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-abi">
|
||||
<title>ABI Compatibility</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="userland-debug">
|
||||
<title>Userland Debugging</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="kernel">
|
||||
@@ -413,30 +405,6 @@
|
||||
future releases will now be printed on all &os;
|
||||
versions.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="kernel-bugfix">
|
||||
<title>Kernel Bug Fixes</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="kernel-config">
|
||||
<title>Kernel Configuration</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="kernel-modules">
|
||||
<title>Kernel Modules</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="kernel-sysctl">
|
||||
<title>System Tuning and Controls</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="drivers">
|
||||
@@ -456,21 +424,34 @@
|
||||
<para revision="345981">The &man.random.4; driver has been
|
||||
updated to improve performance during expensive
|
||||
reseeding.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="drivers-storage">
|
||||
<title>Storage Drivers</title>
|
||||
|
||||
<para> </para>
|
||||
<para revision="347962">The <literal>ae(4)</literal>,
|
||||
<literal>bm(4)</literal>, <literal>cs(4)</literal>,
|
||||
<literal>de(4)</literal>, <literal>dme(4)</literal>,
|
||||
<literal>ed(4)</literal>, <literal>ep(4)</literal>,
|
||||
<literal>ex(4)</literal>, <literal>fe(4)</literal>,
|
||||
<literal>pcn(4)</literal>, <literal>sf(4)</literal>,
|
||||
<literal>sn(4)</literal>, <literal>tl(4)</literal>,
|
||||
<literal>tx(4)</literal>, <literal>txp(4)</literal>,
|
||||
<literal>vx(4)</literal>, <literal>wb(4)</literal>, and
|
||||
<literal>xe(4)</literal> drivers have been marked as
|
||||
deprecated, and are not present in &os; 13.0.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="drivers-network">
|
||||
<title>Network Drivers</title>
|
||||
|
||||
<para revision="338938">The &man.oce.4; driver has been updated
|
||||
to version 11.0.50.0.</para>
|
||||
|
||||
<para revision="340369">The TP-Link® TL-WN321G™
|
||||
network adapter now uses the &man.run.4; driver instead of the
|
||||
&man.rum.4; driver.</para>
|
||||
|
||||
<para revision="341987" contrib="sponsor"
|
||||
sponsor="&mellanox;">The &man.mlx4en.4; and &man.mlx5en.4;
|
||||
drivers have been updated to version 3.5.0.</para>
|
||||
|
||||
<para revision="342206" contrib="sponsor" sponsor="&ix;">The
|
||||
&man.lagg.4; driver has been updated to allow changing the
|
||||
<acronym>MTU</acronym> without requiring destroying and
|
||||
@@ -491,6 +472,14 @@
|
||||
<para revision="346940" contrib="sponsor"
|
||||
sponsor="&chelsio;">The &man.cxgbe.4; T4, T5, and T6 firmware
|
||||
has been updated to version 1.23.0.0.</para>
|
||||
|
||||
<para revision="349181" contrib="sponsor"
|
||||
sponsor="&intelcorp;">The &man.ixl.4; driver has been updated
|
||||
version 1.11.9.</para>
|
||||
|
||||
<para revision="349181" contrib="sponsor"
|
||||
sponsor="&intelcorp;">The &man.ixlv.4; driver has been updated
|
||||
version 1.5.8.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
@@ -518,12 +507,6 @@
|
||||
<literal>NumLock</literal>, <literal>ScrollLock</literal>, and
|
||||
numerical keypad keys has been added to &man.bhyve.8;.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="hardware-arm">
|
||||
<title>ARM Support</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="storage">
|
||||
@@ -539,12 +522,6 @@
|
||||
weaker algorithms when creating &man.geli.8; providers.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="storage-net">
|
||||
<title>Networked Storage</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="storage-zfs">
|
||||
<title>ZFS</title>
|
||||
|
||||
@@ -557,12 +534,6 @@
|
||||
<acronym>ZFS</acronym> filesystem has been updated to
|
||||
implement parallel mounting.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="storage-geom">
|
||||
<title><literal>geom(4)</literal></title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="boot">
|
||||
@@ -590,12 +561,6 @@
|
||||
console type and device if not defined in
|
||||
&man.loader.conf.5;.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="boot-menu">
|
||||
<title>Boot Menu Changes</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="network">
|
||||
@@ -616,12 +581,10 @@
|
||||
sponsor="&yandex;">Support for <acronym>NAT64</acronym>
|
||||
<acronym>CLAT</acronym> has been added, as defined in
|
||||
<acronym>RFC</acronym>6877.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="network-protocols">
|
||||
<title>Network Protocols</title>
|
||||
|
||||
<para> </para>
|
||||
<para revision="348482">Warnings have been added for
|
||||
<acronym>IPSec</acronym> algorithms deprecated in
|
||||
<acronym>RFC</acronym> 8221.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
@@ -632,35 +595,17 @@
|
||||
Collection, package infrastructure, and package maintenance and
|
||||
installation tools.</para>
|
||||
|
||||
<sect2 xml:id="ports-infrastructure">
|
||||
<title>Infrastructure Changes</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="ports-packages ">
|
||||
<title>Packaging Changes</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<para>The &man.pkg.8; utility has been updated to version
|
||||
1.10.5.</para>
|
||||
|
||||
<sect1 xml:id="doc">
|
||||
<title>Documentation</title>
|
||||
<para>The <application>KDE</application> desktop environment has
|
||||
been updated to version 5.15.3.</para>
|
||||
|
||||
<para>This section covers changes to the &os; Documentation
|
||||
Project sources and toolchain.</para>
|
||||
|
||||
<sect2 xml:id="doc-sources">
|
||||
<title>Documentation Source Changes</title>
|
||||
|
||||
<para> </para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="doc-toolchain">
|
||||
<title>Documentation Toolchain Changes</title>
|
||||
|
||||
<para> </para>
|
||||
<para>The <application>GNOME</application> desktop environment
|
||||
has been updated to version 3.28.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
@@ -673,7 +618,14 @@
|
||||
<sect2 xml:id="releng-changes">
|
||||
<title>Integration Changes</title>
|
||||
|
||||
<para> </para>
|
||||
<para revision="347037" contrib="sponsor" sponsor="&ff;">The
|
||||
default size of virtual machine disk images has been reduced
|
||||
from 30GB to 3GB. The <literal>raw</literal> disk images may
|
||||
be resized with &man.truncate.1;, after which the
|
||||
<filename>growfs</filename> &man.rc.8; script will resize the
|
||||
filesystem within the virtual machine. Other disk image
|
||||
formats should be resized with the appropriate tool provided
|
||||
by the hypervisor being used.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</article>
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
<!-- Version of the OS we're describing. This needs to be updated
|
||||
with each new release. -->
|
||||
<!ENTITY release.current "11.2-STABLE">
|
||||
<!ENTITY release.current "11.3-RELEASE">
|
||||
|
||||
<!-- The previous version used for comparison in the "What's New"
|
||||
section. For -CURRENT, we might point back to the last
|
||||
@@ -16,16 +16,16 @@
|
||||
<!-- The previous stable release, useful for pointing user's at the
|
||||
release they SHOULD be running if they don't want the bleeding
|
||||
edge. -->
|
||||
<!ENTITY release.prev.stable "10.4-RELEASE">
|
||||
<!ENTITY release.prev.stable "11.2-RELEASE">
|
||||
|
||||
<!-- The next version to be released, usually used for snapshots. -->
|
||||
<!ENTITY release.next "11.3-RELEASE">
|
||||
<!ENTITY release.next "11.4-RELEASE">
|
||||
|
||||
<!-- The name of this branch. -->
|
||||
<!ENTITY release.branch "11.2-STABLE">
|
||||
<!ENTITY release.branch "11.3-STABLE">
|
||||
|
||||
<!-- The URL for obtaining this version of FreeBSD. -->
|
||||
<!ENTITY release.url "https://www.FreeBSD.org/snapshots/">
|
||||
<!ENTITY release.url "https://www.FreeBSD.org/releases/">
|
||||
|
||||
<!-- The URL for Security Advisories and Errata Notices. -->
|
||||
<!ENTITY security.url "https://www.FreeBSD.org/security/advisories">
|
||||
@@ -37,10 +37,10 @@
|
||||
or "release" -->
|
||||
<!-- WARNING: Do not forget to also change the release type in
|
||||
doc.relnotes.mk when updating this -->
|
||||
<!ENTITY release.type "snapshot">
|
||||
<!ENTITY release.type "release">
|
||||
<!ENTITY % release.type.current "IGNORE">
|
||||
<!ENTITY % release.type.snapshot "INCLUDE">
|
||||
<!ENTITY % release.type.release "IGNORE">
|
||||
<!ENTITY % release.type.snapshot "IGNORE">
|
||||
<!ENTITY % release.type.release "INCLUDE">
|
||||
|
||||
<![%release.type.current;[
|
||||
<!ENTITY release '&release.current;'>
|
||||
@@ -58,7 +58,7 @@
|
||||
<!ENTITY release.manpath.xorg "7.5.1">
|
||||
<!ENTITY release.manpath.netbsd "5.1">
|
||||
<!ENTITY release.manpath.freebsd-ports "Ports">
|
||||
<!ENTITY release.manpath.freebsd "11-current">
|
||||
<!ENTITY release.manpath.freebsd "11.3-RELEASE">
|
||||
|
||||
<!-- Text constants which probably don't need to be changed.-->
|
||||
|
||||
|
||||
@@ -130,6 +130,20 @@
|
||||
<entry>14 May 2019</entry>
|
||||
<entry><para>Microarchitectural Data Sampling</para></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><link
|
||||
xlink:href="&security.url;/FreeBSD-SA-19:09.iconv.asc">FreeBSD-SA-19:09.iconv</link></entry>
|
||||
<entry>2 July 2019</entry>
|
||||
<entry><para>&man.iconv.3; buffer overflow</para></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><link
|
||||
xlink:href="&security.url;/FreeBSD-SA-19:11.cd_ioctl.asc">FreeBSD-SA-19:11.cd_ioctl</link></entry>
|
||||
<entry>2 July 2019</entry>
|
||||
<entry><para>Privilege escalation in &man.cd.4;</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
@@ -1,6 +1,6 @@
|
||||
# $FreeBSD$
|
||||
release: {
|
||||
url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
|
||||
url: "pkg+http://pkg.FreeBSD.org/${ABI}/release_3",
|
||||
mirror_type: "srv",
|
||||
signature_type: "fingerprints",
|
||||
fingerprints: "/usr/share/keys/pkg",
|
||||
|
||||
+2
-12
@@ -1281,7 +1281,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
|
||||
|
||||
struct cam_periph *periph;
|
||||
struct cd_softc *softc;
|
||||
int nocopyout, error = 0;
|
||||
int error = 0;
|
||||
|
||||
periph = (struct cam_periph *)dp->d_drv1;
|
||||
cam_periph_lock(periph);
|
||||
@@ -1323,7 +1323,6 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
|
||||
*/
|
||||
cam_periph_unlock(periph);
|
||||
|
||||
nocopyout = 0;
|
||||
switch (cmd) {
|
||||
|
||||
case CDIOCPLAYTRACKS:
|
||||
@@ -1499,9 +1498,6 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
|
||||
cam_periph_unlock(periph);
|
||||
}
|
||||
break;
|
||||
case CDIOCREADSUBCHANNEL_SYSSPACE:
|
||||
nocopyout = 1;
|
||||
/* Fallthrough */
|
||||
case CDIOCREADSUBCHANNEL:
|
||||
{
|
||||
struct ioc_read_subchannel *args
|
||||
@@ -1546,13 +1542,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
|
||||
data->header.data_len[1] +
|
||||
sizeof(struct cd_sub_channel_header)));
|
||||
cam_periph_unlock(periph);
|
||||
if (nocopyout == 0) {
|
||||
if (copyout(data, args->data, len) != 0) {
|
||||
error = EFAULT;
|
||||
}
|
||||
} else {
|
||||
bcopy(data, args->data, len);
|
||||
}
|
||||
error = copyout(data, args->data, len);
|
||||
free(data, M_SCSICD);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1549,16 +1549,26 @@ linux_ioctl_cdrom(struct thread *td, struct linux_ioctl_args *args)
|
||||
struct ioc_read_subchannel bsdsc;
|
||||
struct cd_sub_channel_info bsdinfo;
|
||||
|
||||
error = copyin((void *)args->arg, &sc, sizeof(sc));
|
||||
if (error)
|
||||
break;
|
||||
|
||||
/*
|
||||
* Invoke the native ioctl and bounce the returned data through
|
||||
* the userspace buffer. This works because the Linux structure
|
||||
* is the same size as our structures for the subchannel header
|
||||
* and position data.
|
||||
*/
|
||||
bsdsc.address_format = CD_LBA_FORMAT;
|
||||
bsdsc.data_format = CD_CURRENT_POSITION;
|
||||
bsdsc.track = 0;
|
||||
bsdsc.data_len = sizeof(bsdinfo);
|
||||
bsdsc.data = &bsdinfo;
|
||||
error = fo_ioctl(fp, CDIOCREADSUBCHANNEL_SYSSPACE,
|
||||
(caddr_t)&bsdsc, td->td_ucred, td);
|
||||
bsdsc.data_len = sizeof(sc);
|
||||
bsdsc.data = (void *)args->arg;
|
||||
error = fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc,
|
||||
td->td_ucred, td);
|
||||
if (error)
|
||||
break;
|
||||
error = copyin((void *)args->arg, &sc, sizeof(sc));
|
||||
error = copyin((void *)args->arg, &bsdinfo, sizeof(bsdinfo));
|
||||
if (error)
|
||||
break;
|
||||
sc.cdsc_audiostatus = bsdinfo.header.audio_status;
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@
|
||||
|
||||
TYPE="FreeBSD"
|
||||
REVISION="11.3"
|
||||
BRANCH="BETA3"
|
||||
BRANCH="RELEASE"
|
||||
if [ -n "${BRANCH_OVERRIDE}" ]; then
|
||||
BRANCH=${BRANCH_OVERRIDE}
|
||||
fi
|
||||
|
||||
+62
-37
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -125,6 +125,7 @@ enum i40e_status_code i40e_alloc_adminq_arq_ring(struct i40e_hw *hw)
|
||||
**/
|
||||
void i40e_free_adminq_asq(struct i40e_hw *hw)
|
||||
{
|
||||
i40e_free_virt_mem(hw, &hw->aq.asq.cmd_buf);
|
||||
i40e_free_dma_mem(hw, &hw->aq.asq.desc_buf);
|
||||
}
|
||||
|
||||
@@ -404,7 +405,7 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
|
||||
/* initialize base registers */
|
||||
ret_code = i40e_config_asq_regs(hw);
|
||||
if (ret_code != I40E_SUCCESS)
|
||||
goto init_adminq_free_rings;
|
||||
goto init_config_regs;
|
||||
|
||||
/* success! */
|
||||
hw->aq.asq.count = hw->aq.num_asq_entries;
|
||||
@@ -412,6 +413,10 @@ enum i40e_status_code i40e_init_asq(struct i40e_hw *hw)
|
||||
|
||||
init_adminq_free_rings:
|
||||
i40e_free_adminq_asq(hw);
|
||||
return ret_code;
|
||||
|
||||
init_config_regs:
|
||||
i40e_free_asq_bufs(hw);
|
||||
|
||||
init_adminq_exit:
|
||||
return ret_code;
|
||||
@@ -575,21 +580,22 @@ static void i40e_resume_aq(struct i40e_hw *hw)
|
||||
**/
|
||||
enum i40e_status_code i40e_init_adminq(struct i40e_hw *hw)
|
||||
{
|
||||
struct i40e_adminq_info *aq = &hw->aq;
|
||||
enum i40e_status_code ret_code;
|
||||
u16 cfg_ptr, oem_hi, oem_lo;
|
||||
u16 eetrack_lo, eetrack_hi;
|
||||
enum i40e_status_code ret_code;
|
||||
int retry = 0;
|
||||
|
||||
/* verify input for valid configuration */
|
||||
if ((hw->aq.num_arq_entries == 0) ||
|
||||
(hw->aq.num_asq_entries == 0) ||
|
||||
(hw->aq.arq_buf_size == 0) ||
|
||||
(hw->aq.asq_buf_size == 0)) {
|
||||
if (aq->num_arq_entries == 0 ||
|
||||
aq->num_asq_entries == 0 ||
|
||||
aq->arq_buf_size == 0 ||
|
||||
aq->asq_buf_size == 0) {
|
||||
ret_code = I40E_ERR_CONFIG;
|
||||
goto init_adminq_exit;
|
||||
}
|
||||
i40e_init_spinlock(&hw->aq.asq_spinlock);
|
||||
i40e_init_spinlock(&hw->aq.arq_spinlock);
|
||||
i40e_init_spinlock(&aq->asq_spinlock);
|
||||
i40e_init_spinlock(&aq->arq_spinlock);
|
||||
|
||||
/* Set up register offsets */
|
||||
i40e_adminq_init_regs(hw);
|
||||
@@ -616,11 +622,11 @@ enum i40e_status_code i40e_init_adminq(struct i40e_hw *hw)
|
||||
*/
|
||||
do {
|
||||
ret_code = i40e_aq_get_firmware_version(hw,
|
||||
&hw->aq.fw_maj_ver,
|
||||
&hw->aq.fw_min_ver,
|
||||
&hw->aq.fw_build,
|
||||
&hw->aq.api_maj_ver,
|
||||
&hw->aq.api_min_ver,
|
||||
&aq->fw_maj_ver,
|
||||
&aq->fw_min_ver,
|
||||
&aq->fw_build,
|
||||
&aq->api_maj_ver,
|
||||
&aq->api_min_ver,
|
||||
NULL);
|
||||
if (ret_code != I40E_ERR_ADMIN_QUEUE_TIMEOUT)
|
||||
break;
|
||||
@@ -643,26 +649,43 @@ enum i40e_status_code i40e_init_adminq(struct i40e_hw *hw)
|
||||
i40e_read_nvm_word(hw, (cfg_ptr + (I40E_NVM_OEM_VER_OFF + 1)),
|
||||
&oem_lo);
|
||||
hw->nvm.oem_ver = ((u32)oem_hi << 16) | oem_lo;
|
||||
|
||||
/* The ability to RX (not drop) 802.1ad frames was added in API 1.7 */
|
||||
if ((hw->aq.api_maj_ver > 1) ||
|
||||
((hw->aq.api_maj_ver == 1) &&
|
||||
(hw->aq.api_min_ver >= 7)))
|
||||
hw->flags |= I40E_HW_FLAG_802_1AD_CAPABLE;
|
||||
|
||||
if (hw->mac.type == I40E_MAC_XL710 &&
|
||||
hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR &&
|
||||
hw->aq.api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710) {
|
||||
hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE;
|
||||
/*
|
||||
* Some features were introduced in different FW API version
|
||||
* for different MAC type.
|
||||
*/
|
||||
switch (hw->mac.type) {
|
||||
case I40E_MAC_XL710:
|
||||
if (aq->api_maj_ver > 1 ||
|
||||
(aq->api_maj_ver == 1 &&
|
||||
aq->api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710)) {
|
||||
hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE;
|
||||
hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
|
||||
/* The ability to RX (not drop) 802.1ad frames */
|
||||
hw->flags |= I40E_HW_FLAG_802_1AD_CAPABLE;
|
||||
}
|
||||
break;
|
||||
case I40E_MAC_X722:
|
||||
if (aq->api_maj_ver > 1 ||
|
||||
(aq->api_maj_ver == 1 &&
|
||||
aq->api_min_ver >= I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722))
|
||||
hw->flags |= I40E_HW_FLAG_FW_LLDP_STOPPABLE;
|
||||
/* fall through */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Newer versions of firmware require lock when reading the NVM */
|
||||
if ((hw->aq.api_maj_ver > 1) ||
|
||||
((hw->aq.api_maj_ver == 1) &&
|
||||
(hw->aq.api_min_ver >= 5)))
|
||||
if (aq->api_maj_ver > 1 ||
|
||||
(aq->api_maj_ver == 1 &&
|
||||
aq->api_min_ver >= 5))
|
||||
hw->flags |= I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK;
|
||||
|
||||
if (hw->aq.api_maj_ver > I40E_FW_API_VERSION_MAJOR) {
|
||||
if (aq->api_maj_ver > 1 ||
|
||||
(aq->api_maj_ver == 1 &&
|
||||
aq->api_min_ver >= 8))
|
||||
hw->flags |= I40E_HW_FLAG_FW_LLDP_PERSISTENT;
|
||||
|
||||
if (aq->api_maj_ver > I40E_FW_API_VERSION_MAJOR) {
|
||||
ret_code = I40E_ERR_FIRMWARE_API_VERSION;
|
||||
goto init_adminq_free_arq;
|
||||
}
|
||||
@@ -682,8 +705,8 @@ init_adminq_free_arq:
|
||||
init_adminq_free_asq:
|
||||
i40e_shutdown_asq(hw);
|
||||
init_adminq_destroy_spinlocks:
|
||||
i40e_destroy_spinlock(&hw->aq.asq_spinlock);
|
||||
i40e_destroy_spinlock(&hw->aq.arq_spinlock);
|
||||
i40e_destroy_spinlock(&aq->asq_spinlock);
|
||||
i40e_destroy_spinlock(&aq->arq_spinlock);
|
||||
|
||||
init_adminq_exit:
|
||||
return ret_code;
|
||||
@@ -728,7 +751,7 @@ u16 i40e_clean_asq(struct i40e_hw *hw)
|
||||
desc = I40E_ADMINQ_DESC(*asq, ntc);
|
||||
details = I40E_ADMINQ_DETAILS(*asq, ntc);
|
||||
while (rd32(hw, hw->aq.asq.head) != ntc) {
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_COMMAND,
|
||||
"ntc %d head %d.\n", ntc, rd32(hw, hw->aq.asq.head));
|
||||
|
||||
if (details->callback) {
|
||||
@@ -808,7 +831,7 @@ enum i40e_status_code i40e_asq_send_command(struct i40e_hw *hw,
|
||||
if (val >= hw->aq.num_asq_entries) {
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
|
||||
"AQTX: head overrun at %d\n", val);
|
||||
status = I40E_ERR_QUEUE_EMPTY;
|
||||
status = I40E_ERR_ADMIN_QUEUE_FULL;
|
||||
goto asq_send_command_error;
|
||||
}
|
||||
|
||||
@@ -896,7 +919,7 @@ enum i40e_status_code i40e_asq_send_command(struct i40e_hw *hw,
|
||||
}
|
||||
|
||||
/* bump the tail */
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE, "AQTX: desc and buffer:\n");
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_COMMAND, "AQTX: desc and buffer:\n");
|
||||
i40e_debug_aq(hw, I40E_DEBUG_AQ_COMMAND, (void *)desc_on_ring,
|
||||
buff, buff_size);
|
||||
(hw->aq.asq.next_to_use)++;
|
||||
@@ -942,12 +965,14 @@ enum i40e_status_code i40e_asq_send_command(struct i40e_hw *hw,
|
||||
cmd_completed = TRUE;
|
||||
if ((enum i40e_admin_queue_err)retval == I40E_AQ_RC_OK)
|
||||
status = I40E_SUCCESS;
|
||||
else if ((enum i40e_admin_queue_err)retval == I40E_AQ_RC_EBUSY)
|
||||
status = I40E_ERR_NOT_READY;
|
||||
else
|
||||
status = I40E_ERR_ADMIN_QUEUE_ERROR;
|
||||
hw->aq.asq_last_status = (enum i40e_admin_queue_err)retval;
|
||||
}
|
||||
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_COMMAND,
|
||||
"AQTX: desc and buffer writeback:\n");
|
||||
i40e_debug_aq(hw, I40E_DEBUG_AQ_COMMAND, (void *)desc, buff, buff_size);
|
||||
|
||||
@@ -1063,7 +1088,7 @@ enum i40e_status_code i40e_clean_arq_element(struct i40e_hw *hw,
|
||||
hw->aq.arq.r.arq_bi[desc_idx].va,
|
||||
e->msg_len, I40E_DMA_TO_NONDMA);
|
||||
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE, "AQRX: desc and buffer:\n");
|
||||
i40e_debug(hw, I40E_DEBUG_AQ_COMMAND, "AQRX: desc and buffer:\n");
|
||||
i40e_debug_aq(hw, I40E_DEBUG_AQ_COMMAND, (void *)desc, e->msg_buf,
|
||||
hw->aq.arq_buf_size);
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
|
||||
|
||||
#define I40E_FW_API_VERSION_MAJOR 0x0001
|
||||
#define I40E_FW_API_VERSION_MINOR_X722 0x0005
|
||||
#define I40E_FW_API_VERSION_MINOR_X710 0x0007
|
||||
#define I40E_FW_API_VERSION_MINOR_X722 0x0008
|
||||
#define I40E_FW_API_VERSION_MINOR_X710 0x0008
|
||||
|
||||
#define I40E_FW_MINOR_VERSION(_h) ((_h)->mac.type == I40E_MAC_XL710 ? \
|
||||
I40E_FW_API_VERSION_MINOR_X710 : \
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
/* API version 1.7 implements additional link and PHY-specific APIs */
|
||||
#define I40E_MINOR_VER_GET_LINK_INFO_XL710 0x0007
|
||||
/* API version 1.6 for X722 devices adds ability to stop FW LLDP agent */
|
||||
#define I40E_MINOR_VER_FW_LLDP_STOPPABLE_X722 0x0006
|
||||
|
||||
struct i40e_aq_desc {
|
||||
__le16 flags;
|
||||
@@ -289,6 +291,7 @@ enum i40e_admin_queue_opc {
|
||||
i40e_aqc_opc_get_cee_dcb_cfg = 0x0A07,
|
||||
i40e_aqc_opc_lldp_set_local_mib = 0x0A08,
|
||||
i40e_aqc_opc_lldp_stop_start_spec_agent = 0x0A09,
|
||||
i40e_aqc_opc_lldp_restore = 0x0A0A,
|
||||
|
||||
/* Tunnel commands */
|
||||
i40e_aqc_opc_add_udp_tunnel = 0x0B00,
|
||||
@@ -1782,6 +1785,8 @@ enum i40e_aq_phy_type {
|
||||
I40E_PHY_TYPE_25GBASE_LR = 0x22,
|
||||
I40E_PHY_TYPE_25GBASE_AOC = 0x23,
|
||||
I40E_PHY_TYPE_25GBASE_ACC = 0x24,
|
||||
I40E_PHY_TYPE_2_5GBASE_T = 0x30,
|
||||
I40E_PHY_TYPE_5GBASE_T = 0x31,
|
||||
I40E_PHY_TYPE_MAX,
|
||||
I40E_PHY_TYPE_NOT_SUPPORTED_HIGH_TEMP = 0xFD,
|
||||
I40E_PHY_TYPE_EMPTY = 0xFE,
|
||||
@@ -1823,19 +1828,25 @@ enum i40e_aq_phy_type {
|
||||
BIT_ULL(I40E_PHY_TYPE_25GBASE_SR) | \
|
||||
BIT_ULL(I40E_PHY_TYPE_25GBASE_LR) | \
|
||||
BIT_ULL(I40E_PHY_TYPE_25GBASE_AOC) | \
|
||||
BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC))
|
||||
BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC) | \
|
||||
BIT_ULL(I40E_PHY_TYPE_2_5GBASE_T) | \
|
||||
BIT_ULL(I40E_PHY_TYPE_5GBASE_T))
|
||||
|
||||
#define I40E_LINK_SPEED_2_5GB_SHIFT 0x0
|
||||
#define I40E_LINK_SPEED_100MB_SHIFT 0x1
|
||||
#define I40E_LINK_SPEED_1000MB_SHIFT 0x2
|
||||
#define I40E_LINK_SPEED_10GB_SHIFT 0x3
|
||||
#define I40E_LINK_SPEED_40GB_SHIFT 0x4
|
||||
#define I40E_LINK_SPEED_20GB_SHIFT 0x5
|
||||
#define I40E_LINK_SPEED_25GB_SHIFT 0x6
|
||||
#define I40E_LINK_SPEED_5GB_SHIFT 0x7
|
||||
|
||||
enum i40e_aq_link_speed {
|
||||
I40E_LINK_SPEED_UNKNOWN = 0,
|
||||
I40E_LINK_SPEED_100MB = (1 << I40E_LINK_SPEED_100MB_SHIFT),
|
||||
I40E_LINK_SPEED_1GB = (1 << I40E_LINK_SPEED_1000MB_SHIFT),
|
||||
I40E_LINK_SPEED_2_5GB = (1 << I40E_LINK_SPEED_2_5GB_SHIFT),
|
||||
I40E_LINK_SPEED_5GB = (1 << I40E_LINK_SPEED_5GB_SHIFT),
|
||||
I40E_LINK_SPEED_10GB = (1 << I40E_LINK_SPEED_10GB_SHIFT),
|
||||
I40E_LINK_SPEED_40GB = (1 << I40E_LINK_SPEED_40GB_SHIFT),
|
||||
I40E_LINK_SPEED_20GB = (1 << I40E_LINK_SPEED_20GB_SHIFT),
|
||||
@@ -1865,12 +1876,15 @@ struct i40e_aq_get_phy_abilities_resp {
|
||||
#define I40E_AQ_PHY_FEC_ABILITY_KR 0x40
|
||||
#define I40E_AQ_PHY_FEC_ABILITY_RS 0x80
|
||||
__le16 eee_capability;
|
||||
#define I40E_AQ_EEE_AUTO 0x0001
|
||||
#define I40E_AQ_EEE_100BASE_TX 0x0002
|
||||
#define I40E_AQ_EEE_1000BASE_T 0x0004
|
||||
#define I40E_AQ_EEE_10GBASE_T 0x0008
|
||||
#define I40E_AQ_EEE_1000BASE_KX 0x0010
|
||||
#define I40E_AQ_EEE_10GBASE_KX4 0x0020
|
||||
#define I40E_AQ_EEE_10GBASE_KR 0x0040
|
||||
#define I40E_AQ_EEE_2_5GBASE_T 0x0100
|
||||
#define I40E_AQ_EEE_5GBASE_T 0x0200
|
||||
__le32 eeer_val;
|
||||
u8 d3_lpan;
|
||||
#define I40E_AQ_SET_PHY_D3_LPAN_ENA 0x01
|
||||
@@ -1881,6 +1895,8 @@ struct i40e_aq_get_phy_abilities_resp {
|
||||
#define I40E_AQ_PHY_TYPE_EXT_25G_LR 0x08
|
||||
#define I40E_AQ_PHY_TYPE_EXT_25G_AOC 0x10
|
||||
#define I40E_AQ_PHY_TYPE_EXT_25G_ACC 0x20
|
||||
#define I40E_AQ_PHY_TYPE_EXT_2_5GBASE_T 0x40
|
||||
#define I40E_AQ_PHY_TYPE_EXT_5GBASE_T 0x80
|
||||
u8 fec_cfg_curr_mod_ext_info;
|
||||
#define I40E_AQ_ENABLE_FEC_KR 0x01
|
||||
#define I40E_AQ_ENABLE_FEC_RS 0x02
|
||||
@@ -2122,15 +2138,29 @@ enum i40e_aq_phy_reg_type {
|
||||
I40E_AQC_PHY_REG_EXERNAL_MODULE = 0x3
|
||||
};
|
||||
|
||||
#pragma pack(1)
|
||||
/* Run PHY Activity (0x0626) */
|
||||
struct i40e_aqc_run_phy_activity {
|
||||
__le16 activity_id;
|
||||
u8 flags;
|
||||
u8 reserved1;
|
||||
__le32 control;
|
||||
__le32 data;
|
||||
u8 reserved2[4];
|
||||
u8 cmd_flags;
|
||||
__le16 activity_id;
|
||||
#define I40E_AQ_RUN_PHY_ACTIVITY_ACTIVITY_ID_USER_DEFINED 0x10
|
||||
u8 reserved;
|
||||
union {
|
||||
struct {
|
||||
__le32 dnl_opcode;
|
||||
#define I40E_AQ_RUN_PHY_ACTIVITY_DNL_OPCODE_GET_EEE_STATISTICS 0x801b
|
||||
__le32 data;
|
||||
u8 reserved2[4];
|
||||
} cmd;
|
||||
struct {
|
||||
__le32 cmd_status;
|
||||
#define I40E_AQ_RUN_PHY_ACTIVITY_CMD_STATUS_SUCCESS 0x4
|
||||
__le32 data0;
|
||||
__le32 data1;
|
||||
} resp;
|
||||
} params;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_run_phy_activity);
|
||||
|
||||
@@ -2142,7 +2172,9 @@ struct i40e_aqc_phy_register_access {
|
||||
#define I40E_AQ_PHY_REG_ACCESS_EXTERNAL 1
|
||||
#define I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE 2
|
||||
u8 dev_addres;
|
||||
u8 reserved1[2];
|
||||
u8 cmd_flags;
|
||||
#define I40E_AQ_PHY_REG_ACCESS_DONT_CHANGE_QSFP_PAGE 1
|
||||
u8 reserved1;
|
||||
__le32 reg_address;
|
||||
__le32 reg_value;
|
||||
u8 reserved2[4];
|
||||
@@ -2157,6 +2189,8 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access);
|
||||
struct i40e_aqc_nvm_update {
|
||||
u8 command_flags;
|
||||
#define I40E_AQ_NVM_LAST_CMD 0x01
|
||||
#define I40E_AQ_NVM_REARRANGE_TO_FLAT 0x20
|
||||
#define I40E_AQ_NVM_REARRANGE_TO_STRUCT 0x40
|
||||
#define I40E_AQ_NVM_FLASH_ONLY 0x80
|
||||
#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1
|
||||
#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03
|
||||
@@ -2404,18 +2438,19 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_update_tlv);
|
||||
/* Stop LLDP (direct 0x0A05) */
|
||||
struct i40e_aqc_lldp_stop {
|
||||
u8 command;
|
||||
#define I40E_AQ_LLDP_AGENT_STOP 0x0
|
||||
#define I40E_AQ_LLDP_AGENT_SHUTDOWN 0x1
|
||||
#define I40E_AQ_LLDP_AGENT_STOP 0x0
|
||||
#define I40E_AQ_LLDP_AGENT_SHUTDOWN 0x1
|
||||
#define I40E_AQ_LLDP_AGENT_STOP_PERSIST 0x2
|
||||
u8 reserved[15];
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_stop);
|
||||
|
||||
/* Start LLDP (direct 0x0A06) */
|
||||
|
||||
struct i40e_aqc_lldp_start {
|
||||
u8 command;
|
||||
#define I40E_AQ_LLDP_AGENT_START 0x1
|
||||
#define I40E_AQ_LLDP_AGENT_START 0x1
|
||||
#define I40E_AQ_LLDP_AGENT_START_PERSIST 0x2
|
||||
u8 reserved[15];
|
||||
};
|
||||
|
||||
@@ -2535,6 +2570,16 @@ struct i40e_aqc_lldp_stop_start_specific_agent {
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_stop_start_specific_agent);
|
||||
|
||||
/* Restore LLDP Agent factory settings (direct 0x0A0A) */
|
||||
struct i40e_aqc_lldp_restore {
|
||||
u8 command;
|
||||
#define I40E_AQ_LLDP_AGENT_RESTORE_NOT 0x0
|
||||
#define I40E_AQ_LLDP_AGENT_RESTORE 0x1
|
||||
u8 reserved[15];
|
||||
};
|
||||
|
||||
I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_restore);
|
||||
|
||||
/* Add Udp Tunnel command and completion (direct 0x0B00) */
|
||||
struct i40e_aqc_add_udp_tunnel {
|
||||
__le16 udp_port;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+384
-195
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
#include "i40e_prototype.h"
|
||||
#include "virtchnl.h"
|
||||
|
||||
|
||||
/**
|
||||
* i40e_set_mac_type - Sets MAC type
|
||||
* @hw: pointer to the HW structure
|
||||
@@ -62,10 +61,15 @@ enum i40e_status_code i40e_set_mac_type(struct i40e_hw *hw)
|
||||
case I40E_DEV_ID_QSFP_C:
|
||||
case I40E_DEV_ID_10G_BASE_T:
|
||||
case I40E_DEV_ID_10G_BASE_T4:
|
||||
case I40E_DEV_ID_10G_BASE_T_BC:
|
||||
case I40E_DEV_ID_10G_B:
|
||||
case I40E_DEV_ID_10G_SFP:
|
||||
case I40E_DEV_ID_20G_KR2:
|
||||
case I40E_DEV_ID_20G_KR2_A:
|
||||
case I40E_DEV_ID_25G_B:
|
||||
case I40E_DEV_ID_25G_SFP28:
|
||||
case I40E_DEV_ID_X710_N3000:
|
||||
case I40E_DEV_ID_XXV710_N3000:
|
||||
hw->mac.type = I40E_MAC_XL710;
|
||||
break;
|
||||
case I40E_DEV_ID_KX_X722:
|
||||
@@ -319,32 +323,37 @@ void i40e_debug_aq(struct i40e_hw *hw, enum i40e_debug_mask mask, void *desc,
|
||||
void *buffer, u16 buf_len)
|
||||
{
|
||||
struct i40e_aq_desc *aq_desc = (struct i40e_aq_desc *)desc;
|
||||
u32 effective_mask = hw->debug_mask & mask;
|
||||
u8 *buf = (u8 *)buffer;
|
||||
u16 len;
|
||||
u16 i = 0;
|
||||
u16 i;
|
||||
|
||||
if ((!(mask & hw->debug_mask)) || (desc == NULL))
|
||||
if (!effective_mask || !desc)
|
||||
return;
|
||||
|
||||
len = LE16_TO_CPU(aq_desc->datalen);
|
||||
|
||||
i40e_debug(hw, mask,
|
||||
i40e_debug(hw, mask & I40E_DEBUG_AQ_DESCRIPTOR,
|
||||
"AQ CMD: opcode 0x%04X, flags 0x%04X, datalen 0x%04X, retval 0x%04X\n",
|
||||
LE16_TO_CPU(aq_desc->opcode),
|
||||
LE16_TO_CPU(aq_desc->flags),
|
||||
LE16_TO_CPU(aq_desc->datalen),
|
||||
LE16_TO_CPU(aq_desc->retval));
|
||||
i40e_debug(hw, mask, "\tcookie (h,l) 0x%08X 0x%08X\n",
|
||||
i40e_debug(hw, mask & I40E_DEBUG_AQ_DESCRIPTOR,
|
||||
"\tcookie (h,l) 0x%08X 0x%08X\n",
|
||||
LE32_TO_CPU(aq_desc->cookie_high),
|
||||
LE32_TO_CPU(aq_desc->cookie_low));
|
||||
i40e_debug(hw, mask, "\tparam (0,1) 0x%08X 0x%08X\n",
|
||||
i40e_debug(hw, mask & I40E_DEBUG_AQ_DESCRIPTOR,
|
||||
"\tparam (0,1) 0x%08X 0x%08X\n",
|
||||
LE32_TO_CPU(aq_desc->params.internal.param0),
|
||||
LE32_TO_CPU(aq_desc->params.internal.param1));
|
||||
i40e_debug(hw, mask, "\taddr (h,l) 0x%08X 0x%08X\n",
|
||||
i40e_debug(hw, mask & I40E_DEBUG_AQ_DESCRIPTOR,
|
||||
"\taddr (h,l) 0x%08X 0x%08X\n",
|
||||
LE32_TO_CPU(aq_desc->params.external.addr_high),
|
||||
LE32_TO_CPU(aq_desc->params.external.addr_low));
|
||||
|
||||
if ((buffer != NULL) && (aq_desc->datalen != 0)) {
|
||||
if (buffer && (buf_len != 0) && (len != 0) &&
|
||||
(effective_mask & I40E_DEBUG_AQ_DESC_BUFFER)) {
|
||||
i40e_debug(hw, mask, "AQ CMD Buffer:\n");
|
||||
if (buf_len < len)
|
||||
len = buf_len;
|
||||
@@ -1014,6 +1023,18 @@ enum i40e_status_code i40e_init_shared_code(struct i40e_hw *hw)
|
||||
hw->flags |= I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE |
|
||||
I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK;
|
||||
|
||||
/* NVMUpdate features structure initialization */
|
||||
hw->nvmupd_features.major = I40E_NVMUPD_FEATURES_API_VER_MAJOR;
|
||||
hw->nvmupd_features.minor = I40E_NVMUPD_FEATURES_API_VER_MINOR;
|
||||
hw->nvmupd_features.size = sizeof(hw->nvmupd_features);
|
||||
i40e_memset(hw->nvmupd_features.features, 0x0,
|
||||
I40E_NVMUPD_FEATURES_API_FEATURES_ARRAY_LEN *
|
||||
sizeof(*hw->nvmupd_features.features),
|
||||
I40E_NONDMA_MEM);
|
||||
|
||||
/* No features supported at the moment */
|
||||
hw->nvmupd_features.features[0] = 0;
|
||||
|
||||
status = i40e_init_nvm(hw);
|
||||
return status;
|
||||
}
|
||||
@@ -1235,6 +1256,8 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
|
||||
break;
|
||||
case I40E_PHY_TYPE_100BASE_TX:
|
||||
case I40E_PHY_TYPE_1000BASE_T:
|
||||
case I40E_PHY_TYPE_2_5GBASE_T:
|
||||
case I40E_PHY_TYPE_5GBASE_T:
|
||||
case I40E_PHY_TYPE_10GBASE_T:
|
||||
media = I40E_MEDIA_TYPE_BASET;
|
||||
break;
|
||||
@@ -1271,6 +1294,29 @@ static enum i40e_media_type i40e_get_media_type(struct i40e_hw *hw)
|
||||
return media;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_poll_globr - Poll for Global Reset completion
|
||||
* @hw: pointer to the hardware structure
|
||||
* @retry_limit: how many times to retry before failure
|
||||
**/
|
||||
static enum i40e_status_code i40e_poll_globr(struct i40e_hw *hw,
|
||||
u32 retry_limit)
|
||||
{
|
||||
u32 cnt, reg = 0;
|
||||
|
||||
for (cnt = 0; cnt < retry_limit; cnt++) {
|
||||
reg = rd32(hw, I40E_GLGEN_RSTAT);
|
||||
if (!(reg & I40E_GLGEN_RSTAT_DEVSTATE_MASK))
|
||||
return I40E_SUCCESS;
|
||||
i40e_msec_delay(100);
|
||||
}
|
||||
|
||||
DEBUGOUT("Global reset failed.\n");
|
||||
DEBUGOUT1("I40E_GLGEN_RSTAT = 0x%x\n", reg);
|
||||
|
||||
return I40E_ERR_RESET_FAILED;
|
||||
}
|
||||
|
||||
#define I40E_PF_RESET_WAIT_COUNT 200
|
||||
/**
|
||||
* i40e_pf_reset - Reset the PF
|
||||
@@ -1294,7 +1340,7 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw)
|
||||
I40E_GLGEN_RSTCTL_GRSTDEL_MASK) >>
|
||||
I40E_GLGEN_RSTCTL_GRSTDEL_SHIFT;
|
||||
|
||||
grst_del = grst_del * 20;
|
||||
grst_del = min(grst_del * 20, 160U);
|
||||
|
||||
for (cnt = 0; cnt < grst_del; cnt++) {
|
||||
reg = rd32(hw, I40E_GLGEN_RSTAT);
|
||||
@@ -1340,14 +1386,14 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw)
|
||||
if (!(reg & I40E_PFGEN_CTRL_PFSWR_MASK))
|
||||
break;
|
||||
reg2 = rd32(hw, I40E_GLGEN_RSTAT);
|
||||
if (reg2 & I40E_GLGEN_RSTAT_DEVSTATE_MASK) {
|
||||
DEBUGOUT("Core reset upcoming. Skipping PF reset request.\n");
|
||||
DEBUGOUT1("I40E_GLGEN_RSTAT = 0x%x\n", reg2);
|
||||
return I40E_ERR_NOT_READY;
|
||||
}
|
||||
if (reg2 & I40E_GLGEN_RSTAT_DEVSTATE_MASK)
|
||||
break;
|
||||
i40e_msec_delay(1);
|
||||
}
|
||||
if (reg & I40E_PFGEN_CTRL_PFSWR_MASK) {
|
||||
if (reg2 & I40E_GLGEN_RSTAT_DEVSTATE_MASK) {
|
||||
if (i40e_poll_globr(hw, grst_del) != I40E_SUCCESS)
|
||||
return I40E_ERR_RESET_FAILED;
|
||||
} else if (reg & I40E_PFGEN_CTRL_PFSWR_MASK) {
|
||||
DEBUGOUT("PF reset polling failed to complete.\n");
|
||||
return I40E_ERR_RESET_FAILED;
|
||||
}
|
||||
@@ -1511,7 +1557,6 @@ static u32 i40e_led_is_mine(struct i40e_hw *hw, int idx)
|
||||
**/
|
||||
u32 i40e_led_get(struct i40e_hw *hw)
|
||||
{
|
||||
u32 current_mode = 0;
|
||||
u32 mode = 0;
|
||||
int i;
|
||||
|
||||
@@ -1523,27 +1568,10 @@ u32 i40e_led_get(struct i40e_hw *hw)
|
||||
|
||||
if (!gpio_val)
|
||||
continue;
|
||||
|
||||
/* ignore gpio LED src mode entries related to the activity
|
||||
* LEDs
|
||||
*/
|
||||
current_mode = ((gpio_val & I40E_GLGEN_GPIO_CTL_LED_MODE_MASK)
|
||||
>> I40E_GLGEN_GPIO_CTL_LED_MODE_SHIFT);
|
||||
switch (current_mode) {
|
||||
case I40E_COMBINED_ACTIVITY:
|
||||
case I40E_FILTER_ACTIVITY:
|
||||
case I40E_MAC_ACTIVITY:
|
||||
case I40E_LINK_ACTIVITY:
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
mode = (gpio_val & I40E_GLGEN_GPIO_CTL_LED_MODE_MASK) >>
|
||||
I40E_GLGEN_GPIO_CTL_LED_MODE_SHIFT;
|
||||
break;
|
||||
}
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
@@ -1558,7 +1586,6 @@ u32 i40e_led_get(struct i40e_hw *hw)
|
||||
**/
|
||||
void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink)
|
||||
{
|
||||
u32 current_mode = 0;
|
||||
int i;
|
||||
|
||||
if (mode & 0xfffffff0)
|
||||
@@ -1572,22 +1599,6 @@ void i40e_led_set(struct i40e_hw *hw, u32 mode, bool blink)
|
||||
|
||||
if (!gpio_val)
|
||||
continue;
|
||||
|
||||
/* ignore gpio LED src mode entries related to the activity
|
||||
* LEDs
|
||||
*/
|
||||
current_mode = ((gpio_val & I40E_GLGEN_GPIO_CTL_LED_MODE_MASK)
|
||||
>> I40E_GLGEN_GPIO_CTL_LED_MODE_SHIFT);
|
||||
switch (current_mode) {
|
||||
case I40E_COMBINED_ACTIVITY:
|
||||
case I40E_FILTER_ACTIVITY:
|
||||
case I40E_MAC_ACTIVITY:
|
||||
case I40E_LINK_ACTIVITY:
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gpio_val &= ~I40E_GLGEN_GPIO_CTL_LED_MODE_MASK;
|
||||
/* this & is a bit of paranoia, but serves as a range check */
|
||||
gpio_val |= ((mode << I40E_GLGEN_GPIO_CTL_LED_MODE_SHIFT) &
|
||||
@@ -1828,6 +1839,10 @@ enum i40e_status_code i40e_aq_set_mac_config(struct i40e_hw *hw,
|
||||
if (crc_en)
|
||||
cmd->params |= I40E_AQ_SET_MAC_CONFIG_CRC_EN;
|
||||
|
||||
#define I40E_AQ_SET_MAC_CONFIG_FC_DEFAULT_THRESHOLD 0x7FFF
|
||||
cmd->fc_refresh_threshold =
|
||||
CPU_TO_LE16(I40E_AQ_SET_MAC_CONFIG_FC_DEFAULT_THRESHOLD);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
return status;
|
||||
@@ -1968,8 +1983,7 @@ enum i40e_status_code i40e_aq_get_link_info(struct i40e_hw *hw,
|
||||
hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE)
|
||||
hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU;
|
||||
|
||||
if (hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR &&
|
||||
hw->aq.api_min_ver >= 7) {
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
|
||||
__le32 tmp;
|
||||
|
||||
i40e_memcpy(&tmp, resp->link_type, sizeof(tmp),
|
||||
@@ -4101,6 +4115,43 @@ i40e_aq_update_nvm_exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_rearrange_nvm
|
||||
* @hw: pointer to the hw struct
|
||||
* @rearrange_nvm: defines direction of rearrangement
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Rearrange NVM structure, available only for transition FW
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_rearrange_nvm(struct i40e_hw *hw,
|
||||
u8 rearrange_nvm,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aqc_nvm_update *cmd;
|
||||
enum i40e_status_code status;
|
||||
struct i40e_aq_desc desc;
|
||||
|
||||
DEBUGFUNC("i40e_aq_rearrange_nvm");
|
||||
|
||||
cmd = (struct i40e_aqc_nvm_update *)&desc.params.raw;
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_nvm_update);
|
||||
|
||||
rearrange_nvm &= (I40E_AQ_NVM_REARRANGE_TO_FLAT |
|
||||
I40E_AQ_NVM_REARRANGE_TO_STRUCT);
|
||||
|
||||
if (!rearrange_nvm) {
|
||||
status = I40E_ERR_PARAM;
|
||||
goto i40e_aq_rearrange_nvm_exit;
|
||||
}
|
||||
|
||||
cmd->command_flags |= rearrange_nvm;
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
i40e_aq_rearrange_nvm_exit:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_nvm_progress
|
||||
* @hw: pointer to the hw struct
|
||||
@@ -4208,7 +4259,7 @@ enum i40e_status_code i40e_aq_set_lldp_mib(struct i40e_hw *hw,
|
||||
|
||||
cmd->type = mib_type;
|
||||
cmd->length = CPU_TO_LE16(buff_size);
|
||||
cmd->address_high = CPU_TO_LE32(I40E_HI_WORD((u64)buff));
|
||||
cmd->address_high = CPU_TO_LE32(I40E_HI_DWORD((u64)buff));
|
||||
cmd->address_low = CPU_TO_LE32(I40E_LO_DWORD((u64)buff));
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, buff, buff_size, cmd_details);
|
||||
@@ -4244,151 +4295,39 @@ enum i40e_status_code i40e_aq_cfg_lldp_mib_change_event(struct i40e_hw *hw,
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_add_lldp_tlv
|
||||
* i40e_aq_restore_lldp
|
||||
* @hw: pointer to the hw struct
|
||||
* @bridge_type: type of bridge
|
||||
* @buff: buffer with TLV to add
|
||||
* @buff_size: length of the buffer
|
||||
* @tlv_len: length of the TLV to be added
|
||||
* @mib_len: length of the LLDP MIB returned in response
|
||||
* @setting: pointer to factory setting variable or NULL
|
||||
* @restore: True if factory settings should be restored
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Add the specified TLV to LLDP Local MIB for the given bridge type,
|
||||
* it is responsibility of the caller to make sure that the TLV is not
|
||||
* already present in the LLDPDU.
|
||||
* In return firmware will write the complete LLDP MIB with the newly
|
||||
* added TLV in the response buffer.
|
||||
* Restore LLDP Agent factory settings if @restore set to True. In other case
|
||||
* only returns factory setting in AQ response.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_add_lldp_tlv(struct i40e_hw *hw, u8 bridge_type,
|
||||
void *buff, u16 buff_size, u16 tlv_len,
|
||||
u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
enum i40e_status_code
|
||||
i40e_aq_restore_lldp(struct i40e_hw *hw, u8 *setting, bool restore,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_lldp_add_tlv *cmd =
|
||||
(struct i40e_aqc_lldp_add_tlv *)&desc.params.raw;
|
||||
struct i40e_aqc_lldp_restore *cmd =
|
||||
(struct i40e_aqc_lldp_restore *)&desc.params.raw;
|
||||
enum i40e_status_code status;
|
||||
|
||||
if (buff_size == 0 || !buff || tlv_len == 0)
|
||||
return I40E_ERR_PARAM;
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_add_tlv);
|
||||
|
||||
/* Indirect Command */
|
||||
desc.flags |= CPU_TO_LE16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD));
|
||||
if (buff_size > I40E_AQ_LARGE_BUF)
|
||||
desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB);
|
||||
desc.datalen = CPU_TO_LE16(buff_size);
|
||||
|
||||
cmd->type = ((bridge_type << I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT) &
|
||||
I40E_AQ_LLDP_BRIDGE_TYPE_MASK);
|
||||
cmd->len = CPU_TO_LE16(tlv_len);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, buff, buff_size, cmd_details);
|
||||
if (!status) {
|
||||
if (mib_len != NULL)
|
||||
*mib_len = LE16_TO_CPU(desc.datalen);
|
||||
if (!(hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)) {
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Restore LLDP not supported by current FW version.\n");
|
||||
return I40E_ERR_DEVICE_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_restore);
|
||||
|
||||
/**
|
||||
* i40e_aq_update_lldp_tlv
|
||||
* @hw: pointer to the hw struct
|
||||
* @bridge_type: type of bridge
|
||||
* @buff: buffer with TLV to update
|
||||
* @buff_size: size of the buffer holding original and updated TLVs
|
||||
* @old_len: Length of the Original TLV
|
||||
* @new_len: Length of the Updated TLV
|
||||
* @offset: offset of the updated TLV in the buff
|
||||
* @mib_len: length of the returned LLDP MIB
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Update the specified TLV to the LLDP Local MIB for the given bridge type.
|
||||
* Firmware will place the complete LLDP MIB in response buffer with the
|
||||
* updated TLV.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_update_lldp_tlv(struct i40e_hw *hw,
|
||||
u8 bridge_type, void *buff, u16 buff_size,
|
||||
u16 old_len, u16 new_len, u16 offset,
|
||||
u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_lldp_update_tlv *cmd =
|
||||
(struct i40e_aqc_lldp_update_tlv *)&desc.params.raw;
|
||||
enum i40e_status_code status;
|
||||
if (restore)
|
||||
cmd->command |= I40E_AQ_LLDP_AGENT_RESTORE;
|
||||
|
||||
if (buff_size == 0 || !buff || offset == 0 ||
|
||||
old_len == 0 || new_len == 0)
|
||||
return I40E_ERR_PARAM;
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_update_tlv);
|
||||
|
||||
/* Indirect Command */
|
||||
desc.flags |= CPU_TO_LE16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD));
|
||||
if (buff_size > I40E_AQ_LARGE_BUF)
|
||||
desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB);
|
||||
desc.datalen = CPU_TO_LE16(buff_size);
|
||||
|
||||
cmd->type = ((bridge_type << I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT) &
|
||||
I40E_AQ_LLDP_BRIDGE_TYPE_MASK);
|
||||
cmd->old_len = CPU_TO_LE16(old_len);
|
||||
cmd->new_offset = CPU_TO_LE16(offset);
|
||||
cmd->new_len = CPU_TO_LE16(new_len);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, buff, buff_size, cmd_details);
|
||||
if (!status) {
|
||||
if (mib_len != NULL)
|
||||
*mib_len = LE16_TO_CPU(desc.datalen);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_delete_lldp_tlv
|
||||
* @hw: pointer to the hw struct
|
||||
* @bridge_type: type of bridge
|
||||
* @buff: pointer to a user supplied buffer that has the TLV
|
||||
* @buff_size: length of the buffer
|
||||
* @tlv_len: length of the TLV to be deleted
|
||||
* @mib_len: length of the returned LLDP MIB
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Delete the specified TLV from LLDP Local MIB for the given bridge type.
|
||||
* The firmware places the entire LLDP MIB in the response buffer.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_delete_lldp_tlv(struct i40e_hw *hw,
|
||||
u8 bridge_type, void *buff, u16 buff_size,
|
||||
u16 tlv_len, u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_desc desc;
|
||||
struct i40e_aqc_lldp_add_tlv *cmd =
|
||||
(struct i40e_aqc_lldp_add_tlv *)&desc.params.raw;
|
||||
enum i40e_status_code status;
|
||||
|
||||
if (buff_size == 0 || !buff)
|
||||
return I40E_ERR_PARAM;
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_delete_tlv);
|
||||
|
||||
/* Indirect Command */
|
||||
desc.flags |= CPU_TO_LE16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD));
|
||||
if (buff_size > I40E_AQ_LARGE_BUF)
|
||||
desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB);
|
||||
desc.datalen = CPU_TO_LE16(buff_size);
|
||||
cmd->len = CPU_TO_LE16(tlv_len);
|
||||
cmd->type = ((bridge_type << I40E_AQ_LLDP_BRIDGE_TYPE_SHIFT) &
|
||||
I40E_AQ_LLDP_BRIDGE_TYPE_MASK);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, buff, buff_size, cmd_details);
|
||||
if (!status) {
|
||||
if (mib_len != NULL)
|
||||
*mib_len = LE16_TO_CPU(desc.datalen);
|
||||
}
|
||||
if (setting)
|
||||
*setting = cmd->command & 1;
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -4397,11 +4336,13 @@ enum i40e_status_code i40e_aq_delete_lldp_tlv(struct i40e_hw *hw,
|
||||
* i40e_aq_stop_lldp
|
||||
* @hw: pointer to the hw struct
|
||||
* @shutdown_agent: True if LLDP Agent needs to be Shutdown
|
||||
* @persist: True if stop of LLDP should be persistent across power cycles
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Stop or Shutdown the embedded LLDP Agent
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
|
||||
bool persist,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_desc desc;
|
||||
@@ -4414,6 +4355,14 @@ enum i40e_status_code i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
|
||||
if (shutdown_agent)
|
||||
cmd->command |= I40E_AQ_LLDP_AGENT_SHUTDOWN;
|
||||
|
||||
if (persist) {
|
||||
if (hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)
|
||||
cmd->command |= I40E_AQ_LLDP_AGENT_STOP_PERSIST;
|
||||
else
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Persistent Stop LLDP not supported by current FW version.\n");
|
||||
}
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
return status;
|
||||
@@ -4422,11 +4371,13 @@ enum i40e_status_code i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
|
||||
/**
|
||||
* i40e_aq_start_lldp
|
||||
* @hw: pointer to the hw struct
|
||||
* @persist: True if start of LLDP should be persistent across power cycles
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Start the embedded LLDP Agent on all ports.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_start_lldp(struct i40e_hw *hw,
|
||||
bool persist,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aq_desc desc;
|
||||
@@ -4437,6 +4388,15 @@ enum i40e_status_code i40e_aq_start_lldp(struct i40e_hw *hw,
|
||||
i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_start);
|
||||
|
||||
cmd->command = I40E_AQ_LLDP_AGENT_START;
|
||||
|
||||
if (persist) {
|
||||
if (hw->flags & I40E_HW_FLAG_FW_LLDP_PERSISTENT)
|
||||
cmd->command |= I40E_AQ_LLDP_AGENT_START_PERSIST;
|
||||
else
|
||||
i40e_debug(hw, I40E_DEBUG_ALL,
|
||||
"Persistent Start LLDP not supported by current FW version.\n");
|
||||
}
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
return status;
|
||||
@@ -4458,9 +4418,7 @@ i40e_aq_set_dcb_parameters(struct i40e_hw *hw, bool dcb_enable,
|
||||
(struct i40e_aqc_set_dcb_parameters *)&desc.params.raw;
|
||||
enum i40e_status_code status;
|
||||
|
||||
if ((hw->mac.type != I40E_MAC_XL710) ||
|
||||
((hw->aq.api_maj_ver < 1) ||
|
||||
((hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 6))))
|
||||
if (!(hw->flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))
|
||||
return I40E_ERR_DEVICE_NOT_SUPPORTED;
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
@@ -6088,6 +6046,70 @@ enum i40e_status_code i40e_aq_debug_dump(struct i40e_hw *hw, u8 cluster_id,
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* i40e_enable_eee
|
||||
* @hw: pointer to the hardware structure
|
||||
* @enable: state of Energy Efficient Ethernet mode to be set
|
||||
*
|
||||
* Enables or disables Energy Efficient Ethernet (EEE) mode
|
||||
* accordingly to @enable parameter.
|
||||
**/
|
||||
enum i40e_status_code i40e_enable_eee(struct i40e_hw *hw, bool enable)
|
||||
{
|
||||
struct i40e_aq_get_phy_abilities_resp abilities;
|
||||
struct i40e_aq_set_phy_config config;
|
||||
enum i40e_status_code status;
|
||||
__le16 eee_capability;
|
||||
|
||||
/* Get initial PHY capabilities */
|
||||
status = i40e_aq_get_phy_capabilities(hw, FALSE, TRUE, &abilities,
|
||||
NULL);
|
||||
if (status)
|
||||
goto err;
|
||||
|
||||
/* Check whether NIC configuration is compatible with Energy Efficient
|
||||
* Ethernet (EEE) mode.
|
||||
*/
|
||||
if (abilities.eee_capability == 0) {
|
||||
status = I40E_ERR_CONFIG;
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Cache initial EEE capability */
|
||||
eee_capability = abilities.eee_capability;
|
||||
|
||||
/* Get current configuration */
|
||||
status = i40e_aq_get_phy_capabilities(hw, FALSE, false, &abilities,
|
||||
NULL);
|
||||
if (status)
|
||||
goto err;
|
||||
|
||||
/* Cache current configuration */
|
||||
config.phy_type = abilities.phy_type;
|
||||
config.link_speed = abilities.link_speed;
|
||||
config.abilities = abilities.abilities |
|
||||
I40E_AQ_PHY_ENABLE_ATOMIC_LINK;
|
||||
config.eeer = abilities.eeer_val;
|
||||
config.low_power_ctrl = abilities.d3_lpan;
|
||||
config.fec_config = abilities.fec_cfg_curr_mod_ext_info &
|
||||
I40E_AQ_PHY_FEC_CONFIG_MASK;
|
||||
|
||||
/* Set desired EEE state */
|
||||
if (enable) {
|
||||
config.eee_capability = eee_capability;
|
||||
config.eeer |= I40E_PRTPM_EEER_TX_LPI_EN_MASK;
|
||||
} else {
|
||||
config.eee_capability = 0;
|
||||
config.eeer &= ~I40E_PRTPM_EEER_TX_LPI_EN_MASK;
|
||||
}
|
||||
|
||||
/* Save modified config */
|
||||
status = i40e_aq_set_phy_config(hw, &config, NULL);
|
||||
err:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_read_bw_from_alt_ram
|
||||
* @hw: pointer to the hardware structure
|
||||
@@ -6408,6 +6430,7 @@ enum i40e_status_code i40e_write_phy_register(struct i40e_hw *hw,
|
||||
break;
|
||||
case I40E_DEV_ID_10G_BASE_T:
|
||||
case I40E_DEV_ID_10G_BASE_T4:
|
||||
case I40E_DEV_ID_10G_BASE_T_BC:
|
||||
case I40E_DEV_ID_10G_BASE_T_X722:
|
||||
case I40E_DEV_ID_25G_B:
|
||||
case I40E_DEV_ID_25G_SFP28:
|
||||
@@ -6444,6 +6467,7 @@ enum i40e_status_code i40e_read_phy_register(struct i40e_hw *hw,
|
||||
break;
|
||||
case I40E_DEV_ID_10G_BASE_T:
|
||||
case I40E_DEV_ID_10G_BASE_T4:
|
||||
case I40E_DEV_ID_10G_BASE_T_BC:
|
||||
case I40E_DEV_ID_10G_BASE_T_X722:
|
||||
case I40E_DEV_ID_25G_B:
|
||||
case I40E_DEV_ID_25G_SFP28:
|
||||
@@ -6563,7 +6587,7 @@ static enum i40e_status_code i40e_led_get_reg(struct i40e_hw *hw, u16 led_addr,
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
|
||||
status = i40e_aq_get_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
|
||||
I40E_PHY_COM_REG_PAGE,
|
||||
I40E_PHY_COM_REG_PAGE, TRUE,
|
||||
I40E_PHY_LED_PROV_REG_1,
|
||||
reg_val, NULL);
|
||||
} else {
|
||||
@@ -6591,7 +6615,7 @@ static enum i40e_status_code i40e_led_set_reg(struct i40e_hw *hw, u16 led_addr,
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
|
||||
status = i40e_aq_set_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
|
||||
I40E_PHY_COM_REG_PAGE,
|
||||
I40E_PHY_COM_REG_PAGE, TRUE,
|
||||
I40E_PHY_LED_PROV_REG_1,
|
||||
reg_val, NULL);
|
||||
} else {
|
||||
@@ -6625,7 +6649,7 @@ enum i40e_status_code i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
|
||||
if (hw->flags & I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE) {
|
||||
status = i40e_aq_get_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
|
||||
I40E_PHY_COM_REG_PAGE,
|
||||
I40E_PHY_COM_REG_PAGE, TRUE,
|
||||
I40E_PHY_LED_PROV_REG_1,
|
||||
®_val_aq, NULL);
|
||||
if (status == I40E_SUCCESS)
|
||||
@@ -6699,6 +6723,119 @@ restore_config:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_get_phy_lpi_status - read LPI status from PHY or MAC register
|
||||
* @hw: pointer to the hw struct
|
||||
* @stat: pointer to structure with status of rx and tx lpi
|
||||
*
|
||||
* Read LPI state directly from external PHY register or from MAC
|
||||
* register, depending on device ID and current link speed.
|
||||
*/
|
||||
enum i40e_status_code i40e_get_phy_lpi_status(struct i40e_hw *hw,
|
||||
struct i40e_hw_port_stats *stat)
|
||||
{
|
||||
enum i40e_status_code ret = I40E_SUCCESS;
|
||||
u32 val;
|
||||
|
||||
stat->rx_lpi_status = 0;
|
||||
stat->tx_lpi_status = 0;
|
||||
|
||||
if (hw->device_id == I40E_DEV_ID_10G_BASE_T_BC &&
|
||||
(hw->phy.link_info.link_speed == I40E_LINK_SPEED_2_5GB ||
|
||||
hw->phy.link_info.link_speed == I40E_LINK_SPEED_5GB)) {
|
||||
ret = i40e_aq_get_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL,
|
||||
I40E_BCM_PHY_PCS_STATUS1_PAGE,
|
||||
TRUE,
|
||||
I40E_BCM_PHY_PCS_STATUS1_REG,
|
||||
&val, NULL);
|
||||
|
||||
if (ret != I40E_SUCCESS)
|
||||
return ret;
|
||||
|
||||
stat->rx_lpi_status = !!(val & I40E_BCM_PHY_PCS_STATUS1_RX_LPI);
|
||||
stat->tx_lpi_status = !!(val & I40E_BCM_PHY_PCS_STATUS1_TX_LPI);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
val = rd32(hw, I40E_PRTPM_EEE_STAT);
|
||||
stat->rx_lpi_status = (val & I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_MASK) >>
|
||||
I40E_PRTPM_EEE_STAT_RX_LPI_STATUS_SHIFT;
|
||||
stat->tx_lpi_status = (val & I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_MASK) >>
|
||||
I40E_PRTPM_EEE_STAT_TX_LPI_STATUS_SHIFT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_get_lpi_counters - read LPI counters from EEE statistics
|
||||
* @hw: pointer to the hw struct
|
||||
* @tx_counter: pointer to memory for TX LPI counter
|
||||
* @rx_counter: pointer to memory for RX LPI counter
|
||||
*
|
||||
* Read Low Power Idle (LPI) mode counters from Energy Efficient
|
||||
* Ethernet (EEE) statistics.
|
||||
**/
|
||||
enum i40e_status_code i40e_get_lpi_counters(struct i40e_hw *hw,
|
||||
u32 *tx_counter, u32 *rx_counter)
|
||||
{
|
||||
enum i40e_status_code retval;
|
||||
u32 cmd_status;
|
||||
|
||||
retval = i40e_aq_run_phy_activity(hw,
|
||||
I40E_AQ_RUN_PHY_ACTIVITY_ACTIVITY_ID_USER_DEFINED,
|
||||
I40E_AQ_RUN_PHY_ACTIVITY_DNL_OPCODE_GET_EEE_STATISTICS,
|
||||
&cmd_status, tx_counter, rx_counter, NULL);
|
||||
|
||||
if (cmd_status != I40E_AQ_RUN_PHY_ACTIVITY_CMD_STATUS_SUCCESS)
|
||||
retval = I40E_ERR_ADMIN_QUEUE_ERROR;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_lpi_stat_update - update LPI counters with values relative to offset
|
||||
* @hw: pointer to the hw struct
|
||||
* @offset_loaded: flag indicating need of writing current value to offset
|
||||
* @tx_offset: pointer to offset of TX LPI counter
|
||||
* @tx_stat: pointer to value of TX LPI counter
|
||||
* @rx_offset: pointer to offset of RX LPI counter
|
||||
* @rx_stat: pointer to value of RX LPI counter
|
||||
*
|
||||
* Update Low Power Idle (LPI) mode counters while having regard to passed
|
||||
* offsets.
|
||||
**/
|
||||
enum i40e_status_code i40e_lpi_stat_update(struct i40e_hw *hw,
|
||||
bool offset_loaded, u64 *tx_offset,
|
||||
u64 *tx_stat, u64 *rx_offset,
|
||||
u64 *rx_stat)
|
||||
{
|
||||
enum i40e_status_code retval;
|
||||
u32 tx_counter, rx_counter;
|
||||
|
||||
retval = i40e_get_lpi_counters(hw, &tx_counter, &rx_counter);
|
||||
if (retval)
|
||||
goto err;
|
||||
|
||||
if (!offset_loaded) {
|
||||
*tx_offset = tx_counter;
|
||||
*rx_offset = rx_counter;
|
||||
}
|
||||
|
||||
if (tx_counter >= *tx_offset)
|
||||
*tx_stat = (u32)(tx_counter - *tx_offset);
|
||||
else
|
||||
*tx_stat = (u32)((tx_counter + BIT_ULL(32)) - *tx_offset);
|
||||
|
||||
if (rx_counter >= *rx_offset)
|
||||
*rx_stat = (u32)(rx_counter - *rx_offset);
|
||||
else
|
||||
*rx_stat = (u32)((rx_counter + BIT_ULL(32)) - *rx_offset);
|
||||
err:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_rx_ctl_read_register - use FW to read from an Rx control register
|
||||
* @hw: pointer to the hw struct
|
||||
@@ -6830,6 +6967,7 @@ do_retry:
|
||||
* @hw: pointer to the hw struct
|
||||
* @phy_select: select which phy should be accessed
|
||||
* @dev_addr: PHY device address
|
||||
* @page_change: enable auto page change
|
||||
* @reg_addr: PHY register address
|
||||
* @reg_val: new register value
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
@@ -6837,7 +6975,7 @@ do_retry:
|
||||
* Write the external PHY register.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
|
||||
u8 phy_select, u8 dev_addr,
|
||||
u8 phy_select, u8 dev_addr, bool page_change,
|
||||
u32 reg_addr, u32 reg_val,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
@@ -6854,6 +6992,9 @@ enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
|
||||
cmd->reg_address = CPU_TO_LE32(reg_addr);
|
||||
cmd->reg_value = CPU_TO_LE32(reg_val);
|
||||
|
||||
if (!page_change)
|
||||
cmd->cmd_flags = I40E_AQ_PHY_REG_ACCESS_DONT_CHANGE_QSFP_PAGE;
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
|
||||
return status;
|
||||
@@ -6864,6 +7005,7 @@ enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
|
||||
* @hw: pointer to the hw struct
|
||||
* @phy_select: select which phy should be accessed
|
||||
* @dev_addr: PHY device address
|
||||
* @page_change: enable auto page change
|
||||
* @reg_addr: PHY register address
|
||||
* @reg_val: read register value
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
@@ -6871,7 +7013,7 @@ enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
|
||||
* Read the external PHY register.
|
||||
**/
|
||||
enum i40e_status_code i40e_aq_get_phy_register(struct i40e_hw *hw,
|
||||
u8 phy_select, u8 dev_addr,
|
||||
u8 phy_select, u8 dev_addr, bool page_change,
|
||||
u32 reg_addr, u32 *reg_val,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
@@ -6887,6 +7029,9 @@ enum i40e_status_code i40e_aq_get_phy_register(struct i40e_hw *hw,
|
||||
cmd->dev_addres = dev_addr;
|
||||
cmd->reg_address = CPU_TO_LE32(reg_addr);
|
||||
|
||||
if (!page_change)
|
||||
cmd->cmd_flags = I40E_AQ_PHY_REG_ACCESS_DONT_CHANGE_QSFP_PAGE;
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
if (!status)
|
||||
*reg_val = LE32_TO_CPU(cmd->reg_value);
|
||||
@@ -6894,6 +7039,50 @@ enum i40e_status_code i40e_aq_get_phy_register(struct i40e_hw *hw,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_run_phy_activity
|
||||
* @hw: pointer to the hw struct
|
||||
* @activity_id: ID of DNL activity to run
|
||||
* @dnl_opcode: opcode passed to DNL script
|
||||
* @cmd_status: pointer to memory to write return value of DNL script
|
||||
* @data0: pointer to memory for first 4 bytes of data returned by DNL script
|
||||
* @data1: pointer to memory for last 4 bytes of data returned by DNL script
|
||||
* @cmd_details: pointer to command details structure or NULL
|
||||
*
|
||||
* Run DNL admin command.
|
||||
**/
|
||||
enum i40e_status_code
|
||||
i40e_aq_run_phy_activity(struct i40e_hw *hw, u16 activity_id, u32 dnl_opcode,
|
||||
u32 *cmd_status, u32 *data0, u32 *data1,
|
||||
struct i40e_asq_cmd_details *cmd_details)
|
||||
{
|
||||
struct i40e_aqc_run_phy_activity *cmd;
|
||||
enum i40e_status_code retval;
|
||||
struct i40e_aq_desc desc;
|
||||
|
||||
cmd = (struct i40e_aqc_run_phy_activity *)&desc.params.raw;
|
||||
|
||||
if (!cmd_status || !data0 || !data1) {
|
||||
retval = I40E_ERR_PARAM;
|
||||
goto err;
|
||||
}
|
||||
|
||||
i40e_fill_default_direct_cmd_desc(&desc,
|
||||
i40e_aqc_opc_run_phy_activity);
|
||||
|
||||
cmd->activity_id = CPU_TO_LE16(activity_id);
|
||||
cmd->params.cmd.dnl_opcode = CPU_TO_LE32(dnl_opcode);
|
||||
|
||||
retval = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
if (retval)
|
||||
goto err;
|
||||
|
||||
*cmd_status = LE32_TO_CPU(cmd->params.resp.cmd_status);
|
||||
*data0 = LE32_TO_CPU(cmd->params.resp.data0);
|
||||
*data1 = LE32_TO_CPU(cmd->params.resp.data1);
|
||||
err:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_aq_send_msg_to_pf
|
||||
|
||||
+57
-19
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -893,22 +893,23 @@ out:
|
||||
/**
|
||||
* i40e_init_dcb
|
||||
* @hw: pointer to the hw struct
|
||||
* @enable_mib_change: enable mib change event
|
||||
*
|
||||
* Update DCB configuration from the Firmware
|
||||
**/
|
||||
enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw)
|
||||
enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw, bool enable_mib_change)
|
||||
{
|
||||
enum i40e_status_code ret = I40E_SUCCESS;
|
||||
struct i40e_lldp_variables lldp_cfg;
|
||||
u8 adminstatus = 0;
|
||||
|
||||
if (!hw->func_caps.dcb)
|
||||
return ret;
|
||||
return I40E_NOT_SUPPORTED;
|
||||
|
||||
/* Read LLDP NVM area */
|
||||
ret = i40e_read_lldp_cfg(hw, &lldp_cfg);
|
||||
if (ret)
|
||||
return ret;
|
||||
return I40E_ERR_NOT_READY;
|
||||
|
||||
/* Get the LLDP AdminStatus for the current port */
|
||||
adminstatus = lldp_cfg.adminstatus >> (hw->port * 4);
|
||||
@@ -917,7 +918,7 @@ enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw)
|
||||
/* LLDP agent disabled */
|
||||
if (!adminstatus) {
|
||||
hw->dcbx_status = I40E_DCBX_STATUS_DISABLED;
|
||||
return ret;
|
||||
return I40E_ERR_NOT_READY;
|
||||
}
|
||||
|
||||
/* Get DCBX status */
|
||||
@@ -926,30 +927,67 @@ enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw)
|
||||
return ret;
|
||||
|
||||
/* Check the DCBX Status */
|
||||
switch (hw->dcbx_status) {
|
||||
case I40E_DCBX_STATUS_DONE:
|
||||
case I40E_DCBX_STATUS_IN_PROGRESS:
|
||||
if (hw->dcbx_status == I40E_DCBX_STATUS_DONE ||
|
||||
hw->dcbx_status == I40E_DCBX_STATUS_IN_PROGRESS) {
|
||||
/* Get current DCBX configuration */
|
||||
ret = i40e_get_dcb_config(hw);
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
case I40E_DCBX_STATUS_DISABLED:
|
||||
return ret;
|
||||
case I40E_DCBX_STATUS_NOT_STARTED:
|
||||
case I40E_DCBX_STATUS_MULTIPLE_PEERS:
|
||||
default:
|
||||
break;
|
||||
} else if (hw->dcbx_status == I40E_DCBX_STATUS_DISABLED) {
|
||||
return I40E_ERR_NOT_READY;
|
||||
}
|
||||
|
||||
/* Configure the LLDP MIB change event */
|
||||
ret = i40e_aq_cfg_lldp_mib_change_event(hw, TRUE, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (enable_mib_change)
|
||||
ret = i40e_aq_cfg_lldp_mib_change_event(hw, TRUE, NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* i40e_get_fw_lldp_status
|
||||
* @hw: pointer to the hw struct
|
||||
* @lldp_status: pointer to the status enum
|
||||
*
|
||||
* Get status of FW Link Layer Discovery Protocol (LLDP) Agent.
|
||||
* Status of agent is reported via @lldp_status parameter.
|
||||
**/
|
||||
enum i40e_status_code
|
||||
i40e_get_fw_lldp_status(struct i40e_hw *hw,
|
||||
enum i40e_get_fw_lldp_status_resp *lldp_status)
|
||||
{
|
||||
enum i40e_status_code ret;
|
||||
struct i40e_virt_mem mem;
|
||||
u8 *lldpmib;
|
||||
|
||||
if (!lldp_status)
|
||||
return I40E_ERR_PARAM;
|
||||
|
||||
/* Allocate buffer for the LLDPDU */
|
||||
ret = i40e_allocate_virt_mem(hw, &mem, I40E_LLDPDU_SIZE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
lldpmib = (u8 *)mem.va;
|
||||
ret = i40e_aq_get_lldp_mib(hw, 0, 0, (void *)lldpmib,
|
||||
I40E_LLDPDU_SIZE, NULL, NULL, NULL);
|
||||
|
||||
if (ret == I40E_SUCCESS) {
|
||||
*lldp_status = I40E_GET_FW_LLDP_STATUS_ENABLED;
|
||||
} else if (hw->aq.asq_last_status == I40E_AQ_RC_ENOENT) {
|
||||
/* MIB is not available yet but the agent is running */
|
||||
*lldp_status = I40E_GET_FW_LLDP_STATUS_ENABLED;
|
||||
ret = I40E_SUCCESS;
|
||||
} else if (hw->aq.asq_last_status == I40E_AQ_RC_EPERM) {
|
||||
*lldp_status = I40E_GET_FW_LLDP_STATUS_DISABLED;
|
||||
ret = I40E_SUCCESS;
|
||||
}
|
||||
|
||||
i40e_free_virt_mem(hw, &mem);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* i40e_add_ieee_ets_tlv - Prepare ETS TLV in IEEE format
|
||||
* @tlv: Fill the ETS config data in IEEE format
|
||||
|
||||
+13
-3
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -208,6 +208,12 @@ struct i40e_dcbx_variables {
|
||||
u32 deftsaassignment;
|
||||
};
|
||||
|
||||
|
||||
enum i40e_get_fw_lldp_status_resp {
|
||||
I40E_GET_FW_LLDP_STATUS_DISABLED = 0,
|
||||
I40E_GET_FW_LLDP_STATUS_ENABLED = 1
|
||||
};
|
||||
|
||||
enum i40e_status_code i40e_get_dcbx_status(struct i40e_hw *hw,
|
||||
u16 *status);
|
||||
enum i40e_status_code i40e_lldp_to_dcb_config(u8 *lldpmib,
|
||||
@@ -216,7 +222,11 @@ enum i40e_status_code i40e_aq_get_dcb_config(struct i40e_hw *hw, u8 mib_type,
|
||||
u8 bridgetype,
|
||||
struct i40e_dcbx_config *dcbcfg);
|
||||
enum i40e_status_code i40e_get_dcb_config(struct i40e_hw *hw);
|
||||
enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw);
|
||||
enum i40e_status_code i40e_init_dcb(struct i40e_hw *hw,
|
||||
bool enable_mib_change);
|
||||
enum i40e_status_code
|
||||
i40e_get_fw_lldp_status(struct i40e_hw *hw,
|
||||
enum i40e_get_fw_lldp_status_resp *lldp_status);
|
||||
enum i40e_status_code i40e_set_dcb_config(struct i40e_hw *hw);
|
||||
enum i40e_status_code i40e_dcb_config_to_lldp(u8 *lldpmib, u16 *miblen,
|
||||
struct i40e_dcbx_config *dcbcfg);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -39,6 +39,8 @@
|
||||
#define I40E_INTEL_VENDOR_ID 0x8086
|
||||
|
||||
/* Device IDs */
|
||||
#define I40E_DEV_ID_X710_N3000 0x0CF8
|
||||
#define I40E_DEV_ID_XXV710_N3000 0x0D58
|
||||
#define I40E_DEV_ID_SFP_XL710 0x1572
|
||||
#define I40E_DEV_ID_QEMU 0x1574
|
||||
#define I40E_DEV_ID_KX_B 0x1580
|
||||
@@ -52,6 +54,9 @@
|
||||
#define I40E_DEV_ID_10G_BASE_T4 0x1589
|
||||
#define I40E_DEV_ID_25G_B 0x158A
|
||||
#define I40E_DEV_ID_25G_SFP28 0x158B
|
||||
#define I40E_DEV_ID_10G_BASE_T_BC 0x15FF
|
||||
#define I40E_DEV_ID_10G_B 0x104F
|
||||
#define I40E_DEV_ID_10G_SFP 0x104E
|
||||
#define I40E_DEV_ID_VF 0x154C
|
||||
#define I40E_DEV_ID_VF_HV 0x1571
|
||||
#define I40E_DEV_ID_ADAPTIVE_VF 0x1889
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -144,7 +144,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
|
||||
DEBUGOUT3("i40e_init_lan_hmc: Tx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
|
||||
txq_num, obj->max_cnt, ret_code);
|
||||
goto init_lan_hmc_out;
|
||||
goto free_hmc_out;
|
||||
}
|
||||
|
||||
/* aggregate values into the full LAN object for later */
|
||||
@@ -167,7 +167,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
|
||||
DEBUGOUT3("i40e_init_lan_hmc: Rx context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
|
||||
rxq_num, obj->max_cnt, ret_code);
|
||||
goto init_lan_hmc_out;
|
||||
goto free_hmc_out;
|
||||
}
|
||||
|
||||
/* aggregate values into the full LAN object for later */
|
||||
@@ -190,7 +190,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
|
||||
DEBUGOUT3("i40e_init_lan_hmc: FCoE context: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
|
||||
fcoe_cntx_num, obj->max_cnt, ret_code);
|
||||
goto init_lan_hmc_out;
|
||||
goto free_hmc_out;
|
||||
}
|
||||
|
||||
/* aggregate values into the full LAN object for later */
|
||||
@@ -213,7 +213,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
ret_code = I40E_ERR_INVALID_HMC_OBJ_COUNT;
|
||||
DEBUGOUT3("i40e_init_lan_hmc: FCoE filter: asks for 0x%x but max allowed is 0x%x, returns error %d\n",
|
||||
fcoe_filt_num, obj->max_cnt, ret_code);
|
||||
goto init_lan_hmc_out;
|
||||
goto free_hmc_out;
|
||||
}
|
||||
|
||||
/* aggregate values into the full LAN object for later */
|
||||
@@ -234,7 +234,7 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
(sizeof(struct i40e_hmc_sd_entry) *
|
||||
hw->hmc.sd_table.sd_cnt));
|
||||
if (ret_code)
|
||||
goto init_lan_hmc_out;
|
||||
goto free_hmc_out;
|
||||
hw->hmc.sd_table.sd_entry =
|
||||
(struct i40e_hmc_sd_entry *)hw->hmc.sd_table.addr.va;
|
||||
}
|
||||
@@ -242,6 +242,11 @@ enum i40e_status_code i40e_init_lan_hmc(struct i40e_hw *hw, u32 txq_num,
|
||||
full_obj->size = l2fpm_size;
|
||||
|
||||
init_lan_hmc_out:
|
||||
return ret_code;
|
||||
free_hmc_out:
|
||||
if (hw->hmc.hmc_obj_virt_mem.va)
|
||||
i40e_free_virt_mem(hw, &hw->hmc.hmc_obj_virt_mem);
|
||||
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+41
-5
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -826,6 +826,7 @@ static const char *i40e_nvm_update_state_str[] = {
|
||||
"I40E_NVMUPD_EXEC_AQ",
|
||||
"I40E_NVMUPD_GET_AQ_RESULT",
|
||||
"I40E_NVMUPD_GET_AQ_EVENT",
|
||||
"I40E_NVMUPD_GET_FEATURES",
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -888,6 +889,31 @@ enum i40e_status_code i40e_nvmupd_command(struct i40e_hw *hw,
|
||||
return I40E_SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* A supported features request returns immediately
|
||||
* rather than going into state machine
|
||||
*/
|
||||
if (upd_cmd == I40E_NVMUPD_FEATURES) {
|
||||
if (cmd->data_size < hw->nvmupd_features.size) {
|
||||
*perrno = -EFAULT;
|
||||
return I40E_ERR_BUF_TOO_SHORT;
|
||||
}
|
||||
|
||||
/*
|
||||
* If buffer is bigger than i40e_nvmupd_features structure,
|
||||
* make sure the trailing bytes are set to 0x0.
|
||||
*/
|
||||
if (cmd->data_size > hw->nvmupd_features.size)
|
||||
i40e_memset(bytes + hw->nvmupd_features.size, 0x0,
|
||||
cmd->data_size - hw->nvmupd_features.size,
|
||||
I40E_NONDMA_MEM);
|
||||
|
||||
i40e_memcpy(bytes, &hw->nvmupd_features,
|
||||
hw->nvmupd_features.size, I40E_NONDMA_MEM);
|
||||
|
||||
return I40E_SUCCESS;
|
||||
}
|
||||
|
||||
/* Clear status even it is not read and log */
|
||||
if (hw->nvmupd_state == I40E_NVMUPD_STATE_ERROR) {
|
||||
i40e_debug(hw, I40E_DEBUG_NVM,
|
||||
@@ -1354,10 +1380,20 @@ static enum i40e_nvmupd_cmd i40e_nvmupd_validate_command(struct i40e_hw *hw,
|
||||
upd_cmd = I40E_NVMUPD_READ_SA;
|
||||
break;
|
||||
case I40E_NVM_EXEC:
|
||||
if (module == 0xf)
|
||||
upd_cmd = I40E_NVMUPD_STATUS;
|
||||
else if (module == 0)
|
||||
switch (module) {
|
||||
case I40E_NVM_EXEC_GET_AQ_RESULT:
|
||||
upd_cmd = I40E_NVMUPD_GET_AQ_RESULT;
|
||||
break;
|
||||
case I40E_NVM_EXEC_FEATURES:
|
||||
upd_cmd = I40E_NVMUPD_FEATURES;
|
||||
break;
|
||||
case I40E_NVM_EXEC_STATUS:
|
||||
upd_cmd = I40E_NVMUPD_STATUS;
|
||||
break;
|
||||
default:
|
||||
*perrno = -EFAULT;
|
||||
return I40E_NVMUPD_INVALID;
|
||||
}
|
||||
break;
|
||||
case I40E_NVM_AQE:
|
||||
upd_cmd = I40E_NVMUPD_GET_AQ_EVENT;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#include <sys/limits.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "ixl.h"
|
||||
|
||||
@@ -161,27 +162,15 @@ i40e_destroy_spinlock(struct i40e_spinlock *lock)
|
||||
mtx_destroy(&lock->mutex);
|
||||
}
|
||||
|
||||
#ifndef MSEC_2_TICKS
|
||||
#define MSEC_2_TICKS(m) max(1, (uint32_t)((hz == 1000) ? \
|
||||
(m) : ((uint64_t)(m) * (uint64_t)hz)/(uint64_t)1000))
|
||||
#endif
|
||||
|
||||
void
|
||||
i40e_msec_pause(int msecs)
|
||||
{
|
||||
int ticks_to_pause = (msecs * hz) / 1000;
|
||||
int start_ticks = ticks;
|
||||
|
||||
if (cold || SCHEDULER_STOPPED()) {
|
||||
i40e_msec_delay(msecs);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
kern_yield(PRI_USER);
|
||||
int yielded_ticks = ticks - start_ticks;
|
||||
if (yielded_ticks > ticks_to_pause)
|
||||
break;
|
||||
else if (yielded_ticks < 0
|
||||
&& (yielded_ticks + INT_MAX + 1 > ticks_to_pause)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
pause("i40e_msec_pause", MSEC_2_TICKS(msecs));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -101,6 +101,14 @@ enum i40e_status_code i40e_led_get_phy(struct i40e_hw *hw, u16 *led_addr,
|
||||
enum i40e_status_code i40e_blink_phy_link_led(struct i40e_hw *hw,
|
||||
u32 time, u32 interval);
|
||||
|
||||
enum i40e_status_code i40e_get_phy_lpi_status(struct i40e_hw *hw,
|
||||
struct i40e_hw_port_stats *stats);
|
||||
enum i40e_status_code i40e_get_lpi_counters(struct i40e_hw *hw, u32 *tx_counter,
|
||||
u32 *rx_counter);
|
||||
enum i40e_status_code i40e_lpi_stat_update(struct i40e_hw *hw,
|
||||
bool offset_loaded, u64 *tx_offset,
|
||||
u64 *tx_stat, u64 *rx_offset,
|
||||
u64 *rx_stat);
|
||||
/* admin send queue commands */
|
||||
|
||||
enum i40e_status_code i40e_aq_get_firmware_version(struct i40e_hw *hw,
|
||||
@@ -264,6 +272,9 @@ enum i40e_status_code i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer,
|
||||
u32 offset, u16 length, void *data,
|
||||
bool last_command, u8 preservation_flags,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_rearrange_nvm(struct i40e_hw *hw,
|
||||
u8 rearrange_nvm,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_nvm_progress(struct i40e_hw *hw, u8 *progress,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_get_lldp_mib(struct i40e_hw *hw, u8 bridge_type,
|
||||
@@ -276,26 +287,18 @@ enum i40e_status_code i40e_aq_set_lldp_mib(struct i40e_hw *hw,
|
||||
enum i40e_status_code i40e_aq_cfg_lldp_mib_change_event(struct i40e_hw *hw,
|
||||
bool enable_update,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_add_lldp_tlv(struct i40e_hw *hw, u8 bridge_type,
|
||||
void *buff, u16 buff_size, u16 tlv_len,
|
||||
u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_update_lldp_tlv(struct i40e_hw *hw,
|
||||
u8 bridge_type, void *buff, u16 buff_size,
|
||||
u16 old_len, u16 new_len, u16 offset,
|
||||
u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_delete_lldp_tlv(struct i40e_hw *hw,
|
||||
u8 bridge_type, void *buff, u16 buff_size,
|
||||
u16 tlv_len, u16 *mib_len,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code
|
||||
i40e_aq_restore_lldp(struct i40e_hw *hw, u8 *setting, bool restore,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_stop_lldp(struct i40e_hw *hw, bool shutdown_agent,
|
||||
bool persist,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_set_dcb_parameters(struct i40e_hw *hw,
|
||||
bool dcb_enable,
|
||||
struct i40e_asq_cmd_details
|
||||
*cmd_details);
|
||||
enum i40e_status_code i40e_aq_start_lldp(struct i40e_hw *hw,
|
||||
bool persist,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_get_cee_dcb_config(struct i40e_hw *hw,
|
||||
void *buff, u16 buff_size,
|
||||
@@ -470,6 +473,7 @@ void i40e_nvmupd_check_wait_event(struct i40e_hw *hw, u16 opcode,
|
||||
struct i40e_aq_desc *desc);
|
||||
void i40e_nvmupd_clear_wait_state(struct i40e_hw *hw);
|
||||
void i40e_set_pci_config_data(struct i40e_hw *hw, u16 link_status);
|
||||
enum i40e_status_code i40e_enable_eee(struct i40e_hw *hw, bool enable);
|
||||
|
||||
enum i40e_status_code i40e_set_mac_type(struct i40e_hw *hw);
|
||||
|
||||
@@ -497,6 +501,10 @@ i40e_virtchnl_link_speed(enum i40e_aq_link_speed link_speed)
|
||||
return VIRTCHNL_LINK_SPEED_100MB;
|
||||
case I40E_LINK_SPEED_1GB:
|
||||
return VIRTCHNL_LINK_SPEED_1GB;
|
||||
case I40E_LINK_SPEED_2_5GB:
|
||||
return VIRTCHNL_LINK_SPEED_2_5GB;
|
||||
case I40E_LINK_SPEED_5GB:
|
||||
return VIRTCHNL_LINK_SPEED_5GB;
|
||||
case I40E_LINK_SPEED_10GB:
|
||||
return VIRTCHNL_LINK_SPEED_10GB;
|
||||
case I40E_LINK_SPEED_40GB:
|
||||
@@ -549,13 +557,17 @@ enum i40e_status_code i40e_aq_rx_ctl_write_register(struct i40e_hw *hw,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
void i40e_write_rx_ctl(struct i40e_hw *hw, u32 reg_addr, u32 reg_val);
|
||||
enum i40e_status_code i40e_aq_set_phy_register(struct i40e_hw *hw,
|
||||
u8 phy_select, u8 dev_addr,
|
||||
u8 phy_select, u8 dev_addr, bool page_change,
|
||||
u32 reg_addr, u32 reg_val,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code i40e_aq_get_phy_register(struct i40e_hw *hw,
|
||||
u8 phy_select, u8 dev_addr,
|
||||
u8 phy_select, u8 dev_addr, bool page_change,
|
||||
u32 reg_addr, u32 *reg_val,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
enum i40e_status_code
|
||||
i40e_aq_run_phy_activity(struct i40e_hw *hw, u16 activity_id, u32 opcode,
|
||||
u32 *cmd_status, u32 *data0, u32 *data1,
|
||||
struct i40e_asq_cmd_details *cmd_details);
|
||||
|
||||
enum i40e_status_code i40e_aq_set_arp_proxy_config(struct i40e_hw *hw,
|
||||
struct i40e_aqc_arp_proxy_data *proxy_config,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+39
-3
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
#define I40E_MAX_PF_VSI 64
|
||||
#define I40E_MAX_PF_QP 128
|
||||
#define I40E_MAX_VSI_QP 16
|
||||
#define I40E_MAX_VF_VSI 3
|
||||
#define I40E_MAX_VF_VSI 4
|
||||
#define I40E_MAX_CHAINED_RX_BUFFERS 5
|
||||
#define I40E_MAX_PF_UDP_OFFLOAD_PORTS 16
|
||||
|
||||
@@ -345,6 +345,12 @@ struct i40e_phy_info {
|
||||
I40E_PHY_TYPE_OFFSET)
|
||||
#define I40E_CAP_PHY_TYPE_25GBASE_ACC BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC + \
|
||||
I40E_PHY_TYPE_OFFSET)
|
||||
/* Offset for 2.5G/5G PHY Types value to bit number conversion */
|
||||
#define I40E_PHY_TYPE_OFFSET2 (-10)
|
||||
#define I40E_CAP_PHY_TYPE_2_5GBASE_T BIT_ULL(I40E_PHY_TYPE_2_5GBASE_T + \
|
||||
I40E_PHY_TYPE_OFFSET2)
|
||||
#define I40E_CAP_PHY_TYPE_5GBASE_T BIT_ULL(I40E_PHY_TYPE_5GBASE_T + \
|
||||
I40E_PHY_TYPE_OFFSET2)
|
||||
#define I40E_HW_CAP_MAX_GPIO 30
|
||||
#define I40E_HW_CAP_MDIO_PORT_MODE_MDIO 0
|
||||
#define I40E_HW_CAP_MDIO_PORT_MODE_I2C 1
|
||||
@@ -487,6 +493,7 @@ enum i40e_nvmupd_cmd {
|
||||
I40E_NVMUPD_EXEC_AQ,
|
||||
I40E_NVMUPD_GET_AQ_RESULT,
|
||||
I40E_NVMUPD_GET_AQ_EVENT,
|
||||
I40E_NVMUPD_FEATURES,
|
||||
};
|
||||
|
||||
enum i40e_nvmupd_state {
|
||||
@@ -522,6 +529,10 @@ enum i40e_nvmupd_state {
|
||||
#define I40E_NVM_AQE 0xe
|
||||
#define I40E_NVM_EXEC 0xf
|
||||
|
||||
#define I40E_NVM_EXEC_GET_AQ_RESULT 0x0
|
||||
#define I40E_NVM_EXEC_FEATURES 0xe
|
||||
#define I40E_NVM_EXEC_STATUS 0xf
|
||||
|
||||
#define I40E_NVM_ADAPT_SHIFT 16
|
||||
#define I40E_NVM_ADAPT_MASK (0xffffULL << I40E_NVM_ADAPT_SHIFT)
|
||||
|
||||
@@ -536,6 +547,20 @@ struct i40e_nvm_access {
|
||||
u8 data[1];
|
||||
};
|
||||
|
||||
/* NVMUpdate features API */
|
||||
#define I40E_NVMUPD_FEATURES_API_VER_MAJOR 0
|
||||
#define I40E_NVMUPD_FEATURES_API_VER_MINOR 14
|
||||
#define I40E_NVMUPD_FEATURES_API_FEATURES_ARRAY_LEN 12
|
||||
|
||||
#define I40E_NVMUPD_FEATURE_FLAT_NVM_SUPPORT BIT(0)
|
||||
|
||||
struct i40e_nvmupd_features {
|
||||
u8 major;
|
||||
u8 minor;
|
||||
u16 size;
|
||||
u8 features[I40E_NVMUPD_FEATURES_API_FEATURES_ARRAY_LEN];
|
||||
};
|
||||
|
||||
/* (Q)SFP module access definitions */
|
||||
#define I40E_I2C_EEPROM_DEV_ADDR 0xA0
|
||||
#define I40E_I2C_EEPROM_DEV_ADDR2 0xA2
|
||||
@@ -727,6 +752,8 @@ struct i40e_hw {
|
||||
#define I40E_HW_FLAG_802_1AD_CAPABLE BIT_ULL(1)
|
||||
#define I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE BIT_ULL(2)
|
||||
#define I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK BIT_ULL(3)
|
||||
#define I40E_HW_FLAG_FW_LLDP_STOPPABLE BIT_ULL(4)
|
||||
#define I40E_HW_FLAG_FW_LLDP_PERSISTENT BIT_ULL(5)
|
||||
u64 flags;
|
||||
|
||||
/* Used in set switch config AQ command */
|
||||
@@ -734,6 +761,9 @@ struct i40e_hw {
|
||||
u16 first_tag;
|
||||
u16 second_tag;
|
||||
|
||||
/* NVMUpdate features */
|
||||
struct i40e_nvmupd_features nvmupd_features;
|
||||
|
||||
/* debug mask */
|
||||
u32 debug_mask;
|
||||
char err_str[16];
|
||||
@@ -1698,4 +1728,10 @@ struct i40e_lldp_variables {
|
||||
#define I40E_FLEX_56_MASK (0x1ULL << I40E_FLEX_56_SHIFT)
|
||||
#define I40E_FLEX_57_SHIFT 6
|
||||
#define I40E_FLEX_57_MASK (0x1ULL << I40E_FLEX_57_SHIFT)
|
||||
|
||||
#define I40E_BCM_PHY_PCS_STATUS1_PAGE 0x3
|
||||
#define I40E_BCM_PHY_PCS_STATUS1_REG 0x0001
|
||||
#define I40E_BCM_PHY_PCS_STATUS1_RX_LPI BIT(8)
|
||||
#define I40E_BCM_PHY_PCS_STATUS1_TX_LPI BIT(9)
|
||||
|
||||
#endif /* _I40E_TYPE_H_ */
|
||||
+136
-30
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
* Driver version
|
||||
*********************************************************************/
|
||||
#define IXL_DRIVER_VERSION_MAJOR 1
|
||||
#define IXL_DRIVER_VERSION_MINOR 9
|
||||
#define IXL_DRIVER_VERSION_MINOR 11
|
||||
#define IXL_DRIVER_VERSION_BUILD 9
|
||||
|
||||
char ixl_driver_version[] = __XSTRING(IXL_DRIVER_VERSION_MAJOR) "."
|
||||
@@ -83,6 +83,9 @@ static ixl_vendor_info_t ixl_vendor_info_array[] =
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_SFP_I_X722, 0, 0, 0},
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_25G_B, 0, 0, 0},
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_25G_SFP28, 0, 0, 0},
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_BASE_T_BC, 0, 0, 0},
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_SFP, 0, 0, 0},
|
||||
{I40E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_B, 0, 0, 0},
|
||||
/* required last entry */
|
||||
{0, 0, 0, 0, 0}
|
||||
};
|
||||
@@ -190,6 +193,13 @@ SYSCTL_INT(_hw_ixl, OID_AUTO, enable_tx_fc_filter, CTLFLAG_RDTUN,
|
||||
&ixl_enable_tx_fc_filter, 0,
|
||||
"Filter out packets with Ethertype 0x8808 from being sent out by non-HW sources");
|
||||
|
||||
static int ixl_i2c_access_method = 0;
|
||||
TUNABLE_INT("hw.ixl.i2c_access_method",
|
||||
&ixl_i2c_access_method);
|
||||
SYSCTL_INT(_hw_ixl, OID_AUTO, i2c_access_method, CTLFLAG_RDTUN,
|
||||
&ixl_i2c_access_method, 0,
|
||||
IXL_SYSCTL_HELP_I2C_METHOD);
|
||||
|
||||
/*
|
||||
* Different method for processing TX descriptor
|
||||
* completion.
|
||||
@@ -215,6 +225,7 @@ SYSCTL_INT(_hw_ixl, OID_AUTO, shared_debug_mask, CTLFLAG_RDTUN,
|
||||
&ixl_shared_debug_mask, 0,
|
||||
"Display debug statements that are printed in shared code");
|
||||
|
||||
|
||||
/*
|
||||
** Controls for Interrupt Throttling
|
||||
** - true/false for dynamic adjustment
|
||||
@@ -335,9 +346,15 @@ ixl_save_pf_tunables(struct ixl_pf *pf)
|
||||
#else
|
||||
pf->vsi.enable_head_writeback = !!(ixl_enable_head_writeback);
|
||||
#endif
|
||||
|
||||
ixl_vsi_setup_rings_size(&pf->vsi, ixl_tx_ring_size, ixl_rx_ring_size);
|
||||
|
||||
if (ixl_i2c_access_method > IXL_I2C_ACCESS_METHOD_TYPE_LENGTH - 1
|
||||
|| ixl_i2c_access_method < IXL_I2C_ACCESS_METHOD_BEST_AVAILABLE)
|
||||
pf->i2c_access_method = IXL_I2C_ACCESS_METHOD_BEST_AVAILABLE;
|
||||
else
|
||||
pf->i2c_access_method =
|
||||
(enum ixl_i2c_access_method_t)ixl_i2c_access_method;
|
||||
|
||||
if (ixl_tx_itr < 0 || ixl_tx_itr > IXL_MAX_ITR) {
|
||||
device_printf(dev, "Invalid tx_itr value of %d set!\n",
|
||||
ixl_tx_itr);
|
||||
@@ -365,6 +382,65 @@ ixl_save_pf_tunables(struct ixl_pf *pf)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int
|
||||
ixl_attach_recovery_mode(struct ixl_pf *pf)
|
||||
{
|
||||
struct ixl_vsi *vsi = &pf->vsi;
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
device_t dev = pf->dev;
|
||||
int error = 0;
|
||||
|
||||
device_printf(dev, "Firmware recovery mode detected. Limiting functionality. Refer to Intel(R) Ethernet Adapters and Devices User Guide for details on firmware recovery mode.\n");
|
||||
|
||||
atomic_set_int(&pf->state, IXL_PF_STATE_RECOVERY_MODE);
|
||||
|
||||
i40e_get_mac_addr(hw, hw->mac.addr);
|
||||
|
||||
pf->msix = ixl_init_msix(pf);
|
||||
ixl_setup_stations(pf);
|
||||
ixl_setup_interface(pf->dev, vsi);
|
||||
|
||||
if (pf->msix > 1) {
|
||||
error = ixl_setup_adminq_msix(pf);
|
||||
if (error) {
|
||||
device_printf(dev, "ixl_setup_adminq_msix() error: %d\n",
|
||||
error);
|
||||
goto recovery_err_late;
|
||||
}
|
||||
error = ixl_setup_adminq_tq(pf);
|
||||
if (error) {
|
||||
device_printf(dev, "ixl_setup_adminq_tq() error: %d\n",
|
||||
error);
|
||||
goto recovery_err_late;
|
||||
}
|
||||
ixl_configure_intr0_msix(pf);
|
||||
ixl_enable_intr0(hw);
|
||||
} else {
|
||||
error = ixl_setup_legacy(pf);
|
||||
|
||||
error = ixl_setup_adminq_tq(pf);
|
||||
if (error) {
|
||||
device_printf(dev, "ixl_setup_adminq_tq() error: %d\n",
|
||||
error);
|
||||
goto recovery_err_late;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get the bus configuration and set the shared code's config */
|
||||
ixl_get_bus_info(pf);
|
||||
|
||||
/* Initialize statistics & add sysctls */
|
||||
ixl_add_device_sysctls(pf);
|
||||
|
||||
/* Start the local timer */
|
||||
IXL_PF_LOCK(pf);
|
||||
callout_reset(&pf->timer, hz, ixl_local_timer, pf);
|
||||
IXL_PF_UNLOCK(pf);
|
||||
|
||||
recovery_err_late:
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* Device initialization routine
|
||||
*
|
||||
@@ -381,6 +457,7 @@ ixl_attach(device_t dev)
|
||||
struct ixl_pf *pf;
|
||||
struct i40e_hw *hw;
|
||||
struct ixl_vsi *vsi;
|
||||
enum i40e_get_fw_lldp_status_resp lldp_status;
|
||||
enum i40e_status_code status;
|
||||
int error = 0;
|
||||
|
||||
@@ -412,19 +489,22 @@ ixl_attach(device_t dev)
|
||||
|
||||
/* Do PCI setup - map BAR0, etc */
|
||||
if (ixl_allocate_pci_resources(pf)) {
|
||||
device_printf(dev, "Allocation of PCI resources failed\n");
|
||||
error = ENXIO;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/* Establish a clean starting point */
|
||||
i40e_clear_hw(hw);
|
||||
status = i40e_pf_reset(hw);
|
||||
if (status) {
|
||||
device_printf(dev, "PF reset failure %s\n",
|
||||
i40e_stat_str(hw, status));
|
||||
error = EIO;
|
||||
goto err_out;
|
||||
|
||||
/* Don't try to reset device if it's in recovery mode */
|
||||
if (!ixl_fw_recovery_mode(pf)) {
|
||||
status = i40e_pf_reset(hw);
|
||||
if (status) {
|
||||
device_printf(dev, "PF reset failure %s\n",
|
||||
i40e_stat_str(hw, status));
|
||||
error = EIO;
|
||||
goto err_out;
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize the shared code */
|
||||
@@ -472,6 +552,9 @@ ixl_attach(device_t dev)
|
||||
device_printf(dev, "Please update the NVM image.\n");
|
||||
}
|
||||
|
||||
if (ixl_fw_recovery_mode(pf))
|
||||
return ixl_attach_recovery_mode(pf);
|
||||
|
||||
/* Clear PXE mode */
|
||||
i40e_clear_pxe_mode(hw);
|
||||
|
||||
@@ -521,13 +604,20 @@ ixl_attach(device_t dev)
|
||||
device_printf(dev, "Allocating %d queues for PF LAN VSI; %d queues active\n",
|
||||
pf->qtag.num_allocated, pf->qtag.num_active);
|
||||
|
||||
/* Disable LLDP from the firmware for certain NVM versions */
|
||||
if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 3)) ||
|
||||
(pf->hw.aq.fw_maj_ver < 4)) {
|
||||
i40e_aq_stop_lldp(hw, TRUE, NULL);
|
||||
/* Disable LLDP from the firmware on XL710 for certain NVM versions */
|
||||
if (hw->mac.type == I40E_MAC_XL710 &&
|
||||
(((hw->aq.fw_maj_ver == 4) && (hw->aq.fw_min_ver < 3)) ||
|
||||
(hw->aq.fw_maj_ver < 4))) {
|
||||
i40e_aq_stop_lldp(hw, true, false, NULL);
|
||||
pf->state |= IXL_PF_STATE_FW_LLDP_DISABLED;
|
||||
}
|
||||
|
||||
/* Try enabling Energy Efficient Ethernet (EEE) mode */
|
||||
if(i40e_enable_eee(hw, true) == I40E_SUCCESS)
|
||||
atomic_set_int(&pf->state, IXL_PF_STATE_EEE_ENABLED);
|
||||
else
|
||||
atomic_clear_int(&pf->state, IXL_PF_STATE_EEE_ENABLED);
|
||||
|
||||
/* Get MAC addresses from hardware */
|
||||
i40e_get_mac_addr(hw, hw->mac.addr);
|
||||
error = i40e_validate_mac_addr(hw->mac.addr);
|
||||
@@ -539,15 +629,18 @@ ixl_attach(device_t dev)
|
||||
i40e_get_port_mac_addr(hw, hw->mac.port_addr);
|
||||
|
||||
/* Query device FW LLDP status */
|
||||
ixl_get_fw_lldp_status(pf);
|
||||
/* Tell FW to apply DCB config on link up */
|
||||
if ((hw->mac.type != I40E_MAC_X722)
|
||||
&& ((pf->hw.aq.api_maj_ver > 1)
|
||||
|| (pf->hw.aq.api_maj_ver == 1 && pf->hw.aq.api_min_ver >= 7)))
|
||||
i40e_aq_set_dcb_parameters(hw, true, NULL);
|
||||
if (i40e_get_fw_lldp_status(hw, &lldp_status) == I40E_SUCCESS) {
|
||||
if (lldp_status == I40E_GET_FW_LLDP_STATUS_DISABLED) {
|
||||
atomic_set_int(&pf->state,
|
||||
IXL_PF_STATE_FW_LLDP_DISABLED);
|
||||
} else {
|
||||
atomic_clear_int(&pf->state,
|
||||
IXL_PF_STATE_FW_LLDP_DISABLED);
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize mac filter list for VSI */
|
||||
SLIST_INIT(&vsi->ftl);
|
||||
/* Tell FW to apply DCB config on link up */
|
||||
i40e_aq_set_dcb_parameters(hw, true, NULL);
|
||||
|
||||
/* Set up SW VSI and allocate queue memory and rings */
|
||||
if (ixl_setup_stations(pf)) {
|
||||
@@ -648,6 +741,9 @@ ixl_attach(device_t dev)
|
||||
ixl_update_stats_counters(pf);
|
||||
ixl_add_hw_stats(pf);
|
||||
|
||||
/* Add protocol filters to list */
|
||||
ixl_init_filters(vsi);
|
||||
|
||||
/* Register for VLAN events */
|
||||
vsi->vlan_attach = EVENTHANDLER_REGISTER(vlan_config,
|
||||
ixl_register_vlan, vsi, EVENTHANDLER_PRI_FIRST);
|
||||
@@ -682,6 +778,10 @@ ixl_attach(device_t dev)
|
||||
device_printf(dev, "The device is not iWARP enabled\n");
|
||||
}
|
||||
#endif
|
||||
/* Start the local timer */
|
||||
IXL_PF_LOCK(pf);
|
||||
callout_reset(&pf->timer, hz, ixl_local_timer, pf);
|
||||
IXL_PF_UNLOCK(pf);
|
||||
|
||||
INIT_DEBUGOUT("ixl_attach: end");
|
||||
return (0);
|
||||
@@ -747,31 +847,37 @@ ixl_detach(device_t dev)
|
||||
ixl_stop(pf);
|
||||
|
||||
/* Shutdown LAN HMC */
|
||||
status = i40e_shutdown_lan_hmc(hw);
|
||||
if (status)
|
||||
device_printf(dev,
|
||||
"Shutdown LAN HMC failed with code %d\n", status);
|
||||
if (hw->hmc.hmc_obj) {
|
||||
status = i40e_shutdown_lan_hmc(hw);
|
||||
if (status)
|
||||
device_printf(dev,
|
||||
"Shutdown LAN HMC failed with code %s\n", i40e_stat_str(hw, status));
|
||||
}
|
||||
|
||||
/* Teardown LAN queue resources */
|
||||
ixl_teardown_queue_msix(vsi);
|
||||
ixl_free_queue_tqs(vsi);
|
||||
|
||||
/* Timer enqueues admin task. Stop it before freeing the admin taskqueue */
|
||||
callout_drain(&pf->timer);
|
||||
|
||||
/* Shutdown admin queue */
|
||||
ixl_disable_intr0(hw);
|
||||
ixl_teardown_adminq_msix(pf);
|
||||
ixl_free_adminq_tq(pf);
|
||||
|
||||
status = i40e_shutdown_adminq(hw);
|
||||
if (status)
|
||||
device_printf(dev,
|
||||
"Shutdown Admin queue failed with code %d\n", status);
|
||||
|
||||
ixl_free_adminq_tq(pf);
|
||||
|
||||
/* Unregister VLAN events */
|
||||
if (vsi->vlan_attach != NULL)
|
||||
EVENTHANDLER_DEREGISTER(vlan_config, vsi->vlan_attach);
|
||||
if (vsi->vlan_detach != NULL)
|
||||
EVENTHANDLER_DEREGISTER(vlan_unconfig, vsi->vlan_detach);
|
||||
|
||||
callout_drain(&pf->timer);
|
||||
|
||||
#ifdef IXL_IW
|
||||
if (ixl_enable_iwarp && pf->iw_enabled) {
|
||||
error = ixl_iw_pf_detach(pf);
|
||||
|
||||
+45
-114
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
******************************************************************************/
|
||||
/*$FreeBSD$*/
|
||||
|
||||
#include "sys/limits.h"
|
||||
|
||||
#include "ixl.h"
|
||||
#include "ixlv.h"
|
||||
|
||||
@@ -40,7 +42,7 @@
|
||||
*********************************************************************/
|
||||
#define IXLV_DRIVER_VERSION_MAJOR 1
|
||||
#define IXLV_DRIVER_VERSION_MINOR 5
|
||||
#define IXLV_DRIVER_VERSION_BUILD 4
|
||||
#define IXLV_DRIVER_VERSION_BUILD 8
|
||||
|
||||
char ixlv_driver_version[] = __XSTRING(IXLV_DRIVER_VERSION_MAJOR) "."
|
||||
__XSTRING(IXLV_DRIVER_VERSION_MINOR) "."
|
||||
@@ -1493,6 +1495,33 @@ ixlv_assign_msix(struct ixlv_sc *sc)
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Special implementation of pause for reset flow because
|
||||
* there is a lock used.
|
||||
*/
|
||||
static void
|
||||
ixlv_msec_pause(int msecs)
|
||||
{
|
||||
int ticks_to_pause = (msecs * hz) / 1000;
|
||||
int start_ticks = ticks;
|
||||
|
||||
if (cold || SCHEDULER_STOPPED()) {
|
||||
i40e_msec_delay(msecs);
|
||||
return;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
kern_yield(PRI_USER);
|
||||
int yielded_ticks = ticks - start_ticks;
|
||||
if (yielded_ticks > ticks_to_pause)
|
||||
break;
|
||||
else if (yielded_ticks < 0
|
||||
&& (yielded_ticks + INT_MAX + 1 > ticks_to_pause)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
** Requests a VF reset from the PF.
|
||||
**
|
||||
@@ -1509,7 +1538,7 @@ ixlv_reset(struct ixlv_sc *sc)
|
||||
if (sc->init_state != IXLV_RESET_PENDING)
|
||||
ixlv_request_reset(sc);
|
||||
|
||||
i40e_msec_pause(100);
|
||||
ixlv_msec_pause(100);
|
||||
error = ixlv_reset_complete(hw);
|
||||
if (error) {
|
||||
device_printf(dev, "%s: VF reset failed\n",
|
||||
@@ -1547,7 +1576,7 @@ ixlv_reset_complete(struct i40e_hw *hw)
|
||||
if ((reg == VIRTCHNL_VFR_VFACTIVE) ||
|
||||
(reg == VIRTCHNL_VFR_COMPLETED))
|
||||
return (0);
|
||||
i40e_msec_pause(100);
|
||||
ixlv_msec_pause(100);
|
||||
}
|
||||
|
||||
return (EBUSY);
|
||||
@@ -1802,6 +1831,7 @@ ixlv_setup_queues(struct ixlv_sc *sc)
|
||||
goto err_free_queues;
|
||||
}
|
||||
}
|
||||
sysctl_ctx_init(&vsi->sysctl_ctx);
|
||||
|
||||
return (0);
|
||||
|
||||
@@ -2269,6 +2299,11 @@ ixlv_msix_que(void *arg)
|
||||
if (!(vsi->ifp->if_drv_flags & IFF_DRV_RUNNING))
|
||||
return;
|
||||
|
||||
/* There are drivers which disable auto-masking of interrupts,
|
||||
* which is a global setting for all ports. We have to make sure
|
||||
* to mask it to not lose IRQs */
|
||||
ixlv_disable_queue_irq(hw, que->me);
|
||||
|
||||
++que->irqs;
|
||||
|
||||
more_rx = ixl_rxeof(que, IXL_RX_LIMIT);
|
||||
@@ -2680,6 +2715,7 @@ ixlv_free_queues(struct ixl_vsi *vsi)
|
||||
ixlv_free_queue(sc, que);
|
||||
}
|
||||
|
||||
sysctl_ctx_free(&vsi->sysctl_ctx);
|
||||
free(vsi->queues, M_DEVBUF);
|
||||
}
|
||||
|
||||
@@ -2972,22 +3008,11 @@ ixlv_add_sysctls(struct ixlv_sc *sc)
|
||||
{
|
||||
device_t dev = sc->dev;
|
||||
struct ixl_vsi *vsi = &sc->vsi;
|
||||
struct i40e_eth_stats *es = &vsi->eth_stats;
|
||||
|
||||
struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
|
||||
struct sysctl_oid *tree = device_get_sysctl_tree(dev);
|
||||
struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
|
||||
|
||||
struct sysctl_oid *vsi_node, *queue_node;
|
||||
struct sysctl_oid_list *vsi_list, *queue_list;
|
||||
|
||||
#define QUEUE_NAME_LEN 32
|
||||
char queue_namebuf[QUEUE_NAME_LEN];
|
||||
|
||||
struct ixl_queue *queues = vsi->queues;
|
||||
struct tx_ring *txr;
|
||||
struct rx_ring *rxr;
|
||||
|
||||
/* Driver statistics sysctls */
|
||||
SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, "watchdog_events",
|
||||
CTLFLAG_RD, &sc->watchdog_events,
|
||||
@@ -3008,105 +3033,12 @@ ixlv_add_sysctls(struct ixlv_sc *sc)
|
||||
sc, 0, ixlv_sysctl_current_speed,
|
||||
"A", "Current Port Speed");
|
||||
|
||||
ixl_add_sysctls_eth_stats(ctx, child, &vsi->eth_stats);
|
||||
|
||||
/* VSI statistics sysctls */
|
||||
vsi_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "vsi",
|
||||
vsi->vsi_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "vsi",
|
||||
CTLFLAG_RD, NULL, "VSI-specific statistics");
|
||||
vsi_list = SYSCTL_CHILDREN(vsi_node);
|
||||
|
||||
struct ixl_sysctl_info ctls[] =
|
||||
{
|
||||
{&es->rx_bytes, "good_octets_rcvd", "Good Octets Received"},
|
||||
{&es->rx_unicast, "ucast_pkts_rcvd",
|
||||
"Unicast Packets Received"},
|
||||
{&es->rx_multicast, "mcast_pkts_rcvd",
|
||||
"Multicast Packets Received"},
|
||||
{&es->rx_broadcast, "bcast_pkts_rcvd",
|
||||
"Broadcast Packets Received"},
|
||||
{&es->rx_discards, "rx_discards", "Discarded RX packets"},
|
||||
{&es->rx_unknown_protocol, "rx_unknown_proto", "RX unknown protocol packets"},
|
||||
{&es->tx_bytes, "good_octets_txd", "Good Octets Transmitted"},
|
||||
{&es->tx_unicast, "ucast_pkts_txd", "Unicast Packets Transmitted"},
|
||||
{&es->tx_multicast, "mcast_pkts_txd",
|
||||
"Multicast Packets Transmitted"},
|
||||
{&es->tx_broadcast, "bcast_pkts_txd",
|
||||
"Broadcast Packets Transmitted"},
|
||||
{&es->tx_errors, "tx_errors", "TX packet errors"},
|
||||
// end
|
||||
{0,0,0}
|
||||
};
|
||||
struct ixl_sysctl_info *entry = ctls;
|
||||
while (entry->stat != NULL)
|
||||
{
|
||||
SYSCTL_ADD_QUAD(ctx, child, OID_AUTO, entry->name,
|
||||
CTLFLAG_RD, entry->stat,
|
||||
entry->description);
|
||||
entry++;
|
||||
}
|
||||
|
||||
/* Queue sysctls */
|
||||
for (int q = 0; q < vsi->num_queues; q++) {
|
||||
snprintf(queue_namebuf, QUEUE_NAME_LEN, "que%d", q);
|
||||
queue_node = SYSCTL_ADD_NODE(ctx, vsi_list, OID_AUTO, queue_namebuf,
|
||||
CTLFLAG_RD, NULL, "Queue Name");
|
||||
queue_list = SYSCTL_CHILDREN(queue_node);
|
||||
|
||||
txr = &(queues[q].txr);
|
||||
rxr = &(queues[q].rxr);
|
||||
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "mbuf_defrag_failed",
|
||||
CTLFLAG_RD, &(queues[q].mbuf_defrag_failed),
|
||||
"m_defrag() failed");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "dropped",
|
||||
CTLFLAG_RD, &(queues[q].dropped_pkts),
|
||||
"Driver dropped packets");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "irqs",
|
||||
CTLFLAG_RD, &(queues[q].irqs),
|
||||
"irqs on this queue");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "tso_tx",
|
||||
CTLFLAG_RD, &(queues[q].tso),
|
||||
"TSO");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "tx_dmamap_failed",
|
||||
CTLFLAG_RD, &(queues[q].tx_dmamap_failed),
|
||||
"Driver tx dma failure in xmit");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "no_desc_avail",
|
||||
CTLFLAG_RD, &(txr->no_desc),
|
||||
"Queue No Descriptor Available");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "tx_packets",
|
||||
CTLFLAG_RD, &(txr->total_packets),
|
||||
"Queue Packets Transmitted");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "tx_bytes",
|
||||
CTLFLAG_RD, &(txr->tx_bytes),
|
||||
"Queue Bytes Transmitted");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "rx_packets",
|
||||
CTLFLAG_RD, &(rxr->rx_packets),
|
||||
"Queue Packets Received");
|
||||
SYSCTL_ADD_QUAD(ctx, queue_list, OID_AUTO, "rx_bytes",
|
||||
CTLFLAG_RD, &(rxr->rx_bytes),
|
||||
"Queue Bytes Received");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "rx_itr",
|
||||
CTLFLAG_RD, &(rxr->itr), 0,
|
||||
"Queue Rx ITR Interval");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "tx_itr",
|
||||
CTLFLAG_RD, &(txr->itr), 0,
|
||||
"Queue Tx ITR Interval");
|
||||
|
||||
#ifdef IXL_DEBUG
|
||||
/* Examine queue state */
|
||||
SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "qtx_head",
|
||||
CTLTYPE_UINT | CTLFLAG_RD, &queues[q],
|
||||
sizeof(struct ixl_queue),
|
||||
ixlv_sysctl_qtx_tail_handler, "IU",
|
||||
"Queue Transmit Descriptor Tail");
|
||||
SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "qrx_head",
|
||||
CTLTYPE_UINT | CTLFLAG_RD, &queues[q],
|
||||
sizeof(struct ixl_queue),
|
||||
ixlv_sysctl_qrx_tail_handler, "IU",
|
||||
"Queue Receive Descriptor Tail");
|
||||
SYSCTL_ADD_INT(ctx, queue_list, OID_AUTO, "watchdog_timer",
|
||||
CTLFLAG_RD, &(txr.watchdog_timer), 0,
|
||||
"Ticks before watchdog event is triggered");
|
||||
#endif
|
||||
}
|
||||
ixl_vsi_add_queues_stats(vsi);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -3242,4 +3174,3 @@ ixlv_sysctl_qrx_tail_handler(SYSCTL_HANDLER_ARGS)
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
+30
-22
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
|
||||
#include "i40e_type.h"
|
||||
#include "i40e_prototype.h"
|
||||
#include "i40e_dcb.h"
|
||||
|
||||
#define MAC_FORMAT "%02x:%02x:%02x:%02x:%02x:%02x"
|
||||
#define MAC_FORMAT_ARGS(mac_addr) \
|
||||
@@ -294,6 +295,9 @@ enum ixl_dbg_mask {
|
||||
#define IXL_FLAGS_USES_MSIX (1 << 2)
|
||||
#define IXL_FLAGS_IS_VF (1 << 3)
|
||||
|
||||
#define IXL_VSI_IS_PF(v) ((v->flags & IXL_FLAGS_IS_VF) == 0)
|
||||
#define IXL_VSI_IS_VF(v) ((v->flags & IXL_FLAGS_IS_VF) != 0)
|
||||
|
||||
#define IXL_VF_RESET_TIMEOUT 100
|
||||
|
||||
#define IXL_VSI_DATA_PORT 0x01
|
||||
@@ -386,6 +390,9 @@ enum ixl_dbg_mask {
|
||||
#define IXL_SET_NOPROTO(vsi, count) (vsi)->noproto = (count)
|
||||
#endif
|
||||
|
||||
/* For stats sysctl naming */
|
||||
#define IXL_QUEUE_NAME_LEN 32
|
||||
|
||||
/*
|
||||
*****************************************************************************
|
||||
* vendor_info_array
|
||||
@@ -456,7 +463,7 @@ struct tx_ring {
|
||||
|
||||
/* Used for Dynamic ITR calculation */
|
||||
u32 packets;
|
||||
u32 bytes;
|
||||
u32 bytes;
|
||||
|
||||
/* Soft Stats */
|
||||
u64 tx_bytes;
|
||||
@@ -478,7 +485,7 @@ struct rx_ring {
|
||||
bool hdr_split;
|
||||
bool discard;
|
||||
u32 next_refresh;
|
||||
u32 next_check;
|
||||
u32 next_check;
|
||||
u32 itr;
|
||||
u32 latency;
|
||||
char mtx_name[16];
|
||||
@@ -490,14 +497,14 @@ struct rx_ring {
|
||||
|
||||
/* Used for Dynamic ITR calculation */
|
||||
u32 packets;
|
||||
u32 bytes;
|
||||
u32 bytes;
|
||||
|
||||
/* Soft stats */
|
||||
u64 split;
|
||||
u64 rx_packets;
|
||||
u64 rx_bytes;
|
||||
u64 desc_errs;
|
||||
u64 not_done;
|
||||
u64 rx_bytes;
|
||||
u64 desc_errs;
|
||||
u64 not_done;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -535,7 +542,7 @@ struct ixl_queue {
|
||||
*/
|
||||
SLIST_HEAD(ixl_ftl_head, ixl_mac_filter);
|
||||
struct ixl_vsi {
|
||||
void *back;
|
||||
void *back;
|
||||
struct ifnet *ifp;
|
||||
struct device *dev;
|
||||
struct i40e_hw *hw;
|
||||
@@ -561,18 +568,19 @@ struct ixl_vsi {
|
||||
/* MAC/VLAN Filter list */
|
||||
struct ixl_ftl_head ftl;
|
||||
u16 num_macs;
|
||||
u64 num_hw_filters;
|
||||
|
||||
/* Contains readylist & stat counter id */
|
||||
struct i40e_aqc_vsi_properties_data info;
|
||||
|
||||
eventhandler_tag vlan_attach;
|
||||
eventhandler_tag vlan_detach;
|
||||
eventhandler_tag vlan_attach;
|
||||
eventhandler_tag vlan_detach;
|
||||
u16 num_vlans;
|
||||
|
||||
/* Per-VSI stats from hardware */
|
||||
struct i40e_eth_stats eth_stats;
|
||||
struct i40e_eth_stats eth_stats_offsets;
|
||||
bool stat_offsets_loaded;
|
||||
bool stat_offsets_loaded;
|
||||
/* VSI stat counters */
|
||||
u64 ipackets;
|
||||
u64 ierrors;
|
||||
@@ -586,13 +594,10 @@ struct ixl_vsi {
|
||||
u64 oqdrops;
|
||||
u64 noproto;
|
||||
|
||||
/* Driver statistics */
|
||||
u64 hw_filters_del;
|
||||
u64 hw_filters_add;
|
||||
|
||||
/* Misc. */
|
||||
u64 flags;
|
||||
u64 flags;
|
||||
struct sysctl_oid *vsi_node;
|
||||
struct sysctl_ctx_list sysctl_ctx;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -600,9 +605,9 @@ struct ixl_vsi {
|
||||
*/
|
||||
static inline u16
|
||||
ixl_rx_unrefreshed(struct ixl_queue *que)
|
||||
{
|
||||
{
|
||||
struct rx_ring *rxr = &que->rxr;
|
||||
|
||||
|
||||
if (rxr->next_check > rxr->next_refresh)
|
||||
return (rxr->next_check - rxr->next_refresh - 1);
|
||||
else
|
||||
@@ -632,16 +637,16 @@ ixl_get_filter(struct ixl_vsi *vsi)
|
||||
*/
|
||||
static inline bool
|
||||
cmp_etheraddr(const u8 *ea1, const u8 *ea2)
|
||||
{
|
||||
{
|
||||
bool cmp = FALSE;
|
||||
|
||||
if ((ea1[0] == ea2[0]) && (ea1[1] == ea2[1]) &&
|
||||
(ea1[2] == ea2[2]) && (ea1[3] == ea2[3]) &&
|
||||
(ea1[4] == ea2[4]) && (ea1[5] == ea2[5]))
|
||||
(ea1[4] == ea2[4]) && (ea1[5] == ea2[5]))
|
||||
cmp = TRUE;
|
||||
|
||||
return (cmp);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return next largest power of 2, unsigned
|
||||
@@ -692,6 +697,9 @@ int ixl_mq_start(struct ifnet *, struct mbuf *);
|
||||
int ixl_mq_start_locked(struct ifnet *, struct tx_ring *);
|
||||
void ixl_deferred_mq_start(void *, int);
|
||||
|
||||
void ixl_add_sysctls_eth_stats(struct sysctl_ctx_list *, struct sysctl_oid_list *,
|
||||
struct i40e_eth_stats *);
|
||||
void ixl_vsi_add_queues_stats(struct ixl_vsi *);
|
||||
void ixl_vsi_setup_rings_size(struct ixl_vsi *, int, int);
|
||||
int ixl_queue_hang_check(struct ixl_vsi *);
|
||||
void ixl_free_vsi(struct ixl_vsi *);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+49
-16
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -47,6 +47,16 @@
|
||||
|
||||
#define IXL_PF_STATE_EMPR_RESETTING (1 << 0)
|
||||
#define IXL_PF_STATE_FW_LLDP_DISABLED (1 << 1)
|
||||
#define IXL_PF_STATE_RECOVERY_MODE (1 << 2)
|
||||
#define IXL_PF_STATE_EEE_ENABLED (1 << 3)
|
||||
|
||||
enum ixl_i2c_access_method_t {
|
||||
IXL_I2C_ACCESS_METHOD_BEST_AVAILABLE = 0,
|
||||
IXL_I2C_ACCESS_METHOD_BIT_BANG_I2CPARAMS = 1,
|
||||
IXL_I2C_ACCESS_METHOD_REGISTER_I2CCMD = 2,
|
||||
IXL_I2C_ACCESS_METHOD_AQ = 3,
|
||||
IXL_I2C_ACCESS_METHOD_TYPE_LENGTH = 4
|
||||
};
|
||||
|
||||
struct ixl_vf {
|
||||
struct ixl_vsi vsi;
|
||||
@@ -57,7 +67,6 @@ struct ixl_vf {
|
||||
uint32_t version;
|
||||
|
||||
struct ixl_pf_qtag qtag;
|
||||
struct sysctl_ctx_list ctx;
|
||||
};
|
||||
|
||||
/* Physical controller structure */
|
||||
@@ -85,7 +94,7 @@ struct ixl_pf {
|
||||
bool iw_enabled;
|
||||
#endif
|
||||
int if_flags;
|
||||
int state;
|
||||
volatile int state;
|
||||
bool init_in_progress;
|
||||
u8 supported_speeds;
|
||||
|
||||
@@ -103,7 +112,6 @@ struct ixl_pf {
|
||||
|
||||
struct mtx pf_mtx;
|
||||
|
||||
u32 qbase;
|
||||
u32 admvec;
|
||||
struct task adminq;
|
||||
struct taskqueue *tq;
|
||||
@@ -124,6 +132,13 @@ struct ixl_pf {
|
||||
struct i40e_hw_port_stats stats_offsets;
|
||||
bool stat_offsets_loaded;
|
||||
|
||||
/* I2C access methods */
|
||||
enum ixl_i2c_access_method_t i2c_access_method;
|
||||
s32 (*read_i2c_byte)(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data);
|
||||
s32 (*write_i2c_byte)(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data);
|
||||
|
||||
/* SR-IOV */
|
||||
struct ixl_vf *vfs;
|
||||
int num_vfs;
|
||||
@@ -132,6 +147,7 @@ struct ixl_pf {
|
||||
int vc_debug_lvl;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Defines used for NVM update ioctls.
|
||||
* This value is used in the Solaris tool, too.
|
||||
@@ -153,7 +169,9 @@ struct ixl_pf {
|
||||
"\t 0x4 - advertise 10G\n" \
|
||||
"\t 0x8 - advertise 20G\n" \
|
||||
"\t0x10 - advertise 25G\n" \
|
||||
"\t0x20 - advertise 40G\n\n" \
|
||||
"\t0x20 - advertise 40G\n" \
|
||||
"\t0x40 - advertise 2.5G\n" \
|
||||
"\t0x80 - advertise 5G\n\n" \
|
||||
"Set to 0 to disable link.\n" \
|
||||
"Use \"sysctl -x\" to view flags properly."
|
||||
|
||||
@@ -165,7 +183,9 @@ struct ixl_pf {
|
||||
"\t 0x4 - 10G\n" \
|
||||
"\t 0x8 - 20G\n" \
|
||||
"\t0x10 - 25G\n" \
|
||||
"\t0x20 - 40G\n\n" \
|
||||
"\t0x20 - 40G\n" \
|
||||
"\t0x40 - 2.5G\n" \
|
||||
"\t0x80 - 5G\n\n" \
|
||||
"Use \"sysctl -x\" to view flags properly."
|
||||
|
||||
#define IXL_SYSCTL_HELP_FC \
|
||||
@@ -184,6 +204,14 @@ struct ixl_pf {
|
||||
"\t0 - disable\n" \
|
||||
"\t1 - enable\n"
|
||||
|
||||
#define IXL_SYSCTL_HELP_I2C_METHOD \
|
||||
"\nI2C access method that driver will use:\n" \
|
||||
"\t0 - best available method\n" \
|
||||
"\t1 - bit bang via I2CPARAMS register\n" \
|
||||
"\t2 - register read/write via I2CCMD register\n" \
|
||||
"\t3 - Use Admin Queue command (best)\n" \
|
||||
"Using the Admin Queue is only supported on 710 devices with FW version 1.7 or higher"
|
||||
|
||||
extern const char * const ixl_fc_string[6];
|
||||
|
||||
MALLOC_DECLARE(M_IXL);
|
||||
@@ -210,9 +238,6 @@ MALLOC_DECLARE(M_IXL);
|
||||
#define ixl_dbg(p, m, s, ...) ixl_debug_core(p, m, s, ##__VA_ARGS__)
|
||||
void ixl_debug_core(struct ixl_pf *, enum ixl_dbg_mask, char *, ...);
|
||||
|
||||
/* For stats sysctl naming */
|
||||
#define QUEUE_NAME_LEN 32
|
||||
|
||||
/* For netmap(4) compatibility */
|
||||
#define ixl_disable_intr(vsi) ixl_disable_rings_intr(vsi)
|
||||
|
||||
@@ -222,7 +247,6 @@ void ixl_debug_core(struct ixl_pf *, enum ixl_dbg_mask, char *, ...);
|
||||
|
||||
int ixl_setup_interface(device_t, struct ixl_vsi *);
|
||||
void ixl_print_nvm_cmd(device_t, struct i40e_nvm_access *);
|
||||
char * ixl_aq_speed_to_str(enum i40e_aq_link_speed);
|
||||
|
||||
void ixl_handle_que(void *context, int pending);
|
||||
|
||||
@@ -260,7 +284,7 @@ void ixl_stat_update32(struct i40e_hw *, u32, bool,
|
||||
u64 *, u64 *);
|
||||
|
||||
void ixl_stop(struct ixl_pf *);
|
||||
void ixl_add_vsi_sysctls(struct ixl_pf *pf, struct ixl_vsi *vsi, struct sysctl_ctx_list *ctx, const char *sysctl_name);
|
||||
void ixl_vsi_add_sysctls(struct ixl_vsi *, const char *, bool);
|
||||
int ixl_get_hw_capabilities(struct ixl_pf *);
|
||||
void ixl_link_up_msg(struct ixl_pf *);
|
||||
void ixl_update_link_status(struct ixl_pf *);
|
||||
@@ -300,6 +324,7 @@ int ixl_aq_get_link_status(struct ixl_pf *,
|
||||
struct i40e_aqc_get_link_status *);
|
||||
|
||||
int ixl_handle_nvmupd_cmd(struct ixl_pf *, struct ifdrv *);
|
||||
int ixl_handle_i2c_eeprom_read_cmd(struct ixl_pf *, struct ifreq *ifr);
|
||||
void ixl_handle_empr_reset(struct ixl_pf *);
|
||||
int ixl_prepare_for_reset(struct ixl_pf *pf, bool is_up);
|
||||
int ixl_rebuild_hw_structs_after_reset(struct ixl_pf *, bool is_up);
|
||||
@@ -334,10 +359,10 @@ void ixl_disable_rings_intr(struct ixl_vsi *);
|
||||
void ixl_set_promisc(struct ixl_vsi *);
|
||||
void ixl_add_multi(struct ixl_vsi *);
|
||||
void ixl_del_multi(struct ixl_vsi *);
|
||||
void ixl_setup_vlan_filters(struct ixl_vsi *);
|
||||
void ixl_init_filters(struct ixl_vsi *);
|
||||
void ixl_add_hw_filters(struct ixl_vsi *, int, int);
|
||||
void ixl_del_hw_filters(struct ixl_vsi *, int);
|
||||
void ixl_del_default_hw_filters(struct ixl_vsi *);
|
||||
struct ixl_mac_filter *
|
||||
ixl_find_filter(struct ixl_vsi *, const u8 *, s16);
|
||||
void ixl_add_mc_filter(struct ixl_vsi *, u8 *);
|
||||
@@ -348,16 +373,24 @@ void ixl_vsi_reset_stats(struct ixl_vsi *);
|
||||
int ixl_vsi_setup_queues(struct ixl_vsi *vsi);
|
||||
void ixl_vsi_free_queues(struct ixl_vsi *vsi);
|
||||
|
||||
bool ixl_fw_recovery_mode(struct ixl_pf *);
|
||||
/*
|
||||
* I2C Function prototypes
|
||||
*/
|
||||
int ixl_find_i2c_interface(struct ixl_pf *);
|
||||
s32 ixl_read_i2c_byte(struct ixl_pf *pf, u8 byte_offset,
|
||||
s32 ixl_read_i2c_byte_bb(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data);
|
||||
s32 ixl_write_i2c_byte(struct ixl_pf *pf, u8 byte_offset,
|
||||
s32 ixl_write_i2c_byte_bb(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data);
|
||||
s32 ixl_read_i2c_byte_reg(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data);
|
||||
s32 ixl_write_i2c_byte_reg(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data);
|
||||
s32 ixl_read_i2c_byte_aq(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data);
|
||||
s32 ixl_write_i2c_byte_aq(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data);
|
||||
|
||||
int ixl_get_fw_lldp_status(struct ixl_pf *pf);
|
||||
int ixl_attach_get_link_status(struct ixl_pf *);
|
||||
|
||||
#endif /* _IXL_PF_H_ */
|
||||
+150
-12
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -46,9 +46,9 @@
|
||||
#define IXL_I2C_CLOCK_STRETCHING_TIMEOUT 500
|
||||
|
||||
#define IXL_I2C_REG(_hw) \
|
||||
I40E_GLGEN_I2CPARAMS(((struct i40e_osdep *)(_hw)->back)->i2c_intfc_num)
|
||||
|
||||
I40E_GLGEN_I2CPARAMS(_hw->func_caps.mdio_port_num)
|
||||
|
||||
/* I2C bit-banging functions */
|
||||
static s32 ixl_set_i2c_data(struct ixl_pf *pf, u32 *i2cctl, bool data);
|
||||
static bool ixl_get_i2c_data(struct ixl_pf *pf, u32 *i2cctl);
|
||||
static void ixl_raise_i2c_clk(struct ixl_pf *pf, u32 *i2cctl);
|
||||
@@ -62,6 +62,8 @@ static void ixl_i2c_bus_clear(struct ixl_pf *pf);
|
||||
static void ixl_i2c_start(struct ixl_pf *pf);
|
||||
static void ixl_i2c_stop(struct ixl_pf *pf);
|
||||
|
||||
static s32 ixl_wait_for_i2c_completion(struct i40e_hw *hw, u8 portnum);
|
||||
|
||||
/**
|
||||
* ixl_i2c_bus_clear - Clears the I2C bus
|
||||
* @hw: pointer to hardware structure
|
||||
@@ -449,10 +451,10 @@ ixl_i2c_start(struct ixl_pf *pf)
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_read_i2c_byte - Reads 8 bit word over I2C
|
||||
* ixl_read_i2c_byte_bb - Reads 8 bit word over I2C
|
||||
**/
|
||||
s32
|
||||
ixl_read_i2c_byte(struct ixl_pf *pf, u8 byte_offset,
|
||||
ixl_read_i2c_byte_bb(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
@@ -523,9 +525,9 @@ fail:
|
||||
i40e_msec_delay(100);
|
||||
retry++;
|
||||
if (retry < max_retry)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read error - Retrying.\n");
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read error - Retrying\n");
|
||||
else
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read error.\n");
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read error\n");
|
||||
|
||||
} while (retry < max_retry);
|
||||
done:
|
||||
@@ -538,10 +540,10 @@ done:
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_write_i2c_byte - Writes 8 bit word over I2C
|
||||
* ixl_write_i2c_byte_bb - Writes 8 bit word over I2C
|
||||
**/
|
||||
s32
|
||||
ixl_write_i2c_byte(struct ixl_pf *pf, u8 byte_offset,
|
||||
ixl_write_i2c_byte_bb(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
@@ -589,9 +591,9 @@ fail:
|
||||
i40e_msec_delay(100);
|
||||
retry++;
|
||||
if (retry < max_retry)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write error - Retrying.\n");
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write error - Retrying\n");
|
||||
else
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write error.\n");
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write error\n");
|
||||
} while (retry < max_retry);
|
||||
|
||||
write_byte_out:
|
||||
@@ -603,3 +605,139 @@ write_byte_out:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_read_i2c_byte_reg - Reads 8 bit word over I2C using a hardware register
|
||||
**/
|
||||
s32
|
||||
ixl_read_i2c_byte_reg(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
u32 reg = 0;
|
||||
s32 status;
|
||||
*data = 0;
|
||||
|
||||
reg |= (byte_offset << I40E_GLGEN_I2CCMD_REGADD_SHIFT);
|
||||
reg |= (((dev_addr >> 1) & 0x7) << I40E_GLGEN_I2CCMD_PHYADD_SHIFT);
|
||||
reg |= I40E_GLGEN_I2CCMD_OP_MASK;
|
||||
wr32(hw, I40E_GLGEN_I2CCMD(hw->func_caps.mdio_port_num), reg);
|
||||
|
||||
status = ixl_wait_for_i2c_completion(hw, hw->func_caps.mdio_port_num);
|
||||
|
||||
/* Get data from I2C register */
|
||||
reg = rd32(hw, I40E_GLGEN_I2CCMD(hw->func_caps.mdio_port_num));
|
||||
|
||||
/* Retrieve data readed from EEPROM */
|
||||
*data = (u8)(reg & 0xff);
|
||||
|
||||
if (status)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read error\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_write_i2c_byte_reg - Writes 8 bit word over I2C using a hardware register
|
||||
**/
|
||||
s32
|
||||
ixl_write_i2c_byte_reg(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
s32 status = I40E_SUCCESS;
|
||||
u32 reg = 0;
|
||||
u8 upperbyte = 0;
|
||||
u16 datai2c = 0;
|
||||
|
||||
status = ixl_read_i2c_byte_reg(pf, byte_offset + 1, dev_addr, &upperbyte);
|
||||
datai2c = ((u16)upperbyte << 8) | (u16)data;
|
||||
reg = rd32(hw, I40E_GLGEN_I2CCMD(hw->func_caps.mdio_port_num));
|
||||
|
||||
/* Form write command */
|
||||
reg &= ~I40E_GLGEN_I2CCMD_PHYADD_MASK;
|
||||
reg |= (((dev_addr >> 1) & 0x7) << I40E_GLGEN_I2CCMD_PHYADD_SHIFT);
|
||||
reg &= ~I40E_GLGEN_I2CCMD_REGADD_MASK;
|
||||
reg |= (byte_offset << I40E_GLGEN_I2CCMD_REGADD_SHIFT);
|
||||
reg &= ~I40E_GLGEN_I2CCMD_DATA_MASK;
|
||||
reg |= (datai2c << I40E_GLGEN_I2CCMD_DATA_SHIFT);
|
||||
reg &= ~I40E_GLGEN_I2CCMD_OP_MASK;
|
||||
|
||||
/* Write command to registers controling I2C - data and address. */
|
||||
wr32(hw, I40E_GLGEN_I2CCMD(hw->func_caps.mdio_port_num), reg);
|
||||
|
||||
status = ixl_wait_for_i2c_completion(hw, hw->func_caps.mdio_port_num);
|
||||
|
||||
if (status)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write error\n");
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_wait_for_i2c_completion
|
||||
**/
|
||||
static s32
|
||||
ixl_wait_for_i2c_completion(struct i40e_hw *hw, u8 portnum)
|
||||
{
|
||||
s32 status = 0;
|
||||
u32 timeout = 100;
|
||||
u32 reg;
|
||||
do {
|
||||
reg = rd32(hw, I40E_GLGEN_I2CCMD(portnum));
|
||||
if ((reg & I40E_GLGEN_I2CCMD_R_MASK) != 0)
|
||||
break;
|
||||
i40e_usec_delay(10);
|
||||
} while (timeout-- > 0);
|
||||
|
||||
if (timeout == 0)
|
||||
return I40E_ERR_TIMEOUT;
|
||||
else
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_read_i2c_byte_aq - Reads 8 bit word over I2C using a hardware register
|
||||
**/
|
||||
s32
|
||||
ixl_read_i2c_byte_aq(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 *data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
s32 status = I40E_SUCCESS;
|
||||
u32 reg;
|
||||
|
||||
status = i40e_aq_get_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE,
|
||||
dev_addr, false,
|
||||
byte_offset,
|
||||
®, NULL);
|
||||
|
||||
if (status)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte read status %s, error %s\n",
|
||||
i40e_stat_str(hw, status), i40e_aq_str(hw, hw->aq.asq_last_status));
|
||||
else
|
||||
*data = (u8)reg;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_write_i2c_byte_aq - Writes 8 bit word over I2C using a hardware register
|
||||
**/
|
||||
s32
|
||||
ixl_write_i2c_byte_aq(struct ixl_pf *pf, u8 byte_offset,
|
||||
u8 dev_addr, u8 data)
|
||||
{
|
||||
struct i40e_hw *hw = &pf->hw;
|
||||
s32 status = I40E_SUCCESS;
|
||||
|
||||
status = i40e_aq_set_phy_register(hw,
|
||||
I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE,
|
||||
dev_addr, false,
|
||||
byte_offset,
|
||||
data, NULL);
|
||||
|
||||
if (status)
|
||||
ixl_dbg(pf, IXL_DBG_I2C, "I2C byte write status %s, error %s\n",
|
||||
i40e_stat_str(hw, status), i40e_aq_str(hw, hw->aq.asq_last_status));
|
||||
|
||||
return status;
|
||||
}
|
||||
+18
-15
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -197,15 +197,16 @@ ixl_vf_setup_vsi(struct ixl_pf *pf, struct ixl_vf *vf)
|
||||
int error;
|
||||
|
||||
hw = &pf->hw;
|
||||
vf->vsi.flags |= IXL_FLAGS_IS_VF;
|
||||
|
||||
error = ixl_vf_alloc_vsi(pf, vf);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
|
||||
vf->vsi.hw_filters_add = 0;
|
||||
vf->vsi.hw_filters_del = 0;
|
||||
ixl_add_filter(&vf->vsi, ixl_bcast_addr, IXL_VLAN_ANY);
|
||||
ixl_reconfigure_filters(&vf->vsi);
|
||||
vf->vsi.dev = pf->dev;
|
||||
vf->vsi.num_hw_filters = 0;
|
||||
|
||||
ixl_init_filters(&vf->vsi);
|
||||
|
||||
return (0);
|
||||
}
|
||||
@@ -1722,7 +1723,7 @@ ixl_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *params)
|
||||
struct i40e_hw *hw;
|
||||
struct ixl_vsi *pf_vsi;
|
||||
enum i40e_status_code ret;
|
||||
int i, error;
|
||||
int error;
|
||||
|
||||
pf = device_get_softc(dev);
|
||||
hw = &pf->hw;
|
||||
@@ -1737,9 +1738,6 @@ ixl_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *params)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_vfs; i++)
|
||||
sysctl_ctx_init(&pf->vfs[i].ctx);
|
||||
|
||||
ret = i40e_aq_add_veb(hw, pf_vsi->uplink_seid, pf_vsi->seid,
|
||||
1, FALSE, &pf->veb_seid, FALSE, NULL);
|
||||
if (ret != I40E_SUCCESS) {
|
||||
@@ -1749,6 +1747,13 @@ ixl_iov_init(device_t dev, uint16_t num_vfs, const nvlist_t *params)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/*
|
||||
* Adding a VEB brings back the default MAC filter(s). Remove them,
|
||||
* and let the driver add the proper filters back.
|
||||
*/
|
||||
ixl_del_default_hw_filters(pf_vsi);
|
||||
ixl_reconfigure_filters(pf_vsi);
|
||||
|
||||
pf->num_vfs = num_vfs;
|
||||
IXL_PF_UNLOCK(pf);
|
||||
return (0);
|
||||
@@ -1800,7 +1805,7 @@ ixl_iov_uninit(device_t dev)
|
||||
|
||||
/* Do this after the unlock as sysctl_ctx_free might sleep. */
|
||||
for (i = 0; i < num_vfs; i++)
|
||||
sysctl_ctx_free(&vfs[i].ctx);
|
||||
sysctl_ctx_free(&vfs[i].vsi.sysctl_ctx);
|
||||
free(vfs, M_IXL);
|
||||
}
|
||||
|
||||
@@ -1838,7 +1843,7 @@ ixl_vf_reserve_queues(struct ixl_pf *pf, struct ixl_vf *vf, int num_queues)
|
||||
int
|
||||
ixl_add_vf(device_t dev, uint16_t vfnum, const nvlist_t *params)
|
||||
{
|
||||
char sysctl_name[QUEUE_NAME_LEN];
|
||||
char sysctl_name[IXL_QUEUE_NAME_LEN];
|
||||
struct ixl_pf *pf;
|
||||
struct ixl_vf *vf;
|
||||
const void *mac;
|
||||
@@ -1851,10 +1856,8 @@ ixl_add_vf(device_t dev, uint16_t vfnum, const nvlist_t *params)
|
||||
|
||||
IXL_PF_LOCK(pf);
|
||||
vf->vf_num = vfnum;
|
||||
|
||||
vf->vsi.back = pf;
|
||||
vf->vf_flags = VF_FLAG_ENABLED;
|
||||
SLIST_INIT(&vf->vsi.ftl);
|
||||
|
||||
/* Reserve queue allocation from PF */
|
||||
vf_num_queues = nvlist_get_number(params, "num-queues");
|
||||
@@ -1892,7 +1895,7 @@ out:
|
||||
IXL_PF_UNLOCK(pf);
|
||||
if (error == 0) {
|
||||
snprintf(sysctl_name, sizeof(sysctl_name), "vf%d", vfnum);
|
||||
ixl_add_vsi_sysctls(pf, &vf->vsi, &vf->ctx, sysctl_name);
|
||||
ixl_vsi_add_sysctls(&vf->vsi, sysctl_name, false);
|
||||
}
|
||||
|
||||
return (error);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+718
-510
File diff suppressed because it is too large.
Load diff
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -83,8 +83,8 @@ ixl_pf_qmgr_alloc_contiguous(struct ixl_pf_qmgr *qmgr, u16 num, struct ixl_pf_qt
|
||||
qtag->qmgr = qmgr;
|
||||
qtag->type = IXL_PF_QALLOC_CONTIGUOUS;
|
||||
qtag->qidx[0] = block_start;
|
||||
qtag->num_allocated = num;
|
||||
qtag->num_active = alloc_size;
|
||||
qtag->num_allocated = alloc_size;
|
||||
qtag->num_active = num;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+206
-13
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -67,9 +67,16 @@ static inline bool ixl_tso_detect_sparse(struct mbuf *mp);
|
||||
static inline u32 ixl_get_tx_head(struct ixl_queue *que);
|
||||
|
||||
#ifdef DEV_NETMAP
|
||||
#include <dev/netmap/if_ixl_netmap.h>
|
||||
#include <net/netmap.h>
|
||||
#include <sys/selinfo.h>
|
||||
#include <dev/netmap/netmap_kern.h>
|
||||
#endif /* DEV_NETMAP */
|
||||
|
||||
#ifdef IXL_DEBUG
|
||||
static int ixl_sysctl_qtx_tail_handler(SYSCTL_HANDLER_ARGS);
|
||||
static int ixl_sysctl_qrx_tail_handler(SYSCTL_HANDLER_ARGS);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* @key key is saved into this parameter
|
||||
*/
|
||||
@@ -100,14 +107,18 @@ i40e_vc_stat_str(struct i40e_hw *hw, enum virtchnl_status_code stat_err)
|
||||
return "OK";
|
||||
case VIRTCHNL_ERR_PARAM:
|
||||
return "VIRTCHNL_ERR_PARAM";
|
||||
case VIRTCHNL_STATUS_ERR_NO_MEMORY:
|
||||
return "VIRTCHNL_STATUS_ERR_NO_MEMORY";
|
||||
case VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH:
|
||||
return "VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH";
|
||||
case VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR:
|
||||
return "VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR";
|
||||
case VIRTCHNL_STATUS_ERR_INVALID_VF_ID:
|
||||
return "VIRTCHNL_STATUS_ERR_INVALID_VF_ID";
|
||||
case VIRTCHNL_STATUS_NOT_SUPPORTED:
|
||||
return "VIRTCHNL_STATUS_NOT_SUPPORTED";
|
||||
case VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR:
|
||||
return "VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR";
|
||||
case VIRTCHNL_STATUS_ERR_NOT_SUPPORTED:
|
||||
return "VIRTCHNL_STATUS_ERR_NOT_SUPPORTED";
|
||||
}
|
||||
|
||||
snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err);
|
||||
@@ -2072,25 +2083,207 @@ ixl_vsi_setup_rings_size(struct ixl_vsi * vsi, int tx_ring_size, int rx_ring_siz
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ixl_vsi_add_queues_stats(struct ixl_vsi * vsi)
|
||||
{
|
||||
char queue_namebuf[IXL_QUEUE_NAME_LEN];
|
||||
struct sysctl_oid_list *vsi_list, *queue_list;
|
||||
struct ixl_queue *queues = vsi->queues;
|
||||
struct sysctl_oid *queue_node;
|
||||
struct sysctl_ctx_list *ctx;
|
||||
struct tx_ring *txr;
|
||||
struct rx_ring *rxr;
|
||||
|
||||
vsi_list = SYSCTL_CHILDREN(vsi->vsi_node);
|
||||
ctx = &vsi->sysctl_ctx;
|
||||
|
||||
/* Queue statistics */
|
||||
for (int q = 0; q < vsi->num_queues; q++) {
|
||||
snprintf(queue_namebuf, IXL_QUEUE_NAME_LEN, "que%d", q);
|
||||
queue_node = SYSCTL_ADD_NODE(ctx, vsi_list,
|
||||
OID_AUTO, queue_namebuf, CTLFLAG_RD, NULL, "Queue #");
|
||||
queue_list = SYSCTL_CHILDREN(queue_node);
|
||||
|
||||
txr = &(queues[q].txr);
|
||||
rxr = &(queues[q].rxr);
|
||||
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "mbuf_defrag_failed",
|
||||
CTLFLAG_RD, &(queues[q].mbuf_defrag_failed),
|
||||
"m_defrag() failed");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "irqs",
|
||||
CTLFLAG_RD, &(queues[q].irqs),
|
||||
"irqs on this queue");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tso_tx",
|
||||
CTLFLAG_RD, &(queues[q].tso),
|
||||
"TSO");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tx_dmamap_failed",
|
||||
CTLFLAG_RD, &(queues[q].tx_dmamap_failed),
|
||||
"Driver tx dma failure in xmit");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "mss_too_small",
|
||||
CTLFLAG_RD, &(queues[q].mss_too_small),
|
||||
"TSO sends with an MSS less than 64");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "no_desc_avail",
|
||||
CTLFLAG_RD, &(txr->no_desc),
|
||||
"Queue No Descriptor Available");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tx_packets",
|
||||
CTLFLAG_RD, &(txr->total_packets),
|
||||
"Queue Packets Transmitted");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "tx_bytes",
|
||||
CTLFLAG_RD, &(txr->tx_bytes),
|
||||
"Queue Bytes Transmitted");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_packets",
|
||||
CTLFLAG_RD, &(rxr->rx_packets),
|
||||
"Queue Packets Received");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_bytes",
|
||||
CTLFLAG_RD, &(rxr->rx_bytes),
|
||||
"Queue Bytes Received");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_desc_err",
|
||||
CTLFLAG_RD, &(rxr->desc_errs),
|
||||
"Queue Rx Descriptor Errors");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "rx_itr",
|
||||
CTLFLAG_RD, &(rxr->itr), 0,
|
||||
"Queue Rx ITR Interval");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "tx_itr",
|
||||
CTLFLAG_RD, &(txr->itr), 0,
|
||||
"Queue Tx ITR Interval");
|
||||
#ifdef IXL_DEBUG
|
||||
SYSCTL_ADD_INT(ctx, queue_list, OID_AUTO, "txr_watchdog",
|
||||
CTLFLAG_RD, &(txr->watchdog_timer), 0,
|
||||
"Ticks before watchdog timer causes interface reinit");
|
||||
SYSCTL_ADD_U16(ctx, queue_list, OID_AUTO, "tx_next_avail",
|
||||
CTLFLAG_RD, &(txr->next_avail), 0,
|
||||
"Next TX descriptor to be used");
|
||||
SYSCTL_ADD_U16(ctx, queue_list, OID_AUTO, "tx_next_to_clean",
|
||||
CTLFLAG_RD, &(txr->next_to_clean), 0,
|
||||
"Next TX descriptor to be cleaned");
|
||||
SYSCTL_ADD_UQUAD(ctx, queue_list, OID_AUTO, "rx_not_done",
|
||||
CTLFLAG_RD, &(rxr->not_done),
|
||||
"Queue Rx Descriptors not Done");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "rx_next_refresh",
|
||||
CTLFLAG_RD, &(rxr->next_refresh), 0,
|
||||
"Queue Rx Descriptors not Done");
|
||||
SYSCTL_ADD_UINT(ctx, queue_list, OID_AUTO, "rx_next_check",
|
||||
CTLFLAG_RD, &(rxr->next_check), 0,
|
||||
"Queue Rx Descriptors not Done");
|
||||
SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "qrx_tail",
|
||||
CTLTYPE_UINT | CTLFLAG_RD, &queues[q],
|
||||
sizeof(struct ixl_queue),
|
||||
ixl_sysctl_qrx_tail_handler, "IU",
|
||||
"Queue Receive Descriptor Tail");
|
||||
SYSCTL_ADD_PROC(ctx, queue_list, OID_AUTO, "qtx_tail",
|
||||
CTLTYPE_UINT | CTLFLAG_RD, &queues[q],
|
||||
sizeof(struct ixl_queue),
|
||||
ixl_sysctl_qtx_tail_handler, "IU",
|
||||
"Queue Transmit Descriptor Tail");
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
ixl_add_sysctls_eth_stats(struct sysctl_ctx_list *ctx,
|
||||
struct sysctl_oid_list *child,
|
||||
struct i40e_eth_stats *eth_stats)
|
||||
{
|
||||
struct ixl_sysctl_info ctls[] =
|
||||
{
|
||||
{ð_stats->rx_bytes, "good_octets_rcvd", "Good Octets Received"},
|
||||
{ð_stats->rx_unicast, "ucast_pkts_rcvd",
|
||||
"Unicast Packets Received"},
|
||||
{ð_stats->rx_multicast, "mcast_pkts_rcvd",
|
||||
"Multicast Packets Received"},
|
||||
{ð_stats->rx_broadcast, "bcast_pkts_rcvd",
|
||||
"Broadcast Packets Received"},
|
||||
{ð_stats->rx_discards, "rx_discards", "Discarded RX packets"},
|
||||
{ð_stats->rx_unknown_protocol, "rx_unknown_proto",
|
||||
"RX unknown protocol packets"},
|
||||
{ð_stats->tx_bytes, "good_octets_txd", "Good Octets Transmitted"},
|
||||
{ð_stats->tx_unicast, "ucast_pkts_txd", "Unicast Packets Transmitted"},
|
||||
{ð_stats->tx_multicast, "mcast_pkts_txd",
|
||||
"Multicast Packets Transmitted"},
|
||||
{ð_stats->tx_broadcast, "bcast_pkts_txd",
|
||||
"Broadcast Packets Transmitted"},
|
||||
{ð_stats->tx_errors, "tx_errors", "TX packet errors"},
|
||||
// end
|
||||
{0,0,0}
|
||||
};
|
||||
|
||||
struct ixl_sysctl_info *entry = ctls;
|
||||
|
||||
while (entry->stat != 0)
|
||||
{
|
||||
SYSCTL_ADD_UQUAD(ctx, child, OID_AUTO, entry->name,
|
||||
CTLFLAG_RD, entry->stat,
|
||||
entry->description);
|
||||
entry++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef IXL_DEBUG
|
||||
/**
|
||||
* ixl_sysctl_qtx_tail_handler
|
||||
* Retrieves I40E_QTX_TAIL value from hardware
|
||||
* for a sysctl.
|
||||
*/
|
||||
static int
|
||||
ixl_sysctl_qtx_tail_handler(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct ixl_queue *que;
|
||||
int error;
|
||||
u32 val;
|
||||
|
||||
que = ((struct ixl_queue *)oidp->oid_arg1);
|
||||
if (!que) return 0;
|
||||
|
||||
val = rd32(que->vsi->hw, que->txr.tail);
|
||||
error = sysctl_handle_int(oidp, &val, 0, req);
|
||||
if (error || !req->newptr)
|
||||
return error;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/**
|
||||
* ixl_sysctl_qrx_tail_handler
|
||||
* Retrieves I40E_QRX_TAIL value from hardware
|
||||
* for a sysctl.
|
||||
*/
|
||||
static int
|
||||
ixl_sysctl_qrx_tail_handler(SYSCTL_HANDLER_ARGS)
|
||||
{
|
||||
struct ixl_queue *que;
|
||||
int error;
|
||||
u32 val;
|
||||
|
||||
que = ((struct ixl_queue *)oidp->oid_arg1);
|
||||
if (!que) return 0;
|
||||
|
||||
val = rd32(que->vsi->hw, que->rxr.tail);
|
||||
error = sysctl_handle_int(oidp, &val, 0, req);
|
||||
if (error || !req->newptr)
|
||||
return error;
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ixl_queue_sw_irq(struct ixl_vsi *vsi, int qidx)
|
||||
{
|
||||
struct i40e_hw *hw = vsi->hw;
|
||||
u32 reg, mask;
|
||||
|
||||
if ((vsi->flags & IXL_FLAGS_IS_VF) != 0) {
|
||||
if (IXL_VSI_IS_PF(vsi)) {
|
||||
mask = (I40E_PFINT_DYN_CTLN_INTENA_MASK |
|
||||
I40E_PFINT_DYN_CTLN_SWINT_TRIG_MASK |
|
||||
I40E_PFINT_DYN_CTLN_ITR_INDX_MASK);
|
||||
|
||||
reg = ((vsi->flags & IXL_FLAGS_USES_MSIX) != 0) ?
|
||||
I40E_PFINT_DYN_CTLN(qidx) : I40E_PFINT_DYN_CTL0;
|
||||
} else {
|
||||
mask = (I40E_VFINT_DYN_CTLN1_INTENA_MASK |
|
||||
I40E_VFINT_DYN_CTLN1_SWINT_TRIG_MASK |
|
||||
I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK);
|
||||
|
||||
reg = I40E_VFINT_DYN_CTLN1(qidx);
|
||||
} else {
|
||||
mask = (I40E_PFINT_DYN_CTLN_INTENA_MASK |
|
||||
I40E_PFINT_DYN_CTLN_SWINT_TRIG_MASK |
|
||||
I40E_PFINT_DYN_CTLN_ITR_INDX_MASK);
|
||||
|
||||
reg = ((vsi->flags & IXL_FLAGS_USES_MSIX) != 0) ?
|
||||
I40E_PFINT_DYN_CTLN(qidx) : I40E_PFINT_DYN_CTL0;
|
||||
}
|
||||
|
||||
wr32(hw, reg, mask);
|
||||
|
||||
+2
-3
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -141,7 +141,6 @@ struct ixlv_sc {
|
||||
|
||||
struct mtx mtx;
|
||||
|
||||
u32 qbase;
|
||||
u32 admvec;
|
||||
struct timeout_task timeout;
|
||||
struct task aq_irq;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
|
||||
+243
-34
@@ -1,6 +1,6 @@
|
||||
/******************************************************************************
|
||||
|
||||
Copyright (c) 2013-2017, Intel Corporation
|
||||
Copyright (c) 2013-2019, Intel Corporation
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
@@ -32,6 +32,7 @@
|
||||
******************************************************************************/
|
||||
/*$FreeBSD$*/
|
||||
|
||||
|
||||
#ifndef _VIRTCHNL_H_
|
||||
#define _VIRTCHNL_H_
|
||||
|
||||
@@ -70,19 +71,27 @@
|
||||
/* Error Codes */
|
||||
enum virtchnl_status_code {
|
||||
VIRTCHNL_STATUS_SUCCESS = 0,
|
||||
VIRTCHNL_ERR_PARAM = -5,
|
||||
VIRTCHNL_STATUS_ERR_PARAM = -5,
|
||||
VIRTCHNL_STATUS_ERR_NO_MEMORY = -18,
|
||||
VIRTCHNL_STATUS_ERR_OPCODE_MISMATCH = -38,
|
||||
VIRTCHNL_STATUS_ERR_CQP_COMPL_ERROR = -39,
|
||||
VIRTCHNL_STATUS_ERR_INVALID_VF_ID = -40,
|
||||
VIRTCHNL_STATUS_NOT_SUPPORTED = -64,
|
||||
VIRTCHNL_STATUS_ERR_ADMIN_QUEUE_ERROR = -53,
|
||||
VIRTCHNL_STATUS_ERR_NOT_SUPPORTED = -64,
|
||||
};
|
||||
|
||||
/* Backward compatibility */
|
||||
#define VIRTCHNL_ERR_PARAM VIRTCHNL_STATUS_ERR_PARAM
|
||||
#define VIRTCHNL_STATUS_NOT_SUPPORTED VIRTCHNL_STATUS_ERR_NOT_SUPPORTED
|
||||
|
||||
#define VIRTCHNL_LINK_SPEED_2_5GB_SHIFT 0x0
|
||||
#define VIRTCHNL_LINK_SPEED_100MB_SHIFT 0x1
|
||||
#define VIRTCHNL_LINK_SPEED_1000MB_SHIFT 0x2
|
||||
#define VIRTCHNL_LINK_SPEED_10GB_SHIFT 0x3
|
||||
#define VIRTCHNL_LINK_SPEED_40GB_SHIFT 0x4
|
||||
#define VIRTCHNL_LINK_SPEED_20GB_SHIFT 0x5
|
||||
#define VIRTCHNL_LINK_SPEED_25GB_SHIFT 0x6
|
||||
#define VIRTCHNL_LINK_SPEED_5GB_SHIFT 0x7
|
||||
|
||||
enum virtchnl_link_speed {
|
||||
VIRTCHNL_LINK_SPEED_UNKNOWN = 0,
|
||||
@@ -92,6 +101,8 @@ enum virtchnl_link_speed {
|
||||
VIRTCHNL_LINK_SPEED_40GB = BIT(VIRTCHNL_LINK_SPEED_40GB_SHIFT),
|
||||
VIRTCHNL_LINK_SPEED_20GB = BIT(VIRTCHNL_LINK_SPEED_20GB_SHIFT),
|
||||
VIRTCHNL_LINK_SPEED_25GB = BIT(VIRTCHNL_LINK_SPEED_25GB_SHIFT),
|
||||
VIRTCHNL_LINK_SPEED_2_5GB = BIT(VIRTCHNL_LINK_SPEED_2_5GB_SHIFT),
|
||||
VIRTCHNL_LINK_SPEED_5GB = BIT(VIRTCHNL_LINK_SPEED_5GB_SHIFT),
|
||||
};
|
||||
|
||||
/* for hsplit_0 field of Rx HMC context */
|
||||
@@ -135,6 +146,7 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_GET_STATS = 15,
|
||||
VIRTCHNL_OP_RSVD = 16,
|
||||
VIRTCHNL_OP_EVENT = 17, /* must ALWAYS be 17 */
|
||||
/* opcode 19 is reserved */
|
||||
VIRTCHNL_OP_IWARP = 20, /* advanced opcode */
|
||||
VIRTCHNL_OP_CONFIG_IWARP_IRQ_MAP = 21, /* advanced opcode */
|
||||
VIRTCHNL_OP_RELEASE_IWARP_IRQ_MAP = 22, /* advanced opcode */
|
||||
@@ -145,16 +157,21 @@ enum virtchnl_ops {
|
||||
VIRTCHNL_OP_ENABLE_VLAN_STRIPPING = 27,
|
||||
VIRTCHNL_OP_DISABLE_VLAN_STRIPPING = 28,
|
||||
VIRTCHNL_OP_REQUEST_QUEUES = 29,
|
||||
|
||||
VIRTCHNL_OP_ENABLE_CHANNELS = 30,
|
||||
VIRTCHNL_OP_DISABLE_CHANNELS = 31,
|
||||
VIRTCHNL_OP_ADD_CLOUD_FILTER = 32,
|
||||
VIRTCHNL_OP_DEL_CLOUD_FILTER = 33,
|
||||
};
|
||||
|
||||
/* This macro is used to generate a compilation error if a structure
|
||||
/* These macros are used to generate compilation errors if a structure/union
|
||||
* is not exactly the correct length. It gives a divide by zero error if the
|
||||
* structure is not of the correct size, otherwise it creates an enum that is
|
||||
* never used.
|
||||
* structure/union is not of the correct size, otherwise it creates an enum
|
||||
* that is never used.
|
||||
*/
|
||||
#define VIRTCHNL_CHECK_STRUCT_LEN(n, X) enum virtchnl_static_assert_enum_##X \
|
||||
{virtchnl_static_assert_##X = (n) / ((sizeof(struct X) == (n)) ? 1 : 0)}
|
||||
{ virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) }
|
||||
#define VIRTCHNL_CHECK_UNION_LEN(n, X) enum virtchnl_static_asset_enum_##X \
|
||||
{ virtchnl_static_assert_##X = (n)/((sizeof(union X) == (n)) ? 1 : 0) }
|
||||
|
||||
/* Virtual channel message descriptor. This overlays the admin queue
|
||||
* descriptor. All other data is passed in external buffers.
|
||||
@@ -169,7 +186,7 @@ struct virtchnl_msg {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(20, virtchnl_msg);
|
||||
|
||||
/* Message descriptions and data structures.*/
|
||||
/* Message descriptions and data structures. */
|
||||
|
||||
/* VIRTCHNL_OP_VERSION
|
||||
* VF posts its version number to the PF. PF responds with its version number
|
||||
@@ -247,6 +264,7 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
|
||||
#define VIRTCHNL_VF_OFFLOAD_RSS_REG 0x00000010
|
||||
#define VIRTCHNL_VF_OFFLOAD_WB_ON_ITR 0x00000020
|
||||
#define VIRTCHNL_VF_OFFLOAD_REQ_QUEUES 0x00000040
|
||||
#define VIRTCHNL_VF_OFFLOAD_CRC 0x00000080
|
||||
#define VIRTCHNL_VF_OFFLOAD_VLAN 0x00010000
|
||||
#define VIRTCHNL_VF_OFFLOAD_RX_POLLING 0x00020000
|
||||
#define VIRTCHNL_VF_OFFLOAD_RSS_PCTYPE_V2 0x00040000
|
||||
@@ -254,7 +272,9 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_vsi_resource);
|
||||
#define VIRTCHNL_VF_OFFLOAD_ENCAP 0X00100000
|
||||
#define VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM 0X00200000
|
||||
#define VIRTCHNL_VF_OFFLOAD_RX_ENCAP_CSUM 0X00400000
|
||||
|
||||
#define VIRTCHNL_VF_OFFLOAD_ADQ 0X00800000
|
||||
/* Define below the capability flags that are not offloads */
|
||||
#define VIRTCHNL_VF_CAP_ADV_LINK_SPEED 0x00000080
|
||||
#define VF_BASE_MODE_OFFLOADS (VIRTCHNL_VF_OFFLOAD_L2 | \
|
||||
VIRTCHNL_VF_OFFLOAD_VLAN | \
|
||||
VIRTCHNL_VF_OFFLOAD_RSS_PF)
|
||||
@@ -295,7 +315,13 @@ VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_txq_info);
|
||||
/* VIRTCHNL_OP_CONFIG_RX_QUEUE
|
||||
* VF sends this message to set up parameters for one RX queue.
|
||||
* External data buffer contains one instance of virtchnl_rxq_info.
|
||||
* PF configures requested queue and returns a status code.
|
||||
* PF configures requested queue and returns a status code. The
|
||||
* crc_disable flag disables CRC stripping on the VF. Setting
|
||||
* the crc_disable flag to 1 will disable CRC stripping for each
|
||||
* queue in the VF where the flag is set. The VIRTCHNL_VF_OFFLOAD_CRC
|
||||
* offload must have been set prior to sending this info or the PF
|
||||
* will ignore the request. This flag should be set the same for
|
||||
* all of the queues for a VF.
|
||||
*/
|
||||
|
||||
/* Rx queue config info */
|
||||
@@ -307,7 +333,8 @@ struct virtchnl_rxq_info {
|
||||
u16 splithdr_enabled; /* deprecated with AVF 1.0 */
|
||||
u32 databuffer_size;
|
||||
u32 max_pkt_size;
|
||||
u32 pad1;
|
||||
u8 crc_disable;
|
||||
u8 pad1[3];
|
||||
u64 dma_ring_addr;
|
||||
enum virtchnl_rx_hsplit rx_split_pos; /* deprecated with AVF 1.0 */
|
||||
u32 pad2;
|
||||
@@ -316,11 +343,14 @@ struct virtchnl_rxq_info {
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(40, virtchnl_rxq_info);
|
||||
|
||||
/* VIRTCHNL_OP_CONFIG_VSI_QUEUES
|
||||
* VF sends this message to set parameters for all active TX and RX queues
|
||||
* VF sends this message to set parameters for active TX and RX queues
|
||||
* associated with the specified VSI.
|
||||
* PF configures queues and returns status.
|
||||
* If the number of queues specified is greater than the number of queues
|
||||
* associated with the VSI, an error is returned and no queues are configured.
|
||||
* NOTE: The VF is not required to configure all queues in a single request.
|
||||
* It may send multiple messages. PF drivers must correctly handle all VF
|
||||
* requests.
|
||||
*/
|
||||
struct virtchnl_queue_pair_info {
|
||||
/* NOTE: vsi_id and queue_id should be identical for both queues. */
|
||||
@@ -358,8 +388,13 @@ struct virtchnl_vf_res_request {
|
||||
* VF uses this message to map vectors to queues.
|
||||
* The rxq_map and txq_map fields are bitmaps used to indicate which queues
|
||||
* are to be associated with the specified vector.
|
||||
* The "other" causes are always mapped to vector 0.
|
||||
* The "other" causes are always mapped to vector 0. The VF may not request
|
||||
* that vector 0 be used for traffic.
|
||||
* PF configures interrupt mapping and returns status.
|
||||
* NOTE: due to hardware requirements, all active queues (both TX and RX)
|
||||
* should be mapped to interrupts, even if the driver intends to operate
|
||||
* only in polling mode. In this case the interrupt may be disabled, but
|
||||
* the ITR timer will still run to trigger writebacks.
|
||||
*/
|
||||
struct virtchnl_vector_map {
|
||||
u16 vsi_id;
|
||||
@@ -386,6 +421,9 @@ VIRTCHNL_CHECK_STRUCT_LEN(14, virtchnl_irq_map_info);
|
||||
* (Currently, we only support 16 queues per VF, but we make the field
|
||||
* u32 to allow for expansion.)
|
||||
* PF performs requested action and returns status.
|
||||
* NOTE: The VF is not required to enable/disable all queues in a single
|
||||
* request. It may send multiple messages.
|
||||
* PF drivers must correctly handle all VF requests.
|
||||
*/
|
||||
struct virtchnl_queue_select {
|
||||
u16 vsi_id;
|
||||
@@ -465,9 +503,24 @@ VIRTCHNL_CHECK_STRUCT_LEN(4, virtchnl_promisc_info);
|
||||
* the virtchnl_queue_select struct to specify the VSI. The queue_id
|
||||
* field is ignored by the PF.
|
||||
*
|
||||
* PF replies with struct eth_stats in an external buffer.
|
||||
* PF replies with struct virtchnl_eth_stats in an external buffer.
|
||||
*/
|
||||
|
||||
struct virtchnl_eth_stats {
|
||||
u64 rx_bytes; /* received bytes */
|
||||
u64 rx_unicast; /* received unicast pkts */
|
||||
u64 rx_multicast; /* received multicast pkts */
|
||||
u64 rx_broadcast; /* received broadcast pkts */
|
||||
u64 rx_discards;
|
||||
u64 rx_unknown_protocol;
|
||||
u64 tx_bytes; /* transmitted bytes */
|
||||
u64 tx_unicast; /* transmitted unicast pkts */
|
||||
u64 tx_multicast; /* transmitted multicast pkts */
|
||||
u64 tx_broadcast; /* transmitted broadcast pkts */
|
||||
u64 tx_discards;
|
||||
u64 tx_errors;
|
||||
};
|
||||
|
||||
/* VIRTCHNL_OP_CONFIG_RSS_KEY
|
||||
* VIRTCHNL_OP_CONFIG_RSS_LUT
|
||||
* VF sends these messages to configure RSS. Only supported if both PF
|
||||
@@ -506,6 +559,81 @@ struct virtchnl_rss_hena {
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(8, virtchnl_rss_hena);
|
||||
|
||||
/* VIRTCHNL_OP_ENABLE_CHANNELS
|
||||
* VIRTCHNL_OP_DISABLE_CHANNELS
|
||||
* VF sends these messages to enable or disable channels based on
|
||||
* the user specified queue count and queue offset for each traffic class.
|
||||
* This struct encompasses all the information that the PF needs from
|
||||
* VF to create a channel.
|
||||
*/
|
||||
struct virtchnl_channel_info {
|
||||
u16 count; /* number of queues in a channel */
|
||||
u16 offset; /* queues in a channel start from 'offset' */
|
||||
u32 pad;
|
||||
u64 max_tx_rate;
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_channel_info);
|
||||
|
||||
struct virtchnl_tc_info {
|
||||
u32 num_tc;
|
||||
u32 pad;
|
||||
struct virtchnl_channel_info list[1];
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(24, virtchnl_tc_info);
|
||||
|
||||
/* VIRTCHNL_ADD_CLOUD_FILTER
|
||||
* VIRTCHNL_DEL_CLOUD_FILTER
|
||||
* VF sends these messages to add or delete a cloud filter based on the
|
||||
* user specified match and action filters. These structures encompass
|
||||
* all the information that the PF needs from the VF to add/delete a
|
||||
* cloud filter.
|
||||
*/
|
||||
|
||||
struct virtchnl_l4_spec {
|
||||
u8 src_mac[ETH_ALEN];
|
||||
u8 dst_mac[ETH_ALEN];
|
||||
__be16 vlan_id;
|
||||
__be16 pad; /* reserved for future use */
|
||||
__be32 src_ip[4];
|
||||
__be32 dst_ip[4];
|
||||
__be16 src_port;
|
||||
__be16 dst_port;
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(52, virtchnl_l4_spec);
|
||||
|
||||
union virtchnl_flow_spec {
|
||||
struct virtchnl_l4_spec tcp_spec;
|
||||
u8 buffer[128]; /* reserved for future use */
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_UNION_LEN(128, virtchnl_flow_spec);
|
||||
|
||||
enum virtchnl_action {
|
||||
/* action types */
|
||||
VIRTCHNL_ACTION_DROP = 0,
|
||||
VIRTCHNL_ACTION_TC_REDIRECT,
|
||||
};
|
||||
|
||||
enum virtchnl_flow_type {
|
||||
/* flow types */
|
||||
VIRTCHNL_TCP_V4_FLOW = 0,
|
||||
VIRTCHNL_TCP_V6_FLOW,
|
||||
};
|
||||
|
||||
struct virtchnl_filter {
|
||||
union virtchnl_flow_spec data;
|
||||
union virtchnl_flow_spec mask;
|
||||
enum virtchnl_flow_type flow_type;
|
||||
enum virtchnl_action action;
|
||||
u32 action_meta;
|
||||
u8 field_flags;
|
||||
};
|
||||
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter);
|
||||
|
||||
/* VIRTCHNL_OP_EVENT
|
||||
* PF sends this message to inform the VF driver of events that may affect it.
|
||||
* No direct response is expected from the VF, though it may generate other
|
||||
@@ -526,10 +654,23 @@ enum virtchnl_event_codes {
|
||||
struct virtchnl_pf_event {
|
||||
enum virtchnl_event_codes event;
|
||||
union {
|
||||
/* If the PF driver does not support the new speed reporting
|
||||
* capabilities then use link_event else use link_event_adv to
|
||||
* get the speed and link information. The ability to understand
|
||||
* new speeds is indicated by setting the capability flag
|
||||
* VIRTCHNL_VF_CAP_ADV_LINK_SPEED in vf_cap_flags parameter
|
||||
* in virtchnl_vf_resource struct and can be used to determine
|
||||
* which link event struct to use below.
|
||||
*/
|
||||
struct {
|
||||
enum virtchnl_link_speed link_speed;
|
||||
bool link_status;
|
||||
u8 link_status;
|
||||
} link_event;
|
||||
struct {
|
||||
/* link_speed provided in Mbps */
|
||||
u32 link_speed;
|
||||
u8 link_status;
|
||||
} link_event_adv;
|
||||
} event_data;
|
||||
|
||||
int severity;
|
||||
@@ -549,14 +690,6 @@ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_pf_event);
|
||||
* to a single vector.
|
||||
* PF configures interrupt mapping and returns status.
|
||||
*/
|
||||
|
||||
/* HW does not define a type value for AEQ; only for RX/TX and CEQ.
|
||||
* In order for us to keep the interface simple, SW will define a
|
||||
* unique type value for AEQ.
|
||||
*/
|
||||
#define QUEUE_TYPE_PE_AEQ 0x80
|
||||
#define QUEUE_INVALID_IDX 0xFFFF
|
||||
|
||||
struct virtchnl_iwarp_qv_info {
|
||||
u32 v_idx; /* msix_vector */
|
||||
u16 ceq_idx;
|
||||
@@ -574,6 +707,36 @@ struct virtchnl_iwarp_qvlist_info {
|
||||
VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_iwarp_qvlist_info);
|
||||
|
||||
|
||||
/* Since VF messages are limited by u16 size, precalculate the maximum possible
|
||||
* values of nested elements in virtchnl structures that virtual channel can
|
||||
* possibly handle in a single message.
|
||||
*/
|
||||
enum virtchnl_vector_limits {
|
||||
VIRTCHNL_OP_CONFIG_VSI_QUEUES_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_vsi_queue_config_info)) /
|
||||
sizeof(struct virtchnl_queue_pair_info),
|
||||
|
||||
VIRTCHNL_OP_CONFIG_IRQ_MAP_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_irq_map_info)) /
|
||||
sizeof(struct virtchnl_vector_map),
|
||||
|
||||
VIRTCHNL_OP_ADD_DEL_ETH_ADDR_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_ether_addr_list)) /
|
||||
sizeof(struct virtchnl_ether_addr),
|
||||
|
||||
VIRTCHNL_OP_ADD_DEL_VLAN_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_vlan_filter_list)) /
|
||||
sizeof(u16),
|
||||
|
||||
VIRTCHNL_OP_CONFIG_IWARP_IRQ_MAP_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_iwarp_qvlist_info)) /
|
||||
sizeof(struct virtchnl_iwarp_qv_info),
|
||||
|
||||
VIRTCHNL_OP_ENABLE_CHANNELS_MAX =
|
||||
((u16)(~0) - sizeof(struct virtchnl_tc_info)) /
|
||||
sizeof(struct virtchnl_channel_info),
|
||||
};
|
||||
|
||||
/* VF reset states - these are written into the RSTAT register:
|
||||
* VFGEN_RSTAT on the VF
|
||||
* When the PF initiates a reset, it writes 0
|
||||
@@ -629,11 +792,16 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_vsi_queue_config_info *vqc =
|
||||
(struct virtchnl_vsi_queue_config_info *)msg;
|
||||
|
||||
if (vqc->num_queue_pairs == 0 || vqc->num_queue_pairs >
|
||||
VIRTCHNL_OP_CONFIG_VSI_QUEUES_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += (vqc->num_queue_pairs *
|
||||
sizeof(struct
|
||||
virtchnl_queue_pair_info));
|
||||
if (vqc->num_queue_pairs == 0)
|
||||
err_msg_format = TRUE;
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_CONFIG_IRQ_MAP:
|
||||
@@ -641,10 +809,15 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_irq_map_info *vimi =
|
||||
(struct virtchnl_irq_map_info *)msg;
|
||||
|
||||
if (vimi->num_vectors == 0 || vimi->num_vectors >
|
||||
VIRTCHNL_OP_CONFIG_IRQ_MAP_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += (vimi->num_vectors *
|
||||
sizeof(struct virtchnl_vector_map));
|
||||
if (vimi->num_vectors == 0)
|
||||
err_msg_format = TRUE;
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_ENABLE_QUEUES:
|
||||
@@ -657,10 +830,15 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_ether_addr_list *veal =
|
||||
(struct virtchnl_ether_addr_list *)msg;
|
||||
|
||||
if (veal->num_elements == 0 || veal->num_elements >
|
||||
VIRTCHNL_OP_ADD_DEL_ETH_ADDR_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += veal->num_elements *
|
||||
sizeof(struct virtchnl_ether_addr);
|
||||
if (veal->num_elements == 0)
|
||||
err_msg_format = TRUE;
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_ADD_VLAN:
|
||||
@@ -669,9 +847,14 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_vlan_filter_list *vfl =
|
||||
(struct virtchnl_vlan_filter_list *)msg;
|
||||
valid_len += vfl->num_elements * sizeof(u16);
|
||||
if (vfl->num_elements == 0)
|
||||
|
||||
if (vfl->num_elements == 0 || vfl->num_elements >
|
||||
VIRTCHNL_OP_ADD_DEL_VLAN_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += vfl->num_elements * sizeof(u16);
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_CONFIG_PROMISCUOUS_MODE:
|
||||
@@ -697,10 +880,13 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_iwarp_qvlist_info *qv =
|
||||
(struct virtchnl_iwarp_qvlist_info *)msg;
|
||||
if (qv->num_vectors == 0) {
|
||||
|
||||
if (qv->num_vectors == 0 || qv->num_vectors >
|
||||
VIRTCHNL_OP_CONFIG_IWARP_IRQ_MAP_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += ((qv->num_vectors - 1) *
|
||||
sizeof(struct virtchnl_iwarp_qv_info));
|
||||
}
|
||||
@@ -732,11 +918,34 @@ virtchnl_vc_validate_vf_msg(struct virtchnl_version_info *ver, u32 v_opcode,
|
||||
case VIRTCHNL_OP_REQUEST_QUEUES:
|
||||
valid_len = sizeof(struct virtchnl_vf_res_request);
|
||||
break;
|
||||
case VIRTCHNL_OP_ENABLE_CHANNELS:
|
||||
valid_len = sizeof(struct virtchnl_tc_info);
|
||||
if (msglen >= valid_len) {
|
||||
struct virtchnl_tc_info *vti =
|
||||
(struct virtchnl_tc_info *)msg;
|
||||
|
||||
if (vti->num_tc == 0 || vti->num_tc >
|
||||
VIRTCHNL_OP_ENABLE_CHANNELS_MAX) {
|
||||
err_msg_format = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
valid_len += (vti->num_tc - 1) *
|
||||
sizeof(struct virtchnl_channel_info);
|
||||
}
|
||||
break;
|
||||
case VIRTCHNL_OP_DISABLE_CHANNELS:
|
||||
break;
|
||||
case VIRTCHNL_OP_ADD_CLOUD_FILTER:
|
||||
/* fall through */
|
||||
case VIRTCHNL_OP_DEL_CLOUD_FILTER:
|
||||
valid_len = sizeof(struct virtchnl_filter);
|
||||
break;
|
||||
/* These are always errors coming from the VF. */
|
||||
case VIRTCHNL_OP_EVENT:
|
||||
case VIRTCHNL_OP_UNKNOWN:
|
||||
default:
|
||||
return VIRTCHNL_ERR_PARAM;
|
||||
return VIRTCHNL_STATUS_ERR_PARAM;
|
||||
}
|
||||
/* few more checks */
|
||||
if (err_msg_format || valid_len != msglen)
|
||||
|
||||
+4
-10
@@ -134,8 +134,7 @@ static void mcd_soft_reset(struct mcd_softc *);
|
||||
static int mcd_hard_reset(struct mcd_softc *);
|
||||
static int mcd_setmode(struct mcd_softc *, int mode);
|
||||
static int mcd_getqchan(struct mcd_softc *, struct mcd_qchninfo *q);
|
||||
static int mcd_subchan(struct mcd_softc *, struct ioc_read_subchannel *sc,
|
||||
int nocopyout);
|
||||
static int mcd_subchan(struct mcd_softc *, struct ioc_read_subchannel *sc);
|
||||
static int mcd_toc_header(struct mcd_softc *, struct ioc_toc_header *th);
|
||||
static int mcd_read_toc(struct mcd_softc *);
|
||||
static int mcd_toc_entrys(struct mcd_softc *, struct ioc_read_toc_entry *te);
|
||||
@@ -482,10 +481,8 @@ MCD_TRACE("ioctl called 0x%lx\n", cmd);
|
||||
case CDIOCPLAYMSF:
|
||||
r = mcd_playmsf(sc, (struct ioc_play_msf *) addr);
|
||||
break;
|
||||
case CDIOCREADSUBCHANNEL_SYSSPACE:
|
||||
return mcd_subchan(sc, (struct ioc_read_subchannel *) addr, 1);
|
||||
case CDIOCREADSUBCHANNEL:
|
||||
return mcd_subchan(sc, (struct ioc_read_subchannel *) addr, 0);
|
||||
return mcd_subchan(sc, (struct ioc_read_subchannel *) addr);
|
||||
case CDIOREADTOCHEADER:
|
||||
r = mcd_toc_header(sc, (struct ioc_toc_header *) addr);
|
||||
break;
|
||||
@@ -1411,7 +1408,7 @@ mcd_getqchan(struct mcd_softc *sc, struct mcd_qchninfo *q)
|
||||
}
|
||||
|
||||
static int
|
||||
mcd_subchan(struct mcd_softc *sc, struct ioc_read_subchannel *sch, int nocopyout)
|
||||
mcd_subchan(struct mcd_softc *sc, struct ioc_read_subchannel *sch)
|
||||
{
|
||||
struct mcd_qchninfo q;
|
||||
struct cd_sub_channel_info data;
|
||||
@@ -1478,10 +1475,7 @@ mcd_subchan(struct mcd_softc *sc, struct ioc_read_subchannel *sch, int nocopyout
|
||||
}
|
||||
|
||||
MCD_UNLOCK(sc);
|
||||
if (nocopyout == 0)
|
||||
return copyout(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len));
|
||||
bcopy(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len));
|
||||
return (0);
|
||||
return (copyout(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len)));
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
+5
-11
@@ -130,7 +130,7 @@ static int scd_resume(struct scd_softc *);
|
||||
static int scd_playtracks(struct scd_softc *, struct ioc_play_track *pt);
|
||||
static int scd_playmsf(struct scd_softc *, struct ioc_play_msf *msf);
|
||||
static int scd_play(struct scd_softc *, struct ioc_play_msf *msf);
|
||||
static int scd_subchan(struct scd_softc *, struct ioc_read_subchannel *sch, int nocopyout);
|
||||
static int scd_subchan(struct scd_softc *, struct ioc_read_subchannel *sch);
|
||||
static int read_subcode(struct scd_softc *, struct sony_subchannel_position_data *sch);
|
||||
|
||||
/* for xcdplayer */
|
||||
@@ -357,10 +357,8 @@ scdioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread *t
|
||||
case CDIOCPLAYMSF:
|
||||
error = scd_playmsf(sc, (struct ioc_play_msf *) addr);
|
||||
break;
|
||||
case CDIOCREADSUBCHANNEL_SYSSPACE:
|
||||
return scd_subchan(sc, (struct ioc_read_subchannel *) addr, 1);
|
||||
case CDIOCREADSUBCHANNEL:
|
||||
return scd_subchan(sc, (struct ioc_read_subchannel *) addr, 0);
|
||||
return scd_subchan(sc, (struct ioc_read_subchannel *) addr);
|
||||
case CDIOREADTOCHEADER:
|
||||
error = scd_toc_header (sc, (struct ioc_toc_header *) addr);
|
||||
break;
|
||||
@@ -564,7 +562,7 @@ scd_eject(struct scd_softc *sc)
|
||||
}
|
||||
|
||||
static int
|
||||
scd_subchan(struct scd_softc *sc, struct ioc_read_subchannel *sch, int nocopyout)
|
||||
scd_subchan(struct scd_softc *sc, struct ioc_read_subchannel *sch)
|
||||
{
|
||||
struct sony_subchannel_position_data q;
|
||||
struct cd_sub_channel_info data;
|
||||
@@ -594,12 +592,8 @@ scd_subchan(struct scd_softc *sc, struct ioc_read_subchannel *sch, int nocopyout
|
||||
data.what.position.absaddr.msf.frame = bcd2bin(q.abs_msf[2]);
|
||||
SCD_UNLOCK(sc);
|
||||
|
||||
if (nocopyout == 0) {
|
||||
if (copyout(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len))!=0)
|
||||
return (EFAULT);
|
||||
} else {
|
||||
bcopy(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len));
|
||||
}
|
||||
if (copyout(&data, sch->data, min(sizeof(struct cd_sub_channel_info), sch->data_len))!=0)
|
||||
return (EFAULT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
@@ -408,6 +408,7 @@ nat64lsn_translate4(struct nat64lsn_cfg *cfg, const struct ipfw_flow_id *f_id,
|
||||
} else
|
||||
logdata = NULL;
|
||||
|
||||
src6 = cfg->base.plat_prefix;
|
||||
nat64_embed_ip4(&src6, cfg->base.plat_plen, htonl(f_id->src_ip));
|
||||
ret = nat64_do_handle_ip4(*pm, &src6, &nh->addr, lport,
|
||||
&cfg->base, logdata);
|
||||
|
||||
@@ -274,11 +274,4 @@ struct ioc_capability { /*<2>*/
|
||||
|
||||
#define CDIOCCAPABILITY _IOR('c',30,struct ioc_capability) /*<2>*/
|
||||
|
||||
/*
|
||||
* Special version of CDIOCREADSUBCHANNEL which assumes that
|
||||
* ioc_read_subchannel->data points to the kernel memory. For
|
||||
* use in compatibility layers.
|
||||
*/
|
||||
#define CDIOCREADSUBCHANNEL_SYSSPACE _IOWR('c', 31, struct ioc_read_subchannel)
|
||||
|
||||
#endif /* !_SYS_CDIO_H_ */
|
||||
+1
-1
@@ -58,7 +58,7 @@
|
||||
* in the range 5 to 9.
|
||||
*/
|
||||
#undef __FreeBSD_version
|
||||
#define __FreeBSD_version 1102510 /* Master, propagated to newvers */
|
||||
#define __FreeBSD_version 1103000 /* Master, propagated to newvers */
|
||||
|
||||
/*
|
||||
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
||||
|
||||
@@ -343,8 +343,8 @@ strsep_quote(char **stringp, const char *delim)
|
||||
*dstptr++ = *srcptr++;
|
||||
}
|
||||
|
||||
*dstptr = 0; /* Terminate the string */
|
||||
*stringp = (*srcptr == '\0') ? NULL : srcptr + 1;
|
||||
*dstptr = 0; /* Terminate the string */
|
||||
return (retval);
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user