1/******************************************************************************
2
3  Copyright (c) 2001-2010, Intel Corporation
4  All rights reserved.
5
6  Redistribution and use in source and binary forms, with or without
7  modification, are permitted provided that the following conditions are met:
8
9   1. Redistributions of source code must retain the above copyright notice,
10      this list of conditions and the following disclaimer.
11
12   2. Redistributions in binary form must reproduce the above copyright
13      notice, this list of conditions and the following disclaimer in the
14      documentation and/or other materials provided with the distribution.
15
16   3. Neither the name of the Intel Corporation nor the names of its
17      contributors may be used to endorse or promote products derived from
18      this software without specific prior written permission.
19
20  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  POSSIBILITY OF SUCH DAMAGE.
31
32******************************************************************************/
33/*$FreeBSD$*/
34
35/*
36 * 82542 Gigabit Ethernet Controller
37 */
38
39#include "e1000_api.h"
40
41static s32  e1000_init_phy_params_82542(struct e1000_hw *hw);
42static s32  e1000_init_nvm_params_82542(struct e1000_hw *hw);
43static s32  e1000_init_mac_params_82542(struct e1000_hw *hw);
44static s32  e1000_get_bus_info_82542(struct e1000_hw *hw);
45static s32  e1000_reset_hw_82542(struct e1000_hw *hw);
46static s32  e1000_init_hw_82542(struct e1000_hw *hw);
47static s32  e1000_setup_link_82542(struct e1000_hw *hw);
48static s32  e1000_led_on_82542(struct e1000_hw *hw);
49static s32  e1000_led_off_82542(struct e1000_hw *hw);
50static void e1000_rar_set_82542(struct e1000_hw *hw, u8 *addr, u32 index);
51static void e1000_clear_hw_cntrs_82542(struct e1000_hw *hw);
52static s32  e1000_read_mac_addr_82542(struct e1000_hw *hw);
53
54/**
55 *  e1000_init_phy_params_82542 - Init PHY func ptrs.
56 *  @hw: pointer to the HW structure
57 **/
58static s32 e1000_init_phy_params_82542(struct e1000_hw *hw)
59{
60	struct e1000_phy_info *phy = &hw->phy;
61	s32 ret_val = E1000_SUCCESS;
62
63	DEBUGFUNC("e1000_init_phy_params_82542");
64
65	phy->type               = e1000_phy_none;
66
67	return ret_val;
68}
69
70/**
71 *  e1000_init_nvm_params_82542 - Init NVM func ptrs.
72 *  @hw: pointer to the HW structure
73 **/
74static s32 e1000_init_nvm_params_82542(struct e1000_hw *hw)
75{
76	struct e1000_nvm_info *nvm = &hw->nvm;
77
78	DEBUGFUNC("e1000_init_nvm_params_82542");
79
80	nvm->address_bits       =  6;
81	nvm->delay_usec         = 50;
82	nvm->opcode_bits        =  3;
83	nvm->type               = e1000_nvm_eeprom_microwire;
84	nvm->word_size          = 64;
85
86	/* Function Pointers */
87	nvm->ops.read           = e1000_read_nvm_microwire;
88	nvm->ops.release        = e1000_stop_nvm;
89	nvm->ops.write          = e1000_write_nvm_microwire;
90	nvm->ops.update         = e1000_update_nvm_checksum_generic;
91	nvm->ops.validate       = e1000_validate_nvm_checksum_generic;
92
93	return E1000_SUCCESS;
94}
95
96/**
97 *  e1000_init_mac_params_82542 - Init MAC func ptrs.
98 *  @hw: pointer to the HW structure
99 **/
100static s32 e1000_init_mac_params_82542(struct e1000_hw *hw)
101{
102	struct e1000_mac_info *mac = &hw->mac;
103
104	DEBUGFUNC("e1000_init_mac_params_82542");
105
106	/* Set media type */
107	hw->phy.media_type = e1000_media_type_fiber;
108
109	/* Set mta register count */
110	mac->mta_reg_count = 128;
111	/* Set rar entry count */
112	mac->rar_entry_count = E1000_RAR_ENTRIES;
113
114	/* Function pointers */
115
116	/* bus type/speed/width */
117	mac->ops.get_bus_info = e1000_get_bus_info_82542;
118	/* function id */
119	mac->ops.set_lan_id = e1000_set_lan_id_multi_port_pci;
120	/* reset */
121	mac->ops.reset_hw = e1000_reset_hw_82542;
122	/* hw initialization */
123	mac->ops.init_hw = e1000_init_hw_82542;
124	/* link setup */
125	mac->ops.setup_link = e1000_setup_link_82542;
126	/* phy/fiber/serdes setup */
127	mac->ops.setup_physical_interface = e1000_setup_fiber_serdes_link_generic;
128	/* check for link */
129	mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
130	/* multicast address update */
131	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
132	/* writing VFTA */
133	mac->ops.write_vfta = e1000_write_vfta_generic;
134	/* clearing VFTA */
135	mac->ops.clear_vfta = e1000_clear_vfta_generic;
136	/* read mac address */
137	mac->ops.read_mac_addr = e1000_read_mac_addr_82542;
138	/* set RAR */
139	mac->ops.rar_set = e1000_rar_set_82542;
140	/* turn on/off LED */
141	mac->ops.led_on = e1000_led_on_82542;
142	mac->ops.led_off = e1000_led_off_82542;
143	/* clear hardware counters */
144	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82542;
145	/* link info */
146	mac->ops.get_link_up_info = e1000_get_speed_and_duplex_fiber_serdes_generic;
147
148	return E1000_SUCCESS;
149}
150
151/**
152 *  e1000_init_function_pointers_82542 - Init func ptrs.
153 *  @hw: pointer to the HW structure
154 *
155 *  Called to initialize all function pointers and parameters.
156 **/
157void e1000_init_function_pointers_82542(struct e1000_hw *hw)
158{
159	DEBUGFUNC("e1000_init_function_pointers_82542");
160
161	hw->mac.ops.init_params = e1000_init_mac_params_82542;
162	hw->nvm.ops.init_params = e1000_init_nvm_params_82542;
163	hw->phy.ops.init_params = e1000_init_phy_params_82542;
164}
165
166/**
167 *  e1000_get_bus_info_82542 - Obtain bus information for adapter
168 *  @hw: pointer to the HW structure
169 *
170 *  This will obtain information about the HW bus for which the
171 *  adapter is attached and stores it in the hw structure.
172 **/
173static s32 e1000_get_bus_info_82542(struct e1000_hw *hw)
174{
175	DEBUGFUNC("e1000_get_bus_info_82542");
176
177	hw->bus.type = e1000_bus_type_pci;
178	hw->bus.speed = e1000_bus_speed_unknown;
179	hw->bus.width = e1000_bus_width_unknown;
180
181	return E1000_SUCCESS;
182}
183
184/**
185 *  e1000_reset_hw_82542 - Reset hardware
186 *  @hw: pointer to the HW structure
187 *
188 *  This resets the hardware into a known state.
189 **/
190static s32 e1000_reset_hw_82542(struct e1000_hw *hw)
191{
192	struct e1000_bus_info *bus = &hw->bus;
193	s32 ret_val = E1000_SUCCESS;
194	u32 ctrl;
195
196	DEBUGFUNC("e1000_reset_hw_82542");
197
198	if (hw->revision_id == E1000_REVISION_2) {
199		DEBUGOUT("Disabling MWI on 82542 rev 2\n");
200		e1000_pci_clear_mwi(hw);
201	}
202
203	DEBUGOUT("Masking off all interrupts\n");
204	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
205
206	E1000_WRITE_REG(hw, E1000_RCTL, 0);
207	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
208	E1000_WRITE_FLUSH(hw);
209
210	/*
211	 * Delay to allow any outstanding PCI transactions to complete before
212	 * resetting the device
213	 */
214	msec_delay(10);
215
216	ctrl = E1000_READ_REG(hw, E1000_CTRL);
217
218	DEBUGOUT("Issuing a global reset to 82542/82543 MAC\n");
219	E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_RST);
220
221	hw->nvm.ops.reload(hw);
222	msec_delay(2);
223
224	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
225	E1000_READ_REG(hw, E1000_ICR);
226
227	if (hw->revision_id == E1000_REVISION_2) {
228		if (bus->pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
229			e1000_pci_set_mwi(hw);
230	}
231
232	return ret_val;
233}
234
235/**
236 *  e1000_init_hw_82542 - Initialize hardware
237 *  @hw: pointer to the HW structure
238 *
239 *  This inits the hardware readying it for operation.
240 **/
241static s32 e1000_init_hw_82542(struct e1000_hw *hw)
242{
243	struct e1000_mac_info *mac = &hw->mac;
244	struct e1000_dev_spec_82542 *dev_spec = &hw->dev_spec._82542;
245	s32 ret_val = E1000_SUCCESS;
246	u32 ctrl;
247	u16 i;
248
249	DEBUGFUNC("e1000_init_hw_82542");
250
251	/* Disabling VLAN filtering */
252	E1000_WRITE_REG(hw, E1000_VET, 0);
253	mac->ops.clear_vfta(hw);
254
255	/* For 82542 (rev 2.0), disable MWI and put the receiver into reset */
256	if (hw->revision_id == E1000_REVISION_2) {
257		DEBUGOUT("Disabling MWI on 82542 rev 2.0\n");
258		e1000_pci_clear_mwi(hw);
259		E1000_WRITE_REG(hw, E1000_RCTL, E1000_RCTL_RST);
260		E1000_WRITE_FLUSH(hw);
261		msec_delay(5);
262	}
263
264	/* Setup the receive address. */
265	e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
266
267	/* For 82542 (rev 2.0), take the receiver out of reset and enable MWI */
268	if (hw->revision_id == E1000_REVISION_2) {
269		E1000_WRITE_REG(hw, E1000_RCTL, 0);
270		E1000_WRITE_FLUSH(hw);
271		msec_delay(1);
272		if (hw->bus.pci_cmd_word & CMD_MEM_WRT_INVALIDATE)
273			e1000_pci_set_mwi(hw);
274	}
275
276	/* Zero out the Multicast HASH table */
277	DEBUGOUT("Zeroing the MTA\n");
278	for (i = 0; i < mac->mta_reg_count; i++)
279		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
280
281	/*
282	 * Set the PCI priority bit correctly in the CTRL register.  This
283	 * determines if the adapter gives priority to receives, or if it
284	 * gives equal priority to transmits and receives.
285	 */
286	if (dev_spec->dma_fairness) {
287		ctrl = E1000_READ_REG(hw, E1000_CTRL);
288		E1000_WRITE_REG(hw, E1000_CTRL, ctrl | E1000_CTRL_PRIOR);
289	}
290
291	/* Setup link and flow control */
292	ret_val = e1000_setup_link_82542(hw);
293
294	/*
295	 * Clear all of the statistics registers (clear on read).  It is
296	 * important that we do this after we have tried to establish link
297	 * because the symbol error count will increment wildly if there
298	 * is no link.
299	 */
300	e1000_clear_hw_cntrs_82542(hw);
301
302	return ret_val;
303}
304
305/**
306 *  e1000_setup_link_82542 - Setup flow control and link settings
307 *  @hw: pointer to the HW structure
308 *
309 *  Determines which flow control settings to use, then configures flow
310 *  control.  Calls the appropriate media-specific link configuration
311 *  function.  Assuming the adapter has a valid link partner, a valid link
312 *  should be established.  Assumes the hardware has previously been reset
313 *  and the transmitter and receiver are not enabled.
314 **/
315static s32 e1000_setup_link_82542(struct e1000_hw *hw)
316{
317	struct e1000_mac_info *mac = &hw->mac;
318	s32 ret_val = E1000_SUCCESS;
319
320	DEBUGFUNC("e1000_setup_link_82542");
321
322	ret_val = e1000_set_default_fc_generic(hw);
323	if (ret_val)
324		goto out;
325
326	hw->fc.requested_mode &= ~e1000_fc_tx_pause;
327
328	if (mac->report_tx_early == 1)
329		hw->fc.requested_mode &= ~e1000_fc_rx_pause;
330
331	/*
332	 * Save off the requested flow control mode for use later.  Depending
333	 * on the link partner's capabilities, we may or may not use this mode.
334	 */
335	hw->fc.current_mode = hw->fc.requested_mode;
336
337	DEBUGOUT1("After fix-ups FlowControl is now = %x\n",
338	                                             hw->fc.current_mode);
339
340	/* Call the necessary subroutine to configure the link. */
341	ret_val = mac->ops.setup_physical_interface(hw);
342	if (ret_val)
343		goto out;
344
345	/*
346	 * Initialize the flow control address, type, and PAUSE timer
347	 * registers to their default values.  This is done even if flow
348	 * control is disabled, because it does not hurt anything to
349	 * initialize these registers.
350	 */
351	DEBUGOUT("Initializing Flow Control address, type and timer regs\n");
352
353	E1000_WRITE_REG(hw, E1000_FCAL, FLOW_CONTROL_ADDRESS_LOW);
354	E1000_WRITE_REG(hw, E1000_FCAH, FLOW_CONTROL_ADDRESS_HIGH);
355	E1000_WRITE_REG(hw, E1000_FCT, FLOW_CONTROL_TYPE);
356
357	E1000_WRITE_REG(hw, E1000_FCTTV, hw->fc.pause_time);
358
359	ret_val = e1000_set_fc_watermarks_generic(hw);
360
361out:
362	return ret_val;
363}
364
365/**
366 *  e1000_led_on_82542 - Turn on SW controllable LED
367 *  @hw: pointer to the HW structure
368 *
369 *  Turns the SW defined LED on.
370 **/
371static s32 e1000_led_on_82542(struct e1000_hw *hw)
372{
373	u32 ctrl = E1000_READ_REG(hw, E1000_CTRL);
374
375	DEBUGFUNC("e1000_led_on_82542");
376
377	ctrl |= E1000_CTRL_SWDPIN0;
378	ctrl |= E1000_CTRL_SWDPIO0;
379	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
380
381	return E1000_SUCCESS;
382}
383
384/**
385 *  e1000_led_off_82542 - Turn off SW controllable LED
386 *  @hw: pointer to the HW structure
387 *
388 *  Turns the SW defined LED off.
389 **/
390static s32 e1000_led_off_82542(struct e1000_hw *hw)
391{
392	u32 ctrl = E1000_READ_REG(hw, E1000_CTRL);
393
394	DEBUGFUNC("e1000_led_off_82542");
395
396	ctrl &= ~E1000_CTRL_SWDPIN0;
397	ctrl |= E1000_CTRL_SWDPIO0;
398	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
399
400	return E1000_SUCCESS;
401}
402
403/**
404 *  e1000_rar_set_82542 - Set receive address register
405 *  @hw: pointer to the HW structure
406 *  @addr: pointer to the receive address
407 *  @index: receive address array register
408 *
409 *  Sets the receive address array register at index to the address passed
410 *  in by addr.
411 **/
412static void e1000_rar_set_82542(struct e1000_hw *hw, u8 *addr, u32 index)
413{
414	u32 rar_low, rar_high;
415
416	DEBUGFUNC("e1000_rar_set_82542");
417
418	/*
419	 * HW expects these in little endian so we reverse the byte order
420	 * from network order (big endian) to little endian
421	 */
422	rar_low = ((u32) addr[0] |
423	           ((u32) addr[1] << 8) |
424	           ((u32) addr[2] << 16) | ((u32) addr[3] << 24));
425
426	rar_high = ((u32) addr[4] | ((u32) addr[5] << 8));
427
428	/* If MAC address zero, no need to set the AV bit */
429	if (rar_low || rar_high)
430		rar_high |= E1000_RAH_AV;
431
432	E1000_WRITE_REG_ARRAY(hw, E1000_RA, (index << 1), rar_low);
433	E1000_WRITE_REG_ARRAY(hw, E1000_RA, ((index << 1) + 1), rar_high);
434}
435
436/**
437 *  e1000_translate_register_82542 - Translate the proper register offset
438 *  @reg: e1000 register to be read
439 *
440 *  Registers in 82542 are located in different offsets than other adapters
441 *  even though they function in the same manner.  This function takes in
442 *  the name of the register to read and returns the correct offset for
443 *  82542 silicon.
444 **/
445u32 e1000_translate_register_82542(u32 reg)
446{
447	/*
448	 * Some of the 82542 registers are located at different
449	 * offsets than they are in newer adapters.
450	 * Despite the difference in location, the registers
451	 * function in the same manner.
452	 */
453	switch (reg) {
454	case E1000_RA:
455		reg = 0x00040;
456		break;
457	case E1000_RDTR:
458		reg = 0x00108;
459		break;
460	case E1000_RDBAL(0):
461		reg = 0x00110;
462		break;
463	case E1000_RDBAH(0):
464		reg = 0x00114;
465		break;
466	case E1000_RDLEN(0):
467		reg = 0x00118;
468		break;
469	case E1000_RDH(0):
470		reg = 0x00120;
471		break;
472	case E1000_RDT(0):
473		reg = 0x00128;
474		break;
475	case E1000_RDBAL(1):
476		reg = 0x00138;
477		break;
478	case E1000_RDBAH(1):
479		reg = 0x0013C;
480		break;
481	case E1000_RDLEN(1):
482		reg = 0x00140;
483		break;
484	case E1000_RDH(1):
485		reg = 0x00148;
486		break;
487	case E1000_RDT(1):
488		reg = 0x00150;
489		break;
490	case E1000_FCRTH:
491		reg = 0x00160;
492		break;
493	case E1000_FCRTL:
494		reg = 0x00168;
495		break;
496	case E1000_MTA:
497		reg = 0x00200;
498		break;
499	case E1000_TDBAL(0):
500		reg = 0x00420;
501		break;
502	case E1000_TDBAH(0):
503		reg = 0x00424;
504		break;
505	case E1000_TDLEN(0):
506		reg = 0x00428;
507		break;
508	case E1000_TDH(0):
509		reg = 0x00430;
510		break;
511	case E1000_TDT(0):
512		reg = 0x00438;
513		break;
514	case E1000_TIDV:
515		reg = 0x00440;
516		break;
517	case E1000_VFTA:
518		reg = 0x00600;
519		break;
520	case E1000_TDFH:
521		reg = 0x08010;
522		break;
523	case E1000_TDFT:
524		reg = 0x08018;
525		break;
526	default:
527		break;
528	}
529
530	return reg;
531}
532
533/**
534 *  e1000_clear_hw_cntrs_82542 - Clear device specific hardware counters
535 *  @hw: pointer to the HW structure
536 *
537 *  Clears the hardware counters by reading the counter registers.
538 **/
539static void e1000_clear_hw_cntrs_82542(struct e1000_hw *hw)
540{
541	DEBUGFUNC("e1000_clear_hw_cntrs_82542");
542
543	e1000_clear_hw_cntrs_base_generic(hw);
544
545	E1000_READ_REG(hw, E1000_PRC64);
546	E1000_READ_REG(hw, E1000_PRC127);
547	E1000_READ_REG(hw, E1000_PRC255);
548	E1000_READ_REG(hw, E1000_PRC511);
549	E1000_READ_REG(hw, E1000_PRC1023);
550	E1000_READ_REG(hw, E1000_PRC1522);
551	E1000_READ_REG(hw, E1000_PTC64);
552	E1000_READ_REG(hw, E1000_PTC127);
553	E1000_READ_REG(hw, E1000_PTC255);
554	E1000_READ_REG(hw, E1000_PTC511);
555	E1000_READ_REG(hw, E1000_PTC1023);
556	E1000_READ_REG(hw, E1000_PTC1522);
557}
558
559/**
560 *  e1000_read_mac_addr_82542 - Read device MAC address
561 *  @hw: pointer to the HW structure
562 *
563 *  Reads the device MAC address from the EEPROM and stores the value.
564 **/
565static s32 e1000_read_mac_addr_82542(struct e1000_hw *hw)
566{
567	s32  ret_val = E1000_SUCCESS;
568	u16 offset, nvm_data, i;
569
570	DEBUGFUNC("e1000_read_mac_addr");
571
572	for (i = 0; i < ETH_ADDR_LEN; i += 2) {
573		offset = i >> 1;
574		ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
575		if (ret_val) {
576			DEBUGOUT("NVM Read Error\n");
577			goto out;
578		}
579		hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
580		hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
581	}
582
583	for (i = 0; i < ETH_ADDR_LEN; i++)
584		hw->mac.addr[i] = hw->mac.perm_addr[i];
585
586out:
587	return ret_val;
588}
589