19a5557fdSlucy wang - Sun Microsystems - Beijing China /*
29a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER START
39a5557fdSlucy wang - Sun Microsystems - Beijing China  *
49a5557fdSlucy wang - Sun Microsystems - Beijing China  * The contents of this file are subject to the terms of the
59a5557fdSlucy wang - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
69a5557fdSlucy wang - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
79a5557fdSlucy wang - Sun Microsystems - Beijing China  *
89a5557fdSlucy wang - Sun Microsystems - Beijing China  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99a5557fdSlucy wang - Sun Microsystems - Beijing China  * or http://www.opensolaris.org/os/licensing.
109a5557fdSlucy wang - Sun Microsystems - Beijing China  * See the License for the specific language governing permissions
119a5557fdSlucy wang - Sun Microsystems - Beijing China  * and limitations under the License.
129a5557fdSlucy wang - Sun Microsystems - Beijing China  *
139a5557fdSlucy wang - Sun Microsystems - Beijing China  * When distributing Covered Code, include this CDDL HEADER in each
149a5557fdSlucy wang - Sun Microsystems - Beijing China  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159a5557fdSlucy wang - Sun Microsystems - Beijing China  * If applicable, add the following below this CDDL HEADER, with the
169a5557fdSlucy wang - Sun Microsystems - Beijing China  * fields enclosed by brackets "[]" replaced with your own identifying
179a5557fdSlucy wang - Sun Microsystems - Beijing China  * information: Portions Copyright [yyyy] [name of copyright owner]
189a5557fdSlucy wang - Sun Microsystems - Beijing China  *
199a5557fdSlucy wang - Sun Microsystems - Beijing China  * CDDL HEADER END
209a5557fdSlucy wang - Sun Microsystems - Beijing China  */
21*93833965Sjing xiong ERI-SUN 
229a5557fdSlucy wang - Sun Microsystems - Beijing China /*
239a5557fdSlucy wang - Sun Microsystems - Beijing China  * Copyright 2008 NetXen, Inc.  All rights reserved.
249a5557fdSlucy wang - Sun Microsystems - Beijing China  * Use is subject to license terms.
259a5557fdSlucy wang - Sun Microsystems - Beijing China  */
26*93833965Sjing xiong ERI-SUN 
279a5557fdSlucy wang - Sun Microsystems - Beijing China #ifndef _UNM_NIC_HW_
289a5557fdSlucy wang - Sun Microsystems - Beijing China #define	_UNM_NIC_HW_
299a5557fdSlucy wang - Sun Microsystems - Beijing China 
30*93833965Sjing xiong ERI-SUN #ifdef __cplusplus
31*93833965Sjing xiong ERI-SUN extern "C" {
32*93833965Sjing xiong ERI-SUN #endif
33*93833965Sjing xiong ERI-SUN 
349a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_inc.h"
359a5557fdSlucy wang - Sun Microsystems - Beijing China 
369a5557fdSlucy wang - Sun Microsystems - Beijing China /* Hardware memory size of 128 meg */
379a5557fdSlucy wang - Sun Microsystems - Beijing China #define	BAR0_SIZE (128 * 1024 * 1024)
389a5557fdSlucy wang - Sun Microsystems - Beijing China /*
399a5557fdSlucy wang - Sun Microsystems - Beijing China  * It can be calculated by looking at the first 1 bit of the BAR0 addr after
409a5557fdSlucy wang - Sun Microsystems - Beijing China  * bit 4 For us lets assume that BAR0 is D8000008, then the size is 0x8000000,
419a5557fdSlucy wang - Sun Microsystems - Beijing China  * 8 represents first bit containing 1.   FSL temp notes....pg 162 of PCI
429a5557fdSlucy wang - Sun Microsystems - Beijing China  * systems arch...
439a5557fdSlucy wang - Sun Microsystems - Beijing China  */
449a5557fdSlucy wang - Sun Microsystems - Beijing China 
459a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_HW_BLOCK_WRITE_64(DATA_PTR, ADDR, NUM_WORDS)        \
469a5557fdSlucy wang - Sun Microsystems - Beijing China {                                                           \
479a5557fdSlucy wang - Sun Microsystems - Beijing China 	int i;                                              \
489a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 *a = (u64 *) (DATA_PTR);                        \
499a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 *b = (u64 *) (ADDR);                            \
509a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 tmp;					    \
519a5557fdSlucy wang - Sun Microsystems - Beijing China 	for (i = 0; i < (NUM_WORDS); i++, a++, b++) {       \
529a5557fdSlucy wang - Sun Microsystems - Beijing China 		tmp = UNM_NIC_PCI_READ_64(a);		    \
539a5557fdSlucy wang - Sun Microsystems - Beijing China 		UNM_NIC_PCI_WRITE_64(tmp, b);		    \
549a5557fdSlucy wang - Sun Microsystems - Beijing China 	}						    \
559a5557fdSlucy wang - Sun Microsystems - Beijing China }
569a5557fdSlucy wang - Sun Microsystems - Beijing China 
579a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_HW_BLOCK_READ_64(DATA_PTR, ADDR, NUM_WORDS)           \
589a5557fdSlucy wang - Sun Microsystems - Beijing China {                                                             \
599a5557fdSlucy wang - Sun Microsystems - Beijing China 	int i;                                                \
609a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 *a = (u64 *) (DATA_PTR);                          \
619a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 *b = (u64 *) (ADDR);                              \
629a5557fdSlucy wang - Sun Microsystems - Beijing China 	u64 tmp;					      \
639a5557fdSlucy wang - Sun Microsystems - Beijing China 	for (i = 0; i < (NUM_WORDS); i++, a++, b++) {            \
649a5557fdSlucy wang - Sun Microsystems - Beijing China 		tmp = UNM_NIC_PCI_READ_64(b);		      \
659a5557fdSlucy wang - Sun Microsystems - Beijing China 		UNM_NIC_PCI_WRITE_64(tmp, a);		      \
669a5557fdSlucy wang - Sun Microsystems - Beijing China 	}                                                     \
679a5557fdSlucy wang - Sun Microsystems - Beijing China }
689a5557fdSlucy wang - Sun Microsystems - Beijing China 
699a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_PCI_MAPSIZE_BYTES  (UNM_PCI_MAPSIZE << 20)
709a5557fdSlucy wang - Sun Microsystems - Beijing China 
719a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_LOCKED_READ_REG(X, Y)   \
729a5557fdSlucy wang - Sun Microsystems - Beijing China 	addr = (void *)(pci_base_offset(adapter, (X)));     \
739a5557fdSlucy wang - Sun Microsystems - Beijing China 	*(uint32_t *)(Y) = UNM_NIC_PCI_READ_32(addr);
749a5557fdSlucy wang - Sun Microsystems - Beijing China 
759a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_NIC_LOCKED_WRITE_REG(X, Y)   \
769a5557fdSlucy wang - Sun Microsystems - Beijing China 	addr = (void *)(pci_base_offset(adapter, (X))); \
779a5557fdSlucy wang - Sun Microsystems - Beijing China 	UNM_NIC_PCI_WRITE_32(*(uint32_t *)(Y), addr);
789a5557fdSlucy wang - Sun Microsystems - Beijing China 
799a5557fdSlucy wang - Sun Microsystems - Beijing China /* For Multicard support */
809a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_CRB_READ_VAL_ADAPTER(ADDR, ADAPTER) \
819a5557fdSlucy wang - Sun Microsystems - Beijing China 	unm_crb_read_val_adapter((ADDR), (struct unm_adapter_s *)ADAPTER)
829a5557fdSlucy wang - Sun Microsystems - Beijing China 
839a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_CRB_READ_CHECK_ADAPTER(ADDR, VALUE, ADAPTER)		\
849a5557fdSlucy wang - Sun Microsystems - Beijing China 	{								\
859a5557fdSlucy wang - Sun Microsystems - Beijing China 		if (unm_crb_read_adapter(ADDR, VALUE,			\
869a5557fdSlucy wang - Sun Microsystems - Beijing China 		    (struct unm_adapter_s *)ADAPTER)) return -1;	\
879a5557fdSlucy wang - Sun Microsystems - Beijing China 	}
889a5557fdSlucy wang - Sun Microsystems - Beijing China 
899a5557fdSlucy wang - Sun Microsystems - Beijing China #define	UNM_CRB_WRITELIT_ADAPTER(ADDR, VALUE, ADAPTER)			\
909a5557fdSlucy wang - Sun Microsystems - Beijing China 	{								\
919a5557fdSlucy wang - Sun Microsystems - Beijing China 		adapter->unm_crb_writelit_adapter(			\
929a5557fdSlucy wang - Sun Microsystems - Beijing China 		    (struct unm_adapter_s *)ADAPTER,			\
939a5557fdSlucy wang - Sun Microsystems - Beijing China 		    (unsigned long)ADDR, (int)VALUE);			\
949a5557fdSlucy wang - Sun Microsystems - Beijing China 	}
959a5557fdSlucy wang - Sun Microsystems - Beijing China 
969a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s;
979a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_set_link_parameters(struct unm_adapter_s *adapter);
989a5557fdSlucy wang - Sun Microsystems - Beijing China long xge_mdio_init(struct unm_adapter_s *adapter);
999a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_flash_print(struct unm_adapter_s *adapter);
1009a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_get_serial_num(struct unm_adapter_s *adapter);
1019a5557fdSlucy wang - Sun Microsystems - Beijing China 
1029a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct {
1039a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned valid;
1049a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned start_128M;
1059a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned end_128M;
1069a5557fdSlucy wang - Sun Microsystems - Beijing China 	unsigned start_2M;
1079a5557fdSlucy wang - Sun Microsystems - Beijing China } crb_128M_2M_sub_block_map_t;
1089a5557fdSlucy wang - Sun Microsystems - Beijing China 
1099a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct {
1109a5557fdSlucy wang - Sun Microsystems - Beijing China 	crb_128M_2M_sub_block_map_t sub_block[16];
1119a5557fdSlucy wang - Sun Microsystems - Beijing China } crb_128M_2M_block_map_t;
1129a5557fdSlucy wang - Sun Microsystems - Beijing China 
113*93833965Sjing xiong ERI-SUN #ifdef __cplusplus
114*93833965Sjing xiong ERI-SUN }
115*93833965Sjing xiong ERI-SUN #endif
116*93833965Sjing xiong ERI-SUN 
1179a5557fdSlucy wang - Sun Microsystems - Beijing China #endif /* _UNM_NIC_HW_ */
118