Message ID | 1623949504-51291-1-git-send-email-moshe@nvidia.com (mailing list archive) |
---|---|
Headers | show |
Series | Extend module EEPROM API | expand |
On Thu, Jun 17, 2021 at 08:05:00PM +0300, Moshe Shemesh wrote: > Ethtool supports module EEPROM dumps via the `ethtool -m <dev>` command. > But in current state its functionality is limited - offset and length > parameters, which are used to specify a linear desired region of EEPROM > data to dump, is not enough, considering emergence of complex module > EEPROM layouts such as CMIS. > > Moreover, CMIS extends the amount of pages that may be accessible by > introducing another parameter for page addressing - banks. Besides, > currently module EEPROM is represented as a chunk of concatenated pages, > where lower 128 bytes of all pages, except page 00h, are omitted. Offset > and length are used to address parts of this fake linear memory. But in > practice drivers, which implement get_module_info() and > get_module_eeprom() ethtool ops still calculate page number and set I2C > address on their own. > > This series adds support in `ethtool -m` of dumping an arbitrary page > specified by page number, bank number and I2C address. Implement netlink > handler for `ethtool -m` in order to make such requests to the kernel > and extend CLI by adding corresponding parameters. > New command line format: > ethtool -m <dev> [hex on|off] [raw on|off] [offset N] [length N] [page N] [bank N] [i2c N] > > Netlink infrastructure works on per-page basis and allows dumps of a > single page at once. But in case user requests human-readable output, > which currently may require more than one page, userspace can make such > additional calls to kernel on demand and place pages in a linked list. > It allows to get pages from cache on demand and pass them to refactored > SFF decoders. > > Change Log: > v3 -> v4: > - Fixed cmis_show_all() prototype > > v2 -> v3: > - Removed spec version from CMIS identifiers by changing 'CMIS4' and 'cmis4' to 'CMIS' and 'cmis' respectively. > > v1 -> v2: > - Changed offset defines to specification values. > - Added default offset value (128) if page number is specified. > - Fixed return values. > - Removed page_available() > > > > Vladyslav Tarasiuk (4): > ethtool: Add netlink handler for getmodule (-m) > ethtool: Refactor human-readable module EEPROM output for new API > ethtool: Rename QSFP-DD identifiers to use CMIS > ethtool: Update manpages to reflect changes to getmodule (-m) command > > Makefile.am | 3 +- > cmis.c | 359 +++++++++++++++++++++++++++++++++++++++++ > cmis.h | 128 +++++++++++++++ > ethtool.8.in | 14 ++ > ethtool.c | 4 + > internal.h | 12 ++ > list.h | 34 ++++ > netlink/desc-ethtool.c | 13 ++ > netlink/extapi.h | 2 + > netlink/module-eeprom.c | 416 ++++++++++++++++++++++++++++++++++++++++++++++++ > qsfp-dd.c | 333 -------------------------------------- > qsfp-dd.h | 125 --------------- > qsfp.c | 130 ++++++++------- > qsfp.h | 51 +++--- > sff-common.c | 3 + > sff-common.h | 3 +- > 16 files changed, 1090 insertions(+), 540 deletions(-) > create mode 100644 cmis.c > create mode 100644 cmis.h > create mode 100644 list.h > create mode 100644 netlink/module-eeprom.c > delete mode 100644 qsfp-dd.c > delete mode 100644 qsfp-dd.h Series applied, thank you. Michal