1a551c94aSIdo Barnea/*******************************************************************************
2a551c94aSIdo Barnea
3a551c94aSIdo BarneaCopyright (c) 2001-2015, Intel Corporation
4a551c94aSIdo BarneaAll rights reserved.
5a551c94aSIdo Barnea
6a551c94aSIdo BarneaRedistribution and use in source and binary forms, with or without
7a551c94aSIdo Barneamodification, are permitted provided that the following conditions are met:
8a551c94aSIdo Barnea
9a551c94aSIdo Barnea 1. Redistributions of source code must retain the above copyright notice,
10a551c94aSIdo Barnea    this list of conditions and the following disclaimer.
11a551c94aSIdo Barnea
12a551c94aSIdo Barnea 2. Redistributions in binary form must reproduce the above copyright
13a551c94aSIdo Barnea    notice, this list of conditions and the following disclaimer in the
14a551c94aSIdo Barnea    documentation and/or other materials provided with the distribution.
15a551c94aSIdo Barnea
16a551c94aSIdo Barnea 3. Neither the name of the Intel Corporation nor the names of its
17a551c94aSIdo Barnea    contributors may be used to endorse or promote products derived from
18a551c94aSIdo Barnea    this software without specific prior written permission.
19a551c94aSIdo Barnea
20a551c94aSIdo BarneaTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21a551c94aSIdo BarneaAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22a551c94aSIdo BarneaIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23a551c94aSIdo BarneaARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24a551c94aSIdo BarneaLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25a551c94aSIdo BarneaCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26a551c94aSIdo BarneaSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27a551c94aSIdo BarneaINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28a551c94aSIdo BarneaCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29a551c94aSIdo BarneaARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30a551c94aSIdo BarneaPOSSIBILITY OF SUCH DAMAGE.
31a551c94aSIdo Barnea
32a551c94aSIdo Barnea***************************************************************************/
33a551c94aSIdo Barnea
34a551c94aSIdo Barnea#ifndef _E1000_NVM_H_
35a551c94aSIdo Barnea#define _E1000_NVM_H_
36a551c94aSIdo Barnea
37a551c94aSIdo Barneastruct e1000_pba {
38a551c94aSIdo Barnea	u16 word[2];
39a551c94aSIdo Barnea	u16 *pba_block;
40a551c94aSIdo Barnea};
41a551c94aSIdo Barnea
42a551c94aSIdo Barneastruct e1000_fw_version {
43a551c94aSIdo Barnea	u32 etrack_id;
44a551c94aSIdo Barnea	u16 eep_major;
45a551c94aSIdo Barnea	u16 eep_minor;
46a551c94aSIdo Barnea	u16 eep_build;
47a551c94aSIdo Barnea
48a551c94aSIdo Barnea	u8 invm_major;
49a551c94aSIdo Barnea	u8 invm_minor;
50a551c94aSIdo Barnea	u8 invm_img_type;
51a551c94aSIdo Barnea
52a551c94aSIdo Barnea	bool or_valid;
53a551c94aSIdo Barnea	u16 or_major;
54a551c94aSIdo Barnea	u16 or_build;
55a551c94aSIdo Barnea	u16 or_patch;
56a551c94aSIdo Barnea};
57a551c94aSIdo Barnea
58a551c94aSIdo Barnea
59a551c94aSIdo Barneavoid e1000_init_nvm_ops_generic(struct e1000_hw *hw);
60a551c94aSIdo Barneas32  e1000_null_read_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c);
61a551c94aSIdo Barneavoid e1000_null_nvm_generic(struct e1000_hw *hw);
62a551c94aSIdo Barneas32  e1000_null_led_default(struct e1000_hw *hw, u16 *data);
63a551c94aSIdo Barneas32  e1000_null_write_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c);
64a551c94aSIdo Barneas32  e1000_acquire_nvm_generic(struct e1000_hw *hw);
65a551c94aSIdo Barnea
66a551c94aSIdo Barneas32  e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg);
67a551c94aSIdo Barneas32  e1000_read_mac_addr_generic(struct e1000_hw *hw);
68a551c94aSIdo Barneas32  e1000_read_pba_num_generic(struct e1000_hw *hw, u32 *pba_num);
69a551c94aSIdo Barneas32  e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num,
70a551c94aSIdo Barnea				   u32 pba_num_size);
71a551c94aSIdo Barneas32  e1000_read_pba_length_generic(struct e1000_hw *hw, u32 *pba_num_size);
72a551c94aSIdo Barneas32 e1000_read_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
73a551c94aSIdo Barnea		       u32 eeprom_buf_size, u16 max_pba_block_size,
74a551c94aSIdo Barnea		       struct e1000_pba *pba);
75a551c94aSIdo Barneas32 e1000_write_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
76a551c94aSIdo Barnea			u32 eeprom_buf_size, struct e1000_pba *pba);
77a551c94aSIdo Barneas32 e1000_get_pba_block_size(struct e1000_hw *hw, u16 *eeprom_buf,
78a551c94aSIdo Barnea			     u32 eeprom_buf_size, u16 *pba_block_size);
79a551c94aSIdo Barneas32  e1000_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data);
80a551c94aSIdo Barneas32  e1000_read_nvm_microwire(struct e1000_hw *hw, u16 offset,
81a551c94aSIdo Barnea			      u16 words, u16 *data);
82a551c94aSIdo Barneas32  e1000_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words,
83a551c94aSIdo Barnea			 u16 *data);
84a551c94aSIdo Barneas32  e1000_valid_led_default_generic(struct e1000_hw *hw, u16 *data);
85a551c94aSIdo Barneas32  e1000_validate_nvm_checksum_generic(struct e1000_hw *hw);
86a551c94aSIdo Barneas32  e1000_write_nvm_microwire(struct e1000_hw *hw, u16 offset,
87a551c94aSIdo Barnea			       u16 words, u16 *data);
88a551c94aSIdo Barneas32  e1000_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words,
89a551c94aSIdo Barnea			 u16 *data);
90a551c94aSIdo Barneas32  e1000_update_nvm_checksum_generic(struct e1000_hw *hw);
91a551c94aSIdo Barneavoid e1000_stop_nvm(struct e1000_hw *hw);
92a551c94aSIdo Barneavoid e1000_release_nvm_generic(struct e1000_hw *hw);
93a551c94aSIdo Barneavoid e1000_get_fw_version(struct e1000_hw *hw,
94a551c94aSIdo Barnea			  struct e1000_fw_version *fw_vers);
95a551c94aSIdo Barnea
96a551c94aSIdo Barnea#define E1000_STM_OPCODE	0xDB00
97a551c94aSIdo Barnea
98a551c94aSIdo Barnea#endif
99