cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

eeprom_93cx6.h (2368B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3	Copyright (C) 2004 - 2006 rt2x00 SourceForge Project
      4	<http://rt2x00.serialmonkey.com>
      5
      6 */
      7
      8/*
      9	Module: eeprom_93cx6
     10	Abstract: EEPROM reader datastructures for 93cx6 chipsets.
     11	Supported chipsets: 93c46, 93c56 and 93c66.
     12 */
     13
     14/*
     15 * EEPROM operation defines.
     16 */
     17#define PCI_EEPROM_WIDTH_93C46	6
     18#define PCI_EEPROM_WIDTH_93C56	8
     19#define PCI_EEPROM_WIDTH_93C66	8
     20#define PCI_EEPROM_WIDTH_93C86	8
     21#define PCI_EEPROM_WIDTH_OPCODE	3
     22#define PCI_EEPROM_WRITE_OPCODE	0x05
     23#define PCI_EEPROM_ERASE_OPCODE 0x07
     24#define PCI_EEPROM_READ_OPCODE	0x06
     25#define PCI_EEPROM_EWDS_OPCODE	0x10
     26#define PCI_EEPROM_EWEN_OPCODE	0x13
     27
     28/**
     29 * struct eeprom_93cx6 - control structure for setting the commands
     30 * for reading the eeprom data.
     31 * @data: private pointer for the driver.
     32 * @register_read(struct eeprom_93cx6 *eeprom): handler to
     33 * read the eeprom register, this function should set all reg_* fields.
     34 * @register_write(struct eeprom_93cx6 *eeprom): handler to
     35 * write to the eeprom register by using all reg_* fields.
     36 * @width: eeprom width, should be one of the PCI_EEPROM_WIDTH_* defines
     37 * @drive_data: Set if we're driving the data line.
     38 * @reg_data_in: register field to indicate data input
     39 * @reg_data_out: register field to indicate data output
     40 * @reg_data_clock: register field to set the data clock
     41 * @reg_chip_select: register field to set the chip select
     42 *
     43 * This structure is used for the communication between the driver
     44 * and the eeprom_93cx6 handlers for reading the eeprom.
     45 */
     46struct eeprom_93cx6 {
     47	void *data;
     48
     49	void (*register_read)(struct eeprom_93cx6 *eeprom);
     50	void (*register_write)(struct eeprom_93cx6 *eeprom);
     51
     52	int width;
     53
     54	char drive_data;
     55	char reg_data_in;
     56	char reg_data_out;
     57	char reg_data_clock;
     58	char reg_chip_select;
     59};
     60
     61extern void eeprom_93cx6_read(struct eeprom_93cx6 *eeprom,
     62	const u8 word, u16 *data);
     63extern void eeprom_93cx6_multiread(struct eeprom_93cx6 *eeprom,
     64	const u8 word, __le16 *data, const u16 words);
     65extern void eeprom_93cx6_readb(struct eeprom_93cx6 *eeprom,
     66	const u8 byte, u8 *data);
     67extern void eeprom_93cx6_multireadb(struct eeprom_93cx6 *eeprom,
     68	const u8 byte, u8 *data, const u16 bytes);
     69
     70extern void eeprom_93cx6_wren(struct eeprom_93cx6 *eeprom, bool enable);
     71
     72extern void eeprom_93cx6_write(struct eeprom_93cx6 *eeprom,
     73			       u8 addr, u16 data);