xref: /freebsd/sys/dev/e1000/e1000_nvm.h (revision 71625ec9ad2a9bc8c09784fbd23b759830e0ee5f)
18cfa0ad2SJack F Vogel /******************************************************************************
27282444bSPedro F. Giffuni   SPDX-License-Identifier: BSD-3-Clause
38cfa0ad2SJack F Vogel 
4702cac6cSKevin Bowling   Copyright (c) 2001-2020, Intel Corporation
58cfa0ad2SJack F Vogel   All rights reserved.
68cfa0ad2SJack F Vogel 
78cfa0ad2SJack F Vogel   Redistribution and use in source and binary forms, with or without
88cfa0ad2SJack F Vogel   modification, are permitted provided that the following conditions are met:
98cfa0ad2SJack F Vogel 
108cfa0ad2SJack F Vogel    1. Redistributions of source code must retain the above copyright notice,
118cfa0ad2SJack F Vogel       this list of conditions and the following disclaimer.
128cfa0ad2SJack F Vogel 
138cfa0ad2SJack F Vogel    2. Redistributions in binary form must reproduce the above copyright
148cfa0ad2SJack F Vogel       notice, this list of conditions and the following disclaimer in the
158cfa0ad2SJack F Vogel       documentation and/or other materials provided with the distribution.
168cfa0ad2SJack F Vogel 
178cfa0ad2SJack F Vogel    3. Neither the name of the Intel Corporation nor the names of its
188cfa0ad2SJack F Vogel       contributors may be used to endorse or promote products derived from
198cfa0ad2SJack F Vogel       this software without specific prior written permission.
208cfa0ad2SJack F Vogel 
218cfa0ad2SJack F Vogel   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
228cfa0ad2SJack F Vogel   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
238cfa0ad2SJack F Vogel   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
248cfa0ad2SJack F Vogel   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
258cfa0ad2SJack F Vogel   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
268cfa0ad2SJack F Vogel   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
278cfa0ad2SJack F Vogel   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
288cfa0ad2SJack F Vogel   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
298cfa0ad2SJack F Vogel   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
308cfa0ad2SJack F Vogel   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
318cfa0ad2SJack F Vogel   POSSIBILITY OF SUCH DAMAGE.
328cfa0ad2SJack F Vogel 
338cfa0ad2SJack F Vogel ******************************************************************************/
348cfa0ad2SJack F Vogel 
358cfa0ad2SJack F Vogel #ifndef _E1000_NVM_H_
368cfa0ad2SJack F Vogel #define _E1000_NVM_H_
378cfa0ad2SJack F Vogel 
386ab6bfe3SJack F Vogel struct e1000_pba {
396ab6bfe3SJack F Vogel 	u16 word[2];
406ab6bfe3SJack F Vogel 	u16 *pba_block;
416ab6bfe3SJack F Vogel };
426ab6bfe3SJack F Vogel 
43*984d1616SKevin Bowling struct e1000_fw_version {
44*984d1616SKevin Bowling 	u32 etrack_id;
45*984d1616SKevin Bowling 	u16 eep_major;
46*984d1616SKevin Bowling 	u16 eep_minor;
47*984d1616SKevin Bowling 	u16 eep_build;
48*984d1616SKevin Bowling 
49*984d1616SKevin Bowling 	u8 invm_major;
50*984d1616SKevin Bowling 	u8 invm_minor;
51*984d1616SKevin Bowling 	u8 invm_img_type;
52*984d1616SKevin Bowling 
53*984d1616SKevin Bowling 	bool or_valid;
54*984d1616SKevin Bowling 	u16 or_major;
55*984d1616SKevin Bowling 	u16 or_build;
56*984d1616SKevin Bowling 	u16 or_patch;
57*984d1616SKevin Bowling };
58*984d1616SKevin Bowling 
596ab6bfe3SJack F Vogel 
608cfa0ad2SJack F Vogel void e1000_init_nvm_ops_generic(struct e1000_hw *hw);
618cfa0ad2SJack F Vogel s32  e1000_null_read_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c);
628cfa0ad2SJack F Vogel void e1000_null_nvm_generic(struct e1000_hw *hw);
638cfa0ad2SJack F Vogel s32  e1000_null_led_default(struct e1000_hw *hw, u16 *data);
648cfa0ad2SJack F Vogel s32  e1000_null_write_nvm(struct e1000_hw *hw, u16 a, u16 b, u16 *c);
658cfa0ad2SJack F Vogel s32  e1000_acquire_nvm_generic(struct e1000_hw *hw);
668cfa0ad2SJack F Vogel 
678cfa0ad2SJack F Vogel s32  e1000_poll_eerd_eewr_done(struct e1000_hw *hw, int ee_reg);
688cfa0ad2SJack F Vogel s32  e1000_read_mac_addr_generic(struct e1000_hw *hw);
69*984d1616SKevin Bowling s32  e1000_read_pba_num_generic(struct e1000_hw *hw, u32 *pba_num);
707d9119bdSJack F Vogel s32  e1000_read_pba_string_generic(struct e1000_hw *hw, u8 *pba_num,
717d9119bdSJack F Vogel 				   u32 pba_num_size);
727d9119bdSJack F Vogel s32  e1000_read_pba_length_generic(struct e1000_hw *hw, u32 *pba_num_size);
736ab6bfe3SJack F Vogel s32 e1000_read_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
746ab6bfe3SJack F Vogel 		       u32 eeprom_buf_size, u16 max_pba_block_size,
756ab6bfe3SJack F Vogel 		       struct e1000_pba *pba);
766ab6bfe3SJack F Vogel s32 e1000_write_pba_raw(struct e1000_hw *hw, u16 *eeprom_buf,
776ab6bfe3SJack F Vogel 			u32 eeprom_buf_size, struct e1000_pba *pba);
786ab6bfe3SJack F Vogel s32 e1000_get_pba_block_size(struct e1000_hw *hw, u16 *eeprom_buf,
796ab6bfe3SJack F Vogel 			     u32 eeprom_buf_size, u16 *pba_block_size);
808cfa0ad2SJack F Vogel s32  e1000_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data);
818cfa0ad2SJack F Vogel s32  e1000_read_nvm_microwire(struct e1000_hw *hw, u16 offset,
828cfa0ad2SJack F Vogel 			      u16 words, u16 *data);
838cfa0ad2SJack F Vogel s32  e1000_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words,
848cfa0ad2SJack F Vogel 			 u16 *data);
858cfa0ad2SJack F Vogel s32  e1000_valid_led_default_generic(struct e1000_hw *hw, u16 *data);
868cfa0ad2SJack F Vogel s32  e1000_validate_nvm_checksum_generic(struct e1000_hw *hw);
878cfa0ad2SJack F Vogel s32  e1000_write_nvm_microwire(struct e1000_hw *hw, u16 offset,
888cfa0ad2SJack F Vogel 			       u16 words, u16 *data);
898cfa0ad2SJack F Vogel s32  e1000_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words,
908cfa0ad2SJack F Vogel 			 u16 *data);
918cfa0ad2SJack F Vogel s32  e1000_update_nvm_checksum_generic(struct e1000_hw *hw);
928cfa0ad2SJack F Vogel void e1000_stop_nvm(struct e1000_hw *hw);
938cfa0ad2SJack F Vogel void e1000_release_nvm_generic(struct e1000_hw *hw);
94*984d1616SKevin Bowling void e1000_get_fw_version(struct e1000_hw *hw,
95*984d1616SKevin Bowling 			  struct e1000_fw_version *fw_vers);
968cfa0ad2SJack F Vogel 
978cfa0ad2SJack F Vogel #define E1000_STM_OPCODE	0xDB00
988cfa0ad2SJack F Vogel 
998cfa0ad2SJack F Vogel #endif
100