Thread (3 messages) 3 messages, 2 authors, 2021-03-04

Re: [RFC PATCH net-next 1/5] ethtool: Allow network drivers to dump arbitrary EEPROM data

flat view

From: Andrew Lunn <andrew@lunn.ch>
Date: 2021-03-04 00:17:05

quoted
quoted
+ * struct ethtool_eeprom_data - EEPROM dump from specified page
+ * @offset: Offset within the specified EEPROM page to begin read, in bytes.
+ * @length: Number of bytes to read. On successful return, number of bytes
+ *	actually read.
+ * @page: Page number to read from.
+ * @bank: Page bank number to read from, if applicable by EEPROM spec.
+ * @i2c_address: I2C address of a page. Zero indicates a driver should choose
+ *	by itself.
I don't particularly like the idea of the driver deciding what to
read. User space should really be passing 0x50 or 0x51 for the normal
case. And we need to make it clear what these addresses mean, since
they are often referred to as 0xA0 and 0xA2, due to addresses being
shifted one bit left and a r/w bit added.
I was thinking what address should I send from userspace by default?
Should I send 0x50 or 0xA0 and at some point to do the shift?
mlx5 uses 0x50 and 0x51, for example.
I would use the same meaning of i2c address as the i2c subsystem. So
addresses in the range of 0 to 0x7f. And please add a comment about
this here.
quoted
I also don't think the in place length should be modified. It would be
better to follow the use semantics of returning a negative value on
error, or a positive value for the length actually
read. ethtool_eeprom_data can then be passed as a const.
But how would userspace know how much actually was read?
You are going to put the data into a netlink attribute. That attribute
has a length. So userspace gets to know that way.
Should I fail the command if only part of a data requested was read?
That is not the usual POSIX semantics. I would return whatever is
available.
quoted
quoted
@@ -1865,6 +1888,8 @@ static inline int ethtool_validate_duplex(__u8 duplex)
  #define ETH_MODULE_SFF_8636_MAX_LEN     640
  #define ETH_MODULE_SFF_8436_MAX_LEN     640
+#define ETH_MODULE_EEPROM_MAX_LEN	640
I'm surprised such a high value is allowed. 128 seems more
appropriate, given the size of 1/2 pages.
This is done for backwards compatibility mechanism (last patch in the
series)
to work properly. I wanted to limit the length to 128 (or 256, maybe), but
currently ethtool supports dumps of 640 bytes at most.
I guess I can add another value like ETH_MODULE_EEPROM_PAGE_MAX_LEN 256 and
if
new ndo is available or page number is specified, use it for check.
If ndo is not implemented, use 640 instead.
I need to look at the last patch. But for backwards compatibility with
the old IOCTL call, we might want the glue code to read each 1/2 page
individually, and combine them. That way we keep the new API uniform,
reads only 1/2 pages.

      Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help